<?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>51878</bug_id>
          
          <creation_ts>2011-01-04 10:16:14 -0800</creation_ts>
          <short_desc>Add WebKit1 API to view and delete local storage</short_desc>
          <delta_ts>2011-03-14 04:42:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>55172</blocked>
    
    <blocked>56303</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton D&apos;Auria">adauria</reporter>
          <assigned_to name="Anton D&apos;Auria">adauria</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>jberlin</cc>
    
    <cc>joepeck</cc>
    
    <cc>jorlow</cc>
    
    <cc>kdecker</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
    
    <cc>sam</cc>
    
    <cc>sfalken</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>329035</commentid>
    <comment_count>0</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-01-04 10:16:14 -0800</bug_when>
    <thetext>API should provide the following:

- get a list of origins that have local storage
- delete local storage for an origin
- delete all local storage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329039</commentid>
    <comment_count>1</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-01-04 10:21:48 -0800</bug_when>
    <thetext>&lt;rdar://problem/8745985&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345234</commentid>
    <comment_count>2</comment_count>
      <attachid>81164</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-03 18:19:22 -0800</bug_when>
    <thetext>Created attachment 81164
Added LocalStorageTracker to WebCore to track creation of LocalStorage dbs, and an API to list and delete them.

Need to implement StorageTrackerClient in DRT to run reliable tests. StorageAreaSync is not guaranteed to create a db (and a StorageTracker entry) before DRT JS queries StorageTracker. Since we can&apos;t add delays to layout tests, the next step is to implement StorageTrackerClient that DRT can implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345289</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 20:29:55 -0800</bug_when>
    <thetext>Attachment 81164 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/page/PageGroup.h:57:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/StorageTracker.cpp:30:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.cpp:116:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/storage/StorageTracker.cpp:175:  Local variables should never be PassOwnPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/storage/StorageTracker.cpp:427:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/storage/StorageTrackerClient.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/storage/StorageTracker.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/storage/StorageTracker.h:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/storage/StorageTracker.h:51:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/storage/StorageTracker.h:63:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/StorageTracker.h:83:  The parameter name &quot;path&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/StorageTrackerClient.cpp:29:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/storage/StorageNamespace.h:53:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/StorageNamespaceImpl.cpp:159:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/storage/StorageNamespaceImpl.h:54:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 20 in 29 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>345308</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 21:00:22 -0800</bug_when>
    <thetext>Attachment 81164 did not build on chromium:
Build output: http://queues.webkit.org/results/7694725</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345329</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-03 21:25:26 -0800</bug_when>
    <thetext>Attachment 81164 did not build on win:
Build output: http://queues.webkit.org/results/7698381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345345</commentid>
    <comment_count>6</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-03 21:44:04 -0800</bug_when>
    <thetext>Attachment 81164 did not build on gtk:
Build output: http://queues.webkit.org/results/7692757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345349</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-03 21:54:59 -0800</bug_when>
    <thetext>Attachment 81164 did not build on qt:
Build output: http://queues.webkit.org/results/7694758</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345589</commentid>
    <comment_count>8</comment_count>
      <attachid>81164</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-04 10:20:24 -0800</bug_when>
    <thetext>Comment on attachment 81164
Added LocalStorageTracker to WebCore to track creation of LocalStorage dbs, and an API to list and delete them.

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

My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.

&gt; Source/WebCore/page/PageGroup.cpp:122
&gt; +

not sure this newline is useful

&gt; Source/WebCore/page/PageGroup.cpp:135
&gt; +

not sure this newline is useful

&gt; Source/WebCore/page/PageGroup.cpp:141
&gt; +}

Put a newline after this.  (It&apos;s odd you added one before the #endif later in the file, but didn&apos;t do one here. :-)

&gt; Source/WebCore/storage/LocalStorageTask.h:51
&gt; +        static PassOwnPtr&lt;LocalStorageTask&gt; createOriginIdentifiersImport() { return adoptPtr(new LocalStorageTask(ImportOrigins)); }

This method of doing tasks was always clunky.  Let&apos;s not add any in the old style and instead please use createCallbackTask (http://codesearch.google.com/codesearch?q=createCallbackTask&amp;exact_package=chromium&amp;hl=en&amp;vert=chromium).  It&apos;d be really nice if you&apos;d be willing to convert the other ones while you&apos;re at it.

&gt; Source/WebCore/storage/StorageAreaSync.cpp:142
&gt; +void StorageAreaSync::scheduleCloseDatabase()

What&apos;s the difference between this and scheduleFinalSync?

&gt; Source/WebCore/storage/StorageAreaSync.cpp:157
&gt; +        disableSuddenTermination();

I really hate these...  &lt;thinking out loud&gt;I wonder if we could make an object that enables it on construction and disables on destruction and create/destroy it instead of manually incrementing and decrementing&lt;/..&gt;

&gt; Source/WebCore/storage/StorageNamespaceImpl.cpp:155
&gt; +    // a sync and for StorageAreaSync to recreate the backing db file.

These semantics are not at all clear from the name.  Ideally, the name would better reflect this.  But at very least this comment should be in the header.

In what case are you clearing origins?  If it&apos;s because the user asked you to, I&apos;m not sure this is the right policy.  Allowing live pages to resurrect all their data simply by touching a single piece of data seems a bit odd.

&gt; Source/WebCore/storage/StorageTracker.cpp:3
&gt; + *

use http://webkit.org/coding/bsd-license.html for new files (i.e. 2 clause)

&gt; Source/WebCore/storage/StorageTracker.cpp:148
&gt; +    SQLiteStatement statement(m_database, &quot;SELECT origin FROM Origins&quot;);

Why do we need a table to track stuff?  Unless there&apos;s a _really_ good reason or we&apos;re unifying all the quotas together, I don&apos;t think we should ever add this.

&gt; Source/WebCore/storage/StorageTrackerClient.h:40
&gt; +        virtual void dispatchDidModifyOrigin(const String&amp; originIdentifier) = 0;

Not sure the word dispatch adds information...is there precedence for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345884</commentid>
    <comment_count>9</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-04 16:16:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 81164 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; 
&gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.

The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier. StorageNamespaceImpl duplicates this partially in a map of origins because it loads key/value pairs for origins that request it. StorageTracker is kept in sync with what origins actually exist whenever StorageAreaSync attempts to open an origin&apos;s db. If StorageTracker has an entry for a db that doesn&apos;t exist, then it falsely reports that origin as having local storage, and on StorageTracker::deleteOrigin() and deleteAllOrigins() it removes the db entries even if the file system call to delete files fails.

For the case when a db exists and StorageTracker doesn&apos;t have an entry for it, this patch&apos;s behavior is the same as DatabaseTracker -- it is not reported to the client. I would like to address this in a separate patch.

&gt; &gt; Source/WebCore/storage/LocalStorageTask.h:51
&gt; &gt; +        static PassOwnPtr&lt;LocalStorageTask&gt; createOriginIdentifiersImport() { return adoptPtr(new LocalStorageTask(ImportOrigins)); }
&gt; 
&gt; This method of doing tasks was always clunky.  Let&apos;s not add any in the old style and instead please use createCallbackTask (http://codesearch.google.com/codesearch?q=createCallbackTask&amp;exact_package=chromium&amp;hl=en&amp;vert=chromium).  It&apos;d be really nice if you&apos;d be willing to convert the other ones while you&apos;re at it.

I&apos;d like to make this change, but I would prefer to do it in a separate patch in which all other uses of LocalStorageTask unrelated to StorageTracker are removed.

&gt; &gt; Source/WebCore/storage/StorageAreaSync.cpp:142
&gt; &gt; +void StorageAreaSync::scheduleCloseDatabase()
&gt; 
&gt; What&apos;s the difference between this and scheduleFinalSync?
scheduleFinalSync destroys the StorageArea, which shouldn&apos;t happen if we&apos;re just deleting the backing db. It also doesn&apos;t close the database, which we must do before deleting the db. This also forces StorageAreaSync to reopen the db on next sync, which will recreate the file.

&gt; &gt; Source/WebCore/storage/StorageNamespaceImpl.cpp:155
&gt; &gt; void StorageNamespaceImpl::clearOriginForDeletion(SecurityOrigin* origin)
&gt; &gt; +    // a sync and for StorageAreaSync to recreate the backing db file.
&gt; 
&gt; These semantics are not at all clear from the name.  Ideally, the name would better reflect this.  But at very least this comment should be in the header.
&gt; 
&gt; In what case are you clearing origins?  If it&apos;s because the user asked you to, I&apos;m not sure this is the right policy.  Allowing live pages to resurrect all their data simply by touching a single piece of data seems a bit odd.

There was a bug in the patch that didn&apos;t clear the backing db&apos;s data if a live page wrote to local storage and StorageAreaSync reopened the db before StorageTracker&apos;s background thread deleted the db (hence, you saw this as resurrecting the data). This is fixed in a forthcoming revision of this patch with a call to StorageAreaSync::scheduleClear() before scheduleCloseDatabase().

&gt; &gt; Source/WebCore/storage/StorageTrackerClient.h:40
&gt; &gt; +        virtual void dispatchDidModifyOrigin(const String&amp; originIdentifier) = 0;
&gt; 
&gt; Not sure the word dispatch adds information...is there precedence for it?

Yes, in Source/WebCore/storage/DatabaseTrackerClient.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345930</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-04 16:59:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 81164 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; 
&gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; 
&gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.

Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?

&gt; StorageNamespaceImpl duplicates this partially in a map of origins because it loads key/value pairs for origins that request it. StorageTracker is kept in sync with what origins actually exist whenever StorageAreaSync attempts to open an origin&apos;s db. If StorageTracker has an entry for a db that doesn&apos;t exist, then it falsely reports that origin as having local storage, and on StorageTracker::deleteOrigin() and deleteAllOrigins() it removes the db entries even if the file system call to delete files fails.

If there is some reason why we really do need things in a relational database, then we should have tests for all of these cases.  

&gt; For the case when a db exists and StorageTracker doesn&apos;t have an entry for it, this patch&apos;s behavior is the same as DatabaseTracker -- it is not reported to the client. I would like to address this in a separate patch.

As long as the tracker is inert until then.
 
&gt; &gt; &gt; Source/WebCore/storage/LocalStorageTask.h:51
&gt; &gt; &gt; +        static PassOwnPtr&lt;LocalStorageTask&gt; createOriginIdentifiersImport() { return adoptPtr(new LocalStorageTask(ImportOrigins)); }
&gt; &gt; 
&gt; &gt; This method of doing tasks was always clunky.  Let&apos;s not add any in the old style and instead please use createCallbackTask (http://codesearch.google.com/codesearch?q=createCallbackTask&amp;exact_package=chromium&amp;hl=en&amp;vert=chromium).  It&apos;d be really nice if you&apos;d be willing to convert the other ones while you&apos;re at it.
&gt; 
&gt; I&apos;d like to make this change, but I would prefer to do it in a separate patch in which all other uses of LocalStorageTask unrelated to StorageTracker are removed.

That&apos;s fine.  Ideally it&apos;d be a patch landed before this, but it&apos;s not a huge deal either way.
 
&gt; &gt; &gt; Source/WebCore/storage/StorageAreaSync.cpp:142
&gt; &gt; &gt; +void StorageAreaSync::scheduleCloseDatabase()
&gt; &gt; 
&gt; &gt; What&apos;s the difference between this and scheduleFinalSync?
&gt; scheduleFinalSync destroys the StorageArea, which shouldn&apos;t happen if we&apos;re just deleting the backing db. It also doesn&apos;t close the database, which we must do before deleting the db. This also forces StorageAreaSync to reopen the db on next sync, which will recreate the file.

If it&apos;s practical to do so, it&apos;d be nice if you could combine the methods and just pass in an enum which dictates which behavior to use.  Since you said .clear() will be called right before then, the clear empty databases code should actually take care of closing it I believe.

Btw, I totally think what you&apos;re doing with making it safe to clear live databases is good.  And I agree with the logic being put into some sort of tracker (rather than being static on the namespace class).  But I feel strongly we shouldn&apos;t create a tracker database unless we absolutely need to.  And, if we do, we should make sure we properly test all scenarios where the DB is out of sync with the FS (due to both bugs in the code or various crashing scenarios).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346687</commentid>
    <comment_count>11</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-07 11:13:07 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; 
&gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; 
&gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?

My main motivation for using a database is to add per-origin quotas. Deletion of an origin file and origins directory is easy, and the patch already does it as you describe. Getting a list of origins with local storage by parsing filenames is also not a big deal, and can be done once for the lifetime of the StorageTracker instance to make sure it is in sync. There is a precedent (perhaps a bad one) in DatabaseTracker to never sync up with the file system. It can lose track of a db file if the origin never requests access to it again.

&gt; &gt; &gt; &gt; Source/WebCore/storage/StorageAreaSync.cpp:142
&gt; &gt; &gt; &gt; +void StorageAreaSync::scheduleCloseDatabase()
&gt; &gt; &gt; 
&gt; &gt; &gt; What&apos;s the difference between this and scheduleFinalSync?
&gt; &gt; scheduleFinalSync destroys the StorageArea, which shouldn&apos;t happen if we&apos;re just deleting the backing db. It also doesn&apos;t close the database, which we must do before deleting the db. This also forces StorageAreaSync to reopen the db on next sync, which will recreate the file.
&gt; 
&gt; If it&apos;s practical to do so, it&apos;d be nice if you could combine the methods and just pass in an enum which dictates which behavior to use.  Since you said .clear() will be called right before then, the clear empty databases code should actually take care of closing it I believe.

Empty databases are cleared only on final sync, which happens when all local storage is closed by PageGroup.

&gt; Btw, I totally think what you&apos;re doing with making it safe to clear live databases is good.  And I agree with the logic being put into some sort of tracker (rather than being static on the namespace class).  But I feel strongly we shouldn&apos;t create a tracker database unless we absolutely need to.  And, if we do, we should make sure we properly test all scenarios where the DB is out of sync with the FS (due to both bugs in the code or various crashing scenarios).

If we&apos;re going to add per-origin quotas, a StorageTracker db seems like the cleanest approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346705</commentid>
    <comment_count>12</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-07 11:55:15 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; &gt; 
&gt; &gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; &gt; 
&gt; &gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?
&gt; 
&gt; My main motivation for using a database is to add per-origin quotas.

There already are per-origin quotas.  They&apos;re embedded in the local storage database file itself.

Unless you mean unified quotas across all storage types?  In which case creating yet another tracker would seem to pull us away from that goal?

&gt; Deletion of an origin file and origins directory is easy, and the patch already does it as you describe. Getting a list of origins with local storage by parsing filenames is also not a big deal, and can be done once for the lifetime of the StorageTracker instance to make sure it is in sync.

Agreed.  So unless &quot;add per-origin quotas&quot; implies unified across storage types, I still don&apos;t see a compelling reason for this.

&gt; There is a precedent (perhaps a bad one) in DatabaseTracker to never sync up with the file system. It can lose track of a db file if the origin never requests access to it again.

Yeah, that&apos;s definitely not a precedent we should follow.
 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/storage/StorageAreaSync.cpp:142
&gt; &gt; &gt; &gt; &gt; +void StorageAreaSync::scheduleCloseDatabase()
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What&apos;s the difference between this and scheduleFinalSync?
&gt; &gt; &gt; scheduleFinalSync destroys the StorageArea, which shouldn&apos;t happen if we&apos;re just deleting the backing db. It also doesn&apos;t close the database, which we must do before deleting the db. This also forces StorageAreaSync to reopen the db on next sync, which will recreate the file.
&gt; &gt; 
&gt; &gt; If it&apos;s practical to do so, it&apos;d be nice if you could combine the methods and just pass in an enum which dictates which behavior to use.  Since you said .clear() will be called right before then, the clear empty databases code should actually take care of closing it I believe.
&gt; 
&gt; Empty databases are cleared only on final sync, which happens when all local storage is closed by PageGroup.

True.  It&apos;s just that the code is kind of spaghetti right now and this change will make it worse.  Can you please experiment with some ways to make it all cleaner and have fewer code paths?

For example, what if a &quot;close the DB&quot; call were made and (before it&apos;s serviced) the page group then shuts down.  Will we handle that and other corner cases gracefully?  From the current code, it&apos;s very difficult to say either way I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347033</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-07 20:12:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?
&gt; &gt; 
&gt; &gt; My main motivation for using a database is to add per-origin quotas.
&gt; 
&gt; There already are per-origin quotas.  They&apos;re embedded in the local storage database file itself.
&gt; 
&gt; Unless you mean unified quotas across all storage types?  In which case creating yet another tracker would seem to pull us away from that goal?

Can you clarify whether this is what you meant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347154</commentid>
    <comment_count>14</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-07 23:26:31 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?
&gt; &gt; &gt; 
&gt; &gt; &gt; My main motivation for using a database is to add per-origin quotas.
&gt; &gt; 
&gt; &gt; There already are per-origin quotas.  They&apos;re embedded in the local storage database file itself.

Currently, there are no per-origin quotas in LocalStorage dbs, though this sounds like a good solution. StorageAreaImpl::openDatabase simply creates the db, and StorageMap::setItem enforces the fixed 5MB-per-origin quota by summing up lengths of key/value pairs.

&gt; &gt; Unless you mean unified quotas across all storage types?  In which case creating yet another tracker would seem to pull us away from that goal?
&gt; 
&gt; Can you clarify whether this is what you meant?

I meant LocalStorage quotas only, though a quota for an origin across all storage types will be a lot more useful. I couldn&apos;t find a bug for this after a quick search--is there one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347168</commentid>
    <comment_count>15</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-07 23:35:14 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; My main motivation for using a database is to add per-origin quotas.
&gt; &gt; &gt; 
&gt; &gt; &gt; There already are per-origin quotas.  They&apos;re embedded in the local storage database file itself.
&gt; 
&gt; Currently, there are no per-origin quotas in LocalStorage dbs, though this sounds like a good solution. StorageAreaImpl::openDatabase simply creates the db, and StorageMap::setItem enforces the fixed 5MB-per-origin quota by summing up lengths of key/value pairs.

Oh yeah...that&apos;s right.

Why do you say it sounds like a good solution though?  On first use, we read in all the items whether or not we&apos;re enforcing quota, so I&apos;m not sure there&apos;s much benefit in saving it off.  (Especially since that would once again create data that can get out of sync.)
 
&gt; &gt; &gt; Unless you mean unified quotas across all storage types?  In which case creating yet another tracker would seem to pull us away from that goal?
&gt; &gt; 
&gt; &gt; Can you clarify whether this is what you meant?
&gt; 
&gt; I meant LocalStorage quotas only, though a quota for an origin across all storage types will be a lot more useful. I couldn&apos;t find a bug for this after a quick search--is there one?

Not that I know of.  cc me if you create one

Just so you know tho: for Chromium, we want to discourage LocalStorage so we will _not_ want LocalStorage to be part of some unified quota (and we plan to decrease the existing limit in the near future as well).  But for all the other storage types, we think a unified quota will be great, and will probably work on it ourselves at some point if no one else beats us to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347193</commentid>
    <comment_count>16</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-07 23:55:57 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details] [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; My main motivation for using a database is to add per-origin quotas.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; There already are per-origin quotas.  They&apos;re embedded in the local storage database file itself.
&gt; &gt; 
&gt; &gt; Currently, there are no per-origin quotas in LocalStorage dbs, though this sounds like a good solution. StorageAreaImpl::openDatabase simply creates the db, and StorageMap::setItem enforces the fixed 5MB-per-origin quota by summing up lengths of key/value pairs.
&gt; 
&gt; Oh yeah...that&apos;s right.
&gt; 
&gt; Why do you say it sounds like a good solution though?  On first use, we read in all the items whether or not we&apos;re enforcing quota, so I&apos;m not sure there&apos;s much benefit in saving it off.  (Especially since that would once again create data that can get out of sync.)

We can set a maximum size on the backing db itself, and handle insertion failure due to quotas the same way as is done by Databases. An existing db will not have more than the default 5MB. If a user wishes to lower the quota below current usage, he should probably delete local storage for the origin.

&gt; 
&gt; &gt; &gt; &gt; Unless you mean unified quotas across all storage types?  In which case creating yet another tracker would seem to pull us away from that goal?
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you clarify whether this is what you meant?
&gt; &gt; 
&gt; &gt; I meant LocalStorage quotas only, though a quota for an origin across all storage types will be a lot more useful. I couldn&apos;t find a bug for this after a quick search--is there one?
&gt; 
&gt; Not that I know of.  cc me if you create one

I created http://webkit.org/b/53983 - Implement unified per-origin quota tracker across all storage types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347525</commentid>
    <comment_count>17</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-08 11:00:07 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (From update of attachment 81164 [details] [details] [details] [details] [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81164&amp;action=review
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; My biggest question is why we need a tracker database.  I&apos;m fundamentally against duplicating state since such duplicate state can get out of sync since the number of possible error conditions quickly become very difficult to test for and handle.  To be honest, I didn&apos;t read the tracker class in detail (yet) so maybe it&apos;s obvious from the code, but if so then there probably should have been something in the changeLog as well.  If there is a need, then I&apos;d like to see tests for the various error conditions go in with this patch.  For example, what happens if there&apos;s an entry in the tracker, but the db doesn&apos;t exist.  Or vice versa.  Etc.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; The equivalent state exists only on the file system. We should use a db because we&apos;ll have relational data, like per-origin quota, and to avoid hitting the file system to see what db files are in the local storage directory and parsing them for the database identifier.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Can you tell me what operations are inefficient because they&apos;re not in a central database?  Deleting an origin is easy: figure out the file name and delete it.  Deleting everything is easy: delete the whole dir.  What else are you hoping to do?
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; My main motivation for using a database is to add per-origin quotas.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; There already are per-origin quotas.  They&apos;re embedded in the local storage database file itself.
&gt; &gt; &gt; 
&gt; &gt; &gt; Currently, there are no per-origin quotas in LocalStorage dbs, though this sounds like a good solution. StorageAreaImpl::openDatabase simply creates the db, and StorageMap::setItem enforces the fixed 5MB-per-origin quota by summing up lengths of key/value pairs.
&gt; &gt; 
&gt; &gt; Oh yeah...that&apos;s right.
&gt; &gt; 
&gt; &gt; Why do you say it sounds like a good solution though?  On first use, we read in all the items whether or not we&apos;re enforcing quota, so I&apos;m not sure there&apos;s much benefit in saving it off.  (Especially since that would once again create data that can get out of sync.)
&gt; 
&gt; We can set a maximum size on the backing db itself, and handle insertion failure due to quotas the same way as is done by Databases. An existing db will not have more than the default 5MB. If a user wishes to lower the quota below current usage, he should probably delete local storage for the origin.

Is there any reason that enforcing 5MB total vs. 5MB of user data is particularly important?  Or an important reason to make this enforce quota the same way WebSQLDatabase does?  To be honest, I see a lot of new code/risk for very little upside.  If there&apos;s some reason it&apos;s absolutely necessary for Safari, then maybe we can beat this patch into something everyone&apos;s happy with.  But if that&apos;s not the case, I think the tracker part of this patch should be scaled back into a refactoring of the static bits of StorageNamespace into its own class (possibly named Tracker..but not even sure about that).
 
&gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Unless you mean unified quotas across all storage types?  In which case creating yet another tracker would seem to pull us away from that goal?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Can you clarify whether this is what you meant?
&gt; &gt; &gt; 
&gt; &gt; &gt; I meant LocalStorage quotas only, though a quota for an origin across all storage types will be a lot more useful. I couldn&apos;t find a bug for this after a quick search--is there one?
&gt; &gt; 
&gt; &gt; Not that I know of.  cc me if you create one
&gt; 
&gt; I created http://webkit.org/b/53983 - Implement unified per-origin quota tracker across all storage types.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347539</commentid>
    <comment_count>18</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-08 11:07:07 -0800</bug_when>
    <thetext>Oh!!!  I finally just understood what you meant by &quot;per-origin&quot;.  You&apos;re saying you want each origin to be able to have a different quota.  (I thought you meant the value is tracked on a per-origin basis.)

In that case, a tracker makes much more sense.  And adding a table to each database that keeps track of the allowed quota for that DB (and maybe also other metadata in the future?) also makes sense.  Or, if you&apos;re planning on having some UI that allows someone to see all the individual limits, then I guess it makes sense to create a new DB like you did (so you don&apos;t need to individually open all localStorage dbs)...but I still definitely want to see tests that hit the corner cases.

Sorry for my confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356422</commentid>
    <comment_count>19</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-02-23 14:23:07 -0800</bug_when>
    <thetext>&lt;rdar://problem/9044233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356612</commentid>
    <comment_count>20</comment_count>
      <attachid>83594</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-23 18:15:53 -0800</bug_when>
    <thetext>Created attachment 83594
[PATCH] recovery from out-of-sync db, StorageTrackerClient

- sync up storage tracker db with files on disk on startup
- implemented StorageTrackerClient for mac
- fix for a race condition in which a local storage db isn&apos;t cleared in time before StorageAreaSync writes new items and cancels the deletion

This is a bit tricky to test with layout tests because StorageTracker is async and doesn&apos;t generate DOM events. I&apos;d like to land this patch with a disabled StorageTracker until I finish tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356619</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-23 18:22:03 -0800</bug_when>
    <thetext>Attachment 83594 did not build on chromium:
Build output: http://queues.webkit.org/results/7985317</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356629</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-23 19:21:08 -0800</bug_when>
    <thetext>Attachment 83594 did not build on win:
Build output: http://queues.webkit.org/results/7986313</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356676</commentid>
    <comment_count>23</comment_count>
      <attachid>83594</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-02-23 22:15:02 -0800</bug_when>
    <thetext>Comment on attachment 83594
[PATCH] recovery from out-of-sync db, StorageTrackerClient

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

Unfortunately all I really have are style comments and a few general comments.
I am not very familiar with local storage, so I can&apos;t do a full review of this. I could
give this a second pass and try to find more logical issues.

&gt; Source/WebKit/mac/WebCoreSupport/WebSecurityOrigin.mm:64
&gt; +- (NSString*)databaseIdentifier

Nit (style): star is on the right for Obj-C types =&gt; &quot;NSString *&quot;

&gt; Source/WebKit/mac/WebCoreSupport/WebSecurityOriginPrivate.h:43
&gt; +- (NSString*)databaseIdentifier;

ditto.

&gt; Source/WebKit/mac/Storage/WebStorageManager.mm:25
&gt; +

Nit: This file should have an ENABLE(DOM_STORAGE) guard.

&gt; Source/WebKit/mac/Storage/WebStorageManager.mm:37
&gt; +NSString *WebStorageDirectoryDefaultsKey = @&quot;WebKitLocalStorageDatabasePathPreferenceKey&quot;;
&gt; +NSString *WebStorageDidModifyOriginNotification = @&quot;WebStorageDidModifyOriginNotification&quot;;

I see this is the same thing that mac/Storage/WebDatabaseManager.mm does. I don&apos;t know when we use NSUserDefaults over WebPreferences, but still I think we can improve these constants a bit. I think they should be marked const. like =&gt; &quot;NSString * const ... = &quot;. (looking at WebViewDidBeginEditingNotification from WebView.h/mm as my example).

&gt; Source/WebKit/mac/Storage/WebStorageManager.mm:57
&gt; +    for (unsigned i = 0; i &lt; coreOrigins.size(); ++i) {

Nit: Use type &quot;size_t&quot; for i, because it is compared to a Vector::size() which is also a size_t. I recently learned that size_t can be 32bits or 64bits depending on the system and unsigned is always 32bits. So best to be consistent and use the same types in comparisons.

&gt; Source/WebKit/mac/Storage/WebStorageTrackerClient.mm:35
&gt; +#import &quot;WebStorageManagerPrivate.h&quot;
&gt; +#import &quot;WebSecurityOriginInternal.h&quot;
&gt; +#import &lt;wtf/MainThread.h&gt;
&gt; +#import &lt;wtf/RetainPtr.h&gt;
&gt; +#import &lt;WebCore/SecurityOrigin.h&gt;
&gt; +#import &lt;WebCore/PlatformString.h&gt;

Nit (style): alphabetical order. (swap first two, swap last two, and &quot;WebCore&quot; &lt; &quot;wtf&quot;)

&gt; Source/WebKit/mac/Storage/WebStorageManagerPrivate.h:27
&gt; +extern NSString *WebStorageDirectoryDefaultsKey;
&gt; +extern NSString *WebStorageDidModifyOriginNotification;

const.

&gt; Source/WebKit/mac/WebView/WebView.mm:101
&gt;  #import &quot;WebSystemInterface.h&quot;
&gt; +#import &quot;WebStorageManagerInternal.h&quot;

Nit (style): alphabetical order.

&gt; Source/WebCore/WebCore.exp.in:1085
&gt; +__ZN7WebCore14StorageTracker17initializeTrackerERKN3WTF6StringE
&gt; +__ZN7WebCore14StorageTracker16deleteAllOriginsEv
&gt; +__ZN7WebCore14StorageTracker12deleteOriginEPNS_14SecurityOriginE
&gt; +__ZN7WebCore14StorageTracker7trackerEv
&gt; +__ZN7WebCore14StorageTracker7originsERN3WTF6VectorINS1_6RefPtrINS_14SecurityOriginEEELm0EEE
&gt; +__ZN7WebCore14StorageTracker9setClientEPNS_20StorageTrackerClientE

If the StorageTracker is going to be guarded by ENABLE(DOM_STORAGE) then these symbols should be as well. Oddly, the DatabaseTracker symbols are not guarded. I guess no mac ports compile with DOM_STORAGE or DATABASES disabled.

&gt; Source/WebCore/storage/StorageAreaSync.cpp:347
&gt; -
&gt; +    

Nit: This change can be removed.

&gt; Source/WebCore/storage/StorageTrackerClient.cpp:1
&gt; +/*

This file should be removed. Clients will be in Source/WebKit.

&gt; Source/WebCore/storage/StorageTracker.cpp:103
&gt; +    if (!SQLiteFileSystem::ensureDatabaseFileExists(databasePath, createIfDoesNotExist))
&gt; +        return;

How about a LOG_ERROR here in case of a failure. For example, &quot;Database Path %s does not exist or cannot be accessed&quot;.

&gt; Source/WebCore/storage/StorageTracker.cpp:133
&gt; +    if (m_thread)
&gt; +        m_thread-&gt;scheduleTask(LocalStorageTask::createOriginIdentifiersImport());

The code above this asserts that m_thread exists. Is this check necessary, or is it just to be safe? I see you do this pattern a lot throughout this file.

&gt; Source/WebCore/storage/StorageTracker.cpp:179
&gt; +    for (Vector&lt;String&gt;::const_iterator path = paths.begin(); path != paths.end(); ++path) {
&gt; +        if ((*path).endsWith(fileExt, true) &amp;&amp; (*path).length() &gt; fileExt.length()) {

It might be best to pull paths.end() out into a local variable so it doesn&apos;t get calculated each loop iteration. Same with storing *path into a String&amp; local variable. And finally, maybe with fileExt.length() which could be another STATIC_LOCAL since it won&apos;t change.

&gt; Source/WebCore/storage/StorageTracker.cpp:190
&gt; +    for (OriginSet::const_iterator it = m_originSet-&gt;begin(); it != m_originSet-&gt;end(); ++it) {

ditto for m_originSet.end();

&gt; Source/WebCore/storage/StorageTracker.cpp:415
&gt; +    for (unsigned i = 0; it != end; ++it, ++i)
&gt; +        m_originsBeingDeleted-&gt;add(*it);

It doesn&apos;t look like the counter `i` is needed here.

&gt; Source/WebCore/storage/StorageTracker.cpp:444
&gt; +void StorageTracker::originFilePaths(Vector&lt;String&gt;&amp; paths)

I don&apos;t see where this function is used. Is it intended to be used later on?

&gt; Source/WebCore/storage/StorageNamespaceImpl.cpp:35
&gt; +#include &quot;StorageTracker.h&quot;
&gt;  #include &quot;StorageSyncManager.h&quot;

Nit: alphabetical order.

&gt; Source/WebCore/storage/DatabaseTrackerClient.h:41
&gt; +

Nit: Unnecessary change.

&gt; Source/WebCore/storage/StorageTracker.h:44
&gt; +class LocalStorageThread;
&gt; +class LocalStorageTask;
&gt; +class SecurityOrigin;
&gt; +
&gt; +class StorageTrackerClient;    

Nit: alphabetical order. No blank line necessary.

&gt; Source/WebCore/platform/mac/FileSystemMac.mm:88
&gt; +Vector&lt;String&gt; listDirectory(const String&amp; path, const String&amp; filter)

Does returning a Vector&lt;String&gt; here cause a copy copy constructor to be run?
Can this instead return a PassRefPtr&lt;Vector&lt;String&gt; &gt;?

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:852
&gt; +		3AC3680112EF7A09006A3D6F /* StorageTrackerClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AC367FF12EF7A09006A3D6F /* StorageTrackerClient.cpp */; };

Nit: Remember, this file should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357073</commentid>
    <comment_count>24</comment_count>
      <attachid>83594</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-02-24 09:17:28 -0800</bug_when>
    <thetext>Comment on attachment 83594
[PATCH] recovery from out-of-sync db, StorageTrackerClient

r- to fix build failures (probably just need to add new files to other build system files) and to consider Joe&apos;s nitpicks (most of which should be addressed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357462</commentid>
    <comment_count>25</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-24 15:37:51 -0800</bug_when>
    <thetext>Attachment 83594 did not build on gtk:
Build output: http://queues.webkit.org/results/7981536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357491</commentid>
    <comment_count>26</comment_count>
      <attachid>83594</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-24 15:49:40 -0800</bug_when>
    <thetext>Comment on attachment 83594
[PATCH] recovery from out-of-sync db, StorageTrackerClient

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

&gt;&gt; Source/WebCore/storage/StorageTracker.cpp:103
&gt;&gt; +        return;
&gt; 
&gt; How about a LOG_ERROR here in case of a failure. For example, &quot;Database Path %s does not exist or cannot be accessed&quot;.

If createIfDoesNotExist is false, then the failure is ok. Adding LOG_ERROR if createIfDoesNotExist is true.

&gt;&gt; Source/WebCore/storage/StorageTracker.cpp:133
&gt;&gt; +        m_thread-&gt;scheduleTask(LocalStorageTask::createOriginIdentifiersImport());
&gt; 
&gt; The code above this asserts that m_thread exists. Is this check necessary, or is it just to be safe? I see you do this pattern a lot throughout this file.

Yes, this is no longer necessary.

&gt;&gt; Source/WebCore/storage/StorageTracker.cpp:444
&gt;&gt; +void StorageTracker::originFilePaths(Vector&lt;String&gt;&amp; paths)
&gt; 
&gt; I don&apos;t see where this function is used. Is it intended to be used later on?

This needed to be removed. Thanks.

&gt;&gt; Source/WebCore/platform/mac/FileSystemMac.mm:88
&gt;&gt; +Vector&lt;String&gt; listDirectory(const String&amp; path, const String&amp; filter)
&gt; 
&gt; Does returning a Vector&lt;String&gt; here cause a copy copy constructor to be run?
&gt; Can this instead return a PassRefPtr&lt;Vector&lt;String&gt; &gt;?

I agree with you, but this is the FileSystem.h interface, and I&apos;m reluctant to make this change because it is implemented by other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357619</commentid>
    <comment_count>27</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-24 18:12:38 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 83594 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83594&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/storage/StorageTracker.cpp:103
&gt; &gt;&gt; +        return;
&gt; &gt; 
&gt; &gt; How about a LOG_ERROR here in case of a failure. For example, &quot;Database Path %s does not exist or cannot be accessed&quot;.
&gt; 
&gt; If createIfDoesNotExist is false, then the failure is ok. Adding LOG_ERROR if createIfDoesNotExist is true.
&gt; 
&gt; &gt;&gt; Source/WebCore/storage/StorageTracker.cpp:133
&gt; &gt;&gt; +        m_thread-&gt;scheduleTask(LocalStorageTask::createOriginIdentifiersImport());
&gt; &gt; 
&gt; &gt; The code above this asserts that m_thread exists. Is this check necessary, or is it just to be safe? I see you do this pattern a lot throughout this file.
&gt; 
&gt; Yes, this is no longer necessary.
&gt; 
&gt; &gt;&gt; Source/WebCore/storage/StorageTracker.cpp:444
&gt; &gt;&gt; +void StorageTracker::originFilePaths(Vector&lt;String&gt;&amp; paths)
&gt; &gt; 
&gt; &gt; I don&apos;t see where this function is used. Is it intended to be used later on?
&gt; 
&gt; This needed to be removed. Thanks.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/mac/FileSystemMac.mm:88
&gt; &gt;&gt; +Vector&lt;String&gt; listDirectory(const String&amp; path, const String&amp; filter)
&gt; &gt; 
&gt; &gt; Does returning a Vector&lt;String&gt; here cause a copy copy constructor to be run?
&gt; &gt; Can this instead return a PassRefPtr&lt;Vector&lt;String&gt; &gt;?

Did you mean PassOwnPtr?
 
&gt; I agree with you, but this is the FileSystem.h interface, and I&apos;m reluctant to make this change because it is implemented by other platforms.

The other platforms&apos; code is checked into Source/WebKit/&lt;port name&gt; so you might be able to change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357665</commentid>
    <comment_count>28</comment_count>
      <attachid>83765</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-02-24 20:20:52 -0800</bug_when>
    <thetext>Created attachment 83765
[PATCH] Testing against bots

For the bots, but also contains changes suggested by JoePeck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361271</commentid>
    <comment_count>29</comment_count>
      <attachid>84501</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-02 17:59:53 -0800</bug_when>
    <thetext>Created attachment 84501
[PATCH] with tests, for bots

Implemented tests for mac, which use StorageTrackerClient notifications to call LayoutTestController::notifyDone().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361310</commentid>
    <comment_count>30</comment_count>
      <attachid>84511</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-02 19:23:39 -0800</bug_when>
    <thetext>Created attachment 84511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361366</commentid>
    <comment_count>31</comment_count>
      <attachid>84520</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-02 22:38:42 -0800</bug_when>
    <thetext>Created attachment 84520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361371</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-02 22:47:46 -0800</bug_when>
    <thetext>Attachment 84520 did not build on chromium:
Build output: http://queues.webkit.org/results/8077951</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361394</commentid>
    <comment_count>33</comment_count>
      <attachid>84520</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-03-02 23:45:51 -0800</bug_when>
    <thetext>Comment on attachment 84520
Patch

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

Some drive by comments I noticed scanning through. Its unusual to have a test depend on a previous
test. It makes it impossible to run the test individually. Also, if just 1 test fails on a port
and they decide to skip it, there may then be repercussions on other tests.

&gt; Tools/DumpRenderTree/StorageTrackerDelegate.h:33
&gt; +- (void)logNotifications:(int)number controller:(LayoutTestController *)controller;

Nit: You nicely have numberOfNotificationsToLog as unsigned, but you take in an int here and assign it.
I&apos;d suggest making them both int or unsigned.

&gt; Tools/DumpRenderTree/StorageTrackerDelegate.h:35
&gt; +- (void)setControllerToNotifyDone:(LayoutTestController *)controller;

Nit: LayoutTestController* like you have it in the instance variable declaration.
(Also change the method implementation).

&gt; Tools/DumpRenderTree/StorageTrackerDelegate.mm:30
&gt; +#import &lt;WEbKit/WebSecurityOriginPrivate.h&gt;

Nit: &lt;WebKit/WebSecurityOriginPrivate.h&gt;

&gt; Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp:846
&gt; +    // FIXME: Implement.

If I were one of these ports, I would find it helpful if there was more information here.
Maybe something like &quot;Implement to test StorageTracker, which tracking LocalStorage
operations.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361403</commentid>
    <comment_count>34</comment_count>
      <attachid>84520</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-03 00:18:13 -0800</bug_when>
    <thetext>Comment on attachment 84520
Patch

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

I&apos;m going to say r+ because all my comments were matters of style, not substance, and it looked like previous comments have been addressed. However, I think you should look at the style comments and consider addressing them. A new patch is not needed for most, but please do post a new patch if you decide to make a listDirectory() that uses POSIX calls, since code for that could use fresh review.

&gt; Source/WebCore/page/PageGroup.cpp:140
&gt; +void PageGroup::testForceLocalStorageSync()

What does this function do? The name is a little unclear.

OK, after seeing the comment below, I get the purpose, but I think it would help clarify to take &quot;test&quot; out of the name, even though the function is for testing. As it is, it sounds like it tests forcing something, but it just syncs local storage. In fact, just syncLocalStorage might be a good name, if the &quot;force&quot; does not add an important distinction.

&gt; Source/WebCore/platform/mac/FileSystemMac.mm:106
&gt; +Vector&lt;String&gt; listDirectory(const String&amp; path, const String&amp; filter)
&gt; +{
&gt; +    Vector&lt;String&gt; entries;
&gt; +
&gt; +    // This can run on a background thread, so must create an autorelease pool.
&gt; +    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
&gt; +
&gt; +    NSDirectoryEnumerator *dir = [[NSFileManager defaultManager] enumeratorAtPath:path]; 
&gt; +    NSString *file;
&gt; +    while ((file = [dir nextObject])) {
&gt; +        if (filter.isEmpty() || ([file rangeOfString:filter].location != NSNotFound))
&gt; +            entries.append([path stringByAppendingPathComponent:file]);
&gt; +    }
&gt; +
&gt; +    [pool release];
&gt; +
&gt; +    return entries;
&gt; +}

I think it would be better to write this using POSIX calls and put it in FileSystemPOSIX. That&apos;s how most mac FileSystem calls are implemented; it makes the code more portable, and avoids the need for an autorelease pool.

&gt; Source/WebCore/storage/LocalStorageTask.h:63
&gt; +        LocalStorageTask(Type, const String&amp;);
&gt; +        LocalStorageTask(Type, const String&amp;, const String&amp;);

The String parameters here should probably have names in their declarations, since the names are not obvious from context.

&gt; Source/WebCore/storage/StorageNamespaceImpl.cpp:168
&gt; +void StorageNamespaceImpl::testForceSync()

Similar naming issue here - &quot;test&quot; is not being used as a verb, so this doesn&apos;t match WebKit naming style.

&gt; Source/WebCore/storage/StorageTracker.h:100
&gt; +    // FIXME: do we need an ownptr here?
&gt; +    OwnPtr&lt;OriginSet&gt; m_originSet;

You&apos;re the one adding it - you should know if we need the OwnPtr! However, I think it would be fine to just have this data member be an OriginSet rather than an OwbPtr&lt;OriginSet&gt;. There&apos;s no obvious reason for the extra allocation and indirection.

&gt; Source/WebCore/storage/StorageTracker.h:102
&gt; +    OwnPtr&lt;OriginSet&gt; m_originsBeingDeleted;

Likewise, I think the PwnPtr here is not needed, and it can just be an OriginSet, not a smart pointer to one.

&gt; Source/WebKit/chromium/src/StorageNamespaceProxy.cpp:97
&gt; +    // FIXME: Implement.

Why a FIXME instead of notImplemented?

&gt; Source/WebKit/chromium/src/StorageNamespaceProxy.cpp:102
&gt; +    // FIXME: Implement.

Why a FIXME instead of notImplemented?

&gt; Source/WebKit/chromium/src/StorageNamespaceProxy.cpp:107
&gt; +    // FIXME: Implement for tests that require a sync to backing db.

Why a FIXME instead of notImplemented?

&gt; Tools/DumpRenderTree/LayoutTestController.cpp:399
&gt; +    // Has mac implementation

This comment seems unnecessary.

&gt; Tools/DumpRenderTree/LayoutTestController.cpp:409
&gt; +    // Has mac implementation

ditto

&gt; Tools/DumpRenderTree/LayoutTestController.cpp:426
&gt; +    // Has mac implementation

ditto

&gt; Tools/DumpRenderTree/LayoutTestController.cpp:435
&gt; +    // Has mac implementation

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361441</commentid>
    <comment_count>35</comment_count>
      <attachid>84520</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-03 01:39:56 -0800</bug_when>
    <thetext>Comment on attachment 84520
Patch

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

Please don&apos;t commit this without letting me take a look.  Overall, it definitely seems on track.  I have a couple major concerns though.

I still think migrating away from the manual tasks to the new template based task creation is better.  The more I think about it, the more I think it&apos;d be best to do that in a patch that&apos;s a precursor to this, so when you&apos;re adding the new logic you&apos;re doing it in the right way.  But if you still feel strongly that you want to do it in a follow up, I guess that&apos;s OK.

Have you tried splitting this patch up at all?  It&apos;s really massive and there&apos;s a lot of subtle stuff going on.

The rest of my concerns are inline:

&gt; Source/WebCore/storage/StorageAreaSync.cpp:371
&gt; +    

please remove the added white space

&gt; Source/WebCore/storage/StorageAreaSync.cpp:461
&gt; +}        

ditto

&gt; Source/WebCore/storage/StorageAreaSync.cpp:465
&gt; +    syncTimerFired(&amp;m_syncTimer);

This simply schedules a sync, but doesn&apos;t block on it finishing....does that work for your tests?  If so, then you should probably rename it as when I think &quot;sync&quot; I think it&apos;s synchronously syncing it to disk, not that it&apos;s scheduling work to be done asynchronously on another thread.

&gt; Source/WebCore/storage/StorageNamespace.h:55
&gt; +    virtual void testForceSync() = 0;

As I mentioned on IRC, I don&apos;t think this is a very good name (here and elsewhere).  Test is often used in contexts other than a function that should only be called in a test.

&gt; Source/WebCore/storage/StorageNamespaceImpl.cpp:163
&gt; +        RefPtr&lt;StorageAreaImpl&gt; storageArea = it-&gt;second;

Not sure it&apos;s really necessary to save this to a tmp variable...especially since you don&apos;t right below

&gt; Source/WebCore/storage/StorageTracker.cpp:48
&gt; +void StorageTracker::initializeTracker(const String&amp; storagePath)

Am I reading this wrong, or is this essentially making it so there&apos;s one storage tracker (and associated path) for all page groups?  If so, that definitely needs to be fixed.  Is there a reason this is a singleton rather than hanging off a page group?

&gt; Source/WebCore/storage/StorageTracker.cpp:369
&gt; +    MutexLocker lockDatabase(m_databaseGuard);

Am I reading this wrong, or would this (and a few others) block the main thread while this IO is happening (if the main thread tries to acquire the lock)?

&gt; Source/WebCore/storage/StorageTracker.cpp:464
&gt; +void StorageTracker::testStorageSync()

Why so many names for basically the same concept?

&gt;&gt; Source/WebKit/chromium/src/StorageNamespaceProxy.cpp:97
&gt;&gt; +    // FIXME: Implement.
&gt; 
&gt; Why a FIXME instead of notImplemented?

Actually, please just put an ASSERT_NOT_REACHED() in these. I believe with your current code we can&apos;t hit it, but if we ever hit it it&apos;d definitely be a logic error.

&gt; LayoutTests/ChangeLog:8
&gt; +        * storage/domstorage/localstorage/storagetracker: Added.

I&apos;m glad you put these in a directory.  For all the platforms that don&apos;t implement the layout test controller interface, you&apos;ll need to add them to the skipped lists though, right?  If so, just add the whole directory to the list, rather than individual tests.  And be sure to leave a comment about why they&apos;re skipped.  (Note that Chromium uses platform/chromium/test_expectations.txt rather than a skip list)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361670</commentid>
    <comment_count>36</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-03 09:21:08 -0800</bug_when>
    <thetext>Attachment 84520 did not build on win:
Build output: http://queues.webkit.org/results/8083360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361713</commentid>
    <comment_count>37</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-03 10:16:55 -0800</bug_when>
    <thetext>Attachment 84520 did not build on win:
Build output: http://queues.webkit.org/results/8078677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362240</commentid>
    <comment_count>38</comment_count>
      <attachid>84520</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-03 20:57:57 -0800</bug_when>
    <thetext>Comment on attachment 84520
Patch

I&apos;ve got some drive by comments.

First, why is a database needed for this? Can the list of origins using localStorage be determined by the set of directories present on disk?

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

&gt; Source/WebCore/storage/StorageAreaSync.cpp:246
&gt; +    // reopening, so cancel possible deletion.

If all access to the localstorage databases was serialized on the same thread, racey circumstances like this, and others in this patch, would not be possible.

&gt; Source/WebCore/storage/StorageTracker.cpp:127
&gt; +        MutexLocker lockDatabase(m_databaseGuard);

Maybe m_databaseGuard needs a better name since it seems to guard access to more than the database?

&gt; Source/WebCore/storage/StorageTracker.cpp:168
&gt; +            m_client-&gt;dispatchDidModifyOrigin(*it);

Calling this &apos;client&apos; interface on the background thread is highly questionable.

&gt; Source/WebCore/storage/StorageTracker.cpp:221
&gt; +        m_originSet-&gt;add(originIdentifier);

A non-thread-safe refcount is bumped here.

&gt; Source/WebCore/storage/StorageTracker.cpp:351
&gt; +    // StorageTracker db deletion.

This sounds racey. This maybe simpler and easier to maintain if all access to local storage resources on disk were serialized on a single background thread.

&gt; Source/WebCore/storage/StorageTracker.cpp:419
&gt; +        m_client-&gt;dispatchDidModifyOrigin(originIdentifier);

Calling this &apos;client&apos; interface on a background thread is probably not a good interface. Calling out upon modification was not one of the stated goals of your patch.
- produce a list of origins using local storage
- the ability to delete them
Maybe the &apos;client&apos; interface can be removed altogether.

The style of multi-threading used here is reminiscent of that seen in the Database system. I&apos;d suggest you not model the interfaces or implementation off of that system as it has been very problematic from the beginning. So rather than have collections that are accessed on multiple threads and mutex&apos;s to gaurd them, send messages and have the messages carry all the data. And serialize everything having to do with touching &apos;localStorage&apos; on disk on the same thread.

void getAllOriginsUsingLocalStorage(completionCallback)
// only called on the main thread
// posts a task to the background thread
// background thread produces such a list and sends a message to the forground thread with results
// foreground thread calls the callers callback

void deleteLocalStorageForOrigin(completionCallback)
// only called on the main thread
// ... etc

David Levin&apos;s CrossThreadCopier stuff which is integrated into the &apos;task&apos; infracture takes care of making thread-safe copies of string data as messages are passed.

Does the public interface of StorageTracker need more than two methods to accomplish your stated goals?

&gt; Source/WebCore/storage/StorageTracker.cpp:430
&gt; +        m_originsBeingDeleted-&gt;add(*it);

A non-thread-safe refcount is bumped here when a &apos;copy&apos; of the string is placed in the second collection.

&gt; Source/WebCore/storage/StorageTracker.h:65
&gt; +    // Sync to disk on background thread.

Some of these methods are not invoked on the background thread. There is code in at least one of the method bodies to handle being called on the main thread.

&gt; Source/WebCore/storage/StorageTracker.h:97
&gt; +    typedef HashSet&lt;String&gt; OriginSet;

WebCore Strings have a thread affinity. Under the covers the string impl employs non-thread-safe refcounting. Having these data structures accessed from multiple threads is dicey. It&apos;s not enough to serialize access to the collection, great care has to be taken to make deep copie on the way in and out while under the lock... it&apos;s far to easy to not see it... arranging for data structures to be accessed on a single thread helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365043</commentid>
    <comment_count>39</comment_count>
      <attachid>85296</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 01:18:12 -0800</bug_when>
    <thetext>Created attachment 85296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365044</commentid>
    <comment_count>40</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 01:19:28 -0800</bug_when>
    <thetext>listDirectory implementation is now in FileSystemPOSIX.cpp.

A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.

Non-thread-safe String refcounting is done under locks.

StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.

LocalStorageTask is still being used. I will remove it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365046</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-10 01:25:02 -0800</bug_when>
    <thetext>Attachment 85296 did not build on chromium:
Build output: http://queues.webkit.org/results/8112977</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365049</commentid>
    <comment_count>42</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 01:33:17 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; 
&gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; 
&gt; Non-thread-safe String refcounting is done under locks.

I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/

&gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.

Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.

&gt; LocalStorageTask is still being used. I will remove it in a separate patch.

What&apos;s the reason for not doing it first?  It seems like it wouldn&apos;t be too hard and would simplify this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365051</commentid>
    <comment_count>43</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-10 01:50:51 -0800</bug_when>
    <thetext>Attachment 85296 did not build on win:
Build output: http://queues.webkit.org/results/8117800</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365275</commentid>
    <comment_count>44</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 10:12:56 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #40)
&gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; 
&gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; 
&gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; 
&gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/

I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.

We&apos;re working with this API being added similarly to how we&apos;ve worked with the DatabaseTracker, and will closely watch issues that come up in use.

&gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; 
&gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.

There&apos;s not a strong reason to not tie it to page groups, but there&apos;s also not a strong reason for Anton to go out of his way *to* tie it to page groups now.  As he mentioned, database tracker is also not tied to page groups and we haven&apos;t had a need to do so yet.

It&apos;s an organic change to do so for both the localstorage and database trackers later if the need comes up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365286</commentid>
    <comment_count>45</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 10:18:44 -0800</bug_when>
    <thetext>I&apos;m giving this a review right now, but you&apos;ll need to fix the build failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365315</commentid>
    <comment_count>46</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 10:58:50 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #42)
&gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; &gt; 
&gt; &gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; &gt; 
&gt; &gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; &gt; 
&gt; &gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/
&gt; 
&gt; I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.

This isn&apos;t true.  There have been many races there.  And michaeln is currently working on a major overhaul due to two new issues that were recently discovered.  

&gt; We&apos;re working with this API being added similarly to how we&apos;ve worked with the DatabaseTracker, and will closely watch issues that come up in use.
&gt; 
&gt; &gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; &gt; 
&gt; &gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.
&gt; 
&gt; There&apos;s not a strong reason to not tie it to page groups, but there&apos;s also not a strong reason for Anton to go out of his way *to* tie it to page groups now.  As he mentioned, database tracker is also not tied to page groups and we haven&apos;t had a need to do so yet.

As far as I know, WebSQLDatabase isn&apos;t tied to PageGroups.  DOM Storage however is.  It&apos;d be wrong to be inconsistent throughout.

I also can&apos;t think off the top of my head of why this would be a difficult change.

If different PageGroups having different localStorage namespaces is no longer useful, we should completely pull out the feature.  (I thought the Mac WebKit framework exposed them to apps though...?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365334</commentid>
    <comment_count>47</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 11:17:24 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #44)
&gt; &gt; (In reply to comment #42)
&gt; &gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; &gt; &gt; 
&gt; &gt; &gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/
&gt; &gt; 
&gt; &gt; I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.
&gt; 
&gt; This isn&apos;t true.  There have been many races there.  And michaeln is currently working on a major overhaul due to two new issues that were recently discovered.

Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?
&gt; 
&gt; &gt; We&apos;re working with this API being added similarly to how we&apos;ve worked with the DatabaseTracker, and will closely watch issues that come up in use.
&gt; &gt; 
&gt; &gt; &gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; &gt; &gt; 
&gt; &gt; &gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.
&gt; &gt; 
&gt; &gt; There&apos;s not a strong reason to not tie it to page groups, but there&apos;s also not a strong reason for Anton to go out of his way *to* tie it to page groups now.  As he mentioned, database tracker is also not tied to page groups and we haven&apos;t had a need to do so yet.
&gt; 
&gt; As far as I know, WebSQLDatabase isn&apos;t tied to PageGroups.  DOM Storage however is.  It&apos;d be wrong to be inconsistent throughout.

&quot;PageGroups&quot; are a WebCore concept, not a spec concept.  We (at Apple, working on WebKit1/WebKit2 APIs) have the exact same motivations to make SQL databases tied to Page Groups as we would LocalStorage...  Maybe you have some other motivations that haven&apos;t been shared here?

&gt; 
&gt; I also can&apos;t think off the top of my head of why this would be a difficult change.
&gt; 
&gt; If different PageGroups having different localStorage namespaces is no longer useful, we should completely pull out the feature.  (I thought the Mac WebKit framework exposed them to apps though...?)

The WebKit API has absolutely no concept of local storage.  This work is the first that would directly add such a concept.

The fact that local storage namespaces are hung off of a page group is nascent - an indication of a direction we thought we&apos;d be heading.  It&apos;s unlikely it will ever get fleshed out in the WK1 API, but we&apos;re likely to pursue making more things firmly into PageGroup-level concepts while working on the WK2 API.  That is one of them, and SQL databases is another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365335</commentid>
    <comment_count>48</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-10 11:18:14 -0800</bug_when>
    <thetext>As a design principle, we should certainly strive to not have any shared data, and prefer message passing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365337</commentid>
    <comment_count>49</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 11:20:34 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; As a design principle, we should certainly strive to not have any shared data, and prefer message passing.

I don&apos;t disagree with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365348</commentid>
    <comment_count>50</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 11:31:02 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (In reply to comment #46)
&gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; (In reply to comment #42)
&gt; &gt; &gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; &gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/
&gt; &gt; &gt; 
&gt; &gt; &gt; I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.
&gt; &gt; 
&gt; &gt; This isn&apos;t true.  There have been many races there.  And michaeln is currently working on a major overhaul due to two new issues that were recently discovered.
&gt; 
&gt; Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?

Not off the top of my head.  Michael might.  Most of the issues I know of date back over a year ago.  But there were a couple recent ones caught by thread sanitizer and some other V8 work.

&gt; &gt; &gt; We&apos;re working with this API being added similarly to how we&apos;ve worked with the DatabaseTracker, and will closely watch issues that come up in use.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.
&gt; &gt; &gt; 
&gt; &gt; &gt; There&apos;s not a strong reason to not tie it to page groups, but there&apos;s also not a strong reason for Anton to go out of his way *to* tie it to page groups now.  As he mentioned, database tracker is also not tied to page groups and we haven&apos;t had a need to do so yet.
&gt; &gt; 
&gt; &gt; As far as I know, WebSQLDatabase isn&apos;t tied to PageGroups.  DOM Storage however is.  It&apos;d be wrong to be inconsistent throughout.
&gt; 
&gt; &quot;PageGroups&quot; are a WebCore concept, not a spec concept.  We (at Apple, working on WebKit1/WebKit2 APIs) have the exact same motivations to make SQL databases tied to Page Groups as we would LocalStorage...  Maybe you have some other motivations that haven&apos;t been shared here?

I have no motivations other than keeping the code base clean and consistent.  I&apos;m a bit surprised you assume otherwise.

&gt; &gt; I also can&apos;t think off the top of my head of why this would be a difficult change.

Is it a difficult change?  It seems like it&apos;s 10-20 lines of code different...?

&gt; &gt; If different PageGroups having different localStorage namespaces is no longer useful, we should completely pull out the feature.  (I thought the Mac WebKit framework exposed them to apps though...?)
&gt; 
&gt; The WebKit API has absolutely no concept of local storage.  This work is the first that would directly add such a concept.
&gt; 
&gt; The fact that local storage namespaces are hung off of a page group is nascent - an indication of a direction we thought we&apos;d be heading.  It&apos;s unlikely it will ever get fleshed out in the WK1 API, but we&apos;re likely to pursue making more things firmly into PageGroup-level concepts while working on the WK2 API.  That is one of them, and SQL databases is another.

Gotcha.  So I guess the point is that the page group logic for DOM Storage maybe never should have been added to begin with (since it&apos;s effectively dead code currently).

I think the right answer is to either make LocalStorage a singleton (and rip out the per-pageGroup logic--it can be reverted when WK2 needs it) or to make the tracker pageGroup aware (assuming you guys plan on utilizing that logic in the near future).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365355</commentid>
    <comment_count>51</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 11:34:09 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #47)
&gt; &gt; (In reply to comment #46)
&gt; &gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; &gt; (In reply to comment #42)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; &gt; &gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.
&gt; &gt; &gt; 
&gt; &gt; &gt; This isn&apos;t true.  There have been many races there.  And michaeln is currently working on a major overhaul due to two new issues that were recently discovered.
&gt; &gt; 
&gt; &gt; Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?
&gt; 
&gt; Not off the top of my head.  Michael might.  Most of the issues I know of date back over a year ago.  But there were a couple recent ones caught by thread sanitizer and some other V8 work.

Here&apos;s the most recent one: http://code.google.com/p/chromium/issues/detail?id=71026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365366</commentid>
    <comment_count>52</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 11:43:31 -0800</bug_when>
    <thetext>&gt; &gt; LayoutTests/ChangeLog:8
&gt; &gt; +        * storage/domstorage/localstorage/storagetracker: Added.
&gt; 
&gt; I&apos;m glad you put these in a directory.  For all the platforms that don&apos;t implement the layout test controller interface, you&apos;ll need to add them to the skipped lists though, right?  If so, just add the whole directory to the list, rather than individual tests.  And be sure to leave a comment about why they&apos;re skipped.  (Note that Chromium uses platform/chromium/test_expectations.txt rather than a skip list)

Ping on this...

Also, in the future, can you please reply to comments inline?

J</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365369</commentid>
    <comment_count>53</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 11:45:35 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #47)
&gt; &gt; (In reply to comment #46)
&gt; &gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; &gt; (In reply to comment #42)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; &gt; &gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.
&gt; &gt; &gt; 
&gt; &gt; &gt; This isn&apos;t true.  There have been many races there.  And michaeln is currently working on a major overhaul due to two new issues that were recently discovered.
&gt; &gt; 
&gt; &gt; Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?
&gt; 
&gt; Not off the top of my head.  Michael might.  Most of the issues I know of date back over a year ago.  But there were a couple recent ones caught by thread sanitizer and some other V8 work.
&gt; 
&gt; &gt; &gt; &gt; We&apos;re working with this API being added similarly to how we&apos;ve worked with the DatabaseTracker, and will closely watch issues that come up in use.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; There&apos;s not a strong reason to not tie it to page groups, but there&apos;s also not a strong reason for Anton to go out of his way *to* tie it to page groups now.  As he mentioned, database tracker is also not tied to page groups and we haven&apos;t had a need to do so yet.
&gt; &gt; &gt; 
&gt; &gt; &gt; As far as I know, WebSQLDatabase isn&apos;t tied to PageGroups.  DOM Storage however is.  It&apos;d be wrong to be inconsistent throughout.
&gt; &gt; 
&gt; &gt; &quot;PageGroups&quot; are a WebCore concept, not a spec concept.  We (at Apple, working on WebKit1/WebKit2 APIs) have the exact same motivations to make SQL databases tied to Page Groups as we would LocalStorage...  Maybe you have some other motivations that haven&apos;t been shared here?
&gt; 
&gt; I have no motivations other than keeping the code base clean and consistent.  I&apos;m a bit surprised you assume otherwise.

I didn&apos;t mean motivation as in &quot;some grand conspiracy&quot;, I meant motivation as in &quot;reasons you think this is particularly important right now&quot;  ;)

Keeping the code base consistent is a good thing, but it&apos;s often difficult to do while one specific area is undergoing transition.  Anton has already indicated that this is a multi-step process and he has followup work to do.

&gt; &gt; &gt; I also can&apos;t think off the top of my head of why this would be a difficult change.
&gt; 
&gt; Is it a difficult change?  It seems like it&apos;s 10-20 lines of code different...?

Perhaps not difficult, but this patch is already huge...  That would add yet-another-aspect to the patch which is actually unrelated to the change being made.

&gt; &gt; &gt; If different PageGroups having different localStorage namespaces is no longer useful, we should completely pull out the feature.  (I thought the Mac WebKit framework exposed them to apps though...?)
&gt; &gt; 
&gt; &gt; The WebKit API has absolutely no concept of local storage.  This work is the first that would directly add such a concept.
&gt; &gt; 
&gt; &gt; The fact that local storage namespaces are hung off of a page group is nascent - an indication of a direction we thought we&apos;d be heading.  It&apos;s unlikely it will ever get fleshed out in the WK1 API, but we&apos;re likely to pursue making more things firmly into PageGroup-level concepts while working on the WK2 API.  That is one of them, and SQL databases is another.
&gt; 
&gt; Gotcha.  So I guess the point is that the page group logic for DOM Storage maybe never should have been added to begin with (since it&apos;s effectively dead code currently).
&gt; 
&gt; I think the right answer is to either make LocalStorage a singleton (and rip out the per-pageGroup logic--it can be reverted when WK2 needs it) or to make the tracker pageGroup aware (assuming you guys plan on utilizing that logic in the near future).

I think leaving LocalStorage a singleton in this patch, then either PageGroup-ifying DatabaseTracker *or* un-PageGroupify&apos;ing LocalStorage in a followup is a fine thing to do.

&gt; &gt; &gt; Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?
&gt; &gt; 
&gt; &gt; Not off the top of my head.  Michael might.  Most of the issues I know of date back over a year ago.  But there were a couple recent ones caught by thread sanitizer and some other V8 work.
&gt; 
&gt; Here&apos;s the most recent one: http://code.google.com/p/chromium/issues/detail?id=71026

That bug appears to be about the SQL database thread mechanism itself, and not anything specific about DatabaseTracker, so I&apos;m not sure that it&apos;s directly relevant to this discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365373</commentid>
    <comment_count>54</comment_count>
      <attachid>85296</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 11:46:31 -0800</bug_when>
    <thetext>Comment on attachment 85296
Patch

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

Few comments.  Will try to look over it more later...

&gt; Source/WebCore/ChangeLog:48
&gt; +        (WebCore::StorageAreaImpl::testForceSync):

This changelog seems a bit out of date

&gt; Source/WebKit/ChangeLog:1
&gt; +2011-03-10  Anton D&apos;Auria  &lt;adauria@apple.com&gt;

get rid of the second one

&gt; Source/WebKit/chromium/src/StorageNamespaceProxy.h:50
&gt; +    virtual void testForceSync();

This needs to be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365385</commentid>
    <comment_count>55</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 11:53:18 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #50)
&gt; &gt; (In reply to comment #47)
&gt; &gt; &gt; (In reply to comment #46)
&gt; &gt; &gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #42)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; listDirectory implementation is now in FileSystemPOSIX.cpp.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; A new mutex, m_originSetGuard, is used to protect the in-memory origin set so that UI can&apos;t block on m_databaseGuard.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Non-thread-safe String refcounting is done under locks.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; I haven&apos;t looked at the code yet, but I&apos;m really concerned this is going to be fragile....  :-/
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I think this has been largely modeled on DatabaseTracker wrt to the approach for multithreading.  We had concerns of fragility there, too, but none have surfaced in practice.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This isn&apos;t true.  There have been many races there.  And michaeln is currently working on a major overhaul due to two new issues that were recently discovered.
&gt; &gt; &gt; 
&gt; &gt; &gt; Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?
&gt; &gt; 
&gt; &gt; Not off the top of my head.  Michael might.  Most of the issues I know of date back over a year ago.  But there were a couple recent ones caught by thread sanitizer and some other V8 work.
&gt; &gt; 
&gt; &gt; &gt; &gt; &gt; We&apos;re working with this API being added similarly to how we&apos;ve worked with the DatabaseTracker, and will closely watch issues that come up in use.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; There&apos;s not a strong reason to not tie it to page groups, but there&apos;s also not a strong reason for Anton to go out of his way *to* tie it to page groups now.  As he mentioned, database tracker is also not tied to page groups and we haven&apos;t had a need to do so yet.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; As far as I know, WebSQLDatabase isn&apos;t tied to PageGroups.  DOM Storage however is.  It&apos;d be wrong to be inconsistent throughout.
&gt; &gt; &gt; 
&gt; &gt; &gt; &quot;PageGroups&quot; are a WebCore concept, not a spec concept.  We (at Apple, working on WebKit1/WebKit2 APIs) have the exact same motivations to make SQL databases tied to Page Groups as we would LocalStorage...  Maybe you have some other motivations that haven&apos;t been shared here?
&gt; &gt; 
&gt; &gt; I have no motivations other than keeping the code base clean and consistent.  I&apos;m a bit surprised you assume otherwise.
&gt; 
&gt; I didn&apos;t mean motivation as in &quot;some grand conspiracy&quot;, I meant motivation as in &quot;reasons you think this is particularly important right now&quot;  ;)
&gt; 
&gt; Keeping the code base consistent is a good thing, but it&apos;s often difficult to do while one specific area is undergoing transition.  Anton has already indicated that this is a multi-step process and he has followup work to do.

The problem with follow up patches is how often they don&apos;t happen...even when people have the best intentions to do them.  (I think most contributors are guilty of this....me even.)

I understand all too well that it can be a pain to split up patches and do them essentially backwards (doing the stuff you originally set out to do last), but it really is the best way to keep the codebase clean and stable throughout a major refactoring.  But that&apos;s probably what should be done here.

&gt; &gt; &gt; &gt; I also can&apos;t think off the top of my head of why this would be a difficult change.
&gt; &gt; 
&gt; &gt; Is it a difficult change?  It seems like it&apos;s 10-20 lines of code different...?
&gt; 
&gt; Perhaps not difficult, but this patch is already huge...  That would add yet-another-aspect to the patch which is actually unrelated to the change being made.
&gt; 
&gt; &gt; &gt; &gt; If different PageGroups having different localStorage namespaces is no longer useful, we should completely pull out the feature.  (I thought the Mac WebKit framework exposed them to apps though...?)
&gt; &gt; &gt; 
&gt; &gt; &gt; The WebKit API has absolutely no concept of local storage.  This work is the first that would directly add such a concept.
&gt; &gt; &gt; 
&gt; &gt; &gt; The fact that local storage namespaces are hung off of a page group is nascent - an indication of a direction we thought we&apos;d be heading.  It&apos;s unlikely it will ever get fleshed out in the WK1 API, but we&apos;re likely to pursue making more things firmly into PageGroup-level concepts while working on the WK2 API.  That is one of them, and SQL databases is another.
&gt; &gt; 
&gt; &gt; Gotcha.  So I guess the point is that the page group logic for DOM Storage maybe never should have been added to begin with (since it&apos;s effectively dead code currently).
&gt; &gt; 
&gt; &gt; I think the right answer is to either make LocalStorage a singleton (and rip out the per-pageGroup logic--it can be reverted when WK2 needs it) or to make the tracker pageGroup aware (assuming you guys plan on utilizing that logic in the near future).
&gt; 
&gt; I think leaving LocalStorage a singleton in this patch, then either PageGroup-ifying DatabaseTracker *or* un-PageGroupify&apos;ing LocalStorage in a followup is a fine thing to do.
&gt; 
&gt; &gt; &gt; &gt; Interesting.  We&apos;ve used the API hooked up to DatabaseTracker in Safari and haven&apos;t seen any reports of issues.  Do you have webkit bugzillas referencing these issues and this work?
&gt; &gt; &gt; 
&gt; &gt; &gt; Not off the top of my head.  Michael might.  Most of the issues I know of date back over a year ago.  But there were a couple recent ones caught by thread sanitizer and some other V8 work.
&gt; &gt; 
&gt; &gt; Here&apos;s the most recent one: http://code.google.com/p/chromium/issues/detail?id=71026
&gt; 
&gt; That bug appears to be about the SQL database thread mechanism itself, and not anything specific about DatabaseTracker, so I&apos;m not sure that it&apos;s directly relevant to this discussion.

Well, I was talking about threading issues in general.  Databases use of threading in general is way overly complicated.  And LocalStorage&apos;s definitely bordered on it.  I think this patch is really pushing it over the point where we need to re-think our approach.

Let&apos;s try to make it more message-passing-esque.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365438</commentid>
    <comment_count>56</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-10 12:38:52 -0800</bug_when>
    <thetext>earler, i said
&gt; So rather than have collections that are accessed on multiple threads and mutex&apos;s to gaurd them,
&gt; send messages and have the messages carry all the data. And serialize everything having to do with
&gt; touching &apos;localStorage&apos; on disk on the same thread.

ap said
&gt; As a design principle, we should certainly strive to not have any shared data, and prefer message passing.

brady said
&gt; I don&apos;t disagree with this.

jorlow said
&gt; Let&apos;s try to make it more message-passing-esque.


Given what&apos;s been said, seems like this patch should be revamped to use message passing instead. I think it good make it simpler too.

About the database system, look at the revision history to see the sort of problems in there. Jorlow said i was looking into overhauling things to fix a recent bug, I punted on that. There&apos;s a lot of inertia in what&apos;s there and changing it would a big effort. Saying this is modeled off of the DatabaseTracker is scary. It would be good to not let a bunch of difficult-to-work-with code accrue in the localstorage system. With that in mind...

The WebKit api exposed in this patch provides synchronous accessors to list the origins using local storage and to delete that data. Can those interfaces be async instead? The SQLDatabaseTracker has similar sync api exposed in the webkit api, and that&apos;s a part of the &apos;inertia&apos; mentioned above. The sync&apos;ness of these operations imposes difficult constraints that would otherwise not be there for normal use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365557</commentid>
    <comment_count>57</comment_count>
      <attachid>85392</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 15:01:01 -0800</bug_when>
    <thetext>Created attachment 85392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365559</commentid>
    <comment_count>58</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 15:05:48 -0800</bug_when>
    <thetext>Since there&apos;s general agreement that a message passing model would be better for the DatabaseTracker, I filed https://bugs.webkit.org/show_bug.cgi?id=56144 to track this task.  Since changing it has been admitted to be a big effort, it is reasonable to punt on it and we can visit that bug when someone has the spare cycles.

Maciej originally r+&apos;ed an earlier version of this patch with some style comments.  The patch as it exists today is not substantially different from that one, and in fact has improved since then.

Jeremy overrode that r+ with an r- and some comments, and it seems like the substantive ones have been addressed.

It seems that what we&apos;re left with today is a working patch improved from where it was originally r+&apos;ed.  While there are merited objections about the model used to implement it, that isn&apos;t normally something we use as rationalization for holding up a patch.

I think it would be valuable to land this working patch today.  This allows those of us interested in the functionality to use it for now.  That experience can help guide us with iterating on it in the future.

I&apos;m heading out for a dentist appt right now but hope to review this newest patch when I get back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365560</commentid>
    <comment_count>59</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 15:09:34 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; &gt; &gt; LayoutTests/ChangeLog:8
&gt; &gt; &gt; +        * storage/domstorage/localstorage/storagetracker: Added.
&gt; &gt; 
&gt; &gt; I&apos;m glad you put these in a directory.  For all the platforms that don&apos;t implement the layout test controller interface, you&apos;ll need to add them to the skipped lists though, right?  If so, just add the whole directory to the list, rather than individual tests.  And be sure to leave a comment about why they&apos;re skipped.  (Note that Chromium uses platform/chromium/test_expectations.txt rather than a skip list)

Added storagetracker to Chromium skip list.

(In reply to comment #42)
&gt; (In reply to comment #40)
&gt; &gt; StorageTracker is still a singleton. Both, StorageTracker and DatabaseTracker need to be PageGroup specific eventually, but this can be done at a later time. It is currently not an issue for the mac port, which is the only one that will use the StorageTracker API.
&gt; 
&gt; Is there any strong reason not to tie it to page groups?  If not, please add some ASSERT or something that will fire if one tries to use it with multiple page groups.

Added a ASSERT for only one page group.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365567</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-10 15:12:07 -0800</bug_when>
    <thetext>Attachment 85392 did not build on chromium:
Build output: http://queues.webkit.org/results/8132049</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365580</commentid>
    <comment_count>61</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-10 15:28:34 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Since there&apos;s general agreement that a message passing model would be better for the DatabaseTracker, I filed https://bugs.webkit.org/show_bug.cgi?id=56144 to track this task.  Since changing it has been admitted to be a big effort, it is reasonable to punt on it and we can visit that bug when someone has the spare cycles.
&gt; 
&gt; Maciej originally r+&apos;ed an earlier version of this patch with some style comments.  The patch as it exists today is not substantially different from that one, and in fact has improved since then.
&gt; 
&gt; Jeremy overrode that r+ with an r- and some comments, and it seems like the substantive ones have been addressed.
&gt; 
&gt; It seems that what we&apos;re left with today is a working patch improved from where it was originally r+&apos;ed.  While there are merited objections about the model used to implement it, that isn&apos;t normally something we use as rationalization for holding up a patch.
&gt; 
&gt; I think it would be valuable to land this working patch today.  This allows those of us interested in the functionality to use it for now.  That experience can help guide us with iterating on it in the future.
&gt; 
&gt; I&apos;m heading out for a dentist appt right now but hope to review this newest patch when I get back.

If the tracker were opt-in, then I would agree with you.  But this code will be used by every port as is.  If it were re-worked so that things work as they do now unless a port turns it on, then I agree it&apos;d make sense (and be safer) to put this in and iterate.

That is not the case though.  Several specific threading problems have been brought up in this thread from Michael and I taking quick looks at things.  The fact that this patch got a r+ with those in it doesn&apos;t mean that the patch is now super awesome, it means that the original r+ was perhaps too hasty.  I&apos;m concerned that if this goes in, existing ports will be destabilized.

I will make an effort to properly review this as, but I think this is 1) too big to allow a proper and thorough review for so much subtle threading stuff and 2) is leaving too much as future work.  In addition, I think much of the future work would make this patch cleaner.

I really do empathize with Anton.  When I started working on DOM Storage I spent WAY more time trying to get people to review my code, breaking things into smaller patches, etc than I actually spent writing the code.  It&apos;s really frustrating, I know.  But in well established features like this, we need to go out of our way not to destabilize things (with subtle errors like threading issues!) rather than add new functionality.


If you want to put it in as is, please make it opt-in.  (i.e. if StorageTracker::initializeTracker is not called, then you don&apos;t hit any of the new code paths and/or put it behind a feature define.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365613</commentid>
    <comment_count>62</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 16:07:16 -0800</bug_when>
    <thetext>(In reply to comment #61)
&gt; (In reply to comment #58)
&gt; &gt; 
&gt; &gt; I think it would be valuable to land this working patch today.  This allows those of us interested in the functionality to use it for now.  That experience can help guide us with iterating on it in the future.
&gt; &gt; 
&gt; 
&gt; If the tracker were opt-in, then I would agree with you.
&gt; ...
&gt; If you want to put it in as is, please make it opt-in.  (i.e. if StorageTracker::initializeTracker is not called, then you don&apos;t hit any of the new code paths and/or put it behind a feature define.)

This seems pretty trivial, and I think Anton is already working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365654</commentid>
    <comment_count>63</comment_count>
      <attachid>85409</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 16:42:24 -0800</bug_when>
    <thetext>Created attachment 85409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365660</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-10 16:50:03 -0800</bug_when>
    <thetext>Attachment 85409 did not build on chromium:
Build output: http://queues.webkit.org/results/8139080</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365675</commentid>
    <comment_count>65</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-10 17:03:32 -0800</bug_when>
    <thetext>Attachment 85409 did not build on win:
Build output: http://queues.webkit.org/results/8141085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365681</commentid>
    <comment_count>66</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-10 17:06:49 -0800</bug_when>
    <thetext>Attachment 85392 did not build on win:
Build output: http://queues.webkit.org/results/8148072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365692</commentid>
    <comment_count>67</comment_count>
      <attachid>85409</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 17:28:24 -0800</bug_when>
    <thetext>Comment on attachment 85409
Patch

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

Looks good, but the build breaks and the m_isActive guard I pointed out need to be fixed.

&gt; Source/WebCore/storage/StorageAreaSync.cpp:459
&gt;      if (!count) {
&gt;          query.finalize();
&gt;          m_database.close();
&gt; -        String databaseFilename = m_syncManager-&gt;fullDatabaseFilename(m_databaseIdentifier);
&gt; -        if (!SQLiteFileSystem::deleteDatabaseFile(databaseFilename))
&gt; -            LOG_ERROR(&quot;Failed to delete database file %s\n&quot;, databaseFilename.utf8().data());
&gt; +        StorageTracker::tracker().deleteOrigin(m_databaseIdentifier);

Should guard this with the m_isActive flag, also.

&gt; Source/WebKit/ChangeLog:18
&gt; +2011-03-10  Anton D&apos;Auria  &lt;adauria@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Add WebKit1 API to view and delete local storage
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=51878
&gt; +
&gt; +        * WebKit.xcodeproj/project.pbxproj:
&gt; +
&gt; +2011-03-02  Anton D&apos;Auria  &lt;adauria@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=51878
&gt; +        Add WebKit1 API to view and delete local storage
&gt; +
&gt; +        * WebKit.xcodeproj/project.pbxproj:
&gt; +

Double ChangeLog entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365700</commentid>
    <comment_count>68</comment_count>
      <attachid>85413</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 17:38:52 -0800</bug_when>
    <thetext>Created attachment 85413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365701</commentid>
    <comment_count>69</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-10 17:40:07 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Since there&apos;s general agreement that a message passing model would be better for the DatabaseTracker, I filed https://bugs.webkit.org/show_bug.cgi?id=56144 to track this task.  Since changing it has been admitted to be a big effort, it is reasonable to punt on it and we can visit that bug when someone has the spare cycles.
&gt; 
&gt; Maciej originally r+&apos;ed an earlier version of this patch with some style comments.  The patch as it exists today is not substantially different from that one, and in fact has improved since then.
&gt; 
&gt; Jeremy overrode that r+ with an r- and some comments, and it seems like the substantive ones have been addressed.
&gt; 
&gt; It seems that what we&apos;re left with today is a working patch improved from where it was originally r+&apos;ed.  While there are merited objections about the model used to implement it, that isn&apos;t normally something we use as rationalization for holding up a patch.
&gt; 
&gt; I think it would be valuable to land this working patch today.  This allows those of us interested in the functionality to use it for now.  That experience can help guide us with iterating on it in the future.
&gt; 
&gt; I&apos;m heading out for a dentist appt right now but hope to review this newest patch when I get back.

Is there a rush on this?

Once the current sync WebKit api goes in and external consumers are using it... that&apos;s hard to change (inertia).

If you&apos;re interested in landing the functionality w/o caring about the quality of the impl, maybe get the outward facing WebKit api into good shape (make it async so our hands are not tied) and put a butt simple impl behind that interface (enumerate directories in the filesystem and just call delete on them). The logic in here about detecting &apos;deletes&apos; in flight and avoiding them is terribly racey stuff, and the locking logic is somewhat elaborate and likely buggy in subtle ways.

It may be better to start with something simpler that is more amenable to iterating on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365706</commentid>
    <comment_count>70</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 17:47:29 -0800</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #58)
&gt; &gt; Since there&apos;s general agreement that a message passing model would be better for the DatabaseTracker, I filed https://bugs.webkit.org/show_bug.cgi?id=56144 to track this task.  Since changing it has been admitted to be a big effort, it is reasonable to punt on it and we can visit that bug when someone has the spare cycles.
&gt; &gt; 
&gt; &gt; Maciej originally r+&apos;ed an earlier version of this patch with some style comments.  The patch as it exists today is not substantially different from that one, and in fact has improved since then.
&gt; &gt; 
&gt; &gt; Jeremy overrode that r+ with an r- and some comments, and it seems like the substantive ones have been addressed.
&gt; &gt; 
&gt; &gt; It seems that what we&apos;re left with today is a working patch improved from where it was originally r+&apos;ed.  While there are merited objections about the model used to implement it, that isn&apos;t normally something we use as rationalization for holding up a patch.
&gt; &gt; 
&gt; &gt; I think it would be valuable to land this working patch today.  This allows those of us interested in the functionality to use it for now.  That experience can help guide us with iterating on it in the future.
&gt; &gt; 
&gt; &gt; I&apos;m heading out for a dentist appt right now but hope to review this newest patch when I get back.
&gt; 
&gt; Is there a rush on this?
&gt; 
&gt; Once the current sync WebKit api goes in and external consumers are using it... that&apos;s hard to change (inertia).
&gt; 
&gt; If you&apos;re interested in landing the functionality w/o caring about the quality of the impl, maybe get the outward facing WebKit api into good shape (make it async so our hands are not tied) and put a butt simple impl behind that interface (enumerate directories in the filesystem and just call delete on them). The logic in here about detecting &apos;deletes&apos; in flight and avoiding them is terribly racey stuff, and the locking logic is somewhat elaborate and likely buggy in subtle ways.
&gt; 

Much like the current sync SPI, the api is not actually &quot;synchronous&quot;.  Notice all the API calls do is schedule a background thread task in the storage tracker.  The API calls themselves return immediately.  And things within WebCore are, in fact, quite asynchronous already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365720</commentid>
    <comment_count>71</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-10 18:06:02 -0800</bug_when>
    <thetext>Attachment 85413 did not build on win:
Build output: http://queues.webkit.org/results/8149096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365744</commentid>
    <comment_count>72</comment_count>
      <attachid>85421</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 19:06:16 -0800</bug_when>
    <thetext>Created attachment 85421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365754</commentid>
    <comment_count>73</comment_count>
      <attachid>85421</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 19:27:53 -0800</bug_when>
    <thetext>Comment on attachment 85421
Patch

This one looks good.  I&apos;ll check in again later tonight to see if the commit queue wanted to cooperate on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365758</commentid>
    <comment_count>74</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-10 19:31:06 -0800</bug_when>
    <thetext>Attachment 85421 did not build on win:
Build output: http://queues.webkit.org/results/8131118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365781</commentid>
    <comment_count>75</comment_count>
      <attachid>85431</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-10 20:02:03 -0800</bug_when>
    <thetext>Created attachment 85431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365829</commentid>
    <comment_count>76</comment_count>
      <attachid>85431</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-10 22:50:56 -0800</bug_when>
    <thetext>Comment on attachment 85431
Patch

Thanks for the Windows build fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365845</commentid>
    <comment_count>77</comment_count>
      <attachid>85431</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-10 23:46:55 -0800</bug_when>
    <thetext>Comment on attachment 85431
Patch

Rejecting attachment 85431 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
acker/storage-tracker-4-create-expected.txt
patching file LayoutTests/storage/domstorage/localstorage/storagetracker/storage-tracker-4-create.html
patching file LayoutTests/storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one-expected.txt
patching file LayoutTests/storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one.html

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Brady Eidson&apos;, u&apos;--for...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8141185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366124</commentid>
    <comment_count>78</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 11:04:17 -0800</bug_when>
    <thetext>(In reply to comment #77)
&gt; (From update of attachment 85431 [details])
&gt; Rejecting attachment 85431 [details] from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;apply-...&quot; exit_code: 2
&gt; 
&gt; Last 500 characters of output:
&gt; acker/storage-tracker-4-create-expected.txt
&gt; patching file LayoutTests/storage/domstorage/localstorage/storagetracker/storage-tracker-4-create.html
&gt; patching file LayoutTests/storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one-expected.txt
&gt; patching file LayoutTests/storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one.html
&gt; 
&gt; Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Brady Eidson&apos;, u&apos;--for...&quot; exit_code: 1
&gt; 
&gt; Full output: http://queues.webkit.org/results/8141185

This output as to why the commit-queue failed to run is kinda useless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366130</commentid>
    <comment_count>79</comment_count>
      <attachid>85431</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-11 11:08:55 -0800</bug_when>
    <thetext>Comment on attachment 85431
Patch

feel free to re r+ if I&apos;m wrong, but it does NOT appear that this is opt-in at the moment as we agreed upon.  I see StorageTracker::tracker() calls in methods every port calls and that looks like it starts the tracker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366138</commentid>
    <comment_count>80</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-11 11:14:49 -0800</bug_when>
    <thetext>Yes, the svn-apply failure output is useless.  We have some layering trouble getting in the way of pretty logs there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366147</commentid>
    <comment_count>81</comment_count>
      <attachid>85431</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-11 11:20:17 -0800</bug_when>
    <thetext>Comment on attachment 85431
Patch

I see...the isActive flag should take care of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366160</commentid>
    <comment_count>82</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 11:28:36 -0800</bug_when>
    <thetext>The commit-queue is failing here, and I know some of the issues the EWS bots had been having were simply git lock file related.  I&apos;m prepping to land this manually, after I get a clean tree up to date then get it applied there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366371</commentid>
    <comment_count>83</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 15:27:01 -0800</bug_when>
    <thetext>Landed in r80892.

As the commit was rolling, I noticed we only got the tests on the chromium skipped list, not the other non-mac ones.  Working with Anton to get those in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366376</commentid>
    <comment_count>84</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 15:39:10 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80892 might have broken Qt Linux Release minimal and Qt Windows 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366385</commentid>
    <comment_count>85</comment_count>
      <attachid>85548</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-11 15:47:41 -0800</bug_when>
    <thetext>Created attachment 85548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366387</commentid>
    <comment_count>86</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 15:50:01 -0800</bug_when>
    <thetext>Working on fixing the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366393</commentid>
    <comment_count>87</comment_count>
      <attachid>85431</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-11 16:01:00 -0800</bug_when>
    <thetext>Comment on attachment 85431
Patch

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

I gave this a quick look and had a few comments. There are some minor nits here but also some bad bugs as well.

&gt; Source/WebCore/storage/StorageTracker.cpp:63
&gt; +        storageTracker-&gt;importOriginIdentifiers();

This call strikes me as odd since  m_isActive is false and importOriginIdentifiers does nothing in that case.

&gt; Source/WebCore/storage/StorageTracker.cpp:88
&gt; +    m_storageDirectoryPath = path.threadsafeCopy();

btw, everytime you use threadsafeCopy, you should see it as a big flashing warning sign of trouble and bad design smells.

&gt; Source/WebCore/storage/StorageTracker.cpp:92
&gt; +{

Need ASSERT(!m_databaseGuard.tryLock()); here.

&gt; Source/WebCore/storage/StorageTracker.cpp:181
&gt; +

MutexLocker lockDatabase(m_databaseGuard); due to use of m_storageDirectoryPath

Also what guards your DEFINE_STATIC_LOCAL variables (especially considering that they are String&apos;s and have unsafe ref counting)?

&gt; Source/WebCore/storage/StorageTracker.cpp:207
&gt; +    // Delete stale StorageTracker records.

MutexLocker lockOrigins(m_originSetGuard); ?

&gt; Source/WebCore/storage/StorageTracker.cpp:233
&gt; +    LocalStorageTask* task = LocalStorageTask::createSetOriginDetails(originIdentifier.threadsafeCopy(), databaseFile).leakPtr();

Ideally this would be a RefPtr&lt;LocalStorageTask&gt; to get the PassRefPtr from createSetOriginDetails.

Actually I suspect that the task is getting deleted right now in at least one code path and the callOnMainThread call below just fails. (It should do a leakRefPtr and then scheduleTask should deref it.) Is there a test to exercise the callOnMainThread code path?

&gt; Source/WebCore/storage/StorageTracker.cpp:239
&gt; +        callOnMainThread(scheduleTask, (void*)task);

Use C++ style casts.

&gt; Source/WebCore/storage/StorageTracker.cpp:248
&gt; +        StorageTracker::tracker().m_thread-&gt;scheduleTask((LocalStorageTask*)task);

Use C++ style casts.

&gt; Source/WebCore/storage/StorageTracker.cpp:345
&gt; +                continue;

Over indented.

&gt; Source/WebCore/storage/StorageTracker.cpp:491
&gt; +    MutexLocker lockDatabase(m_databaseGuard);

Inverted lock order.  This will give you deadlocks.

&gt; Source/WebCore/storage/StorageTracker.cpp:497
&gt; +{

How is this thread safe with respect to the other methods that use m_client in a threaded manner like syncDeleteOrigin?

&gt; Source/WebCore/storage/StorageTracker.h:94
&gt; +    Mutex m_databaseGuard;

It would be nice to have a comment about what the mutex is suppose to be guarding. (I think it is the two member variables following it.)

&gt; Source/WebCore/storage/StorageTracker.h:103
&gt; +    Mutex m_originSetGuard;

It would be nice to have a comment about what the mutex is suppose to be guarding. (I think it is the two member variables following it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366398</commentid>
    <comment_count>88</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 16:07:31 -0800</bug_when>
    <thetext>Attempt Qt build fix landed in r80898</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366491</commentid>
    <comment_count>89</comment_count>
      <attachid>85564</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-11 20:16:31 -0800</bug_when>
    <thetext>Created attachment 85564
[PATCH] protect m_client, always open tracker db on initialization, reorder lock taking

Patch addresses some of David Levin&apos;s concerns about protecting m_client and a possible deadlock caused by the order in which locks are taken. Also fixes an issue in which origin dbs are not added to the tracker until an initialization that takes place after a local storage write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366492</commentid>
    <comment_count>90</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 20:17:50 -0800</bug_when>
    <thetext>Attachment 85564 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/storage/StorageTracker.cpp:177:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 3 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>366508</commentid>
    <comment_count>91</comment_count>
      <attachid>85568</attachid>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-11 21:08:52 -0800</bug_when>
    <thetext>Created attachment 85568
Patch

fix style error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366514</commentid>
    <comment_count>92</comment_count>
      <attachid>85548</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-11 21:38:32 -0800</bug_when>
    <thetext>Comment on attachment 85548
Patch

Clearing flags on attachment: 85548

Committed r80927: &lt;http://trac.webkit.org/changeset/80927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366699</commentid>
    <comment_count>93</comment_count>
      <attachid>85568</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-13 03:40:36 -0700</bug_when>
    <thetext>Comment on attachment 85568
Patch

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

You may want to consider a new bug for this new patch as it may get hard to sort out the comments on this patch from the rest (and there have already been a lot of comments in this bug).

These following comments were not addressed. It is good to do one of several things: 
1. Address them with changes in the code.
2. Address them with an explanation of why they are incorrect. Surprising, but I am at times. :)
3. Explain why/that you&apos;ll address them later.

&gt; Source/WebCore/storage/StorageTracker.cpp:233
&gt; +    LocalStorageTask* task = LocalStorageTask::createSetOriginDetails(originIdentifier.threadsafeCopy(), databaseFile).leakPtr();

Ideally this would be a RefPtr&lt;LocalStorageTask&gt; to get the PassRefPtr from createSetOriginDetails.

Actually I suspect that the task is getting deleted right now in at least one code path and the callOnMainThread call below just fails. (It should do a leakRefPtr and then scheduleTask should deref it.) 

Is there a test to exercise the callOnMainThread code path?

&gt; Source/WebCore/storage/StorageTracker.cpp:63
&gt; +        storageTracker-&gt;importOriginIdentifiers();

This call strikes me as odd since  m_isActive is false and importOriginIdentifiers does nothing in that case.

&gt; Source/WebCore/storage/StorageTracker.cpp:181
Also what guards your DEFINE_STATIC_LOCAL variables?

Specifically, static initialization isn&apos;t threadsafe.

Here are my comments about the changes in this patch:

&gt; Source/WebCore/storage/StorageTracker.cpp:147
&gt; +        openTrackerDatabase(true);

Why is this change being done? (Ideally, there would be a comment for this function in the ChangeLog to tell me.)

&gt; Source/WebCore/storage/StorageTracker.cpp:150
&gt; +

Whitespace clean ups like this in general are frowned upon. They make these diffs harder to read without significant benefit.

&gt; Source/WebCore/storage/StorageTracker.cpp:158
&gt; +        

Please remove this misc whitespace change.

&gt; Source/WebCore/storage/StorageTracker.cpp:199
&gt; +        originSetCopy = m_originSet;

This is broken. Note that OriginSet is a  HashSet&lt;String&gt; so the copy will just copy strings (which are basically RefPtr&lt;StringImpl&gt; and StringImpl is RefCounted -- which is simple ++/-- ref counting, not threadsafe).

In other words, you&apos;ll have ref counted StringImpl escaping out of your lock and that isn&apos;t threadsafe.

&gt; Source/WebCore/storage/StorageTracker.cpp:295
&gt; +        MutexLocker lockClient(m_clientGuard);

You are doing the null check for m_client outside of the lock. It seems like it would be good to check for it being null after the mutex is taken as well.

&gt; Source/WebCore/storage/StorageTracker.cpp:365
&gt; +            MutexLocker lockClient(m_clientGuard);

Ditto.

&gt; Source/WebCore/storage/StorageTracker.cpp:476
&gt; +        MutexLocker lockClient(m_clientGuard);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366818</commentid>
    <comment_count>94</comment_count>
    <who name="Anton D&apos;Auria">adauria</who>
    <bug_when>2011-03-13 21:11:04 -0700</bug_when>
    <thetext>(In reply to comment #93)
&gt; (From update of attachment 85568 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85568&amp;action=review
&gt; 
&gt; You may want to consider a new bug for this new patch as it may get hard to sort out the comments on this patch from the rest (and there have already been a lot of comments in this bug).
&gt; 
&gt; These following comments were not addressed. It is good to do one of several things: 
&gt; 1. Address them with changes in the code.
&gt; 2. Address them with an explanation of why they are incorrect. Surprising, but I am at times. :)
&gt; 3. Explain why/that you&apos;ll address them later.
&gt; 
&gt; &gt; Source/WebCore/storage/StorageTracker.cpp:233
&gt; &gt; +    LocalStorageTask* task = LocalStorageTask::createSetOriginDetails(originIdentifier.threadsafeCopy(), databaseFile).leakPtr();
&gt; 
&gt; Ideally this would be a RefPtr&lt;LocalStorageTask&gt; to get the PassRefPtr from createSetOriginDetails.
&gt; 
&gt; Actually I suspect that the task is getting deleted right now in at least one code path and the callOnMainThread call below just fails. (It should do a leakRefPtr and then scheduleTask should deref it.) 
&gt; 
&gt; Is there a test to exercise the callOnMainThread code path?

As David and I discussed on irc, this code is correct, but not very readable.

Since the primary patch for this bug has been checked in, and to simplify work on David&apos;s followup comments, I opened a new bug and posted the next patch here: https://bugs.webkit.org/show_bug.cgi?id=56285</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81164</attachid>
            <date>2011-02-03 18:19:22 -0800</date>
            <delta_ts>2011-02-23 18:15:53 -0800</delta_ts>
            <desc>Added LocalStorageTracker to WebCore to track creation of LocalStorage dbs, and an API to list and delete them.</desc>
            <filename>local_storage_tracker1.patch</filename>
            <type>text/plain</type>
            <size>68267</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NTc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODQgQEAKKzIwMTEtMDItMDMgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZworICAgICAgICBvcmlnaW5zIHRoYXQgaGF2
ZSBMb2NhbFN0b3JhZ2UuIEl0IGNhbiBiZSBtb2RpZmllZCB0byBhbHNvIHRyYWNrIExvY2FsU3Rv
cmFnZSBxdW90YXMuCisgICAgICAgIFdoZW4gU3RvcmFnZUFyZWFTeW5jIHdyaXRlcyBMb2NhbFN0
b3JhZ2Uga2V5L3ZhbHVlIHBhaXJzIHRvIGRpc2ssIFN0b3JhZ2VUcmFja2VyIHdyaXRlcworICAg
ICAgICBhbiBlbnRyeSBpbiBpdHMgZGIgZm9yIHRoZSBvcmlnaW4gYW5kIG9yaWdpbidzIExvY2Fs
U3RvcmFnZSBkYiBwYXRoLiBBbGwgU3RvcmFnZVRyYWNrZXIgSU8KKyAgICAgICAgaXMgZG9uZSBv
biBvbmUgYmFja2dyb3VuZCB0aHJlYWQgdGhhdCBoYXMgYSB0YXNrIHF1ZXVlLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gU3RvcmFnZUFyZWFTeW5jIGlzIG5vdCBndWFyYW50ZWVkIHRvIGNyZWF0
ZSBhIGRiIGZvcgorICAgICAgICBMb2NhbFN0b3JhZ2UgYmVmb3JlIGl0IGlzIGRlbGV0ZWQgYnkg
SlMgaW4gRHVtcFJlbmRlclRyZWUuIFBvc3Rwb25pbmcKKyAgICAgICAgdGVzdHMgdW50aWwgU3Rv
cmFnZVRyYWNrZXJDbGllbnQgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGluIER1bXBSZW5kZXJU
cmVlLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBTdG9yYWdlVHJhY2tlciBB
UEkgdG8gV2ViS2l0LgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6IERlbGV0ZSBpbi1tZW1vcnkK
KyAgICAgICAga2V5L3ZhbHVlIHBhaXJzIGFuZCBjbG9zZSBkYiBiZWZvcmUgZGVsZXRpb24uIFdl
IGRvbid0IHdhbnQgdG8gZGVzdHJveQorICAgICAgICBTdG9yYWdlQXJlYSBiZWNhdXNlIEpTIG1h
eSB3cml0ZSB0byBpdCBpbW1lZGlhdGVseSBhZnRlciBiYWNraW5nIGRiIGlzCisgICAgICAgIGRl
bGV0ZWQgYnkgU3RvcmFnZVRyYWNrZXIuIFRoaXMgaXMgY2FsbGVkIGJ5IFN0b3JhZ2VUcmFja2Vy
IG9uIHRoZSBtYWluCisgICAgICAgIHRocmVhZCBiZWZvcmUgaXQgc2NoZWR1bGVzIGRiIGZpbGUg
ZGVsZXRpb24gb24gaXRzIGJhY2tncm91bmQgdGhyZWFkLgorICAgICAgICBJZiBTdG9yYWdlQXJl
YTo6c2V0SXRlbSBpcyBjYWxsZWQgYW5kIFN0b3JhZ2VBcmVhU3luYyByZWNyZWF0ZXMgdGhlIGRi
LAorICAgICAgICB0aGVuIHRoZSBkYiBkZWxldGlvbiBpcyBjYW5jZWxsZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAg
KiBwYWdlL1BhZ2VHcm91cC5oOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5j
cHA6IEFkZGVkIFN0b3JhZ2VUcmFja2VyIHRhc2tzIGZvciBpbXBvcnRpbmcsCisgICAgICAgIGFk
ZGluZywgYW5kIGRlbGV0aW5nIG9yaWdpbiBkZXRhaWxzLgorICAgICAgICAoV2ViQ29yZTo6TG9j
YWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bFN0b3JhZ2VUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VUYXNrLmg6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmln
aW5JZGVudGlmaWVyc0ltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNr
OjpjcmVhdGVTZXRPcmlnaW5EZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFn
ZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2VUYXNrOjpjcmVhdGVEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhSW1wbC5jcHA6IGNsZWFycyBpbi1tZW1vcnkgU3RvcmFnZUFyZWEgYW5kIHF1ZXVlZAor
ICAgICAgICBrZXkvdmFsdWUgcGFpcnMsIGFuZCBjbG9zZXMgYmFja2luZyBkYiBiZWZvcmUgaXQn
cyBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNlKTog
Q2xvc2VzIGRiIG9uIGJlaGFsZiBvZiBTdG9yYWdlVHJhY2tlciBiZWZvcmUgaXQgaXMgZGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNlKTogTm90
aWZpZXMgU3RvcmFnZVRyYWNrZXIgdGhhdCBhIGRiIGlzIGJlaW5nIGNyZWF0ZWQgZm9yIGFuIG9y
aWdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UpOiBDYWxscyBT
dG9yYWdlVHJhY2tlciB0byBkbyBkYiBkZWxldGlvbiBpbnN0ZWFkIG9mIGRlbGV0aW5nIGZpbGUg
b2YgZW1wdHkgZGIgaXRzZWxmIG9uIGZpbmFsIHN5bmMgKHdoZW4gUGFnZTo6Y2xvc2VMb2NhbFN0
b3JhZ2UgaXMgY2FsbGVkKS4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oOgor
ICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAg
KiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6
OmluaXRpYWxpemVUcmFja2VyKTogTG9hZHMgb3JpZ2luIGlkZW50aWZpZXJzIGZyb20gZGIuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcik6IFJldHVybnMgc2luZ2xl
dG9uLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0b3J5UGF0
aCk6IExvY2F0aW9uIG9mIFN0b3JhZ2VUcmFja2VyJ3MgZGIuCisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6IFdyaXRlcyBvcmln
aW4gaWRlbnRpZmllciBhbmQgU3RvcmFnZUFyZWFTeW5jJ3MgZGIgcGF0aC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzY2hlZHVsZVRhc2spOiBVc2VkIHRvIHNjaGVkdWxlIGJh
Y2tncm91bmQgdGhyZWFkIHRhc2tzIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKTogU3luY2hyb25pemVz
IFN0b3JhZ2VUcmFja2VyIGRhdGEgdG8gZGlzayBvbiBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKTogUmV0dXJucyBpbi1tZW1vcnkg
c2V0IG9mIG9yaWdpbnMgd2l0aCBMb2NhbFN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6ZGVsZXRlQWxsT3JpZ2lucyk6IFNjaGVkdWxlcyBkZWxldGlvbiBvZiBvcmln
aW5zIHdpdGggTG9jYWxTdG9yYWdlIG9uIGJhY2tncm91bmQgdGhyZWFkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKTogVXNlZCB0byBhdm9pZCBhIHJhY2Ug
aW4gd2hpY2ggYSBjbG9zZWQgU3RvcmFnZUFyZWFTeW5jIGRiIGlzIHJlb3BlbmVkIGJ5IFN0b3Jh
Z2VBcmVhU3luYyBiZWZvcmUgYSBzY2hlZHVsZWQgU3RvcmFnZVRyYWNrZXIgdGhyZWFkIGF0dGVt
cHRzIHRvIGRlbGV0ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp3aWxs
RGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpjYW5EZWxl
dGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbmNlbERlbGV0
aW5nT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcmlnaW5GaWxl
UGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldENsaWVudCk6Cisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcDogQWRkZWQuIFVzZWQgdG8gbm90aWZ5IFVJIG9m
IGNoYW5nZXMgdG8gc2V0IG9mIG9yaWdpbnMgd2l0aCBMb2NhbFN0b3JhZ2UuCisgICAgICAgICog
c3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+U3RvcmFnZVRyYWNrZXJDbGllbnQpOgorCiAyMDExLTAy
LTAzICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVyc2lvbiBzaG91bGQg
bm90IGJlIG1hcmtlZCBhcyBtaXNzcGVsbGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJl
dmlzaW9uIDc3NTI0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTEwNjAsNiArMTA2MCwxMSBAQCBfX1pOSzdXZWJDb3JlMTRSZXNvdXJjZUxvYWRl
cjExZnJhbWVMb2FkCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjEwY2FuRGlzcGxheUVS
S05TXzRLVVJMRQogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xOGRhdGFiYXNlSWRlbnRp
ZmllckV2CiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjVlcXVhbEVQS1MwXworX19aTjdX
ZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdF
CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19fWk43
V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdp
bkUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNvcmUx
NFN0b3JhZ2VUcmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNl
Y3VyaXR5T3JpZ2luRUVFTG0wRUVFCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXIxOGZv
Y3VzZWRPck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNXBsYXRm
b3JtQ29udGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNnBhaW50aW5nRGlz
YWJsZWRFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNzc1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3OSw2ICs4Nzks
MTAgQEAKIAkJMzdGRDQyOTgxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZENDI5NzExODM2
ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCAqLzsgfTsKIAkJMzg4OEY2RUUxMjhDOTg4
OTAwMENBOEUwIC8qIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzODg4RjZFQzEyOEM5ODg5MDAwQ0E4RTAg
LyogSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcCAqLzsgfTsKIAkJMzg4OEY2RUYxMjhDOTg4
OTAwMENBOEUwIC8qIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzg4OEY2RUQxMjhDOTg4OTAwMENBOEUwIC8q
IEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oICovOyB9OworCQkzQUIwMkQyQTEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNB
QjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRGOTE2MDBGQkI2
OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OworCQkzQUMzNjgwMDEyRUY3QTA5MDA2QTNE
NkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJh
Y2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTNBQzM2ODAxMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUMzNjdG
RjEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuY3BwICovOyB9OwogCQkz
QUM2NDhCMjEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUM2NDhCMTEyOUUxNDY1MDBDM0VC
MjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0
aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9Owog
CQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVE
RUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OwpAQCAtNzI1Nyw2ICs3
MjYxLDEwIEBACiAJCTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlRGVwdGhMaW1pdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzODg4RjZFQzEyOEM5ODg5MDAwQ0E4RTAgLyogSW5z
cGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM4ODhGNkVEMTI4Qzk4ODkwMDBDQThFMCAvKiBJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRmlsZVN5
c3RlbUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI4MTJENEY5
MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
QUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRy
YWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRy
YWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FDMzY3RkYxMkVG
N0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FDNjQ4QjExMjlFMTQ2NTAwQzNFQjI1IC8qIEVkaXRpbmdC
b3VuZGFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nQm91bmRh
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwMDJDQ0IwRjY2RURFRjAwOUU2
NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5NjgsNiArMTI5NzYsMTAgQEAKIAkJCQlD
NTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAqLywKIAkJ
CQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLywK
IAkJCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8s
CisJCQkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8sCisJ
CQkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLywKKwkJ
CQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLywK
KwkJCQkzQUMzNjdGRjEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuY3Bw
ICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9yYWdlOwpAQCAt
MjE5ODksNiArMjIwMDEsNyBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTVFMzhCRjEwMDQwRDVEMDBBNTZC
REIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTAyRDk0
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjU0ODhENkIwREQ1QTgzRDAwOUQ4M0IyIC8qIFN0cmluZ1NvdXJjZVByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyogU3Ry
aW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlGNzc3NjBFRkVDNjIwMDA5MDg0
OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDc5LDYgKzIy
NDkyLDcgQEAKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM4QUUzNEYxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVB
cmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjJEMjA1NDEyRUFFN0IzMDA1QzI4NzQgLyogSW5z
cGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2
RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NTg1RTEx
MkYwOTg5NTAwNzU1ODIxIC8qIFBsYXRmb3JtR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTM0RjVBQjEyRUUzNDNGMDA0RUM1OEQgLyogSW50UmVjdEhhc2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3N0UyRENFMTJGMEUyODMwMEMxMzM3OSAvKiBIVE1MU291cmNlVHJhY2tlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDc4NCw2ICsyNDc5OCw3IEBACiAJCQkJQzUwRDBFODIwRkY0
MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUM1MTAyRDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01h
bmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8q
IFN0b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTMwMEQwMDZDMUQw
MEVGNkYyNiAvKiBTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMjY0NUMwRDAwQTc3
RTAwMEFDQzFEIC8qIFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVEMEQw
MEE3N0UwMDBBQ0MxRCAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTE4
Myw2ICsyNTE5OCw3IEBACiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4QUUzNEUxMkVBMDk2QTAwRUIzQUU2IC8qIFNj
cm9sbGFibGVBcmVhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGMkQyMDU1MTJFQUU3QjMwMDVD
Mjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzQUMzNjgwMTEy
RUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTc3RTJEQ0QxMkYwRTI4MzAwQzEzMzc5IC8qIEhUTUxTb3VyY2VUcmFja2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRv
d0JsdXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3Bw
CShyZXZpc2lvbiA3NzUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyb3VwU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCkBAIC0xMTAsNiArMTExLDM2IEBAIHZv
aWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxs
T3JpZ2lucygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOworCisgICAg
Zm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2Uo
KSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdp
bnNGb3JEZWxldGlvbigpOworICAgIH0KK30KKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxT
dG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgaWYgKCFwYWdl
R3JvdXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVu
ZCA9IHBhZ2VHcm91cHMtPmVuZCgpOworCisgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9y
IGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlm
IChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmxvY2FsU3RvcmFnZSgpLT5jbGVhck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CisgICAgfQor
Cit9CisjZW5kaWYKKwogdm9pZCBQYWdlR3JvdXA6OmFkZFBhZ2UoUGFnZSogcGFnZSkKIHsKICAg
ICBBU1NFUlQocGFnZSk7CkBAIC0yMDksNiArMjQwLDcgQEAgU3RvcmFnZU5hbWVzcGFjZSogUGFn
ZUdyb3VwOjpsb2NhbFN0b3JhZwogCiAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwog
fQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiA3NzUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEdyb3VwU2V0dGluZ3M7CiAgICAgY2xhc3MgSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U7CiAgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKICAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogCiAgICAgY2xhc3MgUGFnZUdyb3VwIHsK
QEAgLTQ5LDggKzUwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgflBhZ2VHcm91
cCgpOwogCiAgICAgICAgIHN0YXRpYyBQYWdlR3JvdXAqIHBhZ2VHcm91cChjb25zdCBTdHJpbmcm
IGdyb3VwTmFtZSk7CisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgICAgIHN0YXRpYyB2
b2lkIGNsb3NlTG9jYWxTdG9yYWdlKCk7Ci0gICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBj
bGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY2xl
YXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7CisjZW5kaWYg
ICAgICAgIAogICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2VzOyB9CiAKICAgICAgICAgdm9pZCBhZGRQYWdlKFBhZ2UqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkocmV2aXNpb24gNzc1
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJl
YWQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJh
Y2tlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDYgKzUxLDI3IEBAIExvY2Fs
U3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSAKICAgICBBU1NFUlQobV90aHJlYWQp
OwogICAgIEFTU0VSVChtX3R5cGUgPT0gVGVybWluYXRlVGhyZWFkKTsKIH0KKyAgICAKK0xvY2Fs
U3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5
cGUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJbXBvcnRPcmlnaW5zIHx8IG1fdHlwZSA9PSBE
ZWxldGVBbGxPcmlnaW5zKTsKK30KKyAgICAKK0xvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFn
ZVRhc2soVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCisgICAgOiBt
X3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gRGVsZXRlT3JpZ2luKTsKK30KKworTG9jYWxTdG9yYWdl
VGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1lKQorICAgIDogbV90eXBlKHR5
cGUpCisgICAgLCBtX29yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikKKyAgICAsIG1f
ZGF0YWJhc2VGaWxlbmFtZShkYXRhYmFzZUZpbGVuYW1lKQoreworICAgIEFTU0VSVChtX3R5cGUg
PT0gU2V0T3JpZ2luRGV0YWlscyk7Cit9CiAKIExvY2FsU3RvcmFnZVRhc2s6On5Mb2NhbFN0b3Jh
Z2VUYXNrKCkKIHsKQEAgLTY0LDYgKzg2LDE4IEBAIHZvaWQgTG9jYWxTdG9yYWdlVGFzazo6cGVy
Zm9ybVRhc2soKQogICAgICAgICBjYXNlIEFyZWFTeW5jOgogICAgICAgICAgICAgbV9hcmVhLT5w
ZXJmb3JtU3luYygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0T3JpZ2lu
RGV0YWlsczoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY1NldE9y
aWdpbkRldGFpbHMobV9vcmlnaW5JZGVudGlmaWVyLCBtX2RhdGFiYXNlRmlsZW5hbWUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW1wb3J0T3JpZ2luczoKKyAgICAgICAgICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWxldGVBbGxPcmlnaW5zOgorICAg
ICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jRGVsZXRlQWxsT3JpZ2lucygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZXRlT3JpZ2luOgorICAgICAg
ICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jRGVsZXRlT3JpZ2luKG1fb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEZWxldGVFbXB0
eURhdGFiYXNlOgogICAgICAgICAgICAgbV9hcmVhLT5kZWxldGVFbXB0eURhdGFiYXNlKCk7CiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGFzay5oCShyZXZpc2lvbiA3NzUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC00
MCwxMyArNDEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIExvY2FsU3RvcmFn
ZVRhc2sgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbFN0b3JhZ2VUYXNrKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUg
eyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwgVGVybWluYXRlVGhy
ZWFkIH07CisgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBEZWxldGVF
bXB0eURhdGFiYXNlLCBTZXRPcmlnaW5EZXRhaWxzLCBJbXBvcnRPcmlnaW5zLCBEZWxldGVBbGxP
cmlnaW5zLCBEZWxldGVPcmlnaW4sIFRlcm1pbmF0ZVRocmVhZCB9OwogCiAgICAgICAgIH5Mb2Nh
bFN0b3JhZ2VUYXNrKCk7CiAKICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdl
VGFzaz4gY3JlYXRlSW1wb3J0KFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9ydCwgYXJlYSkpOyB9CiAgICAgICAgIHN0
YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVN5bmMoU3RvcmFnZUFyZWFT
eW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhU3lu
YywgYXJlYSkpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZURlbGV0ZUVtcHR5RGF0YWJhc2UoU3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVy
biBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVFbXB0eURhdGFiYXNlLCBhcmVh
KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRl
T3JpZ2luSWRlbnRpZmllcnNJbXBvcnQoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9y
YWdlVGFzayhJbXBvcnRPcmlnaW5zKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9j
YWxTdG9yYWdlVGFzaz4gY3JlYXRlU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlbmFtZSkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soU2V0T3JpZ2luRGV0YWlscywgb3JpZ2luSWRlbnRp
ZmllciwgZGF0YWJhc2VGaWxlbmFtZSkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExv
Y2FsU3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZU9y
aWdpbiwgb3JpZ2luSWRlbnRpZmllcikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExv
Y2FsU3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVBbGxPcmlnaW5zKSk7IH0KICAgICAgICAgc3Rh
dGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlVGVybWluYXRlKExvY2FsU3Rv
cmFnZVRocmVhZCogdGhyZWFkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFz
ayhUZXJtaW5hdGVUaHJlYWQsIHRocmVhZCkpOyB9CiAKICAgICAgICAgdm9pZCBwZXJmb3JtVGFz
aygpOwpAQCAtNTQsMTAgKzU5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRl
OgogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFN0b3JhZ2VBcmVhU3luYyopOwogICAg
ICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIExvY2FsU3RvcmFnZVRocmVhZCopOworICAgICAg
ICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgICAgICBMb2NhbFN0
b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgICAgICBM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUpOwogCiAgICAgICAgIFR5cGUgbV90eXBlOwogICAgICAgICBT
dG9yYWdlQXJlYVN5bmMqIG1fYXJlYTsKICAgICAgICAgTG9jYWxTdG9yYWdlVGhyZWFkKiBtX3Ro
cmVhZDsKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2luSWRlbnRpZmllcjsKKyAgICAgICAgU3RyaW5n
IG1fZGF0YWJhc2VGaWxlbmFtZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZpc2lv
biA3NzUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNywyMCBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6
Y2xvc2UoKQogI2VuZGlmCiB9CiAKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdp
bkRlbGV0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkp
IHsKKyAgICAgICAgdW5zaWduZWQgcXVvdGEgPSBtX3N0b3JhZ2VNYXAtPnF1b3RhKCk7CisgICAg
ICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSk7CisgICAgfQorICAg
IAorICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworfQorCiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Ymxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKIHsKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlz
aW9uIDc3NTI0KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIE9ubHkgY2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9p
ZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAor
ICAgICAgICB2b2lkIGNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgdW5zaWduZWQgcXVvdGEpOwog
ICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJbXBsKik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA3NzUyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTM4LDYgKzEzOSwyNSBAQCB2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbGVhcigpCiAgICAgfQogfQogCit2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N5bmND
bG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2
YWwpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0
aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3lu
Y1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigp
OworICAgIH0KK30KKwogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVy
PFN0b3JhZ2VBcmVhU3luYz4qKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0y
MjIsNiArMjQyLDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIEEgU3RvcmFnZVRyYWNrZXIgdGhyZWFk
IG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIHRvIGRlbGV0ZSB0aGUgZGIgd2UncmUKKyAgICAvLyBy
ZW9wZW5pbmcsIHNvIGNhbmNlbCBwb3NzaWJsZSBkZWxldGlvbi4KKyAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLmNhbmNlbERlbGV0aW5nT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsK
KwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9jYWwgc3Rv
cmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1hcmtJbXBv
cnRlZCgpOwpAQCAtMjM1LDYgKzI1OSw4IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0
YWJhc2UoT3BlbkQKICAgICAgICAgbV9kYXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRPcmln
aW5EZXRhaWxzKG1fZGF0YWJhc2VJZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKTsKIH0KIAog
dm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQpAQCAtMzE5LDYgKzM0NSwxNSBA
QCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlCiAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBDbG9zaW5nIHRoaXMg
ZGIgYmVjYXVzZSBpdCBpcyBhYm91dCB0byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgor
ICAgIC8vIFRoZSBkZWxldGUgd2lsbCBiZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5l
ZWRzIHRvIHJlb3BlbiB0aGUgZGIKKyAgICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBh
ZnRlciB0aGUgcmVxdWVzdCB0byBkZWxldGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURh
dGFiYXNlKSB7CisgICAgICAgIG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAg
bV9kYXRhYmFzZS5jbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8v
IElmIHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJl
Zm9yZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKICAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVt
VGFibGUiKTsKQEAgLTQyMSw5ICs0NTYsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRl
RW1wdHlEYXRhYmFzCiAgICAgaWYgKCFjb3VudCkgewogICAgICAgICBxdWVyeS5maW5hbGl6ZSgp
OwogICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgIFN0cmluZyBkYXRhYmFzZUZp
bGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlk
ZW50aWZpZXIpOwotICAgICAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihtX2Rh
dGFiYXNlSWRlbnRpZmllcik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFTeW5jLmgJKHJldmlzaW9uIDc3NTI0KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzY2hlZHVsZUl0ZW1Gb3JTeW5j
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgdm9pZCBz
Y2hlZHVsZUNsZWFyKCk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+LCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4sIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VJZGVudGlmaWVyKTsKQEAgLTkyLDYgKzkzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG1fc3luY1NjaGVkdWxlZDsKICAgICAgICAgYm9vbCBtX3N5bmNJblBy
b2dyZXNzOwogICAgICAgICBib29sIG1fZGF0YWJhc2VPcGVuRmFpbGVkOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBtX3N5bmNDbG9zZURhdGFiYXNlOwogCiAgICAgICAgIG11dGFibGUgTXV0ZXgg
bV9pbXBvcnRMb2NrOwogICAgICAgICBtdXRhYmxlIFRocmVhZENvbmRpdGlvbiBtX2ltcG9ydENv
bmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5o
CShyZXZpc2lvbiA3NzUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHJldmlzaW9uIDc3NTI0KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIK
ICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCisj
aW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIu
aCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgpAQCAtMTQ0LDYgKzE0NSwzMSBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
Ojp1bmxvY2soKQogICAgIC8vIEJlY2F1c2UgdGhlcmUncyBhIHNpbmdsZSBldmVudCBsb29wIHBl
ci1wcm9jZXNzLCB0aGlzIGlzIGEgbm8tb3AuCiB9CiAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gTm90IHJlbW92aW5nIHRoZSBvcmln
aW4ncyBTdG9yYWdlQXJlYSBmcm9tIG1fc3RvcmFnZUFyZWFNYXAgYmVjYXVzZQorICAgIC8vIHdl
J3JlIGp1c3QgZGVsZXRpbmcgdGhlIHVuZGVybHlpbmcgZGIgZmlsZS4gSWYgYW4gaXRlbSBpcyBh
ZGRlZCBpbW1lZGlhdGVseQorICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhl
IHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxseSB0cmlnZ2VyCisgICAgLy8gYSBzeW5jIGFu
ZCBmb3IgU3RvcmFnZUFyZWFTeW5jIHRvIHJlY3JlYXRlIHRoZSBiYWNraW5nIGRiIGZpbGUuCisg
ICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFw
LmdldChvcmlnaW4pOworICAgIGlmIChzdG9yYWdlQXJlYSkgeworICAgICAgICBzdG9yYWdlQXJl
YS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9z
dG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBp
dCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJl
dmlzaW9uIDc3NTI0KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1
bmxvY2soKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3Jp
Z2luc0ZvckRlbGV0aW9uKCk7CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVk
IHF1b3RhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2Vy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgor
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0YXRpYyBTdG9yYWdlVHJh
Y2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOworCit2b2lkIFN0b3JhZ2VUcmFja2VyOjppbml0aWFs
aXplVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCghc3Rv
cmFnZVRyYWNrZXIpOworICAgIGlmIChzdG9yYWdlVHJhY2tlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKHN0b3JhZ2VQYXRo
KTsKK30KKworU3RvcmFnZVRyYWNrZXImIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKK3sKKyAg
ICBpZiAoIXN0b3JhZ2VUcmFja2VyKQorICAgICAgICBzdG9yYWdlVHJhY2tlciA9IG5ldyBTdG9y
YWdlVHJhY2tlcigiIik7CisgICAgCisgICAgcmV0dXJuICpzdG9yYWdlVHJhY2tlcjsKK30KKwor
U3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgp
CisgICAgOiBtX2NsaWVudCgwKQorICAgICwgbV90aHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpj
cmVhdGUoKSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAKKyAgICBz
ZXRTdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlUGF0aCk7CisgICAgCisgICAgU1FMaXRlRmls
ZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKKyAgICAKKyAgICBtX3RocmVhZC0+c3RhcnQo
KTsgIAorICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRy
YWNrZXI6OnNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgIAorICAgIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgg
PSBwYXRoLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06
OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0
b3JhZ2VUcmFja2VyLmRiIik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2Vy
RGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworCisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBT
dHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOworICAgIAorICAgIGlm
ICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0
aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYg
KCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2UuZGlzYWJs
ZVRocmVhZGluZ0NoZWNrcygpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0
cygiT3JpZ2lucyIpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgi
Q1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBM
QUNFLCBwYXRoIFRFWFQpOyIpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgT3JpZ2lucyB0YWJsZS4iKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTdG9y
YWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoreyAgICAKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisgCisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChtX29yaWdpblNldCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fb3JpZ2luU2V0ID0gYWRvcHRQdHIobmV3IE9yaWdpblNldCk7CisgICAgfQorICAg
IAorICAgIGlmIChtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2Nh
bFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCgpKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZSht
X2RhdGFiYXNlR3VhcmQpOworICAgIAorICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9y
aWdpbnMiKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzdWx0OworICAgIHdoaWxlICgocmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIG1fb3Jp
Z2luU2V0LT5hZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkudGhyZWFkc2FmZUNvcHkoKSk7
CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERp
ZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIEFTU0VS
VChtX29yaWdpblNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9vcmlnaW5TZXQtPmNvbnRh
aW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gdGFzayA9IExvY2FsU3RvcmFnZVRhc2s6OmNy
ZWF0ZVNldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllciwgZGF0YWJhc2VGaWxlKTsKKyAg
ICAKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdGhyZWFkKTsK
KyAgICAgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFz
ayh0YXNrKTsKKyAgICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVU
YXNrLCAodm9pZCopdGFzay5sZWFrUHRyKCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpz
Y2hlZHVsZVRhc2sodm9pZCogdGFzaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkKTsKKyAgICAKKyAg
ICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5tX3RocmVhZCkKKyAgICAgICAgU3RvcmFn
ZVRyYWNrZXI6OnRyYWNrZXIoKS5tX3RocmVhZC0+c2NoZWR1bGVUYXNrKChMb2NhbFN0b3JhZ2VU
YXNrKil0YXNrKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFp
bHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
RmlsZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2Vy
IGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworCisgICAgb3BlblRyYWNrZXJEYXRhYmFz
ZSh0cnVlKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VS
VCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFi
bGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICAKKyAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIs
IGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVz
dWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAn
JXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisK
KyAgICBtX29yaWdpblNldC0+YWRkKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSk7
CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlm
eU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6b3Jp
Z2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgQVNTRVJUKG1fb3Jp
Z2luU2V0KTsKKyAgICAKKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3Jp
Z2luU2V0LT5lbmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X29yaWdpblNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBw
ZW5kKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKCppdCkpOwor
fQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgQVNTRVJUKG1f
b3JpZ2luU2V0KTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIHdpbGxEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgICAg
IG1fb3JpZ2luU2V0LT5jbGVhcigpOworICAgIH0KKworICAgIFBhZ2VHcm91cDo6Y2xlYXJMb2Nh
bFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCk7CisgICAgCisgICAgaWYgKG1fdGhyZWFkKQorICAgICAg
ICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFs
bE9yaWdpbnMoKSk7Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxs
T3JpZ2lucygpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgCisgICAgTXV0
ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgCisgICAgb3BlblRy
YWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdpbnMiKTsKKyAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpbnQgcmVzdWx0OworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkg
PT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FM
UmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3Jp
Z2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAKKyAgICBpZiAobV9kYXRhYmFzZS5pc09w
ZW4oKSkKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIAorICAgIFNRTGl0ZUZpbGVT
eXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgIFNR
TGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGly
ZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgZGVsZXRlT3JpZ2luKFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpLmdl
dCgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCit7ICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNT
RVJUKG1fdGhyZWFkKTsKKyAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworICAgIAorICAgIC8vIEJl
Zm9yZSBkZWxldGluZyBkYXRhYmFzZSwgd2UgbmVlZCB0byBjbGVhciBpbi1tZW1vcnkgbG9jYWwg
c3RvcmFnZSBkYXRhCisgICAgLy8gaW4gU3RvcmFnZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUgU3Rv
cmFnZUFyZWEgZGIuIEl0J3MgcG9zc2libGUgZm9yIGFuCisgICAgLy8gaXRlbSB0byBiZSBhZGRl
ZCBpbW1lZGlhdGVseSBhZnRlciBjbG9zaW5nIHRoZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFyZWFT
eW5jCisgICAgLy8gdG8gcmVvcGVuIHRoZSBkYiBiZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQgYnkg
YSBTdG9yYWdlVHJhY2tlciB0aHJlYWQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCByZW9wZW5pbmcg
dGhlIGRiIGluIFN0b3JhZ2VBcmVhU3luYyB3aWxsIGNhbmNlbCBhIHBlbmRpbmcKKyAgICAvLyBT
dG9yYWdlVHJhY2tlciBkYiBkZWxldGlvbi4KKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9y
YWdlRm9yT3JpZ2luKG9yaWdpbik7CisKKyAgICBTdHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIHdpbGxEZWxldGVPcmlnaW4ob3Jp
Z2luSWQpOworICAgICAgICBtX29yaWdpblNldC0+cmVtb3ZlKG9yaWdpbklkKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKExv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbihvcmlnaW5JZCkpOworfQorCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBpZiAoIWNh
bkRlbGV0ZU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKSkgeworICAgICAgICBMT0dfRVJST1IoIkF0
dGVtcHRlZCB0byBkZWxldGUgb3JpZ2luICclcycgd2hpbGUgaXQgd2FzIGJlaW5nIGNyZWF0ZWRc
biIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEdldCBvcmln
aW4ncyBkYiBmaWxlIHBhdGgsIGRlbGV0ZSBlbnRyeSBpbiB0cmFja2VyJ3MgZGIsIHRoZW4gZGVs
ZXRlIGRiIGZpbGUuCisgICAgU1FMaXRlU3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmlnaW49PyIpOworICAgIGlmIChw
YXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVjdGlvbiBvZiBwYXRoIGZvciBvcmlnaW4gJyVzJyIs
IG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHBhdGhTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAg
aW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FM
UmVzdWx0Um93KSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGZpbmQgb3JpZ2luICcl
cycgaW4gT3JpZ2lucyB0YWJsZSIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFN0cmluZyBwYXRoID0gcGF0aFN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApOworCisgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7Cisg
ICAgCisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVM
RVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyIpOworICAgIGlmIChkZWxldGVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxldGVTdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1l
bnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVj
dXRlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9vcmlnaW5TZXQtPnJl
bW92ZShvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRh
YmFzZUZpbGUocGF0aCk7CisgICAgCisgICAgLy8gQ2xlYW4gdXAgdHJhY2tlciBkaXJlY3Rvcnkg
aWYgdGhlIGxhc3Qgb3JpZ2luIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgaWYgKG1fb3JpZ2luU2V0
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgICAgICBTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsK
KyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeSht
X3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmll
cik7Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2lucygp
Cit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICBpZiAoIW1f
b3JpZ2luc0JlaW5nRGVsZXRlZCkKKyAgICAgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkID0gYWRv
cHRQdHIobmV3IE9yaWdpblNldCk7CisKKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7CisgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX29yaWdpblNldC0+ZW5kKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0g
ZW5kOyArK2l0LCArK2kpCisgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKCppdCk7
Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICBpZiAoIW1fb3JpZ2luc0Jl
aW5nRGVsZXRlZCkKKyAgICAgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkID0gYWRvcHRQdHIobmV3
IE9yaWdpblNldCk7CisgICAgICAgIAorICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKG9y
aWdpbklkZW50aWZpZXIpOworfQorICAgIAorYm9vbCBTdG9yYWdlVHJhY2tlcjo6Y2FuRGVsZXRl
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1f
ZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIHJldHVybiBtX29yaWdpbnNCZWluZ0RlbGV0
ZWQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7
CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0RlbGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBpZiAo
IW1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+aXNFbXB0eSgpKQorICAgICAgICBtX29yaWdpbnNCZWlu
Z0RlbGV0ZWQtPnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6b3JpZ2luRmlsZVBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBBU1NF
UlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIAorICAgIG9wZW5UcmFja2VyRGF0
YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlmICghc3RhdGVtZW50LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBsaXN0IHBhdGhzLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgcGF0aHMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25l
KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGFsbCBvcmlnaW4gcGF0aHMgZnJv
bSBkYXRhYmFzZS4iKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3Jh
Z2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9Cisg
ICAgCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTdG9yYWdlVHJhY2tlcl9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyX2gKKworI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKyAgICAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExv
Y2FsU3RvcmFnZVRocmVhZDsKK2NsYXNzIExvY2FsU3RvcmFnZVRhc2s7CitjbGFzcyBTZWN1cml0
eU9yaWdpbjsKKworY2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnQ7ICAgIAorICAgIAorY2xhc3Mg
U3RvcmFnZVRyYWNrZXIgeworICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOworICAgIHN0YXRpYyBTdG9y
YWdlVHJhY2tlciYgdHJhY2tlcigpOworICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlVGFzayh2b2lk
Kik7CisgICAgCisgICAgLy8gVE9ETzogRGF0YSBtaWdyYXRpb24KKyAgICAKKyAgICB2b2lkIGlt
cG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBzZXRPcmlnaW5EZXRhaWxzKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpOwor
ICAgIAorICAgIHZvaWQgZGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQgZGVsZXRlT3JpZ2lu
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pOworICAgIHZvaWQgZGVsZXRlT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCk7CisKKyAgICB2b2lkIGNhbmNlbERlbGV0aW5nT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgCisgICAgdm9pZCBzZXRD
bGllbnQoU3RvcmFnZVRyYWNrZXJDbGllbnQqKTsKKyAgICAKKyAgICAvLyBTeW5jIHRvIGRpc2sg
b24gYmFja2dyb3VuZCB0aHJlYWQuCisgICAgdm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOwor
ICAgIHZvaWQgc3luY0RlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
OworICAgIHZvaWQgc3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0
T3JpZ2luSWRlbnRpZmllcnMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tlcihjb25z
dCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNl
UGF0aCgpIGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlm
RG9lc05vdEV4aXN0KTsKKyAgICAKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICB2b2lkIGRlbGV0ZVRyYWNrZXJGaWxlcygpOworICAg
IAorICAgIGJvb2wgY2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cik7CisgICAgdm9pZCB3aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCB3aWxsRGVsZXRlQWxsT3JpZ2lucygpOworICAgIAorICAgIHZvaWQg
b3JpZ2luRmlsZVBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CisgICAgCisgICAgTXV0ZXgg
bV9kYXRhYmFzZUd1YXJkOworICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CisKKyAgICBT
dHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKKworICAgIFN0b3JhZ2VUcmFja2VyQ2xpZW50
KiBtX2NsaWVudDsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nPiBPcmlnaW5TZXQ7
CisKKyAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCBhbiBvd25wdHIgaGVyZT8KKyAgICBPd25QdHI8
T3JpZ2luU2V0PiBtX29yaWdpblNldDsKKyAgICAKKyAgICBPd25QdHI8T3JpZ2luU2V0PiBtX29y
aWdpbnNCZWluZ0RlbGV0ZWQ7CisgICAgCisgICAgT3duUHRyPExvY2FsU3RvcmFnZVRocmVhZD4g
bV90aHJlYWQ7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKERPTV9TVE9SQUdFKQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJfaApJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgiCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm
IFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKyNkZWZpbmUgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
ICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworICAgIAorICAgIGNsYXNzIFN0b3JhZ2VUcmFja2Vy
Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflN0b3JhZ2VUcmFja2VyQ2xp
ZW50KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpID0gMDsKKyAgICB9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJDbGllbnRfaApJbmRl
eDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc3NTc3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wMi0wMyAgQW50b24gRCdBdXJpYSAg
PGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEp
CisKKyAgICAgICAgKiBTdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQ6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTEtMDEtMjMgIE1hcmsgUm93ZSAg
PG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3ctdXAgdG8gcjc2NDc3LgpJbmRleDog
U291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQJKHJldmlzaW9uIDc3NTI0
KQorKysgU291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5Miw2ICs0OTIsNyBAQAogIldlYlNlY3VyaXR5T3JpZ2luIgogIldlYlNlcmlh
bGl6ZWRKU1ZhbHVlIgogIldlYlNpdGVVUkxUb0ljb25VUkxLZXkiCisiV2ViU3RvcmFnZU1hbmFn
ZXIiCiAiV2ViU3ViZnJhbWVBcmNoaXZlcyIKICJXZWJTdWJyZXNvdXJjZXMiCiAiV2ViVGV4dFJl
bmRlcmVyIgpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA3NzUyNCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDkgQEAKIAkJ
MzdCNkZCNEYxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdCNkZCNEQxMDYzNTMw
QzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tICovOyB9OwogCQkzN0QxRENBODEw
NjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E2MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BE
RkRvYy5oICovOyB9OwogCQkzN0QxRENBOTEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2Mu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENB
NzEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gKi87IH07CisJCTNBQjAyQUY2MTJD
MTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBX
ZWJTdG9yYWdlTWFuYWdlci5tbSAqLzsgfTsKKwkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8q
IFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VN
YW5hZ2VyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTNBRTE1RDUwMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlcklu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
QUUxNUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICov
OyB9OwogCQk0MUY0NDg0RjEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjQ0ODREMTAz
MzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAv
KiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxRjQ0ODRFMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0
ZS5tbSAqLzsgfTsKIAkJNDRCQjhCMTQxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRC
QjhCMTMxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5oICovOyB9OwpAQCAt
NDgyLDYgKzQ4NSw5IEBACiAJCTM5NDQ2MDdFMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJCYWNrRm9y
d2FyZExpc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJCYWNrRm9yd2FyZExpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA3RjAyMEY1MEVEMEVD
QTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDgwMDIwRjUwRUQw
RUNBMTc2NyAvKiBXZWJIaXN0b3J5SXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhpc3RvcnlJdGVtLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJM0FCMDJB
RjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9y
YWdlTWFuYWdlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
U3RvcmFnZU1hbmFnZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNB
RTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEQxMDMzOEU4QzAwMzBFNTVF
IC8qIFdlYldvcmtlcnNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYldvcmtlcnNQcml2YXRlLmg7IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3JrZXJzUHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY0NDg0RTEwMzM4RThDMDAzMEU1
NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXZWJXb3JrZXJzUHJpdmF0ZS5tbTsgcGF0aCA9IG1hYy9Xb3JrZXJzL1dlYldv
cmtlcnNQcml2YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDkwOThCOTBG
OEY4MkRGMDA3NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDU1LDYgKzEwNjEsOSBAQAogCQkJCUE1REVGQzBFMTFENTM0M0Uw
MDg4NTI3MyAvKiBXZWJEYXRhYmFzZVF1b3RhTWFuYWdlci5tbSAqLywKIAkJCQk1MTFGM0ZEMzBD
RUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJNTEx
RjNGRDQwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbSAqLywK
KwkJCQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8s
CisJCQkJM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0
ZS5oICovLAorCQkJCTNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdl
ckludGVybmFsLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFN0b3JhZ2U7CiAJCQlwYXRoID0gbWFj
L1N0b3JhZ2U7CkBAIC0xNjI0LDcgKzE2MzMsOSBAQAogCQkJCTU5OEFEOTJBMTIwMUNGM0IwMEFC
QUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9ja0ludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1OThBREE0NjEyMDIyNzUwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50
YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFMkExQTQxMjNCMEIzQzAwOUZF
MTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FCMDJCMDAx
MkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0RBNjJBRTIxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUUxNUQ1MDEyREJERUQ0MDA5MzIzQzggLyogV2Vi
U3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xOTkyLDYgKzIwMDMs
NyBAQAogCQkJCTU5OEFEOTIyMTIwMUNGMTAwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlv
bi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5OEFEOTI4MTIwMUNGMzIwMEFCQUU0RSAvKiBXZWJE
ZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTJB
MUE1MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQkzQUIwMkFGNjEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQlDREE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc3NTc3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTEtMDItMDMgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAgICAgQWRk
IFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAgICAgICAg
KiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKCtbV2ViU3Rv
cmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViU3Rv
cmFnZU1hbmFnZXIgb3JpZ2luc10pOiBSZXR1cm5zIGFycmF5IG9mIG9yaWdpbnMgd2l0aCBMb2Nh
bFN0b3JhZ2UuCisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZUFsbE9yaWdpbnNd
KTogRGVsZXRlcyBiYWNraW5nIGRicyBhbmQgY2xlYXJzIFN0b3JhZ2VBcmVhcyBvZiBhbGwgb3Jp
Z2lucy4KKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgZGVsZXRlT3JpZ2luOl0pOgorICAg
ICAgICAoc3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViS2l0SW5pdGlhbGl6ZVN0
b3JhZ2VJZk5lY2Vzc2FyeSk6IExvYWRzIGludG8gbWVtb3J5IHNldCBvZiBvcmlnaW5zIHdpdGgg
TG9jYWxTdG9yYWdlLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5h
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbToK
KyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gZGF0YWJhc2VJZGVudGlmaWVyXSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg6CisgICAgICAg
ICogV2ViS2l0LmV4cDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgt
W1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6dXNl
c0RvY3VtZW50Vmlld3M6XSk6IEluaXRpYWxpemVzIFN0b3JhZ2VUcmFja2VyLgorCiAyMDExLTAy
LTAzICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCShyZXZpc2lvbiA3NzUyNCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3
IEBACiAub2JqY19jbGFzc19uYW1lX1dlYkNvcmVTdGF0aXN0aWNzCiAub2JqY19jbGFzc19uYW1l
X1dlYkRhdGFTb3VyY2UKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0YWJhc2VNYW5hZ2VyCisub2Jq
Y19jbGFzc19uYW1lX1dlYlN0b3JhZ2VNYW5hZ2VyCiAub2JqY19jbGFzc19uYW1lX1dlYkRlZmF1
bHRQb2xpY3lEZWxlZ2F0ZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRhdGlvbgog
Lm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jawpAQCAtMTE0
LDYgKzExNSw3IEBAIF9XZWJSZXBvcnRFcnJvcgogX1dlYlNjcmlwdEVycm9yRGVzY3JpcHRpb25L
ZXkKIF9XZWJTY3JpcHRFcnJvckRvbWFpbgogX1dlYlNjcmlwdEVycm9yTGluZU51bWJlcktleQor
X1dlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleQogX1dlYlVSTE5hbWVQYm9hcmRUeXBlCiBf
V2ViVVJMUGJvYXJkVHlwZQogX1dlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXIubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCIKKworI2lt
cG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdl
VHJhY2tlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTlNTdHJpbmcgKldlYlN0
b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleSA9IEAiV2ViS2l0TG9jYWxTdG9yYWdlRGF0YWJhc2VQ
YXRoUHJlZmVyZW5jZUtleSI7CisKK3N0YXRpYyBOU1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeVBh
dGgoKTsKKworQGltcGxlbWVudGF0aW9uIFdlYlN0b3JhZ2VNYW5hZ2VyCisKKysgKFdlYlN0b3Jh
Z2VNYW5hZ2VyICopc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXIKK3sKKyAgICBzdGF0aWMgV2ViU3Rv
cmFnZU1hbmFnZXIgKnNoYXJlZE1hbmFnZXIgPSBbW1dlYlN0b3JhZ2VNYW5hZ2VyIGFsbG9jXSBp
bml0XTsKKyAgICByZXR1cm4gc2hhcmVkTWFuYWdlcjsKK30KKworLSAoTlNBcnJheSAqKW9yaWdp
bnMKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IGNvcmVPcmlnaW5zOwor
CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKGNvcmVPcmlnaW5zKTsKKwor
ICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpjb3JlT3JpZ2lucy5zaXplKCldOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlNlY3Vy
aXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdp
dGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46Y29yZU9yaWdpbnNbaV0uZ2V0KCldOworICAgICAgICBb
d2ViT3JpZ2lucyBhZGRPYmplY3Q6d2ViT3JpZ2luXTsKKyAgICAgICAgW3dlYk9yaWdpbiByZWxl
YXNlXTsKKyAgICB9CisKKyAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworfQor
CistICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnMKK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLmRlbGV0ZUFsbE9yaWdpbnMoKTsKK30KKworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNl
Y3VyaXR5T3JpZ2luICopb3JpZ2luCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5k
ZWxldGVPcmlnaW4oW29yaWdpbiBfY29yZV0pOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnN0b3Jh
Z2VEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIE5TU3RyaW5nICpzdG9yYWdl
RGlyZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVm
YXVsdHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVjdG9yeSB8fCAhW3N0b3JhZ2VEaXJlY3Rv
cnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgc3RvcmFnZURpcmVj
dG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0b3JhZ2UiOworICAgIAorICAgIHJldHVy
biBbc3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKK30KKwordm9p
ZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgQk9P
TCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihzdG9yYWdlRGly
ZWN0b3J5UGF0aCgpKTsKKyAgICAKKyAgICBpbml0aWFsaXplZCA9IFlFUzsKK30KKworQGVuZApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFu
YWdlckludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeSgpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3Jh
Z2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNTdHJpbmcgKldlYlN0b3JhZ2VE
aXJlY3RvcnlEZWZhdWx0c0tleTsKKworQGNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOworCitAaW50
ZXJmYWNlIFdlYlN0b3JhZ2VNYW5hZ2VyIDogTlNPYmplY3QKKworKyAoV2ViU3RvcmFnZU1hbmFn
ZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcjsKKworLy8gUmV0dXJucyBhbiBhcnJheSBvZiBX
ZWJTZWN1cml0eU9yaWdpbiBvYmplY3RzIHRoYXQgaGF2ZSBMb2NhbFN0b3JhZ2UuCistIChOU0Fy
cmF5ICopb3JpZ2luczsKKworLSAodm9pZClkZWxldGVBbGxPcmlnaW5zOworLSAodm9pZClkZWxl
dGVPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICopb3JpZ2luOworCitAZW5kCisKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3Jp
Z2luLm1tCShyZXZpc2lvbiA3NzUyNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYlNlY3VyaXR5T3JpZ2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBA
QCAtIChOU1N0cmluZyopaG9zdAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlY3VyaXR5
T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAKKy0gKE5TU3RyaW5nKilkYXRhYmFzZUlk
ZW50aWZpZXIKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+
KF9wcml2YXRlKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Cit9CisKIC8vIERlcHJlY2F0ZWQuIFVz
ZSBob3N0IGluc3RlYWQuIFRoaXMgbmVlZHMgdG8gc3RheSBoZXJlIHVudGlsIHdlIHNoaXAgYSBu
ZXcgU2FmYXJpLgogLSAoTlNTdHJpbmcqKWRvbWFpbgogewpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2
YXRlLmgJKHJldmlzaW9uIDc3NTI0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDggQEAgQGludGVyZmFjZSBXZWJTZWN1cml0eU9yaWdpbiA6IE5TT2JqZWN0IAogLSAoTlNTdHJp
bmcqKXByb3RvY29sOwogLSAoTlNTdHJpbmcqKWhvc3Q7CiAKKy0gKE5TU3RyaW5nKilkYXRhYmFz
ZUlkZW50aWZpZXI7CisKIC8vIFJldHVybnMgemVybyBpZiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVs
dCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJvIG90aGVyd2lzZS4KIC0gKHVuc2lnbmVk
IHNob3J0KXBvcnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJl
dmlzaW9uIDc3NTI0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBACiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCiAjaW1wb3J0ICJX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwu
aCIKICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2Vi
VGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCkBAIC02ODksNiArNjkw
LDEwIEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiBFTkFC
TEUoREFUQUJBU0UpCiAgICAgICAgIFdlYktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2Fy
eSgpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdElu
aXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0
aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1h
aWxSZW1vdmVBdHRyaWJ1dGVzTWV0aG9kKCk7CiAgICAgICAgIAo=
</data>
<flag name="review"
          id="72714"
          type_id="1"
          status="-"
          setter="jorlow"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83594</attachid>
            <date>2011-02-23 18:15:53 -0800</date>
            <delta_ts>2011-02-24 20:20:52 -0800</delta_ts>
            <desc>[PATCH] recovery from out-of-sync db, StorageTrackerClient</desc>
            <filename>storage_tracker_noLayoutTests_cleanup3.diff</filename>
            <type>text/plain</type>
            <size>78896</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNzk0NjUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxMSBAQAogCQkzN0I2RkI0
RjEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0I2RkI0RDEwNjM1MzBDMDAwRkRC
M0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gKi87IH07CiAJCTM3RDFEQ0E4MTA2NTkyOEMw
MDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdEMURDQTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmgg
Ki87IH07CiAJCTM3RDFEQ0E5MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E3MTA2NTky
OEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSAqLzsgfTsKKwkJM0FCMDJBRjYxMkMxMzE5QjAw
RkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3Jh
Z2VNYW5hZ2VyLm1tICovOyB9OworCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3Rv
cmFnZU1hbmFnZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJM0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJCM0M3ODEz
MDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsKKwkJM0FC
QjNDN0IxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzkxMzA5QzNC
NTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovOyB9OworCQkzQUUxNUQ1
MDEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FFMTVENEYxMkRCREVENDAw
OTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLzsgfTsKIAkJNDFGNDQ4NEYx
MDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUgLyog
V2ViV29ya2Vyc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0MUY0NDg1MDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZh
dGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY0
NDg0RTEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi87IH07CiAJCTQ0
QkI4QjE0MTI0MUEwMjIwMDFFM0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QkI4QjEzMTI0MUEwMjIwMDFF
M0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTQ4Miw2ICs0ODcsMTEgQEAK
IAkJMzk0NDYwN0UwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkJhY2tGb3J3YXJkTGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDdGMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0
b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJIaXN0b3J5SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhp
c3RvcnlJdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2
OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlclBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCQjNDNzgxMzA5QzNCNTAw
RTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTNBQkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUUx
NUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjQ0ODREMTAzMzhFOEMwMDMwRTU1RSAv
KiBXZWJXb3JrZXJzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJXb3JrZXJzUHJpdmF0ZS5oOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vyc1ByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEUxMDMzOEU4QzAwMzBFNTVF
IC8qIFdlYldvcmtlcnNQcml2YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV2ViV29ya2Vyc1ByaXZhdGUubW07IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3Jr
ZXJzUHJpdmF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk4QjkwRjhG
ODJERjAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTA1NSw2ICsxMDY1LDExIEBACiAJCQkJQTVERUZDMEUxMUQ1MzQzRTAw
ODg1MjczIC8qIFdlYkRhdGFiYXNlUXVvdGFNYW5hZ2VyLm1tICovLAogCQkJCTUxMUYzRkQzMENF
Q0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKIAkJCQk1MTFG
M0ZENDBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovLAor
CQkJCTNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLywK
KwkJCQkzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRl
LmggKi8sCisJCQkJM0FFMTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2Vy
SW50ZXJuYWwuaCAqLywKKwkJCQkzQUJCM0M3ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQuaCAqLywKKwkJCQkzQUJCM0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFN0b3JhZ2U7CiAJ
CQlwYXRoID0gbWFjL1N0b3JhZ2U7CkBAIC0xNjI0LDcgKzE2MzksMTAgQEAKIAkJCQk1OThBRDky
QTEyMDFDRjNCMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2tJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk4QURBNDYxMjAyMjc1MDAwQUJBRTRFIC8qIFdl
YkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTJBMUE0
MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTNBQjAyQjAwMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FFMTVENTAxMkRCREVENDAw
OTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTNBQkIzQzdBMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xOTkyLDcgKzIwMTAsOSBAQAogCQkJCTU5OEFEOTIyMTIwMUNGMTAw
MEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5
OEFEOTI4MTIwMUNGMzIwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9j
ay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTJBMUE1MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJE
YXNoYm9hcmRSZWdpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQUIwMkFGNjEyQzEzMTlCMDBG
QkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREE2MkFF
MzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNl
cyAqLywKKwkJCQkzQUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCShyZXZpc2lvbiA3OTQ2NSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0Myw5IEBACiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IGNvcHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFs
IHZvaWQgdW5sb2NrKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVs
ZXRpb24oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5z
Rm9yRGVsZXRpb24oKTsKIAogcHJpdmF0ZToKICAgICBPd25QdHI8V2ViS2l0OjpXZWJTdG9yYWdl
TmFtZXNwYWNlPiBtX3N0b3JhZ2VOYW1lc3BhY2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHJldmlzaW9uIDc5
NDY1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTYgQEAKICAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgogfQogCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JE
ZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JE
ZWxldGlvbigpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5NDk4KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMi0y
MyAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQg
ZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBTdHVicyBmb3IgQ2hyb21pdW0gYnVpbGQu
CisKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0Zv
ckRlbGV0aW9uKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5Lmg6CisKIDIw
MTEtMDItMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gNzk0OTgpCisrKyBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisy
MDExLTAyLTIzICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisgICAgICAgIEFkZCBXZWJLaXQxIEFQSSB0byB2
aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorCisgICAgICAgICogU3RyaW5nc05vdFRvQmVM
b2NhbGl6ZWQudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCiAyMDExLTAyLTIyICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291
cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQJKHJldmlzaW9uIDc5NDY1KQor
KysgU291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5Miw2ICs0OTIsOCBAQAogIldlYlNlY3VyaXR5T3JpZ2luIgogIldlYlNlcmlhbGl6
ZWRKU1ZhbHVlIgogIldlYlNpdGVVUkxUb0ljb25VUkxLZXkiCisiV2ViU3RvcmFnZU1hbmFnZXIi
CisiV2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiIKICJXZWJTdWJmcmFtZUFy
Y2hpdmVzIgogIldlYlN1YnJlc291cmNlcyIKICJXZWJUZXh0UmVuZGVyZXIiCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYktpdC5leHAJKHJldmlzaW9uIDc5NDY1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViS2l0
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKIC5vYmpjX2NsYXNzX25hbWVfV2Vi
Q29yZVN0YXRpc3RpY3MKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0YVNvdXJjZQogLm9iamNfY2xh
c3NfbmFtZV9XZWJEYXRhYmFzZU1hbmFnZXIKKy5vYmpjX2NsYXNzX25hbWVfV2ViU3RvcmFnZU1h
bmFnZXIKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGVmYXVsdFBvbGljeURlbGVnYXRlCiAub2JqY19j
bGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmlj
ZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrCkBAIC0xMTQsNiArMTE1LDggQEAKIF9XZWJTY3JpcHRF
cnJvckRlc2NyaXB0aW9uS2V5CiBfV2ViU2NyaXB0RXJyb3JEb21haW4KIF9XZWJTY3JpcHRFcnJv
ckxpbmVOdW1iZXJLZXkKK19XZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkKK19XZWJTdG9y
YWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uCiBfV2ViVVJMTmFtZVBib2FyZFR5cGUKIF9X
ZWJVUkxQYm9hcmRUeXBlCiBfV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbgpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJp
dHlPcmlnaW4ubW0JKHJldmlzaW9uIDc5NDY1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYx
LDExIEBACiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJp
dmF0ZSktPmhvc3QoKTsKIH0KIAorLSAoTlNTdHJpbmcqKWRhdGFiYXNlSWRlbnRpZmllcgorewor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5k
YXRhYmFzZUlkZW50aWZpZXIoKTsKK30KKwogLy8gRGVwcmVjYXRlZC4gVXNlIGhvc3QgaW5zdGVh
ZC4gVGhpcyBuZWVkcyB0byBzdGF5IGhlcmUgdW50aWwgd2Ugc2hpcCBhIG5ldyBTYWZhcmkuCiAt
IChOU1N0cmluZyopZG9tYWluCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkocmV2aXNp
b24gNzk0NjUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0
eU9yaWdpblByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogLSAoTlNT
dHJpbmcqKXByb3RvY29sOwogLSAoTlNTdHJpbmcqKWhvc3Q7CiAKKy0gKE5TU3RyaW5nKilkYXRh
YmFzZUlkZW50aWZpZXI7CisKIC8vIFJldHVybnMgemVybyBpZiB0aGUgcG9ydCBpcyB0aGUgZGVm
YXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJvIG90aGVyd2lzZS4KIC0gKHVuc2ln
bmVkIHNob3J0KXBvcnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5NDk4KQor
KysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzYgQEAKKzIwMTEtMDItMjMgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAgICAgQWRkIFdlYktpdDEg
QVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAgICAgICAgQWRkZWQgQVBJ
IHRvIGFjY2VzcyBTdG9yYWdlVHJhY2tlci4gQWRkZWQgU3RvcmFnZVRyYWNrZXJDbGllbnQgaW1w
bGVtZW50YXRpb24gdGhhdAorICAgICAgICBzZW5kcyBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlv
bnMuCisKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOiBBZGRlZC4KKyAg
ICAgICAgKCtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdKToKKyAg
ICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgb3JpZ2luc10pOgorICAgICAgICAoLVtXZWJTdG9y
YWdlTWFuYWdlciBkZWxldGVBbGxPcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5h
Z2VyIGRlbGV0ZU9yaWdpbjpdKToKKyAgICAgICAgKHN0b3JhZ2VEaXJlY3RvcnlQYXRoKToKKyAg
ICAgICAgKFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFN0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBTdG9y
YWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBTdG9yYWdl
L1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQubW06IEFkZGVkLgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQ6OnNoYXJlZFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50OjpXZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6fldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAgICAg
ICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdpbk9uTWFp
blRocmVhZCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRN
b2RpZnlPcmlnaW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2lu
Lm1tOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBkYXRhYmFzZUlkZW50aWZpZXJdKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaDoKKyAg
ICAgICAgKiBXZWJLaXQuZXhwOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAg
ICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFt
ZTp1c2VzRG9jdW1lbnRWaWV3czpdKTogSW5pdGlhbGl6ZSBTdG9yYWdlVHJhY2tlcgorCiAyMDEx
LTAyLTIyICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2Vy
SW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCit2b2lkIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZO
ZWNlc3NhcnkoKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
U3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
CisKKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUv
U3RvcmFnZVRyYWNrZXJDbGllbnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2Ns
YXNzIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQq
IHNoYXJlZFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0
Y2hEaWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCk7CisgICAgCisgICAg
dmlydHVhbCB+V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4pOworcHJpdmF0ZToKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworfTsK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5h
Z2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFn
ZU1hbmFnZXIubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV2Vi
U3RvcmFnZU1hbmFnZXJQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlckludGVy
bmFsLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorCisjaW1wb3J0IDxX
ZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2Vy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitOU1N0cmluZyAqV2ViU3RvcmFnZURp
cmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGhQcmVm
ZXJlbmNlS2V5IjsKK05TU3RyaW5nICpXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0
aW9uID0gQCJXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uIjsKKworc3RhdGlj
IE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpOworCitAaW1wbGVtZW50YXRpb24gV2Vi
U3RvcmFnZU1hbmFnZXIKKworKyAoV2ViU3RvcmFnZU1hbmFnZXIgKilzaGFyZWRXZWJTdG9yYWdl
TWFuYWdlcgoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlTWFuYWdlciAqc2hhcmVkTWFuYWdlciA9
IFtbV2ViU3RvcmFnZU1hbmFnZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzaGFyZWRNYW5h
Z2VyOworfQorCistIChOU0FycmF5ICopb3JpZ2lucworeworICAgIFZlY3RvcjxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+ID4gY29yZU9yaWdpbnM7CisKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLm9yaWdpbnMoY29yZU9yaWdpbnMpOworCisgICAgTlNNdXRhYmxlQXJyYXkgKndlYk9yaWdp
bnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvcmVPcmlnaW5z
LnNpemUoKV07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29yZU9yaWdpbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViU2VjdXJpdHlPcmlnaW4gKndlYk9yaWdpbiA9IFtbV2Vi
U2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpjb3Jl
T3JpZ2luc1tpXS5nZXQoKV07CisgICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmln
aW5dOworICAgICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOworICAgIH0KKworICAgIHJldHVybiBb
d2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpZGVsZXRlQWxsT3JpZ2lucwor
eworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsT3JpZ2lucygpOworfQor
CistICh2b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KK3sKKyAg
ICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihbb3JpZ2luIF9jb3JlXSk7
Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeVBhdGgoKQoreworICAgIE5T
VXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZh
dWx0c107CisgICAgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnkgPSBbZGVmYXVsdHMgb2JqZWN0
Rm9yS2V5OldlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleV07CisgICAgaWYgKCFzdG9yYWdl
RGlyZWN0b3J5IHx8ICFbc3RvcmFnZURpcmVjdG9yeSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKQorICAgICAgICBzdG9yYWdlRGlyZWN0b3J5ID0gQCJ+L0xpYnJhcnkvV2ViS2l0L0xv
Y2FsU3RvcmFnZSI7CisgICAgCisgICAgcmV0dXJuIFtzdG9yYWdlRGlyZWN0b3J5IHN0cmluZ0J5
U3RhbmRhcmRpemluZ1BhdGhdOworfQorCit2b2lkIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZO
ZWNlc3NhcnkoKQoreworICAgIHN0YXRpYyBCT09MIGluaXRpYWxpemVkID0gTk87CisgICAgaWYg
KGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RvcmFnZVRyYWNrZXI6
OmluaXRpYWxpemVUcmFja2VyKHN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkpOworICAgIAorICAgIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc2V0Q2xpZW50KFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
OjpzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpKTsKKyAgICAKKyAgICBpbml0aWFsaXpl
ZCA9IFlFUzsKK30KKworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlVHJhY2tlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9T
dG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5h
bC5oIgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1TdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQoKQoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCog
c2hhcmVkQ2xpZW50ID0gbmV3IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgcmV0dXJu
IHNoYXJlZENsaWVudDsKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VU
cmFja2VyQ2xpZW50KCkKK3sKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9y
YWdlVHJhY2tlckNsaWVudCgpCit7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6
OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6
c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4o
c3RhdGljX2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IG9yaWdpbikKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+
IHdlYlNlY3VyaXR5T3JpZ2luKEFkb3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9p
bml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKyAgICAKKyAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1l
OldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDp3ZWJTZWN1cml0
eU9yaWdpbi5nZXQoKV07Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAg
ICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAKKyAgICBp
ZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZGlzcGF0Y2hE
aWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJlYWQsIHN0YXRpY19jYXN0PHZvaWQqPihvcmlnaW4ubGVh
a1JlZigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaXNwYXRjaERpZE1vZGlm
eU9yaWdpbihvcmlnaW4pOworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNTdHJp
bmcgKldlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleTsKK2V4dGVybiBOU1N0cmluZyAqV2Vi
U3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbjsKKworQGNsYXNzIFdlYlNlY3VyaXR5
T3JpZ2luOworCitAaW50ZXJmYWNlIFdlYlN0b3JhZ2VNYW5hZ2VyIDogTlNPYmplY3QKKworKyAo
V2ViU3RvcmFnZU1hbmFnZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcjsKKworLy8gUmV0dXJu
cyBhbiBhcnJheSBvZiBXZWJTZWN1cml0eU9yaWdpbiBvYmplY3RzIHRoYXQgaGF2ZSBMb2NhbFN0
b3JhZ2UuCistIChOU0FycmF5ICopb3JpZ2luczsKKworLSAodm9pZClkZWxldGVBbGxPcmlnaW5z
OworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICopb3JpZ2luOworCitA
ZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDc5
NDY1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw2ICs5OCw3IEBACiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgi
CiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1J
bnRlcmZhY2UuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCIKICNpbXBv
cnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVGV4dEl0ZXJh
dG9yLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCkBAIC02ODcsNiArNjg4LDEwIEBACiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBXZWJLaXRJbml0aWFsaXplRGF0YWJhc2VzSWZO
ZWNlc3NhcnkoKTsKICNlbmRpZgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgICAgICBX
ZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7CisjZW5kaWYKICAgICAgICAgV2Vi
S2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQYXRoSWZOZWNlc3NhcnkoKTsKICAgICAgICAg
cGF0Y2hNYWlsUmVtb3ZlQXR0cmlidXRlc01ldGhvZCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA3OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc3LDYgKzEwNzcsMTIgQEAKIF9fWk5LN1dlYkNv
cmUxNFNlY3VyaXR5T3JpZ2luMTBjYW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3Jl
MTRTZWN1cml0eU9yaWdpbjE4ZGF0YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNl
Y3VyaXR5T3JpZ2luNWVxdWFsRVBLUzBfCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMTdp
bml0aWFsaXplVHJhY2tlckVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRy
YWNrZXIxNmRlbGV0ZUFsbE9yaWdpbnNFdgorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjEy
ZGVsZXRlT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTRTdG9yYWdl
VHJhY2tlcjd0cmFja2VyRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3b3JpZ2luc0VS
TjNXVEY2VmVjdG9ySU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVMbTBFRUUKK19f
Wk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI5c2V0Q2xpZW50RVBOU18yMFN0b3JhZ2VUcmFja2Vy
Q2xpZW50RQogX19aTks3V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMThmb2N1c2VkT3JNYWluRnJh
bWVFdgogX19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVwbGF0Zm9ybUNvbnRleHRFdgog
X19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTZwYWludGluZ0Rpc2FibGVkRXYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDc5
NDY1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDIyIEBACiAjZW5kaWYKIH0KIAordm9pZCBTdG9yYWdl
QXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBpZiAo
bV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3Rv
cmFnZU1hcC0+cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3Jl
YXRlKHF1b3RhKTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKKyAgICAg
ICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKwogdm9pZCBTdG9y
YWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0CiB7CiAgICAgaWYg
KG1fc3RvcmFnZUFyZWFTeW5jKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisgCisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKyNkZWZpbmUgU3Rv
cmFnZVRyYWNrZXJDbGllbnRfaAorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+U3RvcmFnZVRyYWNrZXJDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9yYWdlVHJh
Y2tlckNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwCShyZXZpc2lvbiA3OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNp
bmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIApAQCAtMTM4LDYgKzEzOSwyNSBAQAogICAgIH0KIH0KIAordm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQoIW1fZmluYWxTeW5jU2NoZWR1bGVkKTsKKworICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zeW5jQ2xvc2VEYXRhYmFz
ZSA9IHRydWU7CisgICAgCisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAg
ICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8g
ZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCisgICAgICAgIC8vIHN5bmNUaW1lckZpcmVk
IGZ1bmN0aW9uLgorICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICB9Cit9
CisKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJl
YVN5bmM+KikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMjIyLDYgKzI0Miwx
MCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gQSBTdG9yYWdlVHJhY2tlciB0
aHJlYWQgbWF5IGhhdmUgYmVlbiBzY2hlZHVsZWQgdG8gZGVsZXRlIHRoZSBkYiB3ZSdyZQorICAg
IC8vIHJlb3BlbmluZywgc28gY2FuY2VsIHBvc3NpYmxlIGRlbGV0aW9uLgorICAgIFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuY2FuY2VsRGVsZXRpbmdPcmlnaW4obV9kYXRhYmFzZUlkZW50aWZp
ZXIpOworCiAgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VGaWxlbmFtZSkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBmaWxlICVzIGZvciBsb2Nh
bCBzdG9yYWdlIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbWFy
a0ltcG9ydGVkKCk7CkBAIC0yMzUsNiArMjU5LDggQEAKICAgICAgICAgbV9kYXRhYmFzZU9wZW5G
YWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgU3RvcmFnZVRyYWNr
ZXI6OnRyYWNrZXIoKS5zZXRPcmlnaW5EZXRhaWxzKG1fZGF0YWJhc2VJZGVudGlmaWVyLCBkYXRh
YmFzZUZpbGVuYW1lKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQo
KQpAQCAtMzE4LDcgKzM0NCw3IEBACiAgICAgICAgIG9wZW5EYXRhYmFzZShDcmVhdGVJZk5vbkV4
aXN0ZW50KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsK
LQorICAgIAogICAgIC8vIElmIHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBh
bGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAgaWYgKGNs
ZWFySXRlbXMpIHsKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKQEAgLTMzMyw3ICszNTksMTYgQEAKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KLQorICAgIAorICAgIC8vIENsb3NpbmcgdGhpcyBk
YiBiZWNhdXNlIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQgYnkgU3RvcmFnZVRyYWNrZXIuCisg
ICAgLy8gVGhlIGRlbGV0ZSB3aWxsIGJlIGNhbmNlbGxlZCBpZiBTdG9yYWdlQXJlYVN5bmMgbmVl
ZHMgdG8gcmVvcGVuIHRoZSBkYgorICAgIC8vIHRvIHdyaXRlIG5ldyBpdGVtcyBjcmVhdGVkIGFm
dGVyIHRoZSByZXF1ZXN0IHRvIGRlbGV0ZSB0aGUgZGIuCisgICAgaWYgKG1fc3luY0Nsb3NlRGF0
YWJhc2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IGZhbHNlOworICAgICAgICBt
X2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU1FM
aXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZB
TFVFUyAoPywgPykiKTsKICAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQg
LSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwpAQCAtNDIxLDkgKzQ1
Niw3IEBACiAgICAgaWYgKCFjb3VudCkgewogICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwogICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1l
ID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZp
ZXIpOwotICAgICAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShk
YXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0
ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihtX2RhdGFiYXNl
SWRlbnRpZmllcik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUcmFja2VyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VUcmFja2VyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmgJKHJldmlzaW9uIDc5NDY1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQAogCiAgICAg
ICAgIHZvaWQgc2NoZWR1bGVJdGVtRm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVDbGVhcigpOworICAgICAgICB2b2lk
IHNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFn
ZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CkBAIC05Miw2
ICs5Myw4IEBACiAgICAgICAgIGJvb2wgbV9zeW5jU2NoZWR1bGVkOwogICAgICAgICBib29sIG1f
c3luY0luUHJvZ3Jlc3M7CiAgICAgICAgIGJvb2wgbV9kYXRhYmFzZU9wZW5GYWlsZWQ7CisgICAg
ICAgIAorICAgICAgICBib29sIG1fc3luY0Nsb3NlRGF0YWJhc2U7CiAKICAgICAgICAgbXV0YWJs
ZSBNdXRleCBtX2ltcG9ydExvY2s7CiAgICAgICAgIG11dGFibGUgVGhyZWFkQ29uZGl0aW9uIG1f
aW1wb3J0Q29uZGl0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJh
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJh
Y2tlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VU
cmFja2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKKworI2luY2x1
ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZVRhc2suaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiU1FM
aXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdG9yYWdlVHJhY2tlciogc3RvcmFnZVRy
YWNrZXIgPSAwOworCit2b2lkIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihjb25z
dCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCghc3RvcmFnZVRyYWNrZXIpOwor
ICAgIGlmIChzdG9yYWdlVHJhY2tlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0b3Jh
Z2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKHN0b3JhZ2VQYXRoKTsKK30KKworU3RvcmFn
ZVRyYWNrZXImIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKK3sKKyAgICBpZiAoIXN0b3JhZ2VU
cmFja2VyKQorICAgICAgICBzdG9yYWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcigiIik7
CisgICAgCisgICAgcmV0dXJuICpzdG9yYWdlVHJhY2tlcjsKK30KKworU3RvcmFnZVRyYWNrZXI6
OlN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpCisgICAgOiBtX2NsaWVu
dCgwKQorICAgICwgbV90aHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKSkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAKKyAgICBzZXRTdG9yYWdlRGlyZWN0
b3J5UGF0aChzdG9yYWdlUGF0aCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0
ZXJTUUxpdGVWRlMoKTsKKyAgICAKKyAgICBtX3RocmVhZC0+c3RhcnQoKTsgIAorICAgIGltcG9y
dE9yaWdpbklkZW50aWZpZXJzKCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldFN0b3Jh
Z2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpOworICAgIAorICAgIG1fc3RvcmFnZURpcmVjdG9yeVBhdGggPSBwYXRoLnRocmVhZHNh
ZmVDb3B5KCk7Cit9CisKK1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0b3JhZ2VUcmFja2VyLmRi
Iik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBj
cmVhdGVJZkRvZXNOb3RFeGlzdCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworCisgICAgaWYgKG1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdHJpbmcgZGF0YWJhc2VQ
YXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOworICAgIAorICAgIGlmICghU1FMaXRlRmlsZVN5
c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2Vz
Tm90RXhpc3QpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLm9w
ZW4oZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRh
dGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGluZ0NoZWNr
cygpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiT3JpZ2lucyIpKSB7
CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIE9y
aWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCBwYXRoIFRFWFQp
OyIpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFi
bGUuIik7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmlnaW5JZGVu
dGlmaWVycygpCit7ICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fdGhyZWFkKTsKKyAKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZSht
X2RhdGFiYXNlR3VhcmQpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fb3JpZ2luU2V0KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9vcmlnaW5TZXQgPSBhZG9wdFB0
cihuZXcgT3JpZ2luU2V0KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdGhyZWFkKQorICAgICAg
ICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklk
ZW50aWZpZXJzSW1wb3J0KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0
T3JpZ2luSWRlbnRpZmllcnMoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
KworICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9N
IE9yaWdpbnMiKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50
LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
bnQgcmVzdWx0OworICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09
IFNRTFJlc3VsdFJvdykKKyAgICAgICAgICAgIG1fb3JpZ2luU2V0LT5hZGQoc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
cmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAgIH0KKyAgICAK
KyAgICBzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworICAgIAorICAgIGlmICht
X2NsaWVudCkgeworICAgICAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3Jp
Z2luU2V0LT5lbmQoKTsKKyAgICAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbigqaXQpOworICAgIH0KK30KKyAgICAKK3Zv
aWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZmlsZUV4dCwgKCIubG9jYWxz
dG9yYWdlIikpOworCisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHMgPSBsaXN0RGlyZWN0b3J5KG1f
c3RvcmFnZURpcmVjdG9yeVBhdGgsIGZpbGVFeHQpOworCisgICAgLy8gQWRkIG1pc3NpbmcgU3Rv
cmFnZVRyYWNrZXIgcmVjb3Jkcy4KKyAgICBPcmlnaW5TZXQgZm91bmRPcmlnaW5zOworICAgIGZv
ciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhdGggPSBwYXRocy5iZWdpbigpOyBw
YXRoICE9IHBhdGhzLmVuZCgpOyArK3BhdGgpIHsKKyAgICAgICAgaWYgKCgqcGF0aCkuZW5kc1dp
dGgoZmlsZUV4dCwgdHJ1ZSkgJiYgKCpwYXRoKS5sZW5ndGgoKSA+IGZpbGVFeHQubGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlID0gcGF0aEdldEZpbGVOYW1lKCpwYXRoKTsKKyAg
ICAgICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmcoMCwgZmls
ZS5sZW5ndGgoKSAtIGZpbGVFeHQubGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKCFtX29yaWdp
blNldC0+Y29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgc3luY1Nl
dE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllciwgKnBhdGgpOworCisgICAgICAgICAgICBm
b3VuZE9yaWdpbnMuYWRkKG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gRGVsZXRlIHN0YWxlIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAgZm9yIChPcmln
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7IGl0ICE9IG1f
b3JpZ2luU2V0LT5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoIWZvdW5kT3JpZ2lucy5jb250
YWlucygqaXQpKQorICAgICAgICAgICAgc3luY0RlbGV0ZU9yaWdpbigqaXQpOworICAgIH0KK30K
Kwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAg
IEFTU0VSVChtX29yaWdpblNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9vcmlnaW5TZXQt
PmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIExvY2FsU3RvcmFnZVRhc2sqIHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVT
ZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0YWJh
c2VGaWxlKS5sZWFrUHRyKCk7CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fdGhyZWFkKTsKKyAgICAgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICAgICAgbV90
aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNrKTsKKyAgICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAodm9pZCopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRy
YWNrZXI6OnNjaGVkdWxlVGFzayh2b2lkKiB0YXNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQpOwor
ICAgIAorICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkKQorICAgICAg
ICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkLT5zY2hlZHVsZVRhc2soKExvY2Fs
U3RvcmFnZVRhc2sqKXRhc2spOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3Jp
Z2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VGaWxlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0
ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisKKyAgICBvcGVuVHJhY2tl
ckRhdGFiYXNlKHRydWUpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMgKD8sID8pIik7CisgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmll
ci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAgICAKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2gg
b3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0
YSgpKTsKKworICAgIG1fb3JpZ2luU2V0LT5hZGQob3JpZ2luSWRlbnRpZmllci50aHJlYWRzYWZl
Q29weSgpKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNo
RGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFj
a2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NF
UlQobV9vcmlnaW5TZXQpOworICAgIAorICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIo
Kml0KSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZUFsbE9yaWdpbnMoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICBB
U1NFUlQobV9vcmlnaW5TZXQpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsK
KyAgICAgICAgbV9vcmlnaW5TZXQtPmNsZWFyKCk7CisgICAgfQorCisgICAgUGFnZUdyb3VwOjpj
bGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICBpZiAobV90aHJlYWQp
CisgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRl
RGVsZXRlQWxsT3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNE
ZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAK
KyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAg
ICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQu
c3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4o
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDEpKTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGll
bnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsK
KyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNl
LiIpOworICAgIAorICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBtX2RhdGFi
YXNlLmNsb3NlKCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VG
aWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllcikKK3sKKyAgICBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRh
YmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOworfQorCit2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sgICAgCisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAgIEFT
U0VSVChtX29yaWdpblNldCk7CisgICAgCisgICAgLy8gQmVmb3JlIGRlbGV0aW5nIGRhdGFiYXNl
LCB3ZSBuZWVkIHRvIGNsZWFyIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlIGRhdGEKKyAgICAvLyBp
biBTdG9yYWdlQXJlYSwgYW5kIHRvIGNsb3NlIHRoZSBTdG9yYWdlQXJlYSBkYi4gSXQncyBwb3Nz
aWJsZSBmb3IgYW4KKyAgICAvLyBpdGVtIHRvIGJlIGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIGNs
b3NpbmcgdGhlIGRiIGFuZCBjYXVzZSBTdG9yYWdlQXJlYVN5bmMKKyAgICAvLyB0byByZW9wZW4g
dGhlIGRiIGJlZm9yZSB0aGUgZGIgaXMgZGVsZXRlZCBieSBhIFN0b3JhZ2VUcmFja2VyIHRocmVh
ZC4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHJlb3BlbmluZyB0aGUgZGIgaW4gU3RvcmFnZUFyZWFT
eW5jIHdpbGwgY2FuY2VsIGEgcGVuZGluZworICAgIC8vIFN0b3JhZ2VUcmFja2VyIGRiIGRlbGV0
aW9uLgorICAgIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luKTsK
KworICAgIFN0cmluZyBvcmlnaW5JZCA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Cisg
ICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1
YXJkKTsKKyAgICAgICAgd2lsbERlbGV0ZU9yaWdpbihvcmlnaW5JZCk7CisgICAgICAgIG1fb3Jp
Z2luU2V0LT5yZW1vdmUob3JpZ2luSWQpOworICAgIH0KKyAgICAKKyAgICBpZiAobV90aHJlYWQp
CisgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRl
RGVsZXRlT3JpZ2luKG9yaWdpbklkKSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNE
ZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZSht
X2RhdGFiYXNlR3VhcmQpOworICAgIAorICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKG9yaWdpbklk
ZW50aWZpZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdGVkIHRvIGRlbGV0ZSBvcmln
aW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxuIiwgb3JpZ2luSWRlbnRpZmllci5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3BlblRy
YWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IG9yaWdpbidzIGRiIGZpbGUgcGF0aCwgZGVs
ZXRlIGVudHJ5IGluIHRyYWNrZXIncyBkYiwgdGhlbiBkZWxldGUgZGIgZmlsZS4KKyAgICBTUUxp
dGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBP
cmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgaWYgKHBhdGhTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
c2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGF0aFN0YXRlbWVudC5i
aW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRl
bWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gZmluZCBvcmlnaW4gJyVzJyBpbiBPcmlnaW5zIHRhYmxlIiwg
b3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgU3RyaW5nIHBhdGggPSBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7
CisKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJl
IG9yaWdpbj0/Iik7CisgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVz
dWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBv
ZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5J
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7
CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2Ygb3JpZ2lu
ICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBtX29yaWdpblNldC0+cmVtb3ZlKG9yaWdpbklkZW50aWZpZXIp
OworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShwYXRoKTsKKyAgICAK
KyAgICAvLyBDbGVhbiB1cCB0cmFja2VyIGRpcmVjdG9yeSBpZiB0aGUgbGFzdCBvcmlnaW4gaGFz
IGJlZW4gcmVtb3ZlZC4KKyAgICBpZiAobV9vcmlnaW5TZXQtPmlzRW1wdHkoKSkgeworICAgICAg
ICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURh
dGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgICAgICBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgp
OworICAgIH0KKyAgICAKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaXNw
YXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKK30KKyAgICAKK3ZvaWQgU3Rv
cmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIW1fZGF0
YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkKQor
ICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQgPSBhZG9wdFB0cihuZXcgT3JpZ2luU2V0KTsK
KworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC0+YmVnaW4o
KTsKKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LT5lbmQo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKKyAgICAg
ICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLT5hZGQoKml0KTsKK30KKwordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6d2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFy
ZC50cnlMb2NrKCkpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkKQorICAgICAgICBt
X29yaWdpbnNCZWluZ0RlbGV0ZWQgPSBhZG9wdFB0cihuZXcgT3JpZ2luU2V0KTsKKyAgICAgICAg
CisgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLT5hZGQob3JpZ2luSWRlbnRpZmllcik7Cit9Cisg
ICAgCitib29sIFN0b3JhZ2VUcmFja2VyOjpjYW5EZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2so
KSk7CisgICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+Y29udGFpbnMob3JpZ2luSWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmNhbmNlbERlbGV0aW5nT3JpZ2lu
KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1fb3JpZ2luc0Jl
aW5nRGVsZXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVk
LT5pc0VtcHR5KCkpCisgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+cmVtb3ZlKG9yaWdp
bklkZW50aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcmlnaW5GaWxlUGF0aHMo
VmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRy
eUxvY2soKSk7CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5z
Iik7CisgICAgaWYgKCFzdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGxpc3QgcGF0aHMu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc3VsdDsKKyAgICB3
aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAg
ICAgcGF0aHMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAKKyAgICBp
ZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJlYWQgYWxsIG9yaWdpbiBwYXRocyBmcm9tIGRhdGFiYXNlLiIpOworfQorCit2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzZXRDbGllbnQoU3RvcmFnZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKK3sKKyAg
ICBtX2NsaWVudCA9IGNsaWVudDsKK30KKyAgICAKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmgJKHJldmlzaW9uIDc5NDY1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMyBAQAogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisg
ICAgICAgIC8vIE5vdCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0
b3JhZ2VBcmVhTWFwIGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUg
dW5kZXJseWluZyBkYiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAg
ICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEg
dG8gZXZlbnR1YWxseSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VB
cmVhU3luYyB0byByZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgCiAgICAg
cHJpdmF0ZToKICAgICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0
IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJKHJldmlzaW9uIDc5NDY1KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1MSwyOCBAQAogICAgIEFTU0VSVChtX3RocmVh
ZCk7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBUZXJtaW5hdGVUaHJlYWQpOwogfQorICAgIAorTG9j
YWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUo
dHlwZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IEltcG9ydE9yaWdpbnMgfHwgbV90eXBlID09
IERlbGV0ZUFsbE9yaWdpbnMpOworfQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9y
YWdlVGFzayhUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKKyAgICA6
IG1fdHlwZSh0eXBlKQorICAgICwgbV9vcmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIp
Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBEZWxldGVPcmlnaW4pOworfQogCitMb2NhbFN0b3Jh
Z2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpCisgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKQorICAgICwg
bV9kYXRhYmFzZUZpbGVuYW1lKGRhdGFiYXNlRmlsZW5hbWUpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBTZXRPcmlnaW5EZXRhaWxzKTsKK30KKwogTG9jYWxTdG9yYWdlVGFzazo6fkxvY2FsU3Rv
cmFnZVRhc2soKQogewogfQpAQCAtNjQsNiArODYsMTggQEAKICAgICAgICAgY2FzZSBBcmVhU3lu
YzoKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybVN5bmMoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNldE9yaWdpbkRldGFpbHM6CisgICAgICAgICAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLnN5bmNTZXRPcmlnaW5EZXRhaWxzKG1fb3JpZ2luSWRlbnRpZmllciwg
bV9kYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElt
cG9ydE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNJ
bXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRGVsZXRlQWxsT3JpZ2luczoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkuc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERlbGV0ZU9yaWdpbjoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCku
c3luY0RlbGV0ZU9yaWdpbihtX29yaWdpbklkZW50aWZpZXIpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRGVsZXRlRW1wdHlEYXRhYmFzZToKICAgICAgICAgICAgIG1fYXJlYS0+
ZGVsZXRlRW1wdHlEYXRhYmFzZSgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24g
Nzk0NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luSGFzaC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VNYXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VT
eW5jTWFuYWdlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0xNDQsNiArMTQ1LDI2IEBACiAgICAgLy8gQmVjYXVz
ZSB0aGVyZSdzIGEgc2luZ2xlIGV2ZW50IGxvb3AgcGVyLXByb2Nlc3MsIHRoaXMgaXMgYSBuby1v
cC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlv
bihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFy
ZWFNYXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgICAgICBzdG9yYWdl
QXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBpdC0+c2Vjb25kOworICAgICAgICBz
dG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9uIDc5NDY1
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTQwLDEzICs0MSwxNyBAQAogICAgIGNsYXNz
IExvY2FsU3RvcmFnZVRhc2sgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbFN0
b3JhZ2VUYXNrKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAg
ICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwg
VGVybWluYXRlVGhyZWFkIH07CisgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFT
eW5jLCBEZWxldGVFbXB0eURhdGFiYXNlLCBTZXRPcmlnaW5EZXRhaWxzLCBJbXBvcnRPcmlnaW5z
LCBEZWxldGVBbGxPcmlnaW5zLCBEZWxldGVPcmlnaW4sIFRlcm1pbmF0ZVRocmVhZCB9OwogCiAg
ICAgICAgIH5Mb2NhbFN0b3JhZ2VUYXNrKCk7CiAKICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8
TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9ydCwgYXJlYSkpOyB9
CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVN5bmMo
U3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdl
VGFzayhBcmVhU3luYywgYXJlYSkpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2Fs
U3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZUVtcHR5RGF0YWJhc2UoU3RvcmFnZUFyZWFTeW5jKiBh
cmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVFbXB0eURh
dGFiYXNlLCBhcmVhKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdl
VGFzaz4gY3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQoKSB7IHJldHVybiBhZG9wdFB0cihu
ZXcgTG9jYWxTdG9yYWdlVGFzayhJbXBvcnRPcmlnaW5zKSk7IH0KKyAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU2V0T3JpZ2luRGV0YWlscyhjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlbmFtZSkg
eyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soU2V0T3JpZ2luRGV0YWlscywg
b3JpZ2luSWRlbnRpZmllciwgZGF0YWJhc2VGaWxlbmFtZSkpOyB9CisgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZU9yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VU
YXNrKERlbGV0ZU9yaWdpbiwgb3JpZ2luSWRlbnRpZmllcikpOyB9CisgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMoKSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVBbGxPcmlnaW5zKSk7IH0K
ICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlVGVybWlu
YXRlKExvY2FsU3RvcmFnZVRocmVhZCogdGhyZWFkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9j
YWxTdG9yYWdlVGFzayhUZXJtaW5hdGVUaHJlYWQsIHRocmVhZCkpOyB9CiAKICAgICAgICAgdm9p
ZCBwZXJmb3JtVGFzaygpOwpAQCAtNTQsMTAgKzU5LDE1IEBACiAgICAgcHJpdmF0ZToKICAgICAg
ICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBTdG9yYWdlQXJlYVN5bmMqKTsKICAgICAgICAgTG9j
YWxTdG9yYWdlVGFzayhUeXBlLCBMb2NhbFN0b3JhZ2VUaHJlYWQqKTsKKyAgICAgICAgTG9jYWxT
dG9yYWdlVGFzayhUeXBlLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlVGFz
ayhUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgTG9jYWxTdG9y
YWdlVGFzayhUeXBlKTsKIAogICAgICAgICBUeXBlIG1fdHlwZTsKICAgICAgICAgU3RvcmFnZUFy
ZWFTeW5jKiBtX2FyZWE7CiAgICAgICAgIExvY2FsU3RvcmFnZVRocmVhZCogbV90aHJlYWQ7Cisg
ICAgICAgIFN0cmluZyBtX29yaWdpbklkZW50aWZpZXI7CisgICAgICAgIFN0cmluZyBtX2RhdGFi
YXNlRmlsZW5hbWU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oCShyZXZpc2lv
biA3OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKIAogY2xhc3MgRGF0YWJhc2VUcmFj
a2VyQ2xpZW50IHsKIHB1YmxpYzoKKwogICAgIHZpcnR1YWwgfkRhdGFiYXNlVHJhY2tlckNsaWVu
dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihTZWN1cml0
eU9yaWdpbiopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKSA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkocmV2aXNpb24gNzk0
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlPiBjb3B5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9yaWdp
bkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFsbE9yaWdpbnNGb3JEZWxldGlvbigpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkocmV2aXNp
b24gNzk0NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICAgIC8vIE9ubHkgY2FsbGVkIGZy
b20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAorICAgICAgICAvLyBVc2VkIHRvIGNs
ZWFyIGEgU3RvcmFnZUFyZWEgYW5kIGNsb3NlIGRiIGJlZm9yZSBiYWNraW5nIGRiIGZpbGUgaXMg
ZGVsZXRlZC4KKyAgICAgICAgdm9pZCBjbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisKICAgICBw
cml2YXRlOgogICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIHVuc2lnbmVk
IHF1b3RhKTsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyX2gKKyNk
ZWZpbmUgU3RvcmFnZVRyYWNrZXJfaAorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIAor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvY2FsU3RvcmFnZVRocmVhZDsKK2NsYXNzIExv
Y2FsU3RvcmFnZVRhc2s7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgU3RvcmFnZVRy
YWNrZXJDbGllbnQ7ICAgIAorICAgIAorY2xhc3MgU3RvcmFnZVRyYWNrZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VUcmFja2VyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVHJhY2tlcihjb25zdCBT
dHJpbmcmIHN0b3JhZ2VQYXRoKTsKKyAgICBzdGF0aWMgU3RvcmFnZVRyYWNrZXImIHRyYWNrZXIo
KTsKKyAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZVRhc2sodm9pZCopOworCisgICAgdm9pZCBpbXBv
cnRPcmlnaW5JZGVudGlmaWVycygpOworICAgIHZvaWQgc2V0T3JpZ2luRGV0YWlscyhjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKTsKKyAg
ICAKKyAgICB2b2lkIGRlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbihT
ZWN1cml0eU9yaWdpbiopOworICAgIHZvaWQgZGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllcik7CisgICAgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+ID4mIHJlc3VsdCk7CisKKyAgICB2b2lkIGNhbmNlbERlbGV0aW5nT3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgCisgICAgdm9pZCBzZXRDbGllbnQoU3Rv
cmFnZVRyYWNrZXJDbGllbnQqKTsKKyAgICAKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFja2dy
b3VuZCB0aHJlYWQuCisgICAgdm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQg
c3luY0RlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgc3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2luSWRl
bnRpZmllcnMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcm
IHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNv
bnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KTsKKyAgICAKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKyAgICAKKyAgICBib29sIGNh
bkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQg
d2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICB2b2lkIG9yaWdpbkZpbGVQYXRo
cyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworICAgIHZvaWQgc3luY0ZpbGVTeXN0ZW1BbmRUcmFj
a2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CisgICAgU1FM
aXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKworICAgIFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQ
YXRoOworCisgICAgU3RvcmFnZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50OworICAgIAorICAgIHR5
cGVkZWYgSGFzaFNldDxTdHJpbmc+IE9yaWdpblNldDsKKworICAgIC8vIEZJWE1FOiBkbyB3ZSBu
ZWVkIGFuIG93bnB0ciBoZXJlPworICAgIE93blB0cjxPcmlnaW5TZXQ+IG1fb3JpZ2luU2V0Owor
ICAgIAorICAgIE93blB0cjxPcmlnaW5TZXQ+IG1fb3JpZ2luc0JlaW5nRGVsZXRlZDsKKyAgICAK
KyAgICBPd25QdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKK307CisgICAgCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNl
bmRpZiAvLyBTdG9yYWdlVHJhY2tlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzk0
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjcy
NSw3ICsyNzI1LDggQEAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAgICBz
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAgICAg
ICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFn
ZVRyYWNrZXIuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0yNzQyLDcg
KzI3NDMsOCBAQAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIFwKICAgICAgICAgc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCisg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCisgICAgICAgIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxFX1NZ
U1RFTT0xKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3OTQ5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDExLTAyLTIz
ICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5k
IGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAgIENyZWF0ZWQgU3RvcmFnZVRyYWNrZXIgYXMg
YSBjZW50cmFsIHBvaW50IGZvciB0cmFja2luZyBhbmQgZGVsZXRpbmcgTG9jYWxTdG9yYWdlIHBl
ciBvcmlnaW4uCisgICAgICAgIFN0b3JhZ2VUcmFja2VyIG1haW50YWlucyBpdHMgb3duIGRhdGFi
YXNlIG9mIG9yaWdpbiBpZGVudGlmaWVycyBhbmQgYmFja2luZyBkYiBwYXRocywKKyAgICAgICAg
YW5kIHRoaXMgYWxsb3dzIGl0IHRvIGNvbnRhaW4gbW9yZSByZWxhdGlvbmFsIGRhdGEgaW4gdGhl
IGZ1dHVyZSwgbGlrZSB2YXJpYWJsZSBxdW90YXMgcGVyIG9yaWdpbi4KKworICAgICAgICBPbiBp
bml0aWFsaXphdGlvbiwgU3RvcmFnZVRyYWNrZXIgc3luY3MgaXRzIGRhdGFiYXNlIHdpdGggTG9j
YWxTdG9yYWdlIGZpbGVzIG9uIGRpc2suIEl0IGFkZHMKKyAgICAgICAgYW4gb3JpZ2luIGVudHJ5
IHdoZW4gU3RvcmFnZUFyZWFTeW5jIHBlcmZvcm1zIGEgZmlyc3Qgc3luYyBmb3IgYW4gb3JpZ2lu
LgorCisgICAgICAgIEFsbCBTdG9yYWdlVHJhY2tlciBmaWxlIG9wZXJhdGlvbnMgYXJlIHBlcmZv
cm1lZCBvbiBvbmUgYmFja2dyb3VuZCB0aHJlYWQgd2l0aCBhIHRhc2sgcXVldWUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFyZSBjb250YWluZWQgaW4gdGhpcyBwYXRjaC4KKworICAgICAgICAq
IFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3Vw
OjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgICogcGFnZS9QYWdl
R3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VU
cmFja2VyQ2xpZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAg
ICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxT
dG9yYWdlVGFzazo6Y3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAg
IChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxsT3JpZ2lucyk6Cisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKToKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5j
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UpOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJPcmlnaW5Gb3JEZWxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJBbGxP
cmlnaW5zRm9yRGVsZXRpb24pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRy
YWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VU
cmFja2VyOjp3aWxsRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpjYW5EZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6
OmNhbmNlbERlbGV0aW5nT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2Vy
OjpvcmlnaW5GaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNl
dENsaWVudCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+U3RvcmFnZVRyYWNrZXJDbGllbnQpOgorCiAyMDEx
LTAyLTIzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiA3
OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICAgICBjbGFzcyBHcm91cFNldHRpbmdzOwogICAgIGNsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CiAgICAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZTsKIAogICAgIGNsYXNzIFBh
Z2VHcm91cCB7CkBAIC00OSw4ICs1MCwxMiBAQAogICAgICAgICB+UGFnZUdyb3VwKCk7CiAKICAg
ICAgICAgc3RhdGljIFBhZ2VHcm91cCogcGFnZUdyb3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1l
KTsKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VM
b2NhbFN0b3JhZ2UoKTsKLSAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyTG9jYWxT
dG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckxvY2FsU3Rv
cmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOworI2VuZGlmICAgICAgICAKICAgICAgICAg
Y29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlczsgfQog
CiAgICAgICAgIHZvaWQgYWRkUGFnZShQYWdlKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuY3BwCShyZXZpc2lvbiA3OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyb3VwU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCkBAIC0xMTAsNiArMTExLDM1
IEBACiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3Jv
dXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpCit7CisgICAgaWYgKCFwYWdlR3Jv
dXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9
IHBhZ2VHcm91cHMtPmVuZCgpOworICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9
IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQt
PnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2Nh
bFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICB9Cit9CisKK3Zv
aWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQoreworICAgIGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3Ig
KFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQor
ICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVs
ZXRpb24ob3JpZ2luKTsKKyAgICB9CisKK30KKworI2VuZGlmCisKIHZvaWQgUGFnZUdyb3VwOjph
ZGRQYWdlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgQVNTRVJUKHBhZ2UpOwpAQCAtMjA5LDYgKzIzOSw3
IEBACiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRmlsZVN5c3RlbU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQkocmV2aXNpb24gNzk0NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODUs
NCArODUsMjMgQEAKICNlbmRpZgogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0
cmluZz4gZW50cmllczsKKworICAgIC8vIFRoaXMgY2FuIHJ1biBvbiBhIGJhY2tncm91bmQgdGhy
ZWFkLCBzbyBtdXN0IGNyZWF0ZSBhbiBhdXRvcmVsZWFzZSBwb29sLgorICAgIE5TQXV0b3JlbGVh
c2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAgICBO
U0RpcmVjdG9yeUVudW1lcmF0b3IgKmRpciA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZW51bWVyYXRvckF0UGF0aDpwYXRoXTsgCisgICAgTlNTdHJpbmcgKmZpbGU7CisgICAgd2hp
bGUgKChmaWxlID0gW2RpciBuZXh0T2JqZWN0XSkpIHsKKyAgICAgICAgaWYgKGZpbHRlci5pc0Vt
cHR5KCkgfHwgKFtmaWxlIHJhbmdlT2ZTdHJpbmc6ZmlsdGVyXS5sb2NhdGlvbiAhPSBOU05vdEZv
dW5kKSkKKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKFtwYXRoIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpmaWxlXSk7CisgICAgfQorCisgICAgW3Bvb2wgcmVsZWFzZV07CisKKyAg
ICByZXR1cm4gZW50cmllczsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc5NDY1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MTY1LDYgKzQxNjUsOCBAQAogICAgICAgICAgICAg
J3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9T
dG9yYWdlU3luY01hbmFnZXIuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCcsCisg
ICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oJywKICAgICAgICAgICAgICdzdmcv
YW5pbWF0aW9uL1NNSUxUaW1lLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZS5oJywKICAgICAgICAgICAgICdzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNw
cCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA3OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODQ2LDYgKzg0NiwxMCBA
QAogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3
NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8q
IFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9u
c2UubW0gKi87IH07CiAJCTM3RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1p
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGRDQy
OTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi87IH07CisJCTNBQjAyRDJB
MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0
b3JhZ2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI5MTJE
NEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi87IH07CisJCTNBQzM2ODAwMTJF
RjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8q
IFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJM0FDMzY4MDExMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDNBQzM2N0ZGMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5jcHAg
Ki87IH07CiAJCTNBQzY0OEIyMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzY0OEIxMTI5
RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTAwMkNDRDBGNjZFREVGMDA5RTY2MEQgLyog
U2NyaXB0RnVuY3Rpb25DYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxs
LmggKi87IH07CiAJCTQxMDAyQ0NFMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNh
bGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEw
MDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi87IH07CkBA
IC03MTkxLDYgKzcxOTUsMTAgQEAKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdG
Qzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVC
b3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTND
MDI5IC8qIFRyZWVEZXB0aExpbWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyZWVEZXB0aExpbWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI4
MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3Rv
cmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FDMzY3
RkYxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FDNjQ4QjExMjlFMTQ2NTAwQzNFQjI1IC8qIEVk
aXRpbmdCb3VuZGFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5n
Qm91bmRhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwMDJDQ0IwRjY2RURF
RjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MDgsNiArMTI5MTYsMTAgQEAK
IAkJCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAq
LywKIAkJCQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cCAqLywKIAkJCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2Vy
LmggKi8sCisJCQkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmgg
Ki8sCisJCQkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAq
LywKKwkJCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQu
aCAqLywKKwkJCQkzQUMzNjdGRjEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGll
bnQuY3BwICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9yYWdl
OwpAQCAtMjE5NDksNiArMjE5NjEsNyBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAv
KiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTVFMzhCRjEwMDQwRDVE
MDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1
MTAyRDk0MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjU0ODhENkIwREQ1QTgzRDAwOUQ4M0IyIC8qIFN0cmluZ1NvdXJj
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEg
LyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlGNzc3NjBFRkVDNjIw
MDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDQx
LDYgKzIyNDU0LDcgQEAKIAkJCQlFMUYxRTgzMDBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVu
c2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBY
U0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUMzNjgwMDEyRUY3
QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwpAQCAtMjQ3MDcsNiArMjQ3MjEsNyBAQAogCQkJCUM1MEQwRTgyMEZGNDI3
MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1
NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBT
dG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzMDBEMDA2QzFEMDBF
RjZGMjYgLyogU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVDMEQwMEE3N0Uw
MDBBQ0MxRCAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIyNjQ1RDBEMDBB
NzdFMDAwQUNDMUQgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjUwODUs
NiArMjUxMDAsNyBAQAogCQkJCTkzRjE5QjA0MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vz
c29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBY
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZD
NTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTNB
QzM2ODAxMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTRmlsdGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwo=
</data>
<flag name="review"
          id="75440"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="75527"
          type_id="3"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83765</attachid>
            <date>2011-02-24 20:20:52 -0800</date>
            <delta_ts>2011-03-02 17:59:53 -0800</delta_ts>
            <desc>[PATCH] Testing against bots</desc>
            <filename>storage_tracker_noLayoutTests_cleanup4_buildbots.diff</filename>
            <type>text/plain</type>
            <size>77657</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxMSBAQAogCQkzN0I2RkI0
RjEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0I2RkI0RDEwNjM1MzBDMDAwRkRC
M0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gKi87IH07CiAJCTM3RDFEQ0E4MTA2NTkyOEMw
MDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdEMURDQTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmgg
Ki87IH07CiAJCTM3RDFEQ0E5MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E3MTA2NTky
OEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSAqLzsgfTsKKwkJM0FCMDJBRjYxMkMxMzE5QjAw
RkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3Jh
Z2VNYW5hZ2VyLm1tICovOyB9OworCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3Rv
cmFnZU1hbmFnZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJM0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJCM0M3ODEz
MDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsKKwkJM0FC
QjNDN0IxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzkxMzA5QzNC
NTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovOyB9OworCQkzQUUxNUQ1
MDEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FFMTVENEYxMkRCREVENDAw
OTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLzsgfTsKIAkJNDFGNDQ4NEYx
MDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUgLyog
V2ViV29ya2Vyc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0MUY0NDg1MDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZh
dGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY0
NDg0RTEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi87IH07CiAJCTQ0
QkI4QjE0MTI0MUEwMjIwMDFFM0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QkI4QjEzMTI0MUEwMjIwMDFF
M0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTQ4Miw2ICs0ODcsMTEgQEAK
IAkJMzk0NDYwN0UwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkJhY2tGb3J3YXJkTGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDdGMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0
b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJIaXN0b3J5SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhp
c3RvcnlJdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2
OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlclBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCQjNDNzgxMzA5QzNCNTAw
RTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTNBQkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUUx
NUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjQ0ODREMTAzMzhFOEMwMDMwRTU1RSAv
KiBXZWJXb3JrZXJzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJXb3JrZXJzUHJpdmF0ZS5oOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vyc1ByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEUxMDMzOEU4QzAwMzBFNTVF
IC8qIFdlYldvcmtlcnNQcml2YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV2ViV29ya2Vyc1ByaXZhdGUubW07IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3Jr
ZXJzUHJpdmF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk4QjkwRjhG
ODJERjAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTA1NSw2ICsxMDY1LDExIEBACiAJCQkJQTVERUZDMEUxMUQ1MzQzRTAw
ODg1MjczIC8qIFdlYkRhdGFiYXNlUXVvdGFNYW5hZ2VyLm1tICovLAogCQkJCTUxMUYzRkQzMENF
Q0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKIAkJCQk1MTFG
M0ZENDBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovLAor
CQkJCTNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLywK
KwkJCQkzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRl
LmggKi8sCisJCQkJM0FFMTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2Vy
SW50ZXJuYWwuaCAqLywKKwkJCQkzQUJCM0M3ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQuaCAqLywKKwkJCQkzQUJCM0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFN0b3JhZ2U7CiAJ
CQlwYXRoID0gbWFjL1N0b3JhZ2U7CkBAIC0xNjI0LDcgKzE2MzksMTAgQEAKIAkJCQk1OThBRDky
QTEyMDFDRjNCMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2tJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk4QURBNDYxMjAyMjc1MDAwQUJBRTRFIC8qIFdl
YkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTJBMUE0
MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTNBQjAyQjAwMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FFMTVENTAxMkRCREVENDAw
OTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTNBQkIzQzdBMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xOTkyLDcgKzIwMTAsOSBAQAogCQkJCTU5OEFEOTIyMTIwMUNGMTAw
MEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5
OEFEOTI4MTIwMUNGMzIwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9j
ay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTJBMUE1MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJE
YXNoYm9hcmRSZWdpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQUIwMkFGNjEyQzEzMTlCMDBG
QkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREE2MkFF
MzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNl
cyAqLywKKwkJCQkzQUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCShyZXZpc2lvbiA3OTY1NykKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0Myw5IEBACiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IGNvcHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFs
IHZvaWQgdW5sb2NrKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVs
ZXRpb24oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5z
Rm9yRGVsZXRpb24oKTsKIAogcHJpdmF0ZToKICAgICBPd25QdHI8V2ViS2l0OjpXZWJTdG9yYWdl
TmFtZXNwYWNlPiBtX3N0b3JhZ2VOYW1lc3BhY2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHJldmlzaW9uIDc5
NjU3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTYgQEAKICAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgogfQogCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JE
ZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JE
ZWxldGlvbigpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5NjU3KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMi0y
NCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQg
ZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBTdHVicyBmb3IgQ2hyb21pdW0gYnVpbGQu
CisKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0Zv
ckRlbGV0aW9uKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5Lmg6CisKIDIw
MTEtMDItMjQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gNzk2NTcp
CisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDExLTAyLTI0ICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisgICAgICAgIEFkZCBXZWJLaXQxIEFQ
SSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorCisgICAgICAgICogU3RyaW5nc05v
dFRvQmVMb2NhbGl6ZWQudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDExLTAyLTI0ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0CShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJj
ZS9XZWJLaXQvU3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
OTIsNiArNDkyLDggQEAKICJXZWJTZWN1cml0eU9yaWdpbiIKICJXZWJTZXJpYWxpemVkSlNWYWx1
ZSIKICJXZWJTaXRlVVJMVG9JY29uVVJMS2V5IgorIldlYlN0b3JhZ2VNYW5hZ2VyIgorIldlYlN0
b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24iCiAiV2ViU3ViZnJhbWVBcmNoaXZlcyIK
ICJXZWJTdWJyZXNvdXJjZXMiCiAiV2ViVGV4dFJlbmRlcmVyIgpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvV2ViS2l0LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQu
ZXhwCShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTYsNiArNiw3IEBACiAub2JqY19jbGFzc19uYW1lX1dlYkNvcmVTdGF0
aXN0aWNzCiAub2JqY19jbGFzc19uYW1lX1dlYkRhdGFTb3VyY2UKIC5vYmpjX2NsYXNzX25hbWVf
V2ViRGF0YWJhc2VNYW5hZ2VyCisub2JqY19jbGFzc19uYW1lX1dlYlN0b3JhZ2VNYW5hZ2VyCiAu
b2JqY19jbGFzc19uYW1lX1dlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZQogLm9iamNfY2xhc3NfbmFt
ZV9XZWJEZXZpY2VPcmllbnRhdGlvbgogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRh
dGlvblByb3ZpZGVyTW9jawpAQCAtMTE0LDYgKzExNSw4IEBACiBfV2ViU2NyaXB0RXJyb3JEZXNj
cmlwdGlvbktleQogX1dlYlNjcmlwdEVycm9yRG9tYWluCiBfV2ViU2NyaXB0RXJyb3JMaW5lTnVt
YmVyS2V5CitfV2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5CitfV2ViU3RvcmFnZURpZE1v
ZGlmeU9yaWdpbk5vdGlmaWNhdGlvbgogX1dlYlVSTE5hbWVQYm9hcmRUeXBlCiBfV2ViVVJMUGJv
YXJkVHlwZQogX1dlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2lu
Lm1tCShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlNlY3VyaXR5T3JpZ2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMyArNDYsMjggQEAK
IAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZShLVVJMKFt1cmwgYWJzb2x1dGVVUkxdKSk7CiAgICAgb3JpZ2luLT5yZWYoKTsKLSAgICBf
cHJpdmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKj4ob3Jp
Z2luLmdldCgpKTsKKyAgICBfcHJpdmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlP
cmlnaW5Qcml2YXRlICo+KG9yaWdpbi5nZXQoKSk7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAot
LSAoTlNTdHJpbmcqKXByb3RvY29sCistIChOU1N0cmluZyAqKXByb3RvY29sCiB7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPnByb3RvY29s
KCk7CiB9CiAKLS0gKE5TU3RyaW5nKilob3N0CistIChOU1N0cmluZyAqKWhvc3QKIHsKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+aG9zdCgp
OwogfQogCistIChOU1N0cmluZyAqKWRhdGFiYXNlSWRlbnRpZmllcgoreworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5kYXRhYmFzZUlkZW50
aWZpZXIoKTsKK30KKwogLy8gRGVwcmVjYXRlZC4gVXNlIGhvc3QgaW5zdGVhZC4gVGhpcyBuZWVk
cyB0byBzdGF5IGhlcmUgdW50aWwgd2Ugc2hpcCBhIG5ldyBTYWZhcmkuCi0tIChOU1N0cmluZyop
ZG9tYWluCistIChOU1N0cmluZyAqKWRvbWFpbgogewogICAgIHJldHVybiBbc2VsZiBob3N0XTsK
IH0KQEAgLTExMSw3ICsxMTYsNyBAQAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgb3JpZ2lu
LT5yZWYoKTsKLSAgICBfcHJpdmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlPcmln
aW5Qcml2YXRlKj4ob3JpZ2luKTsKKyAgICBfcHJpdmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
U2VjdXJpdHlPcmlnaW5Qcml2YXRlICo+KG9yaWdpbik7CiAKICAgICByZXR1cm4gc2VsZjsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oCShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw5ICszNywxMSBAQAogCiAtIChpZClpbml0V2l0aFVSTDooTlNVUkwg
Kil1cmw7CiAKLS0gKE5TU3RyaW5nKilwcm90b2NvbDsKLS0gKE5TU3RyaW5nKilob3N0OworLSAo
TlNTdHJpbmcgKilwcm90b2NvbDsKKy0gKE5TU3RyaW5nICopaG9zdDsKIAorLSAoTlNTdHJpbmcg
KilkYXRhYmFzZUlkZW50aWZpZXI7CisKIC8vIFJldHVybnMgemVybyBpZiB0aGUgcG9ydCBpcyB0
aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJvIG90aGVyd2lzZS4KIC0g
KHVuc2lnbmVkIHNob3J0KXBvcnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5
NjU3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMTEtMDItMjQgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAgICAgQWRkIFdl
YktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAgICAgICAgQWRk
ZWQgQVBJIHRvIGFjY2VzcyBTdG9yYWdlVHJhY2tlci4gQWRkZWQgU3RvcmFnZVRyYWNrZXJDbGll
bnQgaW1wbGVtZW50YXRpb24gdGhhdAorICAgICAgICBzZW5kcyBvcmlnaW4gY2hhbmdlIG5vdGlm
aWNhdGlvbnMuCisKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOiBBZGRl
ZC4KKyAgICAgICAgKCtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJd
KToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgb3JpZ2luc10pOgorICAgICAgICAoLVtX
ZWJTdG9yYWdlTWFuYWdlciBkZWxldGVBbGxPcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3Jh
Z2VNYW5hZ2VyIGRlbGV0ZU9yaWdpbjpdKToKKyAgICAgICAgKHN0b3JhZ2VEaXJlY3RvcnlQYXRo
KToKKyAgICAgICAgKFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAg
ICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAg
KiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBT
dG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFN0b3Jh
Z2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW06IEFkZGVkLgorICAgICAgICAoV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAgICAgICAg
KFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpXZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAg
ICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6fldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToK
KyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdp
bk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0
Y2hEaWRNb2RpZnlPcmlnaW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5
T3JpZ2luLm1tOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBkYXRhYmFzZUlkZW50aWZp
ZXJdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUu
aDoKKyAgICAgICAgKiBXZWJLaXQuZXhwOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdy
b3VwTmFtZTp1c2VzRG9jdW1lbnRWaWV3czpdKTogSW5pdGlhbGl6ZSBTdG9yYWdlVHJhY2tlcgor
CiAyMDExLTAyLTI0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IGNsYW5nIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9X
ZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorCit2b2lkIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3RvcmFnZVRyYWNrZXJD
bGllbnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFdlYlN0b3JhZ2VU
cmFja2VyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQqIHNoYXJlZFdlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50KCk7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmln
aW5Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCk7CisgICAgCisgICAgdmlydHVhbCB+V2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworcHJp
dmF0ZToKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworfTsKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2Vy
Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU3RvcmFn
ZU1hbmFnZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIK
KworI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
dG9yYWdlVHJhY2tlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTlNTdHJpbmcg
KiBjb25zdCBXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsU3Rv
cmFnZURhdGFiYXNlUGF0aFByZWZlcmVuY2VLZXkiOworTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9y
YWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uID0gQCJXZWJTdG9yYWdlRGlkTW9kaWZ5T3Jp
Z2luTm90aWZpY2F0aW9uIjsKKworc3RhdGljIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0
aCgpOworCitAaW1wbGVtZW50YXRpb24gV2ViU3RvcmFnZU1hbmFnZXIKKworKyAoV2ViU3RvcmFn
ZU1hbmFnZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcgoreworICAgIHN0YXRpYyBXZWJTdG9y
YWdlTWFuYWdlciAqc2hhcmVkTWFuYWdlciA9IFtbV2ViU3RvcmFnZU1hbmFnZXIgYWxsb2NdIGlu
aXRdOworICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOworfQorCistIChOU0FycmF5ICopb3JpZ2lu
cworeworICAgIFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gY29yZU9yaWdpbnM7CisK
KyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMpOworCisg
ICAgTlNNdXRhYmxlQXJyYXkgKndlYk9yaWdpbnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmNvcmVPcmlnaW5zLnNpemUoKV07CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlNlY3VyaXR5
T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhX
ZWJDb3JlU2VjdXJpdHlPcmlnaW46Y29yZU9yaWdpbnNbaV0uZ2V0KCldOworICAgICAgICBbd2Vi
T3JpZ2lucyBhZGRPYmplY3Q6d2ViT3JpZ2luXTsKKyAgICAgICAgW3dlYk9yaWdpbiByZWxlYXNl
XTsKKyAgICB9CisKKyAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworfQorCist
ICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnMKK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
LmRlbGV0ZUFsbE9yaWdpbnMoKTsKK30KKworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNlY3Vy
aXR5T3JpZ2luICopb3JpZ2luCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxl
dGVPcmlnaW4oW29yaWdpbiBfY29yZV0pOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VE
aXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIE5TU3RyaW5nICpzdG9yYWdlRGly
ZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVs
dHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVjdG9yeSB8fCAhW3N0b3JhZ2VEaXJlY3Rvcnkg
aXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgc3RvcmFnZURpcmVjdG9y
eSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0b3JhZ2UiOworICAgIAorICAgIHJldHVybiBb
c3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKK30KKwordm9pZCBX
ZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgQk9PTCBp
bml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihzdG9yYWdlRGlyZWN0
b3J5UGF0aCgpKTsKKyAgICAKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVu
dChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQo
KSk7CisgICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZRVM7Cit9CisKK0BlbmQKKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2ltcG9ydCAiV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQuaCIKKworI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5o
IgorI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgiCisjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtU3RyaW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Cisj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQqIFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpCit7Cisg
ICAgc3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFyZWRDbGllbnQgPSBuZXcgV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKKyAgICByZXR1cm4gc2hhcmVkQ2xpZW50OworfQorCitX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKQoreworfQor
CitXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6fldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkKK3sK
K30KKwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmln
aW5Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudCgpLT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0aWNfY2FzdDxTZWN1cml0eU9y
aWdpbio+KGNvbnRleHQpKTsKK30KKwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKQor
eworICAgIFJldGFpblB0cjxXZWJTZWN1cml0eU9yaWdpbj4gd2ViU2VjdXJpdHlPcmlnaW4oQWRv
cHROUywgW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5
T3JpZ2luOm9yaWdpbi5nZXQoKV0pOworICAgIAorICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViU3RvcmFnZURpZE1vZGlmeU9y
aWdpbk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3VyaXR5T3JpZ2luLmdldCgpXTsKK30KKwor
dm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlm
aWVyKG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsK
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZChkaXNwYXRjaERpZE1vZGlmeU9yaWdpbk9uTWFpblRo
cmVhZCwgc3RhdGljX2Nhc3Q8dm9pZCo+KG9yaWdpbi5sZWFrUmVmKCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7Cit9CisK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMv
U3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKK2V4dGVybiBO
U1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleTsKK2V4dGVybiBO
U1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb247CisK
K0BjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKKworQGludGVyZmFjZSBXZWJTdG9yYWdlTWFuYWdl
ciA6IE5TT2JqZWN0CisKKysgKFdlYlN0b3JhZ2VNYW5hZ2VyICopc2hhcmVkV2ViU3RvcmFnZU1h
bmFnZXI7CisKKy8vIFJldHVybnMgYW4gYXJyYXkgb2YgV2ViU2VjdXJpdHlPcmlnaW4gb2JqZWN0
cyB0aGF0IGhhdmUgTG9jYWxTdG9yYWdlLgorLSAoTlNBcnJheSAqKW9yaWdpbnM7CisKKy0gKHZv
aWQpZGVsZXRlQWxsT3JpZ2luczsKKy0gKHZvaWQpZGVsZXRlT3JpZ2luOihXZWJTZWN1cml0eU9y
aWdpbiAqKW9yaWdpbjsKKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDc5NjU3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW1wb3J0
ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYlNjcmlwdERlYnVnRGVsZWdh
dGUuaCIKICNpbXBvcnQgIldlYlNjcmlwdFdvcmxkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0
b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgog
I2ltcG9ydCAiV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJUZXh0
SXRlcmF0b3IuaCIKQEAgLTY4Nyw2ICs2ODgsMTAgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAg
ICAgICAgIFdlYktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisK
KyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdl
SWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRp
b25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1
dGVzTWV0aG9kKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9u
IDc5NjU3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTEwODAsNiArMTA4MCwxNCBAQAogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xMGNh
bkRpc3BsYXlFUktOU180S1VSTEUKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMThkYXRh
YmFzZUlkZW50aWZpZXJFdgogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW41ZXF1YWxFUEtT
MF8KKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2Vy
MTdpbml0aWFsaXplVHJhY2tlckVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE0U3RvcmFn
ZVRyYWNrZXIxNmRlbGV0ZUFsbE9yaWdpbnNFdgorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tl
cjEyZGVsZXRlT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTRTdG9y
YWdlVHJhY2tlcjd0cmFja2VyRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3b3JpZ2lu
c0VSTjNXVEY2VmVjdG9ySU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVMbTBFRUUK
K19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI5c2V0Q2xpZW50RVBOU18yMFN0b3JhZ2VUcmFj
a2VyQ2xpZW50RQorI2VuZGlmCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXIxOGZvY3Vz
ZWRPck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNXBsYXRmb3Jt
Q29udGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNnBhaW50aW5nRGlzYWJs
ZWRFdgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAko
cmV2aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMjIgQEAKICNlbmRpZgogfQogCit2
b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpCit7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAg
IAorICAgIGlmIChtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKSB7CisgICAgICAgIHVuc2lnbmVkIHF1
b3RhID0gbV9zdG9yYWdlTWFwLT5xdW90YSgpOworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9y
YWdlTWFwOjpjcmVhdGUocXVvdGEpOworICAgIH0KKworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3lu
YykgeworICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOworICAgICAg
ICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7CisgICAgfQorfQor
CiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QK
IHsKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAor
I2RlZmluZSBTdG9yYWdlVHJhY2tlckNsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVudCgpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDc5NjU3KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwu
aCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJh
Y2tlci5oIgogI2luY2x1ZGUgIlN1ZGRlblRlcm1pbmF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCkBAIC0xMzgsNiArMTM5LDI1IEBACiAgICAgfQogfQogCit2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N5bmND
bG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2
YWwpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0
aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3lu
Y1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigp
OworICAgIH0KK30KKwogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVy
PFN0b3JhZ2VBcmVhU3luYz4qKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0y
MjIsNiArMjQyLDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBBIFN0b3Jh
Z2VUcmFja2VyIHRocmVhZCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxlZCB0byBkZWxldGUgdGhlIGRi
IHdlJ3JlCisgICAgLy8gcmVvcGVuaW5nLCBzbyBjYW5jZWwgcG9zc2libGUgZGVsZXRpb24uCisg
ICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5jZWxEZWxldGluZ09yaWdpbihtX2RhdGFi
YXNlSWRlbnRpZmllcik7CisKICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZUZpbGVu
YW1lKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUg
JXMgZm9yIGxvY2FsIHN0b3JhZ2UiLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
ICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKQEAgLTIzNSw2ICsyNTksOCBAQAogICAgICAgICBtX2Rh
dGFiYXNlT3BlbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldE9yaWdpbkRldGFpbHMobV9kYXRhYmFzZUlkZW50
aWZpZXIsIGRhdGFiYXNlRmlsZW5hbWUpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVy
Zm9ybUltcG9ydCgpCkBAIC0zMzMsNyArMzU5LDE2IEBACiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9Ci0KKyAgICAKKyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBp
dCBpcyBhYm91dCB0byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBk
ZWxldGUgd2lsbCBiZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3Bl
biB0aGUgZGIKKyAgICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVx
dWVzdCB0byBkZWxldGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7Cisg
ICAgICAgIG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbnNlcnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8p
Iik7CiAgICAgaWYgKGluc2VydC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90IHdy
aXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKQEAgLTQyMSw5ICs0NTYsNyBAQAogICAg
IGlmICghY291bnQpIHsKICAgICAgICAgcXVlcnkuZmluYWxpemUoKTsKICAgICAgICAgbV9kYXRh
YmFzZS5jbG9zZSgpOwotICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01h
bmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZGF0YWJhc2VGaWxl
bmFtZSkpCi0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2Ug
ZmlsZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW4obV9kYXRhYmFzZUlkZW50aWZpZXIp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5oCShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogICAgICAgICB2b2lk
IHNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwogICAgICAgICB2b2lkIHNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgdm9pZCBzY2hlZHVs
ZUNsb3NlRGF0YWJhc2UoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVhU3lu
YyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJ
bXBsPiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOwpAQCAtOTIsNiArOTMsOCBA
QAogICAgICAgICBib29sIG1fc3luY1NjaGVkdWxlZDsKICAgICAgICAgYm9vbCBtX3N5bmNJblBy
b2dyZXNzOwogICAgICAgICBib29sIG1fZGF0YWJhc2VPcGVuRmFpbGVkOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBtX3N5bmNDbG9zZURhdGFiYXNlOwogCiAgICAgICAgIG11dGFibGUgTXV0ZXgg
bV9pbXBvcnRMb2NrOwogICAgICAgICBtdXRhYmxlIFRocmVhZENvbmRpdGlvbiBtX2ltcG9ydENv
bmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisKKyNpbmNsdWRlICJEYXRh
YmFzZVRocmVhZC5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VUYXNrLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVT
eXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgU3RvcmFnZVRyYWNrZXIqIHN0b3JhZ2VUcmFja2VyID0g
MDsKKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5n
JiBzdG9yYWdlUGF0aCkKK3sKKyAgICBBU1NFUlQoIXN0b3JhZ2VUcmFja2VyKTsKKyAgICBpZiAo
c3RvcmFnZVRyYWNrZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdG9yYWdlVHJhY2tl
ciA9IG5ldyBTdG9yYWdlVHJhY2tlcihzdG9yYWdlUGF0aCk7Cit9CisKK1N0b3JhZ2VUcmFja2Vy
JiBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpCit7CisgICAgaWYgKCFzdG9yYWdlVHJhY2tlcikK
KyAgICAgICAgc3RvcmFnZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoIiIpOworICAgIAor
ICAgIHJldHVybiAqc3RvcmFnZVRyYWNrZXI7Cit9CisKK1N0b3JhZ2VUcmFja2VyOjpTdG9yYWdl
VHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQorICAgIDogbV9jbGllbnQoMCkKKyAg
ICAsIG1fdGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCkpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgCisgICAgc2V0U3RvcmFnZURpcmVjdG9yeVBhdGgo
c3RvcmFnZVBhdGgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRl
VkZTKCk7CisgICAgCisgICAgbV90aHJlYWQtPnN0YXJ0KCk7ICAKKyAgICBpbXBvcnRPcmlnaW5J
ZGVudGlmaWVycygpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0
b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFi
YXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsK
KyAgICAKKyAgICBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoID0gcGF0aC50aHJlYWRzYWZlQ29weSgp
OworfQorCitTdHJpbmcgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25z
dAoreworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1l
VG9QYXRoKG1fc3RvcmFnZURpcmVjdG9yeVBhdGgsICJTdG9yYWdlVHJhY2tlci5kYiIpOworfQor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZE
b2VzTm90RXhpc3QpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKworICAgIGlmIChtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRy
YWNrZXJEYXRhYmFzZVBhdGgoKTsKKyAgICAKKyAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmVu
c3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlmRG9lc05vdEV4aXN0
KSkgeworICAgICAgICBpZiAoY3JlYXRlSWZEb2VzTm90RXhpc3QpCisgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGF0YWJhc2UgZmlsZSAnJXMnIiwgZGF0YWJhc2VQYXRo
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
IW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIG9wZW4gZGF0YWJhc2VQYXRoICVzLiIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9kYXRhYmFzZS5kaXNhYmxl
VGhyZWFkaW5nQ2hlY2tzKCk7CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3Rz
KCJPcmlnaW5zIikpIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJD
UkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExB
Q0UsIHBhdGggVEVYVCk7IikpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgT3JpZ2lucyB0YWJsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6Omlt
cG9ydE9yaWdpbklkZW50aWZpZXJzKCkKK3sgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9v
cmlnaW5TZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX29yaWdp
blNldCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5TZXQpOworICAgIH0KKyAgICAKKyAgICBtX3RocmVh
ZC0+c2NoZWR1bGVUYXNrKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJz
SW1wb3J0KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRl
bnRpZmllcnMoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKworICAgICAg
ICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMi
KTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgcmVzdWx0
OworICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3Vs
dFJvdykKKyAgICAgICAgICAgIG1fb3JpZ2luU2V0LT5hZGQoc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGlu
IGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAgIH0KKyAgICAKKyAgICBzeW5j
RmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworICAgIAorICAgIGlmIChtX2NsaWVudCkg
eworICAgICAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LT5l
bmQoKTsKKyAgICAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmln
aW5TZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5k
aXNwYXRjaERpZE1vZGlmeU9yaWdpbigqaXQpOworICAgIH0KK30KKyAgICAKK3ZvaWQgU3RvcmFn
ZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZmlsZUV4dCwgKCIubG9jYWxzdG9yYWdlIikp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgdW5zaWduZWQsIGZpbGVFeHRMZW5ndGgs
IChmaWxlRXh0Lmxlbmd0aCgpKSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRocyA9IGxpc3RE
aXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgZmlsZUV4dCk7CisKKyAgICAvLyBBZGQg
bWlzc2luZyBTdG9yYWdlVHJhY2tlciByZWNvcmRzLgorICAgIE9yaWdpblNldCBmb3VuZE9yaWdp
bnM7CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhdGhzLmVuZCgp
OworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGF0aHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gKml0OworICAg
ICAgICBpZiAocGF0aC5lbmRzV2l0aChmaWxlRXh0LCB0cnVlKSAmJiBwYXRoLmxlbmd0aCgpID4g
ZmlsZUV4dExlbmd0aCkgeworICAgICAgICAgICAgU3RyaW5nIGZpbGUgPSBwYXRoR2V0RmlsZU5h
bWUocGF0aCk7CisgICAgICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGZpbGUuc3Vi
c3RyaW5nKDAsIGZpbGUubGVuZ3RoKCkgLSBmaWxlRXh0TGVuZ3RoKTsKKyAgICAgICAgICAgIGlm
ICghbV9vcmlnaW5TZXQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICAgICAg
ICAgIHN5bmNTZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIsIHBhdGgpOworCisgICAg
ICAgICAgICBmb3VuZE9yaWdpbnMuYWRkKG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gRGVsZXRlIHN0YWxlIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAg
T3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBzZXRFbmQgPSBtX29yaWdpblNldC0+ZW5kKCk7Cisg
ICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQtPmJlZ2lu
KCk7IGl0ICE9IHNldEVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWZvdW5kT3JpZ2lucy5jb250
YWlucygqaXQpKQorICAgICAgICAgICAgc3luY0RlbGV0ZU9yaWdpbigqaXQpOworICAgIH0KK30K
Kwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAg
IEFTU0VSVChtX29yaWdpblNldCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9vcmlnaW5TZXQt
PmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIExvY2FsU3RvcmFnZVRhc2sqIHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVT
ZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0YWJh
c2VGaWxlKS5sZWFrUHRyKCk7CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fdGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNrKTsK
KyAgICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAodm9p
ZCopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayh2b2lkKiB0
YXNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQpOworICAgIAorICAgIGlmIChTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLm1fdGhyZWFkKQorICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
Lm1fdGhyZWFkLT5zY2hlZHVsZVRhc2soKExvY2FsU3RvcmFnZVRhc2sqKXRhc2spOworfQorCit2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0
YWJhc2VHdWFyZCk7CisKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIAorICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxV
RVMgKD8sID8pIik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGlu
IHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9IAorICAgIAorICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5J
ZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAg
ICAKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIi
LCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fb3JpZ2luU2V0LT5h
ZGQob3JpZ2luSWRlbnRpZmllci50aHJlYWRzYWZlQ29weSgpKTsKKworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50
aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworICAgIAorICAg
IE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQtPmVuZCgpOworICAg
IGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoKml0KSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRy
YWNrZXI6OmRlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAg
ICAgICAgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgbV9vcmlnaW5TZXQtPmNsZWFy
KCk7CisgICAgfQorCisgICAgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdp
bnMoKTsKKyAgICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKExvY2FsU3RvcmFnZVRhc2s6
OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMoKSk7Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Cisg
ICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdpbnMiKTsK
KyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzdWx0OworICAgIHdoaWxlICgocmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIGlmICghY2FuRGVsZXRl
T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAg
IG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4
dCgwKSk7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBk
YXRhYmFzZS4iKTsKKyAgICAKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAg
bV9kYXRhYmFzZS5jbG9zZSgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURh
dGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7Cit9
CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpCit7CisgICAgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpLmdldCgpKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7
ICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsK
KyAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworICAgIAorICAgIC8vIEJlZm9yZSBkZWxldGluZyBk
YXRhYmFzZSwgd2UgbmVlZCB0byBjbGVhciBpbi1tZW1vcnkgbG9jYWwgc3RvcmFnZSBkYXRhCisg
ICAgLy8gaW4gU3RvcmFnZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUgU3RvcmFnZUFyZWEgZGIuIEl0
J3MgcG9zc2libGUgZm9yIGFuCisgICAgLy8gaXRlbSB0byBiZSBhZGRlZCBpbW1lZGlhdGVseSBh
ZnRlciBjbG9zaW5nIHRoZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFyZWFTeW5jCisgICAgLy8gdG8g
cmVvcGVuIHRoZSBkYiBiZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQgYnkgYSBTdG9yYWdlVHJhY2tl
ciB0aHJlYWQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCByZW9wZW5pbmcgdGhlIGRiIGluIFN0b3Jh
Z2VBcmVhU3luYyB3aWxsIGNhbmNlbCBhIHBlbmRpbmcKKyAgICAvLyBTdG9yYWdlVHJhY2tlciBk
YiBkZWxldGlvbi4KKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKG9y
aWdpbik7CisKKyAgICBTdHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0
YWJhc2VHdWFyZCk7CisgICAgICAgIHdpbGxEZWxldGVPcmlnaW4ob3JpZ2luSWQpOworICAgICAg
ICBtX29yaWdpblNldC0+cmVtb3ZlKG9yaWdpbklkKTsKKyAgICB9CisgICAgCisgICAgbV90aHJl
YWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVPcmlnaW4ob3Jp
Z2luSWQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7
CisgICAgCisgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4ob3JpZ2luSWRlbnRpZmllcikpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0ZWQgdG8gZGVsZXRlIG9yaWdpbiAnJXMnIHdoaWxlIGl0
IHdhcyBiZWluZyBjcmVhdGVkXG4iLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZh
bHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBHZXQgb3JpZ2luJ3MgZGIgZmlsZSBwYXRoLCBkZWxldGUgZW50cnkgaW4gdHJh
Y2tlcidzIGRiLCB0aGVuIGRlbGV0ZSBkYiBmaWxlLgorICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRo
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3Jp
Z2luPT8iKTsKKyAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0
aCBmb3Igb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bklkZW50aWZpZXIpOworICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBmaW5kIG9yaWdpbiAnJXMnIGluIE9yaWdpbnMgdGFibGUiLCBvcmlnaW5JZGVudGlmaWVy
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTdHJp
bmcgcGF0aCA9IHBhdGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKworICAgIEFTU0VSVCgh
cGF0aC5pc0VtcHR5KCkpOworICAgIAorICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iKTsKKyAg
ICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwg
b3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZGVsZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAg
IGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklk
ZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fb3JpZ2luU2V0LT5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7CisgICAgU1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgpOworICAgIAorICAgIC8vIENsZWFuIHVw
IHRyYWNrZXIgZGlyZWN0b3J5IGlmIHRoZSBsYXN0IG9yaWdpbiBoYXMgYmVlbiByZW1vdmVkLgor
ICAgIGlmIChtX29yaWdpblNldC0+aXNFbXB0eSgpKSB7CisgICAgICAgIG1fZGF0YWJhc2UuY2xv
c2UoKTsKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5
RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisgICAgfQorICAgIAor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAordm9pZCBTdG9yYWdlVHJhY2tlcjo6d2ls
bERlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxv
Y2soKSk7CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0RlbGV0ZWQpCisgICAgICAgIG1fb3JpZ2lu
c0JlaW5nRGVsZXRlZCA9IGFkb3B0UHRyKG5ldyBPcmlnaW5TZXQpOworCisgICAgT3JpZ2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC0+ZW5kKCk7CisgICAgZm9yIChPcmln
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLT5hZGQoKml0KTsKK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxl
dGVkKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQgPSBhZG9wdFB0cihuZXcgT3JpZ2lu
U2V0KTsKKyAgICAgICAgCisgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLT5hZGQob3JpZ2luSWRl
bnRpZmllcik7Cit9CisgICAgCitib29sIFN0b3JhZ2VUcmFja2VyOjpjYW5EZWxldGVPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFz
ZUd1YXJkLnRyeUxvY2soKSk7CisgICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+Y29u
dGFpbnMob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmNhbmNl
bERlbGV0aW5nT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBp
ZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE11
dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIGlmICghbV9vcmln
aW5zQmVpbmdEZWxldGVkLT5pc0VtcHR5KCkpCisgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRl
ZC0+cmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpz
ZXRDbGllbnQoU3RvcmFnZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudCA9
IGNsaWVudDsKK30KKyAgICAKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJldmlzaW9u
IDc5NjU3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMyBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisgICAgICAgIC8vIE5v
dCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0b3JhZ2VBcmVhTWFw
IGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUgdW5kZXJseWluZyBk
YiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAgICAgIC8vIGFmdGVy
IGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxs
eSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VBcmVhU3luYyB0byBy
ZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJP
cmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0
aCwgdW5zaWduZWQgcXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlVGFzay5jcHAJKHJldmlzaW9uIDc5NjU3KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01MCw3ICs1MSwyOCBAQAogICAgIEFTU0VSVChtX3RocmVhZCk7CiAgICAgQVNT
RVJUKG1fdHlwZSA9PSBUZXJtaW5hdGVUaHJlYWQpOwogfQorICAgIAorTG9jYWxTdG9yYWdlVGFz
azo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAg
ICBBU1NFUlQobV90eXBlID09IEltcG9ydE9yaWdpbnMgfHwgbV90eXBlID09IERlbGV0ZUFsbE9y
aWdpbnMpOworfQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBl
IHR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKKyAgICA6IG1fdHlwZSh0eXBl
KQorICAgICwgbV9vcmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNT
RVJUKG1fdHlwZSA9PSBEZWxldGVPcmlnaW4pOworfQogCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2Nh
bFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAs
IG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKQorICAgICwgbV9kYXRhYmFzZUZp
bGVuYW1lKGRhdGFiYXNlRmlsZW5hbWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBTZXRPcmln
aW5EZXRhaWxzKTsKK30KKwogTG9jYWxTdG9yYWdlVGFzazo6fkxvY2FsU3RvcmFnZVRhc2soKQog
ewogfQpAQCAtNjQsNiArODYsMTggQEAKICAgICAgICAgY2FzZSBBcmVhU3luYzoKICAgICAgICAg
ICAgIG1fYXJlYS0+cGVyZm9ybVN5bmMoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNldE9yaWdpbkRldGFpbHM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLnN5bmNTZXRPcmlnaW5EZXRhaWxzKG1fb3JpZ2luSWRlbnRpZmllciwgbV9kYXRhYmFzZUZp
bGVuYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEltcG9ydE9yaWdpbnM6
CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNJbXBvcnRPcmlnaW5J
ZGVudGlmaWVycygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZXRlQWxs
T3JpZ2luczoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0
ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGV0ZU9y
aWdpbjoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZU9y
aWdpbihtX29yaWdpbklkZW50aWZpZXIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRGVsZXRlRW1wdHlEYXRhYmFzZToKICAgICAgICAgICAgIG1fYXJlYS0+ZGVsZXRlRW1wdHlE
YXRhYmFzZSgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24gNzk2NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2lu
Y2x1ZGUgIlN0b3JhZ2VNYXAuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNp
bmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTE0NCw2ICsxNDUsMjYgQEAK
ICAgICAvLyBCZWNhdXNlIHRoZXJlJ3MgYSBzaW5nbGUgZXZlbnQgbG9vcCBwZXItcHJvY2Vzcywg
dGhpcyBpcyBhIG5vLW9wLgogfQogCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9y
aWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVh
ID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKTsKKyAgICBpZiAoc3RvcmFnZUFyZWEpCisg
ICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisKK3ZvaWQg
U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAg
fQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NU
T1JBR0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAko
cmV2aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRh
c2suaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNDAsMTMgKzQxLDE3
IEBACiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzayB7CiAgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExvY2FsU3RvcmFnZVRhc2spOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBw
dWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBEZWxldGVF
bXB0eURhdGFiYXNlLCBUZXJtaW5hdGVUaHJlYWQgfTsKKyAgICAgICAgZW51bSBUeXBlIHsgQXJl
YUltcG9ydCwgQXJlYVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFNldE9yaWdpbkRldGFpbHMs
IEltcG9ydE9yaWdpbnMsIERlbGV0ZUFsbE9yaWdpbnMsIERlbGV0ZU9yaWdpbiwgVGVybWluYXRl
VGhyZWFkIH07CiAKICAgICAgICAgfkxvY2FsU3RvcmFnZVRhc2soKTsKIAogICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoU3RvcmFnZUFyZWFT
eW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1w
b3J0LCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFz
az4gY3JlYXRlU3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlRW1wdHlEYXRhYmFzZShTdG9y
YWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNr
KERlbGV0ZUVtcHR5RGF0YWJhc2UsIGFyZWEpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEltcG9ydE9yaWdpbnMpKTsgfQorICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTZXRPcmlnaW5E
ZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUZpbGVuYW1lKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhTZXRP
cmlnaW5EZXRhaWxzLCBvcmlnaW5JZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKSk7IH0KKyAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgeyByZXR1cm4gYWRvcHRQdHIobmV3
IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlT3JpZ2luLCBvcmlnaW5JZGVudGlmaWVyKSk7IH0KKyAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlQWxs
T3JpZ2lucygpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZUFs
bE9yaWdpbnMpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNr
PiBjcmVhdGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0K
IAogICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKCk7CkBAIC01NCwxMCArNTksMTUgQEAKICAgICBw
cml2YXRlOgogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFN0b3JhZ2VBcmVhU3luYyop
OwogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIExvY2FsU3RvcmFnZVRocmVhZCopOwor
ICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgICAgICBM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAg
ICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUpOwogCiAgICAgICAgIFR5cGUgbV90eXBlOwogICAg
ICAgICBTdG9yYWdlQXJlYVN5bmMqIG1fYXJlYTsKICAgICAgICAgTG9jYWxTdG9yYWdlVGhyZWFk
KiBtX3RocmVhZDsKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2luSWRlbnRpZmllcjsKKyAgICAgICAg
U3RyaW5nIG1fZGF0YWJhc2VGaWxlbmFtZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkocmV2
aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQAogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
aAkocmV2aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICAgIC8vIE9ubHkg
Y2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAorICAgICAgICAvLyBV
c2VkIHRvIGNsZWFyIGEgU3RvcmFnZUFyZWEgYW5kIGNsb3NlIGRiIGJlZm9yZSBiYWNraW5nIGRi
IGZpbGUgaXMgZGVsZXRlZC4KKyAgICAgICAgdm9pZCBjbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7
CisKICAgICBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4s
IHVuc2lnbmVkIHF1b3RhKTsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1w
bCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VUcmFj
a2VyX2gKKyNkZWZpbmUgU3RvcmFnZVRyYWNrZXJfaAorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorICAgIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0
YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvY2FsU3RvcmFnZVRhc2s7Citj
bGFzcyBMb2NhbFN0b3JhZ2VUaHJlYWQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFN0
b3JhZ2VUcmFja2VyQ2xpZW50OyAgICAKKworY2xhc3MgU3RvcmFnZVRyYWNrZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VUcmFja2VyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVHJhY2tlcihjb25z
dCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKKyAgICBzdGF0aWMgU3RvcmFnZVRyYWNrZXImIHRyYWNr
ZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZVRhc2sodm9pZCopOworCisgICAgdm9pZCBp
bXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgIHZvaWQgc2V0T3JpZ2luRGV0YWlscyhjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKTsK
KyAgICAKKyAgICB2b2lkIGRlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdp
bihTZWN1cml0eU9yaWdpbiopOworICAgIHZvaWQgZGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+ID4mIHJlc3VsdCk7CisKKyAgICB2b2lkIGNhbmNlbERlbGV0aW5nT3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgCisgICAgdm9pZCBzZXRDbGllbnQo
U3RvcmFnZVRyYWNrZXJDbGllbnQqKTsKKyAgICAKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFj
a2dyb3VuZCB0aHJlYWQuCisgICAgdm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZv
aWQgc3luY0RlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAg
IHZvaWQgc3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2lu
SWRlbnRpZmllcnMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJp
bmcmIHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgp
IGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KTsKKyAgICAKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0
cmluZyYpOworCisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKyAgICAKKyAgICBib29s
IGNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgd2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAg
IHZvaWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICB2b2lkIG9yaWdpbkZpbGVQ
YXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworICAgIHZvaWQgc3luY0ZpbGVTeXN0ZW1BbmRU
cmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CisgICAg
U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKworICAgIFN0cmluZyBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoOworCisgICAgU3RvcmFnZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50OworICAgIAorICAg
IHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IE9yaWdpblNldDsKKworICAgIC8vIEZJWE1FOiBkbyB3
ZSBuZWVkIGFuIG93bnB0ciBoZXJlPworICAgIE93blB0cjxPcmlnaW5TZXQ+IG1fb3JpZ2luU2V0
OworICAgIAorICAgIE93blB0cjxPcmlnaW5TZXQ+IG1fb3JpZ2luc0JlaW5nRGVsZXRlZDsKKyAg
ICAKKyAgICBPd25QdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKK307CisgICAgCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisK
KyNlbmRpZiAvLyBTdG9yYWdlVHJhY2tlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
Nzk2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
MjcyMyw3ICsyNzIzLDggQEAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAg
ICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAg
ICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0yNzQw
LDcgKzI3NDEsOCBAQAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIFwKICAgICAgICAg
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZUltcGwuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3Bw
CisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCisgICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXIuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxF
X1NZU1RFTT0xKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDExLTAy
LTI0ICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktpdDEgQVBJIHRvIHZpZXcg
YW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAgIENyZWF0ZWQgU3RvcmFnZVRyYWNrZXIg
YXMgYSBjZW50cmFsIHBvaW50IGZvciB0cmFja2luZyBhbmQgZGVsZXRpbmcgTG9jYWxTdG9yYWdl
IHBlciBvcmlnaW4uCisgICAgICAgIFN0b3JhZ2VUcmFja2VyIG1haW50YWlucyBpdHMgb3duIGRh
dGFiYXNlIG9mIG9yaWdpbiBpZGVudGlmaWVycyBhbmQgYmFja2luZyBkYiBwYXRocywKKyAgICAg
ICAgYW5kIHRoaXMgYWxsb3dzIGl0IHRvIGNvbnRhaW4gbW9yZSByZWxhdGlvbmFsIGRhdGEgaW4g
dGhlIGZ1dHVyZSwgbGlrZSB2YXJpYWJsZSBxdW90YXMgcGVyIG9yaWdpbi4KKworICAgICAgICBP
biBpbml0aWFsaXphdGlvbiwgU3RvcmFnZVRyYWNrZXIgc3luY3MgaXRzIGRhdGFiYXNlIHdpdGgg
TG9jYWxTdG9yYWdlIGZpbGVzIG9uIGRpc2suIEl0IGFkZHMKKyAgICAgICAgYW4gb3JpZ2luIGVu
dHJ5IHdoZW4gU3RvcmFnZUFyZWFTeW5jIHBlcmZvcm1zIGEgZmlyc3Qgc3luYyBmb3IgYW4gb3Jp
Z2luLgorCisgICAgICAgIEFsbCBTdG9yYWdlVHJhY2tlciBmaWxlIG9wZXJhdGlvbnMgYXJlIHBl
cmZvcm1lZCBvbiBvbmUgYmFja2dyb3VuZCB0aHJlYWQgd2l0aCBhIHRhc2sgcXVldWUuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGFyZSBjb250YWluZWQgaW4gdGhpcyBwYXRjaC4KKworICAgICAg
ICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdy
b3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgICogcGFnZS9Q
YWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJh
c2VUcmFja2VyQ2xpZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6cGVyZm9ybVRhc2spOgorICAg
ICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6TG9j
YWxTdG9yYWdlVGFzazo6Y3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU2V0T3JpZ2luRGV0YWlscyk6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxsT3JpZ2lucyk6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKToKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9z
ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UpOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJPcmlnaW5Gb3JE
ZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJB
bGxPcmlnaW5zRm9yRGVsZXRpb24pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFp
bHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjp3aWxsRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VU
cmFja2VyOjpjYW5EZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNr
ZXI6OmNhbmNlbERlbGV0aW5nT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpvcmlnaW5GaWxlUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6
OnNldENsaWVudCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4K
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmNwcDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+U3RvcmFnZVRyYWNrZXJDbGllbnQpOgorCiAy
MDExLTAyLTI0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDc5NjU3KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY1MjQyLDYg
KzY1MjQyLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
VmVyc2lvbkNoYW5nZUNhbGxiYWNrLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiA3OTY1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICAgICBjbGFzcyBH
cm91cFNldHRpbmdzOwogICAgIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOwogICAg
IGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgU3RvcmFn
ZU5hbWVzcGFjZTsKIAogICAgIGNsYXNzIFBhZ2VHcm91cCB7CkBAIC00OSw4ICs1MCwxMiBAQAog
ICAgICAgICB+UGFnZUdyb3VwKCk7CiAKICAgICAgICAgc3RhdGljIFBhZ2VHcm91cCogcGFnZUdy
b3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKTsKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
ICAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsKLSAgICAgICAgCisgICAg
ICAgIHN0YXRpYyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgICAg
ICBzdGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiop
OworI2VuZGlmICAgICAgICAKICAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlczsgfQogCiAgICAgICAgIHZvaWQgYWRkUGFnZShQYWdlKik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA3OTY1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkdyb3VwU2V0dGluZ3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVz
cGFjZS5oIgogCkBAIC0xMTAsNiArMTExLDM1IEBACiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3Jp
Z2lucygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
YWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOworICAgIGZvciAo
UGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCisg
ICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmlnaW5zRm9y
RGVsZXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFn
ZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIGlmICghcGFnZUdyb3Vw
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBw
YWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBw
YWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5z
ZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxT
dG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKKyAgICB9CisKK30KKwor
I2VuZGlmCisKIHZvaWQgUGFnZUdyb3VwOjphZGRQYWdlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgQVNT
RVJUKHBhZ2UpOwpAQCAtMjA5LDYgKzIzOSw3IEBACiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3Jh
Z2UuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMzE5Miw2ICszMTkyLDkgQEAKIAlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDc5NjU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDQgKzExMiwxMSBA
QAogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBs
ZW5ndGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKwor
ICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQko
cmV2aXNpb24gNzk2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3Rl
bU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNCArODYsMjMgQEAKICNlbmRpZgogfQogCitW
ZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKworICAgIC8vIFRo
aXMgY2FuIHJ1biBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBzbyBtdXN0IGNyZWF0ZSBhbiBhdXRv
cmVsZWFzZSBwb29sLgorICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxl
YXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAgICBOU0RpcmVjdG9yeUVudW1lcmF0b3IgKmRpciA9
IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZW51bWVyYXRvckF0UGF0aDpwYXRoXTsg
CisgICAgTlNTdHJpbmcgKmZpbGU7CisgICAgd2hpbGUgKChmaWxlID0gW2RpciBuZXh0T2JqZWN0
XSkpIHsKKyAgICAgICAgaWYgKGZpbHRlci5pc0VtcHR5KCkgfHwgKFtmaWxlIHJhbmdlT2ZTdHJp
bmc6ZmlsdGVyXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSkKKyAgICAgICAgICAgIGVudHJpZXMu
YXBwZW5kKFtwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlXSk7CisgICAg
fQorCisgICAgW3Bvb2wgcmVsZWFzZV07CisKKyAgICByZXR1cm4gZW50cmllczsKK30KKyAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc5
NjU3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00
MTYzLDYgKzQxNjMsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwJywKICAg
ICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oJywKKyAgICAgICAgICAgICdz
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5oJywKICAgICAgICAgICAgICdzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCcsCiAg
ICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oJywKICAgICAgICAgICAgICdzdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3OTY1NykK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtODQ2LDYgKzg0Niw5IEBACiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYw
NSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVz
cG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKIAkJMzdGRDQyOTgxMTgz
Njg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURl
cHRoTGltaXQuaCAqLzsgfTsKKwkJM0FCMDJEMkExMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
QUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzQUIwMkQyQjEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFj
a2VyLmNwcCAqLzsgfTsKKwkJM0FDMzY4MDAxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzQUM2NDhCMjEy
OUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyogRWRp
dGluZ0JvdW5kYXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0Iw
RjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9OwogCQk0MTAwMkND
RTBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVERUYwMDlFNjYw
RCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OwpAQCAtNzE5MSw2ICs3MTk0LDkgQEAK
IAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFE
IC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyZWVEZXB0aExpbWl0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBT
dG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdl
VHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUIwMkQyOTEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FDNjQ4QjExMjlFMTQ2NTAwQzNFQjI1IC8q
IEVkaXRpbmdCb3VuZGFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0
aW5nQm91bmRhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwMDJDQ0IwRjY2
RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNh
bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MDgsNiArMTI5MTQsOSBA
QAogCQkJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
ICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIu
Y3BwICovLAogCQkJCUM1MTAyRDkyMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFn
ZXIuaCAqLywKKwkJCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIu
aCAqLywKKwkJCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3Bw
ICovLAorCQkJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVu
dC5oICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9yYWdlOwpA
QCAtMjE5NTAsNiArMjE5NTksNyBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBT
dG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTVFMzhCRjEwMDQwRDVEMDBB
NTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTAy
RDk0MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjU0ODhENkIwREQ1QTgzRDAwOUQ4M0IyIC8qIFN0cmluZ1NvdXJjZVBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyog
U3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlGNzc3NjBFRkVDNjIwMDA5
MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDQyLDYg
KzIyNDUyLDcgQEAKIAkJCQlFMUYxRTgzMDBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVuc2lv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xU
UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUMzNjgwMDEyRUY3QTA5
MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMjQ3MDcs
NiArMjQ3MTgsNyBAQAogCQkJCUM1MEQwRTgyMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFt
ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAv
KiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTEwMkQ5NTBG
RDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkMzREEzMDBEMDA2QzFEMDBFRjZGMjYgLyogU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyQjI2NDVDMEQwMEE3N0UwMDBBQ0MxRCAvKiBTdHJpbmdDRi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkIyNjQ1RDBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nSW1w
bENGLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84501</attachid>
            <date>2011-03-02 17:59:53 -0800</date>
            <delta_ts>2011-03-02 19:23:34 -0800</delta_ts>
            <desc>[PATCH] with tests, for bots</desc>
            <filename>storage_tracker_withTests2.patch</filename>
            <type>text/plain</type>
            <size>108113</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9z
dG9yYWdlLXRyYWNrZXItMi1jcmVhdGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10
cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiU3RvcmFnZVRy
YWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91bGQg
YmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1sLiIpOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3Jh
Z2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGxheW91dFRlc3RDb250cm9s
bGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICAvLyBB
biBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28gd2UgY2FuIGV4aXQuCisgICAgICAgIHRlc3RGYWls
ZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0ZWQgd2l0aCBsb2NhbCBzdG9yYWdlLiIpOworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICAK
KyAgICAgICAgbG9jYWxTdG9yYWdlLnNvbWVEYXRhID0gJ3dyaXRlbWUnOworLy8gICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgLy8gTGF5b3V0
VGVzdENvbnRyb2xsZXIncyBub3RpZnlEb25lIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBvcmln
aW4gY2hhbmdlIG5vdGlmaWNhdGlvbiBjb21lcyBpbi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICB9Cit9CisK
K3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9y
YWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0
b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2Nh
bCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9fMCIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2Ut
dHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tl
ci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUt
ZGVsZXRlLW9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQVBJIHRvIHZp
ZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0
b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9u
IGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygibGF5b3V0
VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIiwgImZp
bGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0byBkZWxldGUgdGhlIGV4aXN0
aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbi4K
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucygxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0
byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oImZpbGU6Ly8iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBvcmlnaW5zIHdpdGggbG9j
YWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0KKworfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTQtY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiU3RvcmFn
ZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91
bGQgYmUgY2FsbGVkIGFmdGVyIHN0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwuaHRtbC4iKTsK
KworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKCF3
aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImxvY2FsU3RvcmFnZSBE
T0VTIE5PVCBleGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGRlYnVn
KCJUaGlzIHRlc3Qgc2hvdWxkIGhhdmUgbm8gdmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4iKTsK
KworICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgp
Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgLy8gQW4gb3JpZ2luIGFscmVhZHkgZXhpc3RzIHNvIHdl
IGNhbiBleGl0LgorICAgICAgICB0ZXN0RmFpbGVkKCJBbiBvcmlnaW4gYWxyZWFkeSBleGlzdGVk
IHdpdGggbG9jYWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnN5
bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNvbWVPdGhlckRhdGEgPSAn
d3JpdGVtZU1vcmUnOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFn
ZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgIH0KK30KKwordGVzdCgpOwkKKword2luZG93
LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBh
cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFy
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBh
cmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitQcmVwYXJlIGZv
ciBTdG9yYWdlVHJhY2tlciB0ZXN0cyBieSBlbnN1cmluZyB0aGF0IGV2ZXJ5IG9yaWdpbiB3aXRo
IGxvY2FsIHN0b3JhZ2UgaXMgZGVsZXRlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1RoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNr
ZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3Rv
cmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdl
LXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAK
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0
aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxl
dGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0
aExvY2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLnRvU3Ry
aW5nKCkiLCAiZmlsZV9fMCIpOworICAgICAgICAvLyBXZSdyZSBqdXN0IGdvaW5nIHRvIGRlbGV0
ZSB0aGUgZXhpc3Rpbmcgb3JpZ2luLCBzbyB3ZSdsbCBnZXQgb25lIG9yaWdpbiBjaGFuZ2Ugbm90
aWZpY2F0aW9uLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxl
dGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHRlc3RGYWlsZWQoIlJhbiB3aXRoIG5vIG9y
aWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlIik7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2lu
dCwgd2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdl
LgorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lz
U3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNr
ZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Rv
cmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNr
ZXItMS1wcmVwYXJlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiUHJlcGFyZSBmb3Ig
U3RvcmFnZVRyYWNrZXIgdGVzdHMgYnkgZW5zdXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBs
b2NhbCBzdG9yYWdlIGlzIGRlbGV0ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAor
ZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZp
c2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xs
ZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisK
K3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXIt
Mi1jcmVhdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTIt
Y3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTIt
Y3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorT3JpZ2lu
IGlkZW50aWZpZXI6ICdmaWxlX18wJworU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2Fs
IHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMt
cHJlcGFyZS5odG1sLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9y
YWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAgQEAKK1Rlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwg
c3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2luLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5z
V2l0aExvY2FsU3RvcmFnZSgpLnRvU3RyaW5nKCkgaXMgImZpbGVfXzAiCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItNC1jcmVhdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTQtY3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTQtY3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
T3JpZ2luIGlkZW50aWZpZXI6ICdmaWxlX18wJworU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRl
IGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIHN0
b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwuaHRtbC4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1RoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNj
ZXNzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlz
aW9uIDc5ODg2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJQaXhlbER1bXBTdXBw
b3J0LmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiUmVzb3VyY2VMb2Fk
RGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKICNpbXBvcnQg
IlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIgogI2ltcG9y
dCAiV29ya1F1ZXVlLmgiCkBAIC03Nyw2ICs3OCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJl
ZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJUeXBlc0ludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KICNp
bXBvcnQgPGdldG9wdC5oPgpAQCAtMTM0LDYgKzEzNiw3IEBACiBzdGF0aWMgUmVzb3VyY2VMb2Fk
RGVsZWdhdGUgKnJlc291cmNlTG9hZERlbGVnYXRlOwogc3RhdGljIEhpc3RvcnlEZWxlZ2F0ZSAq
aGlzdG9yeURlbGVnYXRlOwogUG9saWN5RGVsZWdhdGUgKnBvbGljeURlbGVnYXRlOworU3RvcmFn
ZVRyYWNrZXJEZWxlZ2F0ZSAqc3RvcmFnZURlbGVnYXRlOwogCiBzdGF0aWMgaW50IGR1bXBQaXhl
bHM7CiBzdGF0aWMgaW50IHRocmVhZGVkOwpAQCAtNDE0LDYgKzQxNyw3IEBACiAKICAgICBOU1N0
cmluZyAqcGF0aCA9IGxpYnJhcnlQYXRoRm9yRHVtcFJlbmRlclRyZWUoKTsKICAgICBbZGVmYXVs
dHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkRhdGFi
YXNlcyJdIGZvcktleTpXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAgICBbZGVm
YXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxv
Y2FsU3RvcmFnZSJdIGZvcktleTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOwogICAg
IFtkZWZhdWx0cyBzZXRPYmplY3Q6W3BhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAiTG9jYWxDYWNoZSJdIGZvcktleTpXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXldOwogCiAg
ICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJk
UHJlZmVyZW5jZXNdOwpAQCAtNTQ1LDYgKzU0OSw3IEBACiAgICAgcmVzb3VyY2VMb2FkRGVsZWdh
dGUgPSBbW1Jlc291cmNlTG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XTsKICAgICBwb2xpY3lEZWxl
Z2F0ZSA9IFtbUG9saWN5RGVsZWdhdGUgYWxsb2NdIGluaXRdOwogICAgIGhpc3RvcnlEZWxlZ2F0
ZSA9IFtbSGlzdG9yeURlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICBzdG9yYWdlRGVsZWdhdGUg
PSBbW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdOwogfQogCiAvLyBPYmpDKysg
ZG9lbnMndCBzZWVtIHRvIGxldCBtZSBwYXNzIE5TT2JqZWN0KiYgc2FkbHkuCkBAIC01NjIsNiAr
NTY3LDcgQEAKICAgICByZWxlYXNlQW5kWmVybygmcmVzb3VyY2VMb2FkRGVsZWdhdGUpOwogICAg
IHJlbGVhc2VBbmRaZXJvKCZ1aURlbGVnYXRlKTsKICAgICByZWxlYXNlQW5kWmVybygmcG9saWN5
RGVsZWdhdGUpOworICAgIHJlbGVhc2VBbmRaZXJvKCZzdG9yYWdlRGVsZWdhdGUpOwogfQogCiBz
dGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFy
Z2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDc5ODg2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIK
ICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxl
Z2F0ZS5oIgorI2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVUlE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWVJdGVt
LmgiCkBAIC02Niw2ICs2Nyw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViUXVvdGFNYW5hZ2VyLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2NyaXB0V29ybGQuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJT
ZWN1cml0eU9yaWdpblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJUeXBlc0ludGVybmFsLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CkBA
IC0xMzMsMTEgKzEzNSw1MyBAQAogICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIGRlbGV0ZUFsbEFw
cGxpY2F0aW9uQ2FjaGVzXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xv
Y2FsU3RvcmFnZSgpCit7CisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdl
TWFuYWdlcl0gdGVzdFN0b3JhZ2VTeW5jXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7
CisgICAgW3N0b3JhZ2VEZWxlZ2F0ZSBsb2dOb3RpZmljYXRpb25zOm51bWJlciBjb250cm9sbGVy
OnRoaXNdOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNl
cygpCiB7CiAgICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJhc2VNYW5hZ2Vy
XSBkZWxldGVBbGxEYXRhYmFzZXNdOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVk
V2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdpbnNdOworfQorCitKU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKK3sKKyAgICBXZWJTdG9yYWdlTWFuYWdlciAqc3RvcmFnZSA9IFtXZWJTdG9yYWdl
TWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl07CisKKyAgICBOU0FycmF5ICpvcmlnaW5z
ID0gW3N0b3JhZ2Ugb3JpZ2luc107CisgICAgTlNJbnRlZ2VyIGNvdW50ID0gW29yaWdpbnMgY291
bnRdOworCisgICAgSlNWYWx1ZVJlZiBqc09yaWdpbnNBcnJheVtjb3VudF07CisgICAgZm9yIChO
U0ludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIE5TU3RyaW5nICpvcmln
aW4gPSBbW29yaWdpbnMgb2JqZWN0QXRJbmRleDppXSBkYXRhYmFzZUlkZW50aWZpZXJdOworICAg
ICAgICBKU1N0cmluZ1JlZiBzdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJp
bmdSZWYpb3JpZ2luKTsKKyAgICAgICAganNPcmlnaW5zQXJyYXlbaV0gPSBKU1ZhbHVlTWFrZVN0
cmluZyhjb250ZXh0LCBzdHIpOworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIGpzQXJyYXlPYmpl
Y3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwganNPcmlnaW5zQXJyYXksIE5V
TEwpOworICAgIHJldHVybiBqc0FycmF5T2JqZWN0OworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQorewor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVJMKSk7CisgICAgCisgICAgV2ViU2VjdXJpdHlP
cmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIGluaXRXaXRoVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07CisKKyAgICBbW1dl
YlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkZWxldGVPcmlnaW46b3Jp
Z2luXTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExp
c3QoKQogewogICAgIFdlYkJhY2tGb3J3YXJkTGlzdCAqYmFja0ZvcndhcmRMaXN0ID0gW1ttYWlu
RnJhbWUgd2ViVmlld10gYmFja0ZvcndhcmRMaXN0XTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCShyZXZpc2lvbiA3OTg4NikKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiBAY2xhc3MgRHVtcFJlbmRlclRyZWVEcmFnZ2luZ0luZm87CiBAY2xh
c3MgTmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBAY2xhc3MgUG9saWN5RGVsZWdhdGU7CitAY2xhc3Mg
U3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZTsKIEBjbGFzcyBXZWJGcmFtZTsKIEBjbGFzcyBXZWJTY3Jp
cHRXb3JsZDsKIEBjbGFzcyBXZWJWaWV3OwpAQCAtNDIsNiArNDMsNyBAQAogY2xhc3MgRHVtcFJl
bmRlclRyZWVEcmFnZ2luZ0luZm87CiBjbGFzcyBOYXZpZ2F0aW9uQ29udHJvbGxlcjsKIGNsYXNz
IFBvbGljeURlbGVnYXRlOworY2xhc3MgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZTsKIGNsYXNzIFdl
YkZyYW1lOwogY2xhc3MgV2ViU2NyaXB0V29ybGQ7CiBjbGFzcyBXZWJWaWV3OwpAQCAtNTQsNiAr
NTYsNyBAQAogZXh0ZXJuIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvICpkcmFnZ2luZ0luZm87
CiBleHRlcm4gTmF2aWdhdGlvbkNvbnRyb2xsZXIqIGdOYXZpZ2F0aW9uQ29udHJvbGxlcjsKIGV4
dGVybiBQb2xpY3lEZWxlZ2F0ZSogcG9saWN5RGVsZWdhdGU7CitleHRlcm4gU3RvcmFnZVRyYWNr
ZXJEZWxlZ2F0ZSogc3RvcmFnZURlbGVnYXRlOwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgbWF4
Vmlld0hlaWdodDsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBtYXhWaWV3V2lkdGg7CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA3OTg4NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCw2NCBAQAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgc3luY0xvY2Fs
U3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jTG9jYWxTdG9yYWdlKCk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlv
bgorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisKKyAgICB1bnNpZ25lZCBudW1Ob3RpZmljYXRpb25zID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKworICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5vYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKG51bU5vdGlmaWNhdGlvbnMpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkZWxldGVBbGxMb2Nh
bFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8g
SGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgp
OworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdXJsKEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Cisg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbih1cmwuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gY29udHJv
bGxlci0+b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1Zh
bHVlUmVmIGNsZWFyQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCkBAIC0y
MTQ3LDYgKzIyMDUsMTEgQEAKICAgICAgICAgeyAiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkiLCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInNldFNjcm9sbGJhclBvbGljeSIsIHNldFNjcm9sbGJhclBvbGljeUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImF1dGhlbnRpY2F0ZVNlc3Npb24iLCBhdXRoZW50aWNhdGVTZXNz
aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwg
ZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3luY0xv
Y2FsU3RvcmFnZSIsIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgICAg
ICAgICAKKyAgICAgICAgeyAib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsIG9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAg
CisgICAgICAgIHsgImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIsIGRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlIiwgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzZXRTaG91bGRQYWludEJyb2tlbkltYWdlIiwgc2V0U2hvdWxkUGFpbnRCcm9rZW5J
bWFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzk4ODYpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAv
KiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0ZCQTJEMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlck1hYy5tbSAqLzsgfTsKIAkJMzcxM0VERTIxMTVCRTE5MzAwNzA1NzIw
IC8qIENvbG9yQml0cy1BLnBuZyBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcxM0VEREYxMTVCRTE2RjAwNzA1NzIwIC8qIENvbG9yQml0cy1B
LnBuZyAqLzsgfTsKIAkJMzcxM0VERTMxMTVCRTE5MzAwNzA1NzIwIC8qIENvbG9yQml0cy50dGYg
aW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
MTNFREUwMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmICovOyB9OworCQkzQTU2MjZD
QjEzMUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBNTYyNkMxMTMxQzhCMTcwMDJC
RTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovOyB9OworCQkzQTU2MjZDQzEzMUNB
MDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0E1NjI2QzAxMzFDOEIxNzAwMkJFNkQ5IC8q
IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLzsgfTsKIAkJNDQwNTkwNzExMjY4NDUzODAwQ0ZE
NDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5MDcwMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJB
cmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07CiAJCTQ0Mzc3MzBFMTI1Q0JDMzYwMEFBRTAy
QyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hp
dmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0Mzc3MzBGMTI1Q0JDNEQwMEFBRTAyQyAvKiBX
ZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0QTk5NzgyMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1
cHBvcnQuaCAqLzsgfTsKQEAgLTIzMCw2ICsyMzIsOCBAQAogCQkzNzVGMDk3NzBEQUMzQ0I2MDBD
OEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0
Y2hlcjcwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0Zjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzgwREFDM0NCNjAwQzhCNEU1IC8qIFdl
YktpdFdlaWdodFdhdGNoZXI4MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRm
OyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGY7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3NUYwOTc5MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRX
YXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZjsgcGF0aCA9IGZv
bnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzQTU2MjZDMDEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlckRlbGVnYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBNTYyNkMxMTMxQzhCMTcwMDJCRTZE
OSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDQwNTkwNzAxMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1w
U3VwcG9ydE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdl
YkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbTsgcGF0aCA9IG1hYy9XZWJBcmNoaXZlRHVtcFN1cHBv
cnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QTk5NzgyMEZDREU4NjQw
MDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmg7IHBhdGggPSBjZi9XZWJBcmNoaXZl
RHVtcFN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRBOTk3ODMwRkNE
RTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwOyBwYXRoID0g
Y2YvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQ2MCw2ICs0NjQsOCBAQAogCQkJCUJDQTE4QjVFMEM5QjA4QzIwMDExNDM2OSAvKiBSZXNv
dXJjZUxvYWREZWxlZ2F0ZS5tbSAqLywKIAkJCQlCQ0ExOEI1RjBDOUIwOEMyMDAxMTQzNjkgLyog
VUlEZWxlZ2F0ZS5oICovLAogCQkJCUJDQTE4QjYwMEM5QjA4QzIwMDExNDM2OSAvKiBVSURlbGVn
YXRlLm1tICovLAorCQkJCTNBNTYyNkMwMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tl
ckRlbGVnYXRlLmggKi8sCisJCQkJM0E1NjI2QzExMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VU
cmFja2VyRGVsZWdhdGUubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IERlbGVnYXRlczsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02MjAsNiArNjI2LDcgQEAKIAkJCQk1MTg1RjZCMzEw
NzE0RTEyMDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUI3ODE2NzExQUYzMUMzMDA3RTFCQzIgLyogTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI5Q0ZCQTEwMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJFNkQ5
IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtODA5LDYgKzgx
Niw3IEBACiAJCQkJRTFCNzgxNjUxMUFGMzFCNzAwN0UxQkMyIC8qIE1vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMTExMjI3MzZFNjAwQkMzMEMwIC8q
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0ZCQTJF
MTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTNBNTYyNkNCMTMxQ0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRl
bGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDc5ODg2KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDYgKzMw
NywxMiBAQAogCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHRGb3JMaXN0
SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdDsK
IAorICAgIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmKTsK
KyAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQg
b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpOworICAg
IHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworCiAgICAgdm9pZCBzZXRTaG91bGRQYWludEJyb2tl
bkltYWdlKGJvb2wpOwogICAgIGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc5ODg2KQor
KysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODUsNiArODUsMTEgQEAKIAkJMzdCNkZCNEYxMDYzNTMwQzAwMEZEQjNCIC8q
IFdlYlBERkRvY3VtZW50RXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdCNkZCNEQxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50
RXh0cmFzLm1tICovOyB9OwogCQkzN0QxRENBODEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZE
b2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFE
Q0E2MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oICovOyB9OwogCQkzN0QxRENBOTEw
NjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENBNzEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQ
REZEb2MubW0gKi87IH07CisJCTNBQjAyQUY2MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdl
TWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLzsgfTsK
KwkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRkYx
MkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNBQkIzQzdBMTMwOUMzQjUw
MEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IH07CisJCTNBQkIzQzdCMTMwOUMzQjUwMEU5M0Q5
NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5tbSAqLzsgfTsKKwkJM0FFMTVENTAxMkRCREVENDAwOTMyM0M4IC8q
IFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdl
TWFuYWdlckludGVybmFsLmggKi87IH07CiAJCTQxRjQ0ODRGMTAzMzhFOEMwMDMwRTU1RSAvKiBX
ZWJXb3JrZXJzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFGNDQ4NEQxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGNDQ4
NTAxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNDQ4NEUxMDMzOEU4QzAwMzBFNTVF
IC8qIFdlYldvcmtlcnNQcml2YXRlLm1tICovOyB9OwogCQk0NEJCOEIxNDEyNDFBMDIyMDAxRTNB
MjIgLyogV2ViQXJjaGl2ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NEJCOEIxMzEyNDFBMDIyMDAxRTNBMjIgLyogV2ViQXJjaGl2ZUlu
dGVybmFsLmggKi87IH07CkBAIC00ODIsNiArNDg3LDExIEBACiAJCTM5NDQ2MDdFMDIwRjUwRUQw
RUNBMTc2NyAvKiBXZWJCYWNrRm9yd2FyZExpc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJCYWNrRm9yd2FyZExpc3QubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQkzOTQ0NjA3RjAyMEY1MEVEMEVDQTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCTM5NDQ2MDgwMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0b3J5SXRlbS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhp
c3RvcnlJdGVtLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKKwkJM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3RvcmFn
ZU1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyQUZGMTJDMTMy
QjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdl
VHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUJCM0M3
OTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FFMTVENEYxMkRCREVENDAwOTMyM0M4
IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViV29ya2Vyc1ByaXZhdGUuaDsg
cGF0aCA9IG1hYy9Xb3JrZXJzL1dlYldvcmtlcnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxRjQ0ODRFMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYldvcmtlcnNQ
cml2YXRlLm1tOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vyc1ByaXZhdGUubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OTA5OEI5MEY4RjgyREYwMDc2QTMyNyAvKiBGZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTUs
NiArMTA2NSwxMSBAQAogCQkJCUE1REVGQzBFMTFENTM0M0UwMDg4NTI3MyAvKiBXZWJEYXRhYmFz
ZVF1b3RhTWFuYWdlci5tbSAqLywKIAkJCQk1MTFGM0ZEMzBDRUNDODhGMDA4NTI1NjUgLyogV2Vi
RGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJNTExRjNGRDQwQ0VDQzg4RjAwODUyNTY1
IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbSAqLywKKwkJCQkzQUIwMkFGNTEyQzEzMTlC
MDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8sCisJCQkJM0FCMDJBRkYxMkMxMzJC
MjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oICovLAorCQkJCTNBRTE1RDRG
MTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggKi8sCisJCQkJ
M0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8s
CisJCQkJM0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
Lm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBTdG9yYWdlOwogCQkJcGF0aCA9IG1hYy9TdG9yYWdl
OwpAQCAtMTYyNCw3ICsxNjM5LDEwIEBACiAJCQkJNTk4QUQ5MkExMjAxQ0YzQjAwQUJBRTRFIC8q
IFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU5OEFEQTQ2MTIwMjI3NTAwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyQTFBNDEyM0IwQjNDMDA5RkUxMkEgLyog
V2ViRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUIwMkIwMDEyQzEzMkIy
MDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTNBRTE1RDUwMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdl
TWFuYWdlckludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUJCM0M3QTEzMDlDM0I1MDBF
OTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTk5
Miw3ICsyMDEwLDkgQEAKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyogV2ViRGV2aWNl
T3JpZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFF
NEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywK
IAkJCQk5M0UyQTFBNTEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJM0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VN
YW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNjJBRTMxMjVGODdDMjAwN0ZEMTE4IC8q
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0FCQjNDN0Ix
MzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFt
ZXNwYWNlUHJveHkuaAkocmV2aXNpb24gNzk4ODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
MTEgQEAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKTsKKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdp
biopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCB0ZXN0Rm9yY2VTeW5jKCk7CiAKIHByaXZhdGU6CiAgICAgT3du
UHRyPFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZT4gbV9zdG9yYWdlTmFtZXNwYWNlOwpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNl
UHJveHkuY3BwCShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDIx
IEBACiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNl
UHJveHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94
eTo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp0ZXN0Rm9yY2VTeW5jKCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgYSBzeW5jIHRv
IGJhY2tpbmcgZGIuCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lv
biA3OTg4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMjcgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlh
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAg
ICAgQWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAg
ICAgICAgU3R1YnMgZm9yIENocm9taXVtIGJ1aWxkLgorCisgICAgICAgICogc3JjL1N0b3JhZ2VO
YW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJv
eHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5h
bWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbik6CisgICAgICAgICogc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oOgorCiAyMDExLTAyLTI3ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDItMjQgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTE4NzgKKyAgICAgICAgQWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2Nh
bCBzdG9yYWdlCisKKyAgICAgICAgKiBTdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTEtMDItMjQgIFBl
dGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXpl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXpl
ZC50eHQJKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYktpdC9TdHJpbmdzTm90VG9CZUxv
Y2FsaXplZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miw2ICs0OTIsOCBAQAogIldlYlNlY3Vy
aXR5T3JpZ2luIgogIldlYlNlcmlhbGl6ZWRKU1ZhbHVlIgogIldlYlNpdGVVUkxUb0ljb25VUkxL
ZXkiCisiV2ViU3RvcmFnZU1hbmFnZXIiCisiV2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlm
aWNhdGlvbiIKICJXZWJTdWJmcmFtZUFyY2hpdmVzIgogIldlYlN1YnJlc291cmNlcyIKICJXZWJU
ZXh0UmVuZGVyZXIiCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHJldmlzaW9uIDc5ODg2KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcg
QEAKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVN0YXRpc3RpY3MKIC5vYmpjX2NsYXNzX25hbWVf
V2ViRGF0YVNvdXJjZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEYXRhYmFzZU1hbmFnZXIKKy5vYmpj
X2NsYXNzX25hbWVfV2ViU3RvcmFnZU1hbmFnZXIKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGVmYXVs
dFBvbGljeURlbGVnYXRlCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uCiAu
b2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrCkBAIC0xMTQs
NiArMTE1LDggQEAKIF9XZWJTY3JpcHRFcnJvckRlc2NyaXB0aW9uS2V5CiBfV2ViU2NyaXB0RXJy
b3JEb21haW4KIF9XZWJTY3JpcHRFcnJvckxpbmVOdW1iZXJLZXkKK19XZWJTdG9yYWdlRGlyZWN0
b3J5RGVmYXVsdHNLZXkKK19XZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uCiBf
V2ViVVJMTmFtZVBib2FyZFR5cGUKIF9XZWJVUkxQYm9hcmRUeXBlCiBfV2ViVmlld0RpZEJlZ2lu
RWRpdGluZ05vdGlmaWNhdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViU2VjdXJpdHlPcmlnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW0JKHJldmlzaW9uIDc5ODg2KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDIzICs0NiwyOCBAQAogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoW3VybCBhYnNvbHV0ZVVS
TF0pKTsKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4uZ2V0KCkpOworICAgIF9wcml2YXRl
ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgKj4ob3JpZ2luLmdl
dCgpKTsKIAogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1N0cmluZyopcHJvdG9jb2wKKy0g
KE5TU3RyaW5nICopcHJvdG9jb2wKIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZWN1
cml0eU9yaWdpbio+KF9wcml2YXRlKS0+cHJvdG9jb2woKTsKIH0KIAotLSAoTlNTdHJpbmcqKWhv
c3QKKy0gKE5TU3RyaW5nICopaG9zdAogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNl
Y3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAKKy0gKE5TU3RyaW5nICopZGF0
YWJhc2VJZGVudGlmaWVyCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlP
cmlnaW4qPihfcHJpdmF0ZSktPmRhdGFiYXNlSWRlbnRpZmllcigpOworfQorCiAvLyBEZXByZWNh
dGVkLiBVc2UgaG9zdCBpbnN0ZWFkLiBUaGlzIG5lZWRzIHRvIHN0YXkgaGVyZSB1bnRpbCB3ZSBz
aGlwIGEgbmV3IFNhZmFyaS4KLS0gKE5TU3RyaW5nKilkb21haW4KKy0gKE5TU3RyaW5nICopZG9t
YWluCiB7CiAgICAgcmV0dXJuIFtzZWxmIGhvc3RdOwogfQpAQCAtMTExLDcgKzExNiw3IEBACiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRlID0g
cmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4pOworICAg
IF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgKj4o
b3JpZ2luKTsKIAogICAgIHJldHVybiBzZWxmOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRl
LmgJKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDEx
IEBACiAKIC0gKGlkKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybDsKIAotLSAoTlNTdHJpbmcqKXBy
b3RvY29sOwotLSAoTlNTdHJpbmcqKWhvc3Q7CistIChOU1N0cmluZyAqKXByb3RvY29sOworLSAo
TlNTdHJpbmcgKilob3N0OwogCistIChOU1N0cmluZyAqKWRhdGFiYXNlSWRlbnRpZmllcjsKKwog
Ly8gUmV0dXJucyB6ZXJvIGlmIHRoZSBwb3J0IGlzIHRoZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBw
cm90b2NvbCwgbm9uLXplcm8gb3RoZXJ3aXNlLgogLSAodW5zaWduZWQgc2hvcnQpcG9ydDsKIApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzk4ODYpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAxMS0wMi0yOCAg
QW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVs
ZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBBZGRlZCBBUEkgdG8gYWNjZXNzIFN0b3JhZ2VU
cmFja2VyLiBBZGRlZCBTdG9yYWdlVHJhY2tlckNsaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0Cisg
ICAgICAgIHNlbmRzIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9ucy4KKworICAgICAgICAqIFN0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAoK1tXZWJTdG9yYWdl
TWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0pOgorICAgICAgICAoLVtXZWJTdG9yYWdl
TWFuYWdlciBvcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZUFs
bE9yaWdpbnNdKToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgZGVsZXRlT3JpZ2luOl0p
OgorICAgICAgICAoc3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViS2l0SW5pdGlh
bGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTWFu
YWdlckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVu
dC5tbTogQWRkZWQuCisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6
OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xp
ZW50Ojp+V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKToKKyAgICAgICAg
KFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdpbik6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW06CisgICAgICAgICgtW1dl
YlNlY3VyaXR5T3JpZ2luIGRhdGFiYXNlSWRlbnRpZmllcl0pOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYktpdC5leHA6
CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21t
b25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOnVzZXNEb2N1bWVudFZpZXdz
Ol0pOiBJbml0aWFsaXplIFN0b3JhZ2VUcmFja2VyCisKIDIwMTEtMDItMjYgIFZzZXZvbG9kIFZs
YXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwg
RmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXJJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2Vi
U3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9t
YWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKwordm9p
ZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisgCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCA6
IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVu
dCgpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFk
KHZvaWQqIGNvbnRleHQpOworICAgIAorICAgIHZpcnR1YWwgfldlYlN0b3JhZ2VUcmFja2VyQ2xp
ZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKK3ByaXZhdGU6CisgICAgV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKK307CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorCisjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgiCisjaW1wb3J0ICJXZWJT
dG9yYWdlTWFuYWdlclByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VySW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3RvcmFnZVRyYWNrZXIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK05TU3RyaW5nICogY29uc3QgV2ViU3Rv
cmFnZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2NhbFN0b3JhZ2VEYXRhYmFzZVBh
dGhQcmVmZXJlbmNlS2V5IjsKK05TU3RyaW5nICogY29uc3QgV2ViU3RvcmFnZURpZE1vZGlmeU9y
aWdpbk5vdGlmaWNhdGlvbiA9IEAiV2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlv
biI7CisKK3N0YXRpYyBOU1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKKworQGltcGxl
bWVudGF0aW9uIFdlYlN0b3JhZ2VNYW5hZ2VyCisKKysgKFdlYlN0b3JhZ2VNYW5hZ2VyICopc2hh
cmVkV2ViU3RvcmFnZU1hbmFnZXIKK3sKKyAgICBzdGF0aWMgV2ViU3RvcmFnZU1hbmFnZXIgKnNo
YXJlZE1hbmFnZXIgPSBbW1dlYlN0b3JhZ2VNYW5hZ2VyIGFsbG9jXSBpbml0XTsKKyAgICByZXR1
cm4gc2hhcmVkTWFuYWdlcjsKK30KKworLSAoTlNBcnJheSAqKW9yaWdpbnMKK3sKKyAgICBWZWN0
b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IGNvcmVPcmlnaW5zOworCisgICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKGNvcmVPcmlnaW5zKTsKKworICAgIE5TTXV0YWJsZUFy
cmF5ICp3ZWJPcmlnaW5zID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0
eTpjb3JlT3JpZ2lucy5zaXplKCldOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Jl
T3JpZ2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJTZWN1cml0eU9yaWdpbiAqd2ViT3Jp
Z2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5
T3JpZ2luOmNvcmVPcmlnaW5zW2ldLmdldCgpXTsKKyAgICAgICAgW3dlYk9yaWdpbnMgYWRkT2Jq
ZWN0OndlYk9yaWdpbl07CisgICAgICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07CisgICAgfQorCisg
ICAgcmV0dXJuIFt3ZWJPcmlnaW5zIGF1dG9yZWxlYXNlXTsKK30KKworLSAodm9pZClkZWxldGVB
bGxPcmlnaW5zCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVBbGxPcmln
aW5zKCk7Cit9CisKKy0gKHZvaWQpZGVsZXRlT3JpZ2luOihXZWJTZWN1cml0eU9yaWdpbiAqKW9y
aWdpbgoreworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKFtvcmln
aW4gX2NvcmVdKTsKK30KKworLSAodm9pZCl0ZXN0U3RvcmFnZVN5bmMKK3sKKyAgICBTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLnRlc3RTdG9yYWdlU3luYygpOworfQorCistICh2b2lkKXRlc3RG
aWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlU3luYworeworICAgIFN0b3JhZ2VUcmFja2VyOjp0
cmFja2VyKCkuc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKK30KKworc3RhdGlj
IE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpCit7CisgICAgTlNVc2VyRGVmYXVsdHMg
KmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKKyAgICBO
U1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6V2ViU3Rv
cmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAgICBpZiAoIXN0b3JhZ2VEaXJlY3RvcnkgfHwg
IVtzdG9yYWdlRGlyZWN0b3J5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAg
ICAgIHN0b3JhZ2VEaXJlY3RvcnkgPSBAIn4vTGlicmFyeS9XZWJLaXQvTG9jYWxTdG9yYWdlIjsK
KyAgICAKKyAgICByZXR1cm4gW3N0b3JhZ2VEaXJlY3Rvcnkgc3RyaW5nQnlTdGFuZGFyZGl6aW5n
UGF0aF07Cit9CisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpCit7
CisgICAgc3RhdGljIEJPT0wgaW5pdGlhbGl6ZWQgPSBOTzsKKyAgICBpZiAoaW5pdGlhbGl6ZWQp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRy
YWNrZXIoc3RvcmFnZURpcmVjdG9yeVBhdGgoKSk7CisgICAgCisgICAgU3RvcmFnZVRyYWNrZXI6
OnRyYWNrZXIoKS5zZXRDbGllbnQoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50KCkpOworICAgIAorICAgIGluaXRpYWxpemVkID0gWUVTOworfQor
CitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9y
YWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisK
KyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQgIldlYlNlY3Vy
aXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5o
IgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlN0b3JhZ2VU
cmFja2VyQ2xpZW50KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRy
YWNrZXJDbGllbnQoKQoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogc2hh
cmVkQ2xpZW50ID0gbmV3IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgcmV0dXJuIHNo
YXJlZENsaWVudDsKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFj
a2VyQ2xpZW50KCkKK3sKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdl
VHJhY2tlckNsaWVudCgpCit7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRp
c3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hh
cmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3Rh
dGljX2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbikKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHdl
YlNlY3VyaXR5T3JpZ2luKEFkb3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0
V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViU3Rv
cmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3VyaXR5T3JpZ2lu
LmdldCgpXTsKK30KKwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRN
b2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9t
RGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKCFpc01haW5U
aHJlYWQoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luT25NYWluVGhyZWFkLCBzdGF0aWNfY2FzdDx2b2lkKj4ob3JpZ2luLmxlYWtSZWYoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3Jp
Z2luKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qg
V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5OworZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qg
V2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbjsKKworQGNsYXNzIFdlYlNlY3Vy
aXR5T3JpZ2luOworCitAaW50ZXJmYWNlIFdlYlN0b3JhZ2VNYW5hZ2VyIDogTlNPYmplY3QKKwor
KyAoV2ViU3RvcmFnZU1hbmFnZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcjsKKworLy8gUmV0
dXJucyBhbiBhcnJheSBvZiBXZWJTZWN1cml0eU9yaWdpbiBvYmplY3RzIHRoYXQgaGF2ZSBMb2Nh
bFN0b3JhZ2UuCistIChOU0FycmF5ICopb3JpZ2luczsKKworLSAodm9pZClkZWxldGVBbGxPcmln
aW5zOworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICopb3JpZ2luOwor
CistICh2b2lkKXRlc3RTdG9yYWdlU3luYzsKKy0gKHZvaWQpdGVzdEZpbGVTeXN0ZW1BbmRUcmFj
a2VyRGF0YWJhc2VTeW5jOworCitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW1wb3J0ICJXZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYlNjcmlwdERlYnVnRGVsZWdhdGUuaCIK
ICNpbXBvcnQgIldlYlNjcmlwdFdvcmxkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VN
YW5hZ2VySW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9y
dCAiV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJUZXh0SXRlcmF0
b3IuaCIKQEAgLTY4Nyw2ICs2ODgsMTAgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAg
IFdlYktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNl
c3NhcnkoKTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNo
ZVBhdGhJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVzTWV0
aG9kKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc5ODg2
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEw
ODQsNiArMTA4NCwxNiBAQAogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xMGNhbkRpc3Bs
YXlFUktOU180S1VSTEUKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMThkYXRhYmFzZUlk
ZW50aWZpZXJFdgogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW41ZXF1YWxFUEtTMF8KKyNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMTdpbml0
aWFsaXplVHJhY2tlckVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNr
ZXIxNmRlbGV0ZUFsbE9yaWdpbnNFdgorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjEyZGVs
ZXRlT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJh
Y2tlcjd0cmFja2VyRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3b3JpZ2luc0VSTjNX
VEY2VmVjdG9ySU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVMbTBFRUUKK19fWk43
V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI5c2V0Q2xpZW50RVBOU18yMFN0b3JhZ2VUcmFja2VyQ2xp
ZW50RQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjE1dGVzdFN0b3JhZ2VTeW5jRXYKK19f
Wk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIzMnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFi
YXNlRXYKKyNlbmRpZgogX19aTks3V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMThmb2N1c2VkT3JN
YWluRnJhbWVFdgogX19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVwbGF0Zm9ybUNvbnRl
eHRFdgogX19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTZwYWludGluZ0Rpc2FibGVkRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlz
aW9uIDc5ODg2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDMxIEBACiAjZW5kaWYKIH0KIAordm9pZCBT
dG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VSVCgh
bV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAg
ICBpZiAobV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90YSA9
IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1h
cDo6Y3JlYXRlKHF1b3RhKTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsK
KyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgbV9z
dG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKyAgICAK
K3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjp0ZXN0Rm9yY2VTeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1f
aXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAg
aWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+dGVzdEZv
cmNlU3luYygpOworfQorCiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCkgY29uc3QKIHsKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgU3RvcmFnZVRy
YWNrZXJDbGllbnRfaAorI2RlZmluZSBTdG9yYWdlVHJhY2tlckNsaWVudF9oCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0b3JhZ2VU
cmFja2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVu
dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDc5ODg2KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJT
dG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNpbmNs
dWRlICJTdG9yYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgIlN1ZGRlblRlcm1pbmF0aW9uLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0xMzgsNiArMTM5LDI1IEBACiAgICAg
fQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNlKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9maW5hbFN5bmNTY2hl
ZHVsZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc3lu
Y1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0
b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBp
cyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUK
KyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRpc2FibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNU
aW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CkBAIC0yMjIsNiArMjQyLDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyAgICAvLyBBIFN0b3JhZ2VUcmFja2VyIHRocmVhZCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxlZCB0
byBkZWxldGUgdGhlIGRiIHdlJ3JlCisgICAgLy8gcmVvcGVuaW5nLCBzbyBjYW5jZWwgcG9zc2li
bGUgZGVsZXRpb24uCisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5jZWxEZWxldGlu
Z09yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CisKICAgICBpZiAoIW1fZGF0YWJhc2Uub3Bl
bihkYXRhYmFzZUZpbGVuYW1lKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVu
IGRhdGFiYXNlIGZpbGUgJXMgZm9yIGxvY2FsIHN0b3JhZ2UiLCBkYXRhYmFzZUZpbGVuYW1lLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKQEAgLTIzNSw2ICsyNTksOCBA
QAogICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldE9yaWdpbkRldGFpbHMo
bV9kYXRhYmFzZUlkZW50aWZpZXIsIGRhdGFiYXNlRmlsZW5hbWUpOwogfQogCiB2b2lkIFN0b3Jh
Z2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCkBAIC0zMTksNiArMzQ1LDE1IEBACiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBDbG9zaW5n
IHRoaXMgZGIgYmVjYXVzZSBpdCBpcyBhYm91dCB0byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFj
a2VyLgorICAgIC8vIFRoZSBkZWxldGUgd2lsbCBiZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFT
eW5jIG5lZWRzIHRvIHJlb3BlbiB0aGUgZGIKKyAgICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3Jl
YXRlZCBhZnRlciB0aGUgcmVxdWVzdCB0byBkZWxldGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmND
bG9zZURhdGFiYXNlKSB7CisgICAgICAgIG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAg
ICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAog
ICAgIC8vIElmIHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMg
b3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMp
IHsKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJP
TSBJdGVtVGFibGUiKTsKQEAgLTMzMyw3ICszNjgsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQotCisgICAgCiAgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2Rh
dGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiKTsKICAgICBpZiAo
aW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSIpOwpAQCAtNDIxLDEyICs0NTYsMTUgQEAKICAgICBpZiAoIWNvdW50
KSB7CiAgICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7CiAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKLSAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxs
RGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghU1FM
aXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIs
IGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIFN0b3JhZ2VUcmFja2Vy
Ojp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKICAgICB9Cit9
ICAgICAgICAKKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnRlc3RGb3JjZVN5bmMoKQoreworICAg
IHN5bmNUaW1lckZpcmVkKCZtX3N5bmNUaW1lcik7CiB9Ci0KKyAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkocmV2aXNpb24gNzk4ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSwxMCBAQAogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVJdGVtRm9yU3luYyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVD
bGVhcigpOworICAgICAgICB2b2lkIHNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOwogCisgICAgICAg
IHZvaWQgdGVzdEZvcmNlU3luYygpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFy
ZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CiAKQEAgLTkyLDYg
Kzk1LDggQEAKICAgICAgICAgYm9vbCBtX3N5bmNTY2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9z
eW5jSW5Qcm9ncmVzczsKICAgICAgICAgYm9vbCBtX2RhdGFiYXNlT3BlbkZhaWxlZDsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgbV9zeW5jQ2xvc2VEYXRhYmFzZTsKIAogICAgICAgICBtdXRhYmxl
IE11dGV4IG1faW1wb3J0TG9jazsKICAgICAgICAgbXV0YWJsZSBUaHJlYWRDb25kaXRpb24gbV9p
bXBvcnRDb25kaXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRy
YWNrZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisjaW5jbHVk
ZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0b3JhZ2VUcmFja2VyKiBzdG9yYWdlVHJh
Y2tlciA9IDA7CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0
IFN0cmluZyYgc3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFzdG9yYWdlVHJhY2tlcik7Cisg
ICAgaWYgKHN0b3JhZ2VUcmFja2VyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmFn
ZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgpOworfQorCitTdG9yYWdl
VHJhY2tlciYgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKQoreworICAgIGlmICghc3RvcmFnZVRy
YWNrZXIpCisgICAgICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKCIiKTsK
KyAgICAKKyAgICByZXR1cm4gKnN0b3JhZ2VUcmFja2VyOworfQorCitTdG9yYWdlVHJhY2tlcjo6
U3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKKyAgICA6IG1fY2xpZW50
KDApCisgICAgLCBtX3RocmVhZChMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIAorICAgIHNldFN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3Rl
clNRTGl0ZVZGUygpOworICAgIAorICAgIG1fdGhyZWFkLT5zdGFydCgpOyAgCisgICAgaW1wb3J0
T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFn
ZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09w
ZW4oKSk7CisgICAgCisgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2Fm
ZUNvcHkoKTsKK30KKworU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VG
aWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCAiU3RvcmFnZVRyYWNrZXIuZGIi
KTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisKKyAgICBpZiAobV9kYXRhYmFz
ZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBkYXRhYmFzZVBh
dGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7CisgICAgCisgICAgaWYgKCFTUUxpdGVGaWxlU3lz
dGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCkpIHsKKyAgICAgICAgaWYgKGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFi
YXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWko
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2Uu
ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJs
ZUV4aXN0cygiT3JpZ2lucyIpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCBwYXRoIFRFWFQpOyIpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIE9yaWdpbnMgdGFibGUuIik7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFj
a2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit7ICAgIAorICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fb3JpZ2luU2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
bV9vcmlnaW5TZXQgPSBhZG9wdFB0cihuZXcgT3JpZ2luU2V0KTsKKyAgICB9CisgICAgCisgICAg
bV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVu
dGlmaWVyc0ltcG9ydCgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisK
KyAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBP
cmlnaW5zIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50
IHJlc3VsdDsKKyAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBT
UUxSZXN1bHRSb3cpCisgICAgICAgICAgICBtX29yaWdpblNldC0+YWRkKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApLnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICB9CisgICAgCisg
ICAgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICBpZiAobV9j
bGllbnQpIHsKKyAgICAgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdp
blNldC0+ZW5kKCk7CisgICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oKml0KTsKKyAgICB9Cit9CisgICAgCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpCit7Cisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBmaWxlRXh0LCAoIi5sb2NhbHN0b3JhZ2UiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCB1bnNpZ25lZCwgZmlsZUV4dExlbmd0aCwgKGZpbGVF
eHQubGVuZ3RoKCkpKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzID0gbGlzdERpcmVjdG9y
eShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCBmaWxlRXh0KTsKKworICAgIC8vIEFkZCBtaXNzaW5n
IFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAg
ICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGF0aHMuZW5kKCk7CisgICAg
Zm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSAqaXQ7CisgICAgICAgIGlm
IChwYXRoLmVuZHNXaXRoKGZpbGVFeHQsIHRydWUpICYmIHBhdGgubGVuZ3RoKCkgPiBmaWxlRXh0
TGVuZ3RoKSB7CisgICAgICAgICAgICBTdHJpbmcgZmlsZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRo
KTsKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmco
MCwgZmlsZS5sZW5ndGgoKSAtIGZpbGVFeHRMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtX29y
aWdpblNldC0+Y29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldE9yaWdpbkRldGFpbHMo
b3JpZ2luSWRlbnRpZmllciwgcGF0aCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzeW5jU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9yYWdl
VHJhY2tlciByZWNvcmRzLgorICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0g
bV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBzZXRFbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKCFmb3VuZE9yaWdpbnMuY29udGFpbnMoKml0KSkgeworICAgICAgICAgICAgaWYgKGlzTWFp
blRocmVhZCgpKQorICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbigqaXQpOworICAgICAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgICAgICBzeW5jRGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkK
K3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgICAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fb3JpZ2luU2V0LT5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX29yaWdpblNldC0+YWRkKG9yaWdpbklkZW50aWZpZXIpOworICAg
IH0KKworICAgIExvY2FsU3RvcmFnZVRhc2sqIHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVh
dGVTZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0
YWJhc2VGaWxlKS5sZWFrUHRyKCk7CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNr
KTsKKyAgICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAo
dm9pZCopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayh2b2lk
KiB0YXNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQpOworICAgIAorICAgIGlmIChTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkKQorICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLm1fdGhyZWFkLT5zY2hlZHVsZVRhc2soKExvY2FsU3RvcmFnZVRhc2sqKXRhc2spOworfQor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIAor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBW
QUxVRVMgKD8sID8pIik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMn
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsK
KyAgICAKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNr
ZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIGlmICghbV9vcmln
aW5TZXQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICBtX29yaWdpblNldC0+
YWRkKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgU3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
PiYgcmVzdWx0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIEFTU0VSVChtX29yaWdpblNldCk7CisgICAgCisgICAgT3JpZ2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC0+ZW5kKCk7CisgICAgZm9yIChPcmlnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFi
YXNlSWRlbnRpZmllcigqaXQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlQWxs
T3JpZ2lucygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90
aHJlYWQpOworICAgIEFTU0VSVChtX29yaWdpblNldCk7CisKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICB3aWxsRGVsZXRl
QWxsT3JpZ2lucygpOworICAgICAgICBtX29yaWdpblNldC0+Y2xlYXIoKTsKKyAgICB9CisKKyAg
ICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgIAorICAg
IG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxs
T3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxP
cmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1FM
aXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpKTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3Bh
dGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAg
IAorICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNlLmNsb3Nl
KCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRh
YmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKK30KKwordm9pZCBTdG9yYWdl
VHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sK
KyAgICBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50
aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sgICAgCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAgIEFTU0VSVChtX29y
aWdpblNldCk7CisgICAgCisgICAgLy8gQmVmb3JlIGRlbGV0aW5nIGRhdGFiYXNlLCB3ZSBuZWVk
IHRvIGNsZWFyIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlIGRhdGEKKyAgICAvLyBpbiBTdG9yYWdl
QXJlYSwgYW5kIHRvIGNsb3NlIHRoZSBTdG9yYWdlQXJlYSBkYi4gSXQncyBwb3NzaWJsZSBmb3Ig
YW4KKyAgICAvLyBpdGVtIHRvIGJlIGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NpbmcgdGhl
IGRiIGFuZCBjYXVzZSBTdG9yYWdlQXJlYVN5bmMKKyAgICAvLyB0byByZW9wZW4gdGhlIGRiIGJl
Zm9yZSB0aGUgZGIgaXMgZGVsZXRlZCBieSBhIFN0b3JhZ2VUcmFja2VyIHRocmVhZC4KKyAgICAv
LyBJbiB0aGlzIGNhc2UsIHJlb3BlbmluZyB0aGUgZGIgaW4gU3RvcmFnZUFyZWFTeW5jIHdpbGwg
Y2FuY2VsIGEgcGVuZGluZworICAgIC8vIFN0b3JhZ2VUcmFja2VyIGRiIGRlbGV0aW9uLgorICAg
IFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKKworICAgIFN0
cmluZyBvcmlnaW5JZCA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAg
ICAgICAgd2lsbERlbGV0ZU9yaWdpbihvcmlnaW5JZCk7CisgICAgICAgIG1fb3JpZ2luU2V0LT5y
ZW1vdmUob3JpZ2luSWQpOworICAgIH0KKyAgICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNr
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbihvcmlnaW5JZCkpOworfQorCit2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIAorICAgIGlmICghY2Fu
RGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0
ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxu
Iiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IG9yaWdp
bidzIGRiIGZpbGUgcGF0aCwgZGVsZXRlIGVudHJ5IGluIHRyYWNrZXIncyBkYiwgdGhlbiBkZWxl
dGUgZGIgZmlsZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgaWYgKHBh
dGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwg
b3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBp
bnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZmluZCBvcmlnaW4gJyVz
JyBpbiBPcmlnaW5zIHRhYmxlIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHBhdGggPSBwYXRoU3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCk7CisKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAg
ICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7CisgICAgaWYgKGRlbGV0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcHJlcGFyZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVu
dC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1
dGUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX29yaWdpblNldC0+cmVt
b3ZlKG9yaWdpbklkZW50aWZpZXIpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShwYXRoKTsKKyAgICAKKyAgICAvLyBDbGVhbiB1cCB0cmFja2VyIGRpcmVjdG9yeSBp
ZiB0aGUgbGFzdCBvcmlnaW4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICBpZiAobV9vcmlnaW5TZXQt
PmlzRW1wdHkoKSkgeworICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwor
ICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1f
c3RvcmFnZURpcmVjdG9yeVBhdGgpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVy
KTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKCkK
K3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIGlmICghbV9v
cmlnaW5zQmVpbmdEZWxldGVkKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQgPSBhZG9w
dFB0cihuZXcgT3JpZ2luU2V0KTsKKworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKCppdCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6
OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZCkKKyAgICAgICAgbV9vcmln
aW5zQmVpbmdEZWxldGVkID0gYWRvcHRQdHIobmV3IE9yaWdpblNldCk7CisgICAgICAgIAorICAg
IG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAor
Ym9vbCBTdG9yYWdlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwor
ICAgIHJldHVybiBtX29yaWdpbnNCZWluZ0RlbGV0ZWQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZp
ZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0Rl
bGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+aXNF
bXB0eSgpKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQtPnJlbW92ZShvcmlnaW5JZGVu
dGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFj
a2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OnRlc3RTdG9yYWdlU3luYygpCit7CisgICAgUGFnZUdyb3VwOjp0ZXN0
Rm9yY2VMb2NhbFN0b3JhZ2VTeW5jKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJl
dmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNCBAQAogICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisgICAgICAg
IC8vIE5vdCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0b3JhZ2VB
cmVhTWFwIGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUgdW5kZXJs
eWluZyBkYiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAgICAgIC8v
IGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZl
bnR1YWxseSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VBcmVhU3lu
YyB0byByZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHRlc3RGb3JjZVN5bmMoKTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFn
ZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQg
cXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5jcHAJKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisj
aW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
MCw3ICs1MSwyOCBAQAogICAgIEFTU0VSVChtX3RocmVhZCk7CiAgICAgQVNTRVJUKG1fdHlwZSA9
PSBUZXJtaW5hdGVUaHJlYWQpOwogfQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9y
YWdlVGFzayhUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQobV90
eXBlID09IEltcG9ydE9yaWdpbnMgfHwgbV90eXBlID09IERlbGV0ZUFsbE9yaWdpbnMpOworfQor
ICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9v
cmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBEZWxldGVPcmlnaW4pOworfQogCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNr
KFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRmlsZW5hbWUpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2luSWRl
bnRpZmllcihvcmlnaW5JZGVudGlmaWVyKQorICAgICwgbV9kYXRhYmFzZUZpbGVuYW1lKGRhdGFi
YXNlRmlsZW5hbWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBTZXRPcmlnaW5EZXRhaWxzKTsK
K30KKwogTG9jYWxTdG9yYWdlVGFzazo6fkxvY2FsU3RvcmFnZVRhc2soKQogewogfQpAQCAtNjQs
NiArODYsMTggQEAKICAgICAgICAgY2FzZSBBcmVhU3luYzoKICAgICAgICAgICAgIG1fYXJlYS0+
cGVyZm9ybVN5bmMoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldE9yaWdp
bkRldGFpbHM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNTZXRP
cmlnaW5EZXRhaWxzKG1fb3JpZ2luSWRlbnRpZmllciwgbV9kYXRhYmFzZUZpbGVuYW1lKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEltcG9ydE9yaWdpbnM6CisgICAgICAgICAg
ICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZXRlQWxsT3JpZ2luczoKKyAg
ICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZUFsbE9yaWdpbnMo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGV0ZU9yaWdpbjoKKyAgICAg
ICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZU9yaWdpbihtX29yaWdp
bklkZW50aWZpZXIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGVsZXRlRW1w
dHlEYXRhYmFzZToKICAgICAgICAgICAgIG1fYXJlYS0+ZGVsZXRlRW1wdHlEYXRhYmFzZSgpOwog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24gNzk4ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VNYXAuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9y
YWdlVHJhY2tlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTE0NCw2ICsxNDUsMzQgQEAKICAgICAvLyBCZWNh
dXNlIHRoZXJlJ3MgYSBzaW5nbGUgZXZlbnQgbG9vcCBwZXItcHJvY2VzcywgdGhpcyBpcyBhIG5v
LW9wLgogfQogCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0
aW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdl
QXJlYU1hcC5nZXQob3JpZ2luKTsKKyAgICBpZiAoc3RvcmFnZUFyZWEpCisgICAgICAgIHN0b3Jh
Z2VBcmVhLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3Rv
cmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBS
ZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IHN0b3JhZ2VBcmVhLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisgICAgfQorfQorICAgIAor
dm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6dGVzdEZvcmNlU3luYygpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9z
dG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBp
dCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBp
dC0+c2Vjb25kLT50ZXN0Rm9yY2VTeW5jKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogCkBAIC00MCwxMyArNDEsMTcgQEAKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNr
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxTdG9yYWdlVGFzayk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgQXJl
YUltcG9ydCwgQXJlYVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFRlcm1pbmF0ZVRocmVhZCB9
OworICAgICAgICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlE
YXRhYmFzZSwgU2V0T3JpZ2luRGV0YWlscywgSW1wb3J0T3JpZ2lucywgRGVsZXRlQWxsT3JpZ2lu
cywgRGVsZXRlT3JpZ2luLCBUZXJtaW5hdGVUaHJlYWQgfTsKIAogICAgICAgICB+TG9jYWxTdG9y
YWdlVGFzaygpOwogCiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZUltcG9ydChTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFN0b3JhZ2VBcmVhU3luYyog
YXJlYSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFy
ZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVh
dGVEZWxldGVFbXB0eURhdGFiYXNlKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlRW1wdHlEYXRhYmFzZSwgYXJlYSkpOyB9
CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZU9yaWdp
bklkZW50aWZpZXJzSW1wb3J0KCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRh
c2soSW1wb3J0T3JpZ2lucykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3Rv
cmFnZVRhc2s+IGNyZWF0ZVNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFNldE9yaWdpbkRldGFpbHMsIG9yaWdpbklkZW50aWZpZXIs
IGRhdGFiYXNlRmlsZW5hbWUpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0
b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVPcmlnaW4s
IG9yaWdpbklkZW50aWZpZXIpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0
b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVBbGxPcmlnaW5zKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlQWxsT3JpZ2lucykpOyB9CiAgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVRlcm1pbmF0ZShMb2NhbFN0b3JhZ2VU
aHJlYWQqIHRocmVhZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soVGVy
bWluYXRlVGhyZWFkLCB0aHJlYWQpKTsgfQogCiAgICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsK
QEAgLTU0LDEwICs1OSwxNSBAQAogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZVRh
c2soVHlwZSwgU3RvcmFnZUFyZWFTeW5jKik7CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlw
ZSwgTG9jYWxTdG9yYWdlVGhyZWFkKik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwg
Y29uc3QgU3RyaW5nJik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSk7CiAK
ICAgICAgICAgVHlwZSBtX3R5cGU7CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyogbV9hcmVhOwog
ICAgICAgICBMb2NhbFN0b3JhZ2VUaHJlYWQqIG1fdGhyZWFkOworICAgICAgICBTdHJpbmcgbV9v
cmlnaW5JZGVudGlmaWVyOworICAgICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZS5oCShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw5
IEBACiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2so
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlP
cmlnaW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9u
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXN0Rm9yY2VTeW5jKCkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhSW1wbC5oCShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDEwIEBACiAgICAgICAg
IC8vIE9ubHkgY2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBp
bXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAorICAg
ICAgICAvLyBVc2VkIHRvIGNsZWFyIGEgU3RvcmFnZUFyZWEgYW5kIGNsb3NlIGRiIGJlZm9yZSBi
YWNraW5nIGRiIGZpbGUgaXMgZGVsZXRlZC4KKyAgICAgICAgdm9pZCBjbGVhckZvck9yaWdpbkRl
bGV0aW9uKCk7CisgICAgICAgIHZvaWQgdGVzdEZvcmNlU3luYygpOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+LCB1bnNpZ25lZCBxdW90YSk7
CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYUltcGwqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlVHJhY2tlcl9oCisjZGVmaW5lIFN0
b3JhZ2VUcmFja2VyX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrOworY2xhc3MgTG9jYWxTdG9yYWdl
VGhyZWFkOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9yYWdlVHJhY2tlckNsaWVu
dDsgICAgCisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdG9yYWdlVHJhY2tlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdl
UGF0aCk7CisgICAgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2VyKCk7CisgICAgc3RhdGlj
IHZvaWQgc2NoZWR1bGVUYXNrKHZvaWQqKTsKKworICAgIHZvaWQgaW1wb3J0T3JpZ2luSWRlbnRp
ZmllcnMoKTsKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgdm9pZCBk
ZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
KTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
OworICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1
bHQpOworCisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KFN0b3JhZ2VUcmFja2VyQ2xp
ZW50Kik7CisKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFja2dyb3VuZCB0aHJlYWQuCisgICAg
dm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQgc3luY0RlbGV0ZU9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc3luY1NldE9yaWdpbkRl
dGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB2
b2lkIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisgICAgCisgICAgdm9pZCB0
ZXN0U3RvcmFnZVN5bmMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tlcihjb25zdCBT
dHJpbmcmIHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0
aCgpIGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9l
c05vdEV4aXN0KTsKKyAgICAKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNvbnN0
IFN0cmluZyYpOworCisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKyAgICAKKyAgICBi
b29sIGNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAg
IHZvaWQgd2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICB2b2lkIG9yaWdpbkZp
bGVQYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworICAgIAorICAgIE11dGV4IG1fZGF0YWJh
c2VHdWFyZDsKKyAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworCisgICAgU3RyaW5nIG1f
c3RvcmFnZURpcmVjdG9yeVBhdGg7CisKKyAgICBTdG9yYWdlVHJhY2tlckNsaWVudCogbV9jbGll
bnQ7CisgICAgCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2luU2V0OworCisgICAg
Ly8gRklYTUU6IGRvIHdlIG5lZWQgYW4gb3ducHRyIGhlcmU/CisgICAgT3duUHRyPE9yaWdpblNl
dD4gbV9vcmlnaW5TZXQ7CisgICAgCisgICAgT3duUHRyPE9yaWdpblNldD4gbV9vcmlnaW5zQmVp
bmdEZWxldGVkOworICAgIAorICAgIE93blB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFk
OworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShE
T01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzE5LDcgKzI3MTksOSBAQAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VN
YXAuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oIFwKICAgICAgICAgc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIFwKLSAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuaAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oIFwKKyAgICAg
ICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlVHJh
Y2tlckNsaWVudC5oCiAKICAgICAhdjggewogICAgICAgICBTT1VSQ0VTICs9IFwKQEAgLTI3MzYs
NyArMjczOCw4IEBACiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBz
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAK
KyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVf
U1lTVEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMDIt
MjggIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBh
bmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBh
cyBhIGNlbnRyYWwgcG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2Ug
cGVyIG9yaWdpbi4KKyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0
YWJhc2Ugb2Ygb3JpZ2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAg
ICBhbmQgdGhpcyBhbGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0
aGUgZnV0dXJlLCBsaWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9u
IGluaXRpYWxpemF0aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBM
b2NhbFN0b3JhZ2UgZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50
cnkgd2hlbiBTdG9yYWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmln
aW4uCisKKyAgICAgICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVy
Zm9ybWVkIG9uIG9uZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHBhdGNoLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3Jv
dXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKiBwYWdlL1Bh
Z2VHcm91cC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6bGlzdERpcmVjdG9yeSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRyYWNrZXJDbGllbnQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3JtVGFzayk6CisgICAg
ICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTZXRPcmlnaW5EZXRhaWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVBbGxPcmlnaW5zKToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24pOgorICAgICAgICAqIHN0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3Nl
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRl
bGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFs
bE9yaWdpbnNGb3JEZWxldGlvbik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWls
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
VHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRy
YWNrZXI6OmNhbkRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tl
cjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNr
ZXI6Om9yaWdpbkZpbGVQYXRocyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6
c2V0Q2xpZW50KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmg6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnQ6On5TdG9yYWdlVHJhY2tlckNsaWVudCk6CisKIDIw
MTEtMDItMjggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3OTg3Ny4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3OTg4NikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC02NTI0Miw2ICs2NTI0MiwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9y
YWdlVHJhY2tlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkocmV2aXNpb24gNzk4ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAgICAgY2xhc3MgR3JvdXBTZXR0aW5nczsKICAgICBjbGFzcyBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZTsKICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwog
ICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiAKICAgICBjbGFzcyBQYWdlR3JvdXAgewpAQCAt
NDksOCArNTAsMTQgQEAKICAgICAgICAgflBhZ2VHcm91cCgpOwogCiAgICAgICAgIHN0YXRpYyBQ
YWdlR3JvdXAqIHBhZ2VHcm91cChjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSk7CisKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAgICAgICAgIHN0YXRpYyB2b2lkIGNsb3NlTG9jYWxTdG9yYWdlKCk7
Ci0gICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9y
aWdpbnMoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qKTsKKyAgICAgICAgLy8gRHVtcFJlbmRlclRyZWUgaGVscGVyIHRoYXQg
dHJpZ2dlcnMgYSBTdG9yYWdlQXJlYSBzeW5jLgorICAgICAgICBzdGF0aWMgdm9pZCB0ZXN0Rm9y
Y2VMb2NhbFN0b3JhZ2VTeW5jKCk7CisjZW5kaWYgICAgICAgIAogICAgICAgICBjb25zdCBIYXNo
U2V0PFBhZ2UqPiYgcGFnZXMoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VzOyB9CiAKICAgICAgICAg
dm9pZCBhZGRQYWdlKFBhZ2UqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJl
dmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR3JvdXBTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAKQEAgLTExMCw2ICsxMTEsNDYgQEAKICNlbmRp
ZgogfQogCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCit2b2lkIFBhZ2VHcm91cDo6Y2xlYXJM
b2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKK3sKKyAgICBpZiAoIXBhZ2VHcm91cHMpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vw
cy0+ZW5kKCk7CisgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vw
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5o
YXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgp
LT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgIH0KK30KKwordm9pZCBQYWdlR3Jv
dXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7
CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlR3JvdXBN
YXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOworICAgIGZvciAoUGFnZUdyb3Vw
TWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdlKCkpCisgICAgICAgICAg
ICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihvcmln
aW4pOworICAgIH0gICAgCit9CisgICAgCit2b2lkIFBhZ2VHcm91cDo6dGVzdEZvcmNlTG9jYWxT
dG9yYWdlU3luYygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47CisK
KyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOworICAg
IGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdl
KCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+dGVzdEZvcmNlU3lu
YygpOworICAgIH0KK30KKworI2VuZGlmCisKIHZvaWQgUGFnZUdyb3VwOjphZGRQYWdlKFBhZ2Uq
IHBhZ2UpCiB7CiAgICAgQVNTRVJUKHBhZ2UpOwpAQCAtMjA5LDYgKzI1MCw3IEBACiAKICAgICBy
ZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzk4ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMzE5
MCw2ICszMTkwLDkgQEAKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisJU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1l
Q29udGFpbmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Zp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDQgKzExMiwxMSBAQAogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0Zp
bGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmls
ZVN5c3RlbU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZVN5c3RlbU1hYy5tbQkocmV2aXNpb24gNzk4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNCArODYsMjMg
QEAKICNlbmRpZgogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50
cmllczsKKworICAgIC8vIFRoaXMgY2FuIHJ1biBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBzbyBt
dXN0IGNyZWF0ZSBhbiBhdXRvcmVsZWFzZSBwb29sLgorICAgIE5TQXV0b3JlbGVhc2VQb29sICpw
b29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAgICBOU0RpcmVjdG9y
eUVudW1lcmF0b3IgKmRpciA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZW51bWVy
YXRvckF0UGF0aDpwYXRoXTsgCisgICAgTlNTdHJpbmcgKmZpbGU7CisgICAgd2hpbGUgKChmaWxl
ID0gW2RpciBuZXh0T2JqZWN0XSkpIHsKKyAgICAgICAgaWYgKGZpbHRlci5pc0VtcHR5KCkgfHwg
KFtmaWxlIHJhbmdlT2ZTdHJpbmc6ZmlsdGVyXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSkKKyAg
ICAgICAgICAgIGVudHJpZXMuYXBwZW5kKFtwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpmaWxlXSk7CisgICAgfQorCisgICAgW3Bvb2wgcmVsZWFzZV07CisKKyAgICByZXR1cm4g
ZW50cmllczsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDc5ODg2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC00MTY0LDYgKzQxNjQsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
JywKKyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCcsCisgICAgICAgICAg
ICAnc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oJywKICAgICAgICAgICAgICdzdmcvYW5pbWF0aW9u
L1NNSUxUaW1lLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oJywK
ICAgICAgICAgICAgICdzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCcsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA3OTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODQ2LDYgKzg0Niw5IEBACiAJCTM3Rjgx
OEZEMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYw
NSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsg
fTsKIAkJMzdGRDQyOTgxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZENDI5NzExODM2ODQ2
MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCAqLzsgfTsKKwkJM0FCMDJEMkExMkQ0RjkxNjAw
RkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNr
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkz
QUIwMkQyQjEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjkxMkQ0RjkxNjAwRkJC
Njk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLzsgfTsKKwkJM0FDMzY4MDAxMkVGN0EwOTAwNkEz
RDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRy
YWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkzQUM2NDhCMjEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUM2NDhCMTEyOUUx
NDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNj
cmlwdEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5o
ICovOyB9OwogCQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAy
Q0NDMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OwpAQCAt
NzIxMCw2ICs3MjEzLDkgQEAKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVV
UkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2
REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5
IC8qIFRyZWVEZXB0aExpbWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRy
ZWVEZXB0aExpbWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI4MTJE
NEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFn
ZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFn
ZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FDNjQ4QjEx
MjlFMTQ2NTAwQzNFQjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFZGl0aW5nQm91bmRhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTI5MjgsNiArMTI5MzQsOSBAQAogCQkJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9y
YWdlTmFtZXNwYWNlSW1wbC5oICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJCUM1MTAyRDkyMEZEOUFBMkQwMEZBRkYwNCAv
KiBTdG9yYWdlU3luY01hbmFnZXIuaCAqLywKKwkJCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQg
LyogU3RvcmFnZVRyYWNrZXIuaCAqLywKKwkJCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyog
U3RvcmFnZVRyYWNrZXIuY3BwICovLAorCQkJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBT
dG9yYWdlVHJhY2tlckNsaWVudC5oICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJ
CXBhdGggPSBzdG9yYWdlOwpAQCAtMjE5ODgsNiArMjE5OTcsNyBAQAogCQkJCUM1MEQwRTgzMEZG
NDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NTVFMzhCRjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1MTAyRDk0MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9y
YWdlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU0ODhENkIwREQ1QTgzRDAwOUQ4M0Iy
IC8qIFN0cmluZ1NvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBE
MDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NDlGNzc3NjBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTIyNDgxLDYgKzIyNDkxLDcgQEAKIAkJCQlFMUYxRTgzMDBDM0MyQkI5MDA2REIz
OTEgLyogWFNMVEV4dGVuc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUVEMDgyNDVF
NTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEy
RTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzQUMzNjgwMDEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpAQCAtMjQ3NDYsNiArMjQ3NTcsNyBAQAogCQkJCUM1MEQwRTgyMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NUUzOEMw
MTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdl
VHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzMDBEMDA2QzFEMDBFRjZGMjYg
LyogU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVDMEQwMEE3N0UwMDBBQ0Mx
RCAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIyNjQ1RDBEMDBBNzdFMDAw
QUNDMUQgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84511</attachid>
            <date>2011-03-02 19:23:39 -0800</date>
            <delta_ts>2011-03-02 22:38:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110302192338.patch</filename>
            <type>text/plain</type>
            <size>113701</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDMtMDIgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6dGVzdEZvcmNlTG9jYWxTdG9yYWdl
U3luYyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERp
cmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3Rv
cmFnZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTZXRPcmlnaW5EZXRh
aWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVB
bGxPcmlnaW5zKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1
bGVDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6b3Bl
bkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyT3JpZ2luRm9y
RGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzZXRPcmlnaW5EZXRh
aWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzY2hlZHVsZVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6d2lsbERlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
VHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0ZXN0
U3RvcmFnZVN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+U3RvcmFnZVRyYWNrZXJDbGllbnQp
OgorCiAyMDExLTAzLTAyICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtMzE5NSw2ICszMTk1LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTA4Nyw2ICsxMDg3LDE2IEBAIF9fWk5LN1dlYkNvcmUxNFJl
c291cmNlTG9hZGVyMTFmcmFtZUxvYWQKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMTBj
YW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4ZGF0
YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luNWVxdWFsRVBL
UzBfCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tl
cjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFN0b3Jh
Z2VUcmFja2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNr
ZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKK19fWk43V2ViQ29yZTE0U3Rv
cmFnZVRyYWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyN29yaWdp
bnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTG0wRUVF
CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyOXNldENsaWVudEVQTlNfMjBTdG9yYWdlVHJh
Y2tlckNsaWVudEUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNXRlc3RTdG9yYWdlU3lu
Y0V2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMzJzeW5jRmlsZVN5c3RlbUFuZFRyYWNr
ZXJEYXRhYmFzZUV2CisjZW5kaWYKIF9fWk5LN1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE4Zm9j
dXNlZE9yTWFpbkZyYW1lRXYKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1cGxhdGZv
cm1Db250ZXh0RXYKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE2cGFpbnRpbmdEaXNh
YmxlZEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDE4OCw2ICs0MTg4LDggQEAK
ICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFn
ZS9TdG9yYWdlU3luY01hbmFnZXIuaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlVHJh
Y2tlci5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCcsCiAgICAg
ICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9h
bmltYXRpb24vU01JTFRpbWUuaCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZUNvbnRhaW5lci5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDgwMTk3KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3MjIsNyArMjcy
Miw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAg
c3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2Uu
aCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNF
UyArPSBcCkBAIC0yNzM5LDcgKzI3NDEsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9N
X1NUT1JBR0U9MSkgCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBz
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAK
KyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVf
U1lTVEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTMxMCw2ICs2NTMxMCwxNCBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlVHJhY2tlci5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFu
Z2VDYWxsYmFjay5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDgwMTk3KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTEsNiArODUxLDkgQEAKIAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1
IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNw
b25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OwogCQkzN0ZENDI5ODExODM2
ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVw
dGhMaW1pdC5oICovOyB9OworCQkzQUIwMkQyQTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRy
YWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNB
QjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNBQjAyRDJCMTJENEY5MTYwMEZC
QjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNr
ZXIuY3BwICovOyB9OworCQkzQUMzNjgwMDEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNBQzY0OEIyMTI5
RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzY0OEIxMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0
aW5nQm91bmRhcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0MTAwMkNDRDBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTAwMkNDQjBG
NjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi87IH07CiAJCTQxMDAyQ0NF
MEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBE
IC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi87IH07CkBAIC03MjIzLDYgKzcyMjYsOSBAQAog
CQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQg
LyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZURlcHRoTGltaXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0
b3JhZ2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VU
cmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI5MTJENEY5MTYw
MEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdG9yYWdlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyog
RWRpdGluZ0JvdW5kYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRp
bmdCb3VuZGFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTAwMkNDQzBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjk0Niw2ICsxMjk1Miw5IEBA
CiAJCQkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgg
Ki8sCiAJCQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5j
cHAgKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdl
ci5oICovLAorCQkJCTNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5o
ICovLAorCQkJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAg
Ki8sCisJCQkJM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50
LmggKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwogCQkJcGF0aCA9IHN0b3JhZ2U7CkBA
IC0yMjAxNCw2ICsyMjAyMyw3IEBACiAJCQkJQzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0
b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NUUzOEJGMTAwNDBENUQwMEE1
NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxMDJE
OTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJM0FCMDJEMkExMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTQ4OEQ2QjBERDVBODNEMDA5RDgzQjIgLyogU3RyaW5nU291cmNlUHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0OUY3Nzc2MEVGRUM2MjAwMDkw
ODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI1MDcsNiAr
MjI1MTcsNyBAQAogCQkJCUUxRjFFODMwMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQ
cm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAv
KiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBQzM2ODAwMTJFRjdBMDkw
MDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3
RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QTU3NEYyOTEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNDc3OCw2ICsyNDc4OSw3IEBACiAJCQkJQzUwRDBFODIwRkY0MjcyOTAwQUMyNjQ0
IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU1RTM4QzAxMDA0
MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUM1MTAyRDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFj
a2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTMwMEQwMDZDMUQwMEVGNkYyNiAvKiBT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMjY0NUMwRDAwQTc3RTAwMEFDQzFEIC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVEMEQwMEE3N0UwMDBBQ0Mx
RCAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdy
b3VwU2V0dGluZ3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCkBAIC0xMTAsNiAr
MTExLDQ2IEBAIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCiAjZW5kaWYKIH0K
IAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxT
dG9yYWdlRm9yQWxsT3JpZ2lucygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVu
ZCgpOworICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9j
YWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xl
YXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpj
bGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAg
IGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjpp
dGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQt
PnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsK
KyAgICB9ICAgIAorfQorICAgIAordm9pZCBQYWdlR3JvdXA6OnRlc3RGb3JjZUxvY2FsU3RvcmFn
ZVN5bmMoKQoreworICAgIGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3Ig
KFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQor
ICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPnRlc3RGb3JjZVN5bmMoKTsK
KyAgICB9Cit9CisKKyNlbmRpZgorCiB2b2lkIFBhZ2VHcm91cDo6YWRkUGFnZShQYWdlKiBwYWdl
KQogewogICAgIEFTU0VSVChwYWdlKTsKQEAgLTIwOSw2ICsyNTAsNyBAQCBTdG9yYWdlTmFtZXNw
YWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnCiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2Uu
Z2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JvdXBTZXR0aW5nczsKICAgICBjbGFzcyBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTsKICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiAKICAgICBjbGFzcyBQYWdl
R3JvdXAgewpAQCAtNDksOCArNTAsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+
UGFnZUdyb3VwKCk7CiAKICAgICAgICAgc3RhdGljIFBhZ2VHcm91cCogcGFnZUdyb3VwKGNvbnN0
IFN0cmluZyYgZ3JvdXBOYW1lKTsKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICAgICAg
c3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsKLSAgICAgICAgCisgICAgICAgIHN0YXRp
YyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgICAgICBzdGF0aWMg
dm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOworICAgICAg
ICAvLyBEdW1wUmVuZGVyVHJlZSBoZWxwZXIgdGhhdCB0cmlnZ2VycyBhIFN0b3JhZ2VBcmVhIHN5
bmMuCisgICAgICAgIHN0YXRpYyB2b2lkIHRlc3RGb3JjZUxvY2FsU3RvcmFnZVN5bmMoKTsKKyNl
bmRpZiAgICAgICAgCiAgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZXM7IH0KIAogICAgICAgICB2b2lkIGFkZFBhZ2UoUGFnZSopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw0ICsxMTIsMTEgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbAog
ICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5n
dGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQkocmV2
aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNCArODYsMjMgQEAgYm9vbCBleGNsdWRlRnJvbUJh
Y2t1cChjb25zdCBTdHJpbmcmIHBhdAogI2VuZGlmCiB9CiAKK1ZlY3RvcjxTdHJpbmc+IGxpc3RE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworCisgICAgLy8gVGhpcyBjYW4gcnVuIG9uIGEgYmFj
a2dyb3VuZCB0aHJlYWQsIHNvIG11c3QgY3JlYXRlIGFuIGF1dG9yZWxlYXNlIHBvb2wuCisgICAg
TlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0
XTsKKworICAgIE5TRGlyZWN0b3J5RW51bWVyYXRvciAqZGlyID0gW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBlbnVtZXJhdG9yQXRQYXRoOnBhdGhdOyAKKyAgICBOU1N0cmluZyAqZmls
ZTsKKyAgICB3aGlsZSAoKGZpbGUgPSBbZGlyIG5leHRPYmplY3RdKSkgeworICAgICAgICBpZiAo
ZmlsdGVyLmlzRW1wdHkoKSB8fCAoW2ZpbGUgcmFuZ2VPZlN0cmluZzpmaWx0ZXJdLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpKQorICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoW3BhdGggc3RyaW5n
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVdKTsKKyAgICB9CisKKyAgICBbcG9vbCByZWxl
YXNlXTsKKworICAgIHJldHVybiBlbnRyaWVzOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3Bw
CShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
VGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZVRocmVhZC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsNiAr
NTEsMjcgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIAogICAgIEFT
U0VSVChtX3RocmVhZCk7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBUZXJtaW5hdGVUaHJlYWQpOwog
fQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUpCisg
ICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IEltcG9ydE9yaWdpbnMg
fHwgbV90eXBlID09IERlbGV0ZUFsbE9yaWdpbnMpOworfQorICAgIAorTG9jYWxTdG9yYWdlVGFz
azo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllcikKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9vcmlnaW5JZGVudGlmaWVyKG9yaWdp
bklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBEZWxldGVPcmlnaW4pOworfQor
CitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpCisg
ICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlm
aWVyKQorICAgICwgbV9kYXRhYmFzZUZpbGVuYW1lKGRhdGFiYXNlRmlsZW5hbWUpCit7CisgICAg
QVNTRVJUKG1fdHlwZSA9PSBTZXRPcmlnaW5EZXRhaWxzKTsKK30KIAogTG9jYWxTdG9yYWdlVGFz
azo6fkxvY2FsU3RvcmFnZVRhc2soKQogewpAQCAtNjQsNiArODYsMTggQEAgdm9pZCBMb2NhbFN0
b3JhZ2VUYXNrOjpwZXJmb3JtVGFzaygpCiAgICAgICAgIGNhc2UgQXJlYVN5bmM6CiAgICAgICAg
ICAgICBtX2FyZWEtPnBlcmZvcm1TeW5jKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTZXRPcmlnaW5EZXRhaWxzOgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNr
ZXIoKS5zeW5jU2V0T3JpZ2luRGV0YWlscyhtX29yaWdpbklkZW50aWZpZXIsIG1fZGF0YWJhc2VG
aWxlbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbXBvcnRPcmlnaW5z
OgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jSW1wb3J0T3JpZ2lu
SWRlbnRpZmllcnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGV0ZUFs
bE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNEZWxl
dGVBbGxPcmlnaW5zKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWxldGVP
cmlnaW46CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNEZWxldGVP
cmlnaW4obV9vcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIERlbGV0ZUVtcHR5RGF0YWJhc2U6CiAgICAgICAgICAgICBtX2FyZWEtPmRlbGV0ZUVtcHR5
RGF0YWJhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKQEAgLTQwLDEzICs0MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTG9jYWxTdG9yYWdlVGFzayB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2Fs
U3RvcmFnZVRhc2spOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBEZWxldGVFbXB0eURhdGFiYXNl
LCBUZXJtaW5hdGVUaHJlYWQgfTsKKyAgICAgICAgZW51bSBUeXBlIHsgQXJlYUltcG9ydCwgQXJl
YVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFNldE9yaWdpbkRldGFpbHMsIEltcG9ydE9yaWdp
bnMsIERlbGV0ZUFsbE9yaWdpbnMsIERlbGV0ZU9yaWdpbiwgVGVybWluYXRlVGhyZWFkIH07CiAK
ICAgICAgICAgfkxvY2FsU3RvcmFnZVRhc2soKTsKIAogICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoU3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7
IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3lu
YyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3Jh
Z2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9j
YWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlRW1wdHlEYXRhYmFzZShTdG9yYWdlQXJlYVN5bmMq
IGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZUVtcHR5
RGF0YWJhc2UsIGFyZWEpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3Jh
Z2VUYXNrPiBjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCgpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEltcG9ydE9yaWdpbnMpKTsgfQorICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTZXRPcmlnaW5EZXRhaWxzKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1l
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhTZXRPcmlnaW5EZXRhaWxz
LCBvcmlnaW5JZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFn
ZVRhc2soRGVsZXRlT3JpZ2luLCBvcmlnaW5JZGVudGlmaWVyKSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlQWxsT3JpZ2lucygpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZUFsbE9yaWdpbnMpKTsg
fQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJt
aW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBM
b2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KIAogICAgICAgICB2
b2lkIHBlcmZvcm1UYXNrKCk7CkBAIC01NCwxMCArNTksMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgU3RvcmFnZUFy
ZWFTeW5jKik7CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgTG9jYWxTdG9yYWdlVGhy
ZWFkKik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgY29uc3QgU3RyaW5nJik7Cisg
ICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSk7CiAKICAgICAgICAgVHlwZSBtX3R5
cGU7CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyogbV9hcmVhOwogICAgICAgICBMb2NhbFN0b3Jh
Z2VUaHJlYWQqIG1fdGhyZWFkOworICAgICAgICBTdHJpbmcgbV9vcmlnaW5JZGVudGlmaWVyOwor
ICAgICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDMxIEBAIHZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpjbG9zZSgpCiAjZW5kaWYKIH0KIAordm9pZCBTdG9yYWdlQXJlYUltcGw6
OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBpZiAobV9zdG9yYWdl
TWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+
cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3Rh
KTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKKyAgICAgICAgbV9zdG9y
YWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKyAgICAKK3ZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjp0ZXN0Rm9yY2VTeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cisg
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1fc3RvcmFnZUFy
ZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+dGVzdEZvcmNlU3luYygpOworfQor
CiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QK
IHsKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBPbmx5IGNhbGxlZCBmcm9tIGEgYmFj
a2dyb3VuZCB0aHJlYWQuCiAgICAgICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKKyAgICAgICAgLy8gVXNlZCB0byBjbGVhciBhIFN0
b3JhZ2VBcmVhIGFuZCBjbG9zZSBkYiBiZWZvcmUgYmFja2luZyBkYiBmaWxlIGlzIGRlbGV0ZWQu
CisgICAgICAgIHZvaWQgY2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworICAgICAgICB2b2lkIHRl
c3RGb3JjZVN5bmMoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChT
dG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZUFyZWFJbXBsKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuY3BwCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIu
aCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIApAQCAtMTM4LDYgKzEzOSwyNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2No
ZWR1bGVDbGVhcigpCiAgICAgfQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVD
bG9zZURhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAg
ICAKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGlt
ZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5U
ZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisg
ICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwogdm9pZCBTdG9y
YWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yMjIsNiArMjQyLDEwIEBAIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIC8vIEEgU3RvcmFnZVRyYWNrZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2NoZWR1bGVk
IHRvIGRlbGV0ZSB0aGUgZGIgd2UncmUKKyAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNlbCBwb3Nz
aWJsZSBkZWxldGlvbi4KKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNlbERlbGV0
aW5nT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRhYmFzZS5v
cGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9w
ZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUu
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpAQCAtMjM1LDYgKzI1OSw4
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgbV9k
YXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAg
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRPcmlnaW5EZXRhaWxzKG1fZGF0YWJhc2VJZGVu
dGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBl
cmZvcm1JbXBvcnQoKQpAQCAtMzE5LDYgKzM0NSwxNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
c3luYyhib29sIGNsZWFySXRlCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBpdCBpcyBhYm91dCB0
byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBkZWxldGUgd2lsbCBi
ZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3BlbiB0aGUgZGIKKyAg
ICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVxdWVzdCB0byBkZWxl
dGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7CisgICAgICAgIG1fc3lu
Y0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIElmIHRoZSBjbGVhciBmbGFnIGlzIHNl
dCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkgbmV3IG9u
ZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNs
ZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKQEAgLTMzMyw3ICszNjgs
NyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBTUUxpdGVTdGF0ZW1lbnQg
aW5zZXJ0KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSIp
OwogICAgIGlmIChpbnNlcnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0
ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CkBAIC00MjEsMTIgKzQ1NiwxNSBAQCB2b2lk
IFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzCiAgICAgaWYgKCFjb3VudCkgewog
ICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwogICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0g
ICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFi
YXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIVNRTGl0ZUZp
bGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRh
YmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLmRlbGV0ZU9yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CiAgICAgfQotfQorfSAg
ICAgICAgCiAKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjp0ZXN0Rm9yY2VTeW5jKCkKK3sKKyAgICBz
eW5jVGltZXJGaXJlZCgmbV9zeW5jVGltZXIpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVJdGVt
Rm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAg
IHZvaWQgc2NoZWR1bGVDbGVhcigpOworICAgICAgICB2b2lkIHNjaGVkdWxlQ2xvc2VEYXRhYmFz
ZSgpOworCisgICAgICAgIHZvaWQgdGVzdEZvcmNlU3luYygpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgU3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmll
cik7CkBAIC05Miw2ICs5NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X3N5bmNTY2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9zeW5jSW5Qcm9ncmVzczsKICAgICAgICAg
Ym9vbCBtX2RhdGFiYXNlT3BlbkZhaWxlZDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9zeW5j
Q2xvc2VEYXRhYmFzZTsKIAogICAgICAgICBtdXRhYmxlIE11dGV4IG1faW1wb3J0TG9jazsKICAg
ICAgICAgbXV0YWJsZSBUaHJlYWRDb25kaXRpb24gbV9pbXBvcnRDb25kaXRpb247CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkocmV2aXNpb24gODAxOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
T3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXN0
Rm9yY2VTeW5jKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHJldmlz
aW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTdG9yYWdl
QXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5
bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0x
NDQsNiArMTQ1LDM0IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnVubG9jaygpCiAgICAg
Ly8gQmVjYXVzZSB0aGVyZSdzIGEgc2luZ2xlIGV2ZW50IGxvb3AgcGVyLXByb2Nlc3MsIHRoaXMg
aXMgYSBuby1vcC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJPcmlnaW5G
b3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSA9IG1f
c3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgICAg
ICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQorCit2b2lkIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworICAgIH0KK30K
KyAgICAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnRlc3RGb3JjZVN5bmMoKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgaXQtPnNlY29uZC0+dGVzdEZvcmNlU3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCShyZXZpc2lvbiA4MDE5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNiArNTEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisg
ICAgICAgIC8vIE5vdCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0
b3JhZ2VBcmVhTWFwIGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUg
dW5kZXJseWluZyBkYiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAg
ICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEg
dG8gZXZlbnR1YWxseSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VB
cmVhU3luYyB0byByZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHRlc3RGb3JjZVN5bmMoKTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAg
U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5z
aWduZWQgcXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRy
YWNrZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisjaW5jbHVk
ZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0b3JhZ2VUcmFja2VyKiBzdG9yYWdlVHJh
Y2tlciA9IDA7CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0
IFN0cmluZyYgc3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFzdG9yYWdlVHJhY2tlcik7Cisg
ICAgaWYgKHN0b3JhZ2VUcmFja2VyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmFn
ZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgpOworfQorCitTdG9yYWdl
VHJhY2tlciYgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKQoreworICAgIGlmICghc3RvcmFnZVRy
YWNrZXIpCisgICAgICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKCIiKTsK
KyAgICAKKyAgICByZXR1cm4gKnN0b3JhZ2VUcmFja2VyOworfQorCitTdG9yYWdlVHJhY2tlcjo6
U3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKKyAgICA6IG1fY2xpZW50
KDApCisgICAgLCBtX3RocmVhZChMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIAorICAgIHNldFN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3Rl
clNRTGl0ZVZGUygpOworICAgIAorICAgIG1fdGhyZWFkLT5zdGFydCgpOyAgCisgICAgaW1wb3J0
T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFn
ZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09w
ZW4oKSk7CisgICAgCisgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2Fm
ZUNvcHkoKTsKK30KKworU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VG
aWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCAiU3RvcmFnZVRyYWNrZXIuZGIi
KTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisKKyAgICBpZiAobV9kYXRhYmFz
ZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBkYXRhYmFzZVBh
dGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7CisgICAgCisgICAgaWYgKCFTUUxpdGVGaWxlU3lz
dGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCkpIHsKKyAgICAgICAgaWYgKGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFi
YXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWko
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2Uu
ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJs
ZUV4aXN0cygiT3JpZ2lucyIpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCBwYXRoIFRFWFQpOyIpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIE9yaWdpbnMgdGFibGUuIik7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFj
a2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit7ICAgIAorICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fb3JpZ2luU2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
bV9vcmlnaW5TZXQgPSBhZG9wdFB0cihuZXcgT3JpZ2luU2V0KTsKKyAgICB9CisgICAgCisgICAg
bV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVu
dGlmaWVyc0ltcG9ydCgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisK
KyAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBP
cmlnaW5zIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50
IHJlc3VsdDsKKyAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBT
UUxSZXN1bHRSb3cpCisgICAgICAgICAgICBtX29yaWdpblNldC0+YWRkKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApLnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICB9CisgICAgCisg
ICAgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICBpZiAobV9j
bGllbnQpIHsKKyAgICAgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdp
blNldC0+ZW5kKCk7CisgICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oKml0KTsKKyAgICB9Cit9CisgICAgCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpCit7Cisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBmaWxlRXh0LCAoIi5sb2NhbHN0b3JhZ2UiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCB1bnNpZ25lZCwgZmlsZUV4dExlbmd0aCwgKGZpbGVF
eHQubGVuZ3RoKCkpKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzID0gbGlzdERpcmVjdG9y
eShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCBmaWxlRXh0KTsKKworICAgIC8vIEFkZCBtaXNzaW5n
IFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAg
ICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGF0aHMuZW5kKCk7CisgICAg
Zm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSAqaXQ7CisgICAgICAgIGlm
IChwYXRoLmVuZHNXaXRoKGZpbGVFeHQsIHRydWUpICYmIHBhdGgubGVuZ3RoKCkgPiBmaWxlRXh0
TGVuZ3RoKSB7CisgICAgICAgICAgICBTdHJpbmcgZmlsZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRo
KTsKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmco
MCwgZmlsZS5sZW5ndGgoKSAtIGZpbGVFeHRMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtX29y
aWdpblNldC0+Y29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldE9yaWdpbkRldGFpbHMo
b3JpZ2luSWRlbnRpZmllciwgcGF0aCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzeW5jU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9yYWdl
VHJhY2tlciByZWNvcmRzLgorICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0g
bV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBzZXRFbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKCFmb3VuZE9yaWdpbnMuY29udGFpbnMoKml0KSkgeworICAgICAgICAgICAgaWYgKGlzTWFp
blRocmVhZCgpKQorICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbigqaXQpOworICAgICAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgICAgICBzeW5jRGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkK
K3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgICAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fb3JpZ2luU2V0LT5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX29yaWdpblNldC0+YWRkKG9yaWdpbklkZW50aWZpZXIpOworICAg
IH0KKworICAgIExvY2FsU3RvcmFnZVRhc2sqIHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVh
dGVTZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0
YWJhc2VGaWxlKS5sZWFrUHRyKCk7CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNr
KTsKKyAgICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAo
dm9pZCopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayh2b2lk
KiB0YXNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQpOworICAgIAorICAgIGlmIChTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkKQorICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLm1fdGhyZWFkLT5zY2hlZHVsZVRhc2soKExvY2FsU3RvcmFnZVRhc2sqKXRhc2spOworfQor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIAor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBW
QUxVRVMgKD8sID8pIik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMn
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsK
KyAgICAKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNr
ZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIGlmICghbV9vcmln
aW5TZXQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICBtX29yaWdpblNldC0+
YWRkKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgU3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
PiYgcmVzdWx0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIEFTU0VSVChtX29yaWdpblNldCk7CisgICAgCisgICAgT3JpZ2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC0+ZW5kKCk7CisgICAgZm9yIChPcmlnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFi
YXNlSWRlbnRpZmllcigqaXQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlQWxs
T3JpZ2lucygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90
aHJlYWQpOworICAgIEFTU0VSVChtX29yaWdpblNldCk7CisKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICB3aWxsRGVsZXRl
QWxsT3JpZ2lucygpOworICAgICAgICBtX29yaWdpblNldC0+Y2xlYXIoKTsKKyAgICB9CisKKyAg
ICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgIAorICAg
IG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxs
T3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxP
cmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1FM
aXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpKTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3Bh
dGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAg
IAorICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNlLmNsb3Nl
KCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRh
YmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKK30KKwordm9pZCBTdG9yYWdl
VHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sK
KyAgICBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50
aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sgICAgCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAgIEFTU0VSVChtX29y
aWdpblNldCk7CisgICAgCisgICAgLy8gQmVmb3JlIGRlbGV0aW5nIGRhdGFiYXNlLCB3ZSBuZWVk
IHRvIGNsZWFyIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlIGRhdGEKKyAgICAvLyBpbiBTdG9yYWdl
QXJlYSwgYW5kIHRvIGNsb3NlIHRoZSBTdG9yYWdlQXJlYSBkYi4gSXQncyBwb3NzaWJsZSBmb3Ig
YW4KKyAgICAvLyBpdGVtIHRvIGJlIGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NpbmcgdGhl
IGRiIGFuZCBjYXVzZSBTdG9yYWdlQXJlYVN5bmMKKyAgICAvLyB0byByZW9wZW4gdGhlIGRiIGJl
Zm9yZSB0aGUgZGIgaXMgZGVsZXRlZCBieSBhIFN0b3JhZ2VUcmFja2VyIHRocmVhZC4KKyAgICAv
LyBJbiB0aGlzIGNhc2UsIHJlb3BlbmluZyB0aGUgZGIgaW4gU3RvcmFnZUFyZWFTeW5jIHdpbGwg
Y2FuY2VsIGEgcGVuZGluZworICAgIC8vIFN0b3JhZ2VUcmFja2VyIGRiIGRlbGV0aW9uLgorICAg
IFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKKworICAgIFN0
cmluZyBvcmlnaW5JZCA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAg
ICAgICAgd2lsbERlbGV0ZU9yaWdpbihvcmlnaW5JZCk7CisgICAgICAgIG1fb3JpZ2luU2V0LT5y
ZW1vdmUob3JpZ2luSWQpOworICAgIH0KKyAgICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNr
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbihvcmlnaW5JZCkpOworfQorCit2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIAorICAgIGlmICghY2Fu
RGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0
ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxu
Iiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IG9yaWdp
bidzIGRiIGZpbGUgcGF0aCwgZGVsZXRlIGVudHJ5IGluIHRyYWNrZXIncyBkYiwgdGhlbiBkZWxl
dGUgZGIgZmlsZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgaWYgKHBh
dGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwg
b3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBp
bnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZmluZCBvcmlnaW4gJyVz
JyBpbiBPcmlnaW5zIHRhYmxlIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHBhdGggPSBwYXRoU3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCk7CisKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAg
ICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7CisgICAgaWYgKGRlbGV0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcHJlcGFyZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVu
dC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1
dGUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX29yaWdpblNldC0+cmVt
b3ZlKG9yaWdpbklkZW50aWZpZXIpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShwYXRoKTsKKyAgICAKKyAgICAvLyBDbGVhbiB1cCB0cmFja2VyIGRpcmVjdG9yeSBp
ZiB0aGUgbGFzdCBvcmlnaW4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICBpZiAobV9vcmlnaW5TZXQt
PmlzRW1wdHkoKSkgeworICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwor
ICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1f
c3RvcmFnZURpcmVjdG9yeVBhdGgpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVy
KTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKCkK
K3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIGlmICghbV9v
cmlnaW5zQmVpbmdEZWxldGVkKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQgPSBhZG9w
dFB0cihuZXcgT3JpZ2luU2V0KTsKKworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKCppdCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6
OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZCkKKyAgICAgICAgbV9vcmln
aW5zQmVpbmdEZWxldGVkID0gYWRvcHRQdHIobmV3IE9yaWdpblNldCk7CisgICAgICAgIAorICAg
IG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAor
Ym9vbCBTdG9yYWdlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwor
ICAgIHJldHVybiBtX29yaWdpbnNCZWluZ0RlbGV0ZWQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZp
ZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0Rl
bGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+aXNF
bXB0eSgpKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQtPnJlbW92ZShvcmlnaW5JZGVu
dGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFj
a2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OnRlc3RTdG9yYWdlU3luYygpCit7CisgICAgUGFnZUdyb3VwOjp0ZXN0
Rm9yY2VMb2NhbFN0b3JhZ2VTeW5jKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlVHJhY2tlcl9oCisj
ZGVmaW5lIFN0b3JhZ2VUcmFja2VyX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrOworY2xhc3MgTG9j
YWxTdG9yYWdlVGhyZWFkOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9yYWdlVHJh
Y2tlckNsaWVudDsgICAgCisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5n
JiBzdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2VyKCk7Cisg
ICAgc3RhdGljIHZvaWQgc2NoZWR1bGVUYXNrKHZvaWQqKTsKKworICAgIHZvaWQgaW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMoKTsKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgCisg
ICAgdm9pZCBkZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBkZWxldGVPcmlnaW4oU2VjdXJp
dHlPcmlnaW4qKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpOworICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiA+JiByZXN1bHQpOworCisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KFN0b3JhZ2VU
cmFja2VyQ2xpZW50Kik7CisKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFja2dyb3VuZCB0aHJl
YWQuCisgICAgdm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQgc3luY0RlbGV0
ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc3luY1Nl
dE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMo
KTsKKyAgICB2b2lkIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisgICAgCisg
ICAgdm9pZCB0ZXN0U3RvcmFnZVN5bmMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tl
cihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTdHJpbmcgdHJhY2tlckRh
dGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KTsKKyAgICAKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKyAg
ICAKKyAgICBib29sIGNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICB2b2lk
IG9yaWdpbkZpbGVQYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworICAgIAorICAgIE11dGV4
IG1fZGF0YWJhc2VHdWFyZDsKKyAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworCisgICAg
U3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7CisKKyAgICBTdG9yYWdlVHJhY2tlckNsaWVu
dCogbV9jbGllbnQ7CisgICAgCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2luU2V0
OworCisgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgYW4gb3ducHRyIGhlcmU/CisgICAgT3duUHRy
PE9yaWdpblNldD4gbV9vcmlnaW5TZXQ7CisgICAgCisgICAgT3duUHRyPE9yaWdpblNldD4gbV9v
cmlnaW5zQmVpbmdEZWxldGVkOworICAgIAorICAgIE93blB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+
IG1fdGhyZWFkOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2lmbmRlZiBTdG9y
YWdlVHJhY2tlckNsaWVudF9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKworI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3Rv
cmFnZVRyYWNrZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflN0b3JhZ2VUcmFja2Vy
Q2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJDbGllbnRfaApJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wMy0wMiAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFA
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAg
ICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAg
ICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDExLTAzLTAyICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDExIEBA
CiAJCTM3QjZGQjRGMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QjZGQjREMTA2
MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSAqLzsgfTsKIAkJMzdEMURD
QTgxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENBNjEwNjU5MjhDMDA2OEY3RUYgLyogV2Vi
SlNQREZEb2MuaCAqLzsgfTsKIAkJMzdEMURDQTkxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERG
RG9jLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdE
MURDQTcxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tICovOyB9OworCQkzQUIwMkFG
NjEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQg
LyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi87IH07CisJCTNBQjAyQjAwMTJDMTMyQjIwMEZCQjY5
NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9y
YWdlTWFuYWdlclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICov
OyB9OworCQkzQUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJC
M0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi87IH07
CisJCTNBRTE1RDUwMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUUxNUQ0
RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICovOyB9Owog
CQk0MUY0NDg0RjEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjQ0ODREMTAzMzhFOEMw
MDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJX
b3JrZXJzUHJpdmF0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxRjQ0ODRFMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSAq
LzsgfTsKIAkJNDRCQjhCMTQxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRCQjhCMTMx
MjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5oICovOyB9OwpAQCAtNDgzLDYg
KzQ4OCwxMSBAQAogCQkzOTQ0NjA3RTAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRM
aXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViQmFja0ZvcndhcmRMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3
IC8qIFdlYkhpc3RvcnlJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkhpc3RvcnlJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA4MDAyMEY1MEVEMEVDQTE3
NjcgLyogV2ViSGlzdG9yeUl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJIaXN0b3J5SXRlbS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTNBQjAyQUY1MTJD
MTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1h
bmFnZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3Jh
Z2VNYW5hZ2VyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUJCM0M3
ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2Vy
SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEQxMDMzOEU4
QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYldvcmtlcnNQcml2YXRlLmg7IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3Jr
ZXJzUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY0NDg0RTEwMzM4
RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJXb3JrZXJzUHJpdmF0ZS5tbTsgcGF0aCA9IG1hYy9Xb3Jr
ZXJzL1dlYldvcmtlcnNQcml2YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDkwOThCOTBGOEY4MkRGMDA3NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU2LDYgKzEwNjYsMTEgQEAKIAkJCQlBNURFRkMw
RTExRDUzNDNFMDA4ODUyNzMgLyogV2ViRGF0YWJhc2VRdW90YU1hbmFnZXIubW0gKi8sCiAJCQkJ
NTExRjNGRDMwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5oICov
LAogCQkJCTUxMUYzRkQ0MENFQ0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZVRyYWNrZXJDbGll
bnQubW0gKi8sCisJCQkJM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VyLm1tICovLAorCQkJCTNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFu
YWdlclByaXZhdGUuaCAqLywKKwkJCQkzQUUxNUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3Rv
cmFnZU1hbmFnZXJJbnRlcm5hbC5oICovLAorCQkJCTNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAv
KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICovLAorCQkJCTNBQkIzQzc5MTMwOUMzQjUwMEU5
M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0g
U3RvcmFnZTsKIAkJCXBhdGggPSBtYWMvU3RvcmFnZTsKQEAgLTE2MjUsNyArMTY0MCwxMCBAQAog
CQkJCTU5OEFEOTJBMTIwMUNGM0IwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3Zp
ZGVyTW9ja0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThBREE0NjEyMDIyNzUwMDBB
QkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNFMkExQTQxMjNCMEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBNjJBRTIxMjVGODdDMjAwN0ZEMTE4
IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUUxNUQ1
MDEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJM0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQyRDMyNDEzMUVEMUUwMDA3NUZBNEIgLyog
V2ViTG9jYWxpemFibGVTdHJpbmdzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTk5Myw3ICsyMDEx
LDkgQEAKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRp
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFFNEUgLyogV2Vi
RGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0Uy
QTFBNTEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJM0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNjJBRTMxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0FCQjNDN0IxMzA5QzNCNTAw
RTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MkQzNEQxMzFFRDM4ODAwNzVGQTRCIC8qIFdlYkxvY2FsaXphYmxlU3RyaW5nc0ludGVybmFs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODAx
OTcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMwIEBACisyMDExLTAzLTAyICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAg
ICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OnRlc3RGb3JjZVN5bmMp
OgorICAgICAgICAqIHNyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaDoKKworMjAxMS0wMy0wMiAg
QW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVs
ZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBTdHVicyBmb3IgQ2hyb21pdW0gYnVpbGQuCisK
KyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0ZvckRl
bGV0aW9uKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5Lmg6CisKIDIwMTEt
MDMtMDIgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
dG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMjEgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlUHJveHk6
OnVubG9jaygpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAordm9pZCBTdG9yYWdlTmFt
ZXNwYWNlUHJveHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIFN0b3JhZ2VOYW1lc3Bh
Y2VQcm94eTo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp0ZXN0Rm9yY2VTeW5j
KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgYSBz
eW5jIHRvIGJhY2tpbmcgZGIuCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCShyZXZpc2lvbiA4MDE5NykKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3Jp
Z2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGVzdEZvcmNl
U3luYygpOwogCiBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3Bh
Y2U+IG1fc3RvcmFnZU5hbWVzcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgw
MTk3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTEtMDMtMDIgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAgICAgQWRkIFdl
YktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAgICAgICAgKiBT
dG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKCtbV2ViU3RvcmFn
ZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViU3RvcmFn
ZU1hbmFnZXIgb3JpZ2luc10pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciBkZWxldGVB
bGxPcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZU9yaWdpbjpd
KToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgdGVzdFN0b3JhZ2VTeW5jXSk6CisgICAg
ICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIHRlc3RGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNl
U3luY10pOgorICAgICAgICAoc3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViS2l0
SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFn
ZU1hbmFnZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZVRy
YWNrZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hh
cmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFj
a2VyQ2xpZW50Ojp+V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdpbik6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW06CisgICAgICAg
ICgtW1dlYlNlY3VyaXR5T3JpZ2luIHByb3RvY29sXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5
T3JpZ2luIGhvc3RdKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gZGF0YWJhc2VJZGVu
dGlmaWVyXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIGRvbWFpbl0pOgorICAgICAg
ICAoLVtXZWJTZWN1cml0eU9yaWdpbiBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46XSk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg6Cisg
ICAgICAgICogV2ViS2l0LmV4cDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5h
bWU6dXNlc0RvY3VtZW50Vmlld3M6XSk6IEluaXRpYWxpemUgU3RvcmFnZVRyYWNrZXIuCisKIDIw
MTEtMDMtMDIgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCShyZXZpc2lvbiA4
MDE5NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTYsNiArNiw3IEBACiAub2JqY19jbGFzc19uYW1lX1dlYkNvcmVTdGF0aXN0aWNzCiAub2JqY19j
bGFzc19uYW1lX1dlYkRhdGFTb3VyY2UKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0YWJhc2VNYW5h
Z2VyCisub2JqY19jbGFzc19uYW1lX1dlYlN0b3JhZ2VNYW5hZ2VyCiAub2JqY19jbGFzc19uYW1l
X1dlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmll
bnRhdGlvbgogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9j
awpAQCAtMTE0LDYgKzExNSw4IEBAIF9XZWJSZXBvcnRFcnJvcgogX1dlYlNjcmlwdEVycm9yRGVz
Y3JpcHRpb25LZXkKIF9XZWJTY3JpcHRFcnJvckRvbWFpbgogX1dlYlNjcmlwdEVycm9yTGluZU51
bWJlcktleQorX1dlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleQorX1dlYlN0b3JhZ2VEaWRN
b2RpZnlPcmlnaW5Ob3RpZmljYXRpb24KIF9XZWJVUkxOYW1lUGJvYXJkVHlwZQogX1dlYlVSTFBi
b2FyZFR5cGUKIF9XZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFn
ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKworI2lt
cG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdl
VHJhY2tlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTlNTdHJpbmcgKiBjb25z
dCBXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsU3RvcmFnZURh
dGFiYXNlUGF0aFByZWZlcmVuY2VLZXkiOworTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlk
TW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uID0gQCJXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90
aWZpY2F0aW9uIjsKKworc3RhdGljIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpOwor
CitAaW1wbGVtZW50YXRpb24gV2ViU3RvcmFnZU1hbmFnZXIKKworKyAoV2ViU3RvcmFnZU1hbmFn
ZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcgoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlTWFu
YWdlciAqc2hhcmVkTWFuYWdlciA9IFtbV2ViU3RvcmFnZU1hbmFnZXIgYWxsb2NdIGluaXRdOwor
ICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOworfQorCistIChOU0FycmF5ICopb3JpZ2lucworewor
ICAgIFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gY29yZU9yaWdpbnM7CisKKyAgICBT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMpOworCisgICAgTlNN
dXRhYmxlQXJyYXkgKndlYk9yaWdpbnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OmNvcmVPcmlnaW5zLnNpemUoKV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlNlY3VyaXR5T3JpZ2lu
ICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3Jl
U2VjdXJpdHlPcmlnaW46Y29yZU9yaWdpbnNbaV0uZ2V0KCldOworICAgICAgICBbd2ViT3JpZ2lu
cyBhZGRPYmplY3Q6d2ViT3JpZ2luXTsKKyAgICAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKKyAg
ICB9CisKKyAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworfQorCistICh2b2lk
KWRlbGV0ZUFsbE9yaWdpbnMKK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0
ZUFsbE9yaWdpbnMoKTsKK30KKworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNlY3VyaXR5T3Jp
Z2luICopb3JpZ2luCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmln
aW4oW29yaWdpbiBfY29yZV0pOworfQorCistICh2b2lkKXRlc3RTdG9yYWdlU3luYworeworICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkudGVzdFN0b3JhZ2VTeW5jKCk7Cit9CisKKy0gKHZv
aWQpdGVzdEZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VTeW5jCit7CisgICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKS5zeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworfQor
CitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OworICAgIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktl
eTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVj
dG9yeSB8fCAhW3N0b3JhZ2VEaXJlY3RvcnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkKKyAgICAgICAgc3RvcmFnZURpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0
b3JhZ2UiOworICAgIAorICAgIHJldHVybiBbc3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5k
YXJkaXppbmdQYXRoXTsKK30KKwordm9pZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNz
YXJ5KCkKK3sKKyAgICBzdGF0aWMgQk9PTCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0
aWFsaXplVHJhY2tlcihzdG9yYWdlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICAKKyAgICBTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hh
cmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKSk7CisgICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZ
RVM7Cit9CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOwor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdl
RGlyZWN0b3J5RGVmYXVsdHNLZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdl
RGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uOworCitAY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47
CisKK0BpbnRlcmZhY2UgV2ViU3RvcmFnZU1hbmFnZXIgOiBOU09iamVjdAorCisrIChXZWJTdG9y
YWdlTWFuYWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyOworCisvLyBSZXR1cm5zIGFuIGFy
cmF5IG9mIFdlYlNlY3VyaXR5T3JpZ2luIG9iamVjdHMgdGhhdCBoYXZlIExvY2FsU3RvcmFnZS4K
Ky0gKE5TQXJyYXkgKilvcmlnaW5zOworCistICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnM7CistICh2
b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CisKKy0gKHZvaWQp
dGVzdFN0b3JhZ2VTeW5jOworLSAodm9pZCl0ZXN0RmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFz
ZVN5bmM7CisKK0BlbmQKKwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3Jh
Z2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisj
aW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3Jh
Z2VUcmFja2VyQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFy
ZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpOworICAgIAorICAgIHZpcnR1
YWwgfldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+KTsKK3ByaXZhdGU6CisgICAgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKK307CisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNs
aWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bi5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQo
KQoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogc2hhcmVkQ2xpZW50ID0g
bmV3IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgcmV0dXJuIHNoYXJlZENsaWVudDsK
K30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkK
K3sKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVu
dCgpCit7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGljX2Nhc3Q8U2Vj
dXJpdHlPcmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9y
aWdpbikKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHdlYlNlY3VyaXR5T3Jp
Z2luKEFkb3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVT
ZWN1cml0eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViU3RvcmFnZURpZE1vZGlm
eU9yaWdpbk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3VyaXR5T3JpZ2luLmdldCgpXTsKK30K
Kwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVu
dGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhy
ZWFkLCBzdGF0aWNfY2FzdDx2b2lkKj4ob3JpZ2luLmxlYWtSZWYoKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0
eU9yaWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJTZWN1cml0eU9yaWdpbi5tbQkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDYsMjMgKzQ2LDI4IEBAIC0gKGlkKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybAogCiAgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtV
UkwoW3VybCBhYnNvbHV0ZVVSTF0pKTsKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRl
ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4uZ2V0
KCkpOworICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUgKj4ob3JpZ2luLmdldCgpKTsKIAogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1N0
cmluZyopcHJvdG9jb2wKKy0gKE5TU3RyaW5nICopcHJvdG9jb2wKIHsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+cHJvdG9jb2woKTsKIH0K
IAotLSAoTlNTdHJpbmcqKWhvc3QKKy0gKE5TU3RyaW5nICopaG9zdAogewogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAK
Ky0gKE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCit7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPmRhdGFiYXNlSWRlbnRpZmllcigp
OworfQorCiAvLyBEZXByZWNhdGVkLiBVc2UgaG9zdCBpbnN0ZWFkLiBUaGlzIG5lZWRzIHRvIHN0
YXkgaGVyZSB1bnRpbCB3ZSBzaGlwIGEgbmV3IFNhZmFyaS4KLS0gKE5TU3RyaW5nKilkb21haW4K
Ky0gKE5TU3RyaW5nICopZG9tYWluCiB7CiAgICAgcmV0dXJuIFtzZWxmIGhvc3RdOwogfQpAQCAt
MTExLDcgKzExNiw3IEBAIC0gKGlkKV9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjooU2UK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIG9yaWdpbi0+cmVmKCk7Ci0gICAgX3ByaXZhdGUg
PSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSo+KG9yaWdpbik7Cisg
ICAgX3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSAq
PihvcmlnaW4pOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZh
dGUuaAkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcs
MTAgQEAgQGludGVyZmFjZSBXZWJTZWN1cml0eU9yaWdpbiA6IE5TT2JqZWN0IAogCiAtIChpZClp
bml0V2l0aFVSTDooTlNVUkwgKil1cmw7CiAKLS0gKE5TU3RyaW5nKilwcm90b2NvbDsKLS0gKE5T
U3RyaW5nKilob3N0OworLSAoTlNTdHJpbmcgKilwcm90b2NvbDsKKy0gKE5TU3RyaW5nICopaG9z
dDsKKworLSAoTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXI7CiAKIC8vIFJldHVybnMgemVy
byBpZiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16
ZXJvIG90aGVyd2lzZS4KIC0gKHVuc2lnbmVkIHNob3J0KXBvcnQ7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAog
I2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1
Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCisjaW1wb3J0
ICJXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZh
Y2UuaCIKICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAi
V2ViVGV4dEl0ZXJhdG9yLmgiCkBAIC02ODcsNiArNjg4LDEwIEBAIC0gKHZvaWQpX2NvbW1vbklu
aXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIFdl
YktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3Nh
cnkoKTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBh
dGhJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVzTWV0aG9k
KCk7CiAgICAgICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gODAxOTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMS0wMy0wMiAgQW50b24gRCdBdXJpYSAgPGFkYXVy
aWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAg
ICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKwor
ICAgICAgICBBZGRlZCB0ZXN0cyB0aGF0IHdyaXRlIHRvIExvY2FsU3RvcmFnZSwgZGVsZXRlIG9u
ZSBvcmlnaW4sIGdldCBsaXN0IG9mIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlLCBkZWxldGUg
YWxsIG9yaWdpbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayk6
CisgICAgICAgIChvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2spOgor
ICAgICAgICAoZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2spOgorICAgICAgICAob3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGlj
RnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAg
ICAgICAgKHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoYWxsb2Nh
dGVHbG9iYWxDb250cm9sbGVycyk6CisgICAgICAgIChyZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2Up
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JP
cmlnaW4pOgorCiAyMDExLTAzLTAxICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTQsNiArMzk0LDY0IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQWxsRGF0YWJhc2Vz
Q2FsbGIKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0
YXRpYyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgY29udHJvbGxl
ci0+c3luY0xvY2FsU3RvcmFnZSgpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgdW5zaWduZWQg
bnVtTm90aWZpY2F0aW9ucyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbik7CisKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxl
ci0+b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhudW1Ob3RpZmljYXRpb25zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8v
IEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHVybChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBj
b250cm9sbGVyLT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4odXJsLmdldCgpKTsKKworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXItPm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNv
bnRleHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tGb3J3YXJkTGlzdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2lu
ZG93cyBpbXBsZW1lbnRhdGlvbgpAQCAtMjE0Nyw2ICsyMjA1LDExIEBAIEpTU3RhdGljRnVuY3Rp
b24qIExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICAgICAgeyAiYWRkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkiLCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgInNldFNjcm9sbGJhclBvbGljeSIsIHNldFNjcm9sbGJhclBvbGljeUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImF1dGhlbnRpY2F0ZVNlc3Npb24iLCBhdXRoZW50
aWNhdGVTZXNzaW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZGVsZXRlQWxsTG9jYWxT
dG9yYWdlIiwgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAic3luY0xvY2FsU3RvcmFnZSIsIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAg
ICAgICAgICAgICAgICAKKyAgICAgICAgeyAib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0
aW9ucyIsIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LCAgICAgICAgCisgICAgICAgIHsgImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIsIGRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlIiwgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJzZXRTaG91bGRQYWludEJyb2tlbkltYWdlIiwgc2V0U2hvdWxkUGFp
bnRCcm9rZW5JbWFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAg
fTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gODAxOTcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDEyIEBAIHB1YmxpYzoKIAogICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3Q7CiAKKyAgICBKU1ZhbHVl
UmVmIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZik7CisgICAgdm9pZCBkZWxl
dGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2Nh
bFN0b3JhZ2UoKTsKKwogICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sKTsK
ICAgICBib29sIHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFBhaW50QnJva2VuSW1hZ2U7IH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA4MDE5NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAK
IAkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlDRkJB
MkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tICovOyB9
OwogCQkzNzEzRURFMjExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nIGluIENvcHkg
Rm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEzRURERjEx
NUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nICovOyB9OwogCQkzNzEzRURFMzExNUJF
MTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VERTAxMTVCRTE2RjAwNzA1NzIwIC8qIENv
bG9yQml0cy50dGYgKi87IH07CisJCTNBNTYyNkNCMTMxQ0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdl
VHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0E1NjI2QzExMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdh
dGUubW0gKi87IH07CisJCTNBNTYyNkNDMTMxQ0EwMzYwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tl
ckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzQTU2MjZDMDEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oICov
OyB9OwogCQk0NDA1OTA3MTEyNjg0NTM4MDBDRkQ0OEQgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQw
NTkwNzAxMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSAqLzsg
fTsKIAkJNDQzNzczMEUxMjVDQkMzNjAwQUFFMDJDIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEE5OTc4
MzBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJ
NDQzNzczMEYxMjVDQkM0RDAwQUFFMDJDIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODIwRkNERTg2
NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5oICovOyB9OwpAQCAtMjMwLDYgKzIz
Miw4IEBACiAJCTM3NUYwOTc3MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVy
NzAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dl
YktpdFdlaWdodFdhdGNoZXI3MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
NzVGMDk3ODBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1l
ID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRX
YXRjaGVyODAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzkwREFD
M0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdl
aWdodFdhdGNoZXI5MDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50
dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBNTYyNkMwMTMxQzhCMTcwMDJCRTZE
OSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0E1NjI2QzExMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdG9yYWdlVHJhY2tl
ckRlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDA1OTA3MDEyNjg0
NTM4MDBDRkQ0OEQgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tOyBw
YXRoID0gbWFjL1dlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDRBOTk3ODIwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3Vw
cG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1
cHBvcnQuaDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVEdW1wU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NEE5OTc4MzBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFy
Y2hpdmVEdW1wU3VwcG9ydC5jcHA7IHBhdGggPSBjZi9XZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDYwLDYgKzQ2NCw4IEBACiAJCQkJQkNB
MThCNUUwQzlCMDhDMjAwMTE0MzY5IC8qIFJlc291cmNlTG9hZERlbGVnYXRlLm1tICovLAogCQkJ
CUJDQTE4QjVGMEM5QjA4QzIwMDExNDM2OSAvKiBVSURlbGVnYXRlLmggKi8sCiAJCQkJQkNBMThC
NjAwQzlCMDhDMjAwMTE0MzY5IC8qIFVJRGVsZWdhdGUubW0gKi8sCisJCQkJM0E1NjI2QzAxMzFD
OEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLywKKwkJCQkzQTU2MjZD
MTEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSAqLywKIAkJCSk7
CiAJCQluYW1lID0gRGVsZWdhdGVzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYy
MCw2ICs2MjYsNyBAQAogCQkJCTUxODVGNkIzMTA3MTRFMTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVs
ZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjc4MTY3MTFBRjMxQzMwMDdFMUJDMiAvKiBN
b2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlDRkJBMTAxMjI3
MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzQTU2MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC04MDksNiArODE2LDcgQEAKIAkJCQlFMUI3ODE2NTExQUYzMUI3
MDA3RTFCQzIgLyogTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0E1NjI2Q0IxMzFDQTAy
QTAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9u
IDgwMTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJQaXhlbER1bXBTdXBwb3J0
LmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiUmVzb3VyY2VMb2FkRGVs
ZWdhdGUuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKICNpbXBvcnQgIlVJ
RGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIgogI2ltcG9ydCAi
V29ya1F1ZXVlLmgiCkBAIC03Nyw2ICs3OCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJU
eXBlc0ludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KICNpbXBv
cnQgPGdldG9wdC5oPgpAQCAtMTM0LDYgKzEzNiw3IEBAIHN0YXRpYyBFZGl0aW5nRGVsZWdhdGUg
KmVkaXRpbmdEZWxlZ2F0ZTsKIHN0YXRpYyBSZXNvdXJjZUxvYWREZWxlZ2F0ZSAqcmVzb3VyY2VM
b2FkRGVsZWdhdGU7CiBzdGF0aWMgSGlzdG9yeURlbGVnYXRlICpoaXN0b3J5RGVsZWdhdGU7CiBQ
b2xpY3lEZWxlZ2F0ZSAqcG9saWN5RGVsZWdhdGU7CitTdG9yYWdlVHJhY2tlckRlbGVnYXRlICpz
dG9yYWdlRGVsZWdhdGU7CiAKIHN0YXRpYyBpbnQgZHVtcFBpeGVsczsKIHN0YXRpYyBpbnQgdGhy
ZWFkZWQ7CkBAIC00MTQsNiArNDE3LDcgQEAgc3RhdGljIHZvaWQgcmVzZXREZWZhdWx0c1RvQ29u
c2lzdGVudFZhbAogCiAgICAgTlNTdHJpbmcgKnBhdGggPSBsaWJyYXJ5UGF0aEZvckR1bXBSZW5k
ZXJUcmVlKCk7CiAgICAgW2RlZmF1bHRzIHNldE9iamVjdDpbcGF0aCBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJEYXRhYmFzZXMiXSBmb3JLZXk6V2ViRGF0YWJhc2VEaXJlY3RvcnlE
ZWZhdWx0c0tleV07CisgICAgW2RlZmF1bHRzIHNldE9iamVjdDpbcGF0aCBzdHJpbmdCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6QCJMb2NhbFN0b3JhZ2UiXSBmb3JLZXk6V2ViU3RvcmFnZURpcmVj
dG9yeURlZmF1bHRzS2V5XTsKICAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxvY2FsQ2FjaGUiXSBmb3JLZXk6V2ViS2l0TG9jYWxD
YWNoZURlZmF1bHRzS2V5XTsKIAogICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtX
ZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKQEAgLTU0NSw2ICs1NDksNyBAQCBz
dGF0aWMgdm9pZCBhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKCkKICAgICByZXNvdXJjZUxvYWRE
ZWxlZ2F0ZSA9IFtbUmVzb3VyY2VMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdOwogICAgIHBvbGlj
eURlbGVnYXRlID0gW1tQb2xpY3lEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CiAgICAgaGlzdG9yeURl
bGVnYXRlID0gW1tIaXN0b3J5RGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHN0b3JhZ2VEZWxl
Z2F0ZSA9IFtbU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CiB9CiAKIC8vIE9i
akMrKyBkb2Vucyd0IHNlZW0gdG8gbGV0IG1lIHBhc3MgTlNPYmplY3QqJiBzYWRseS4KQEAgLTU2
Miw2ICs1NjcsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMoKQogICAg
IHJlbGVhc2VBbmRaZXJvKCZyZXNvdXJjZUxvYWREZWxlZ2F0ZSk7CiAgICAgcmVsZWFzZUFuZFpl
cm8oJnVpRGVsZWdhdGUpOwogICAgIHJlbGVhc2VBbmRaZXJvKCZwb2xpY3lEZWxlZ2F0ZSk7Cisg
ICAgcmVsZWFzZUFuZFplcm8oJnN0b3JhZ2VEZWxlZ2F0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hh
ciAqYXJndltdKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
TWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlTWFjLmgJKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIEBjbGFz
cyBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mbzsKIEBjbGFzcyBOYXZpZ2F0aW9uQ29udHJvbGxl
cjsKIEBjbGFzcyBQb2xpY3lEZWxlZ2F0ZTsKK0BjbGFzcyBTdG9yYWdlVHJhY2tlckRlbGVnYXRl
OwogQGNsYXNzIFdlYkZyYW1lOwogQGNsYXNzIFdlYlNjcmlwdFdvcmxkOwogQGNsYXNzIFdlYlZp
ZXc7CkBAIC00Miw2ICs0Myw3IEBACiBjbGFzcyBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mbzsK
IGNsYXNzIE5hdmlnYXRpb25Db250cm9sbGVyOwogY2xhc3MgUG9saWN5RGVsZWdhdGU7CitjbGFz
cyBTdG9yYWdlVHJhY2tlckRlbGVnYXRlOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJTY3Jp
cHRXb3JsZDsKIGNsYXNzIFdlYlZpZXc7CkBAIC01NCw2ICs1Niw3IEBAIGV4dGVybiBXZWJGcmFt
ZSogdG9wTG9hZGluZ0ZyYW1lOwogZXh0ZXJuIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvICpk
cmFnZ2luZ0luZm87CiBleHRlcm4gTmF2aWdhdGlvbkNvbnRyb2xsZXIqIGdOYXZpZ2F0aW9uQ29u
dHJvbGxlcjsKIGV4dGVybiBQb2xpY3lEZWxlZ2F0ZSogcG9saWN5RGVsZWdhdGU7CitleHRlcm4g
U3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSogc3RvcmFnZURlbGVnYXRlOwogCiBleHRlcm4gY29uc3Qg
dW5zaWduZWQgbWF4Vmlld0hlaWdodDsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBtYXhWaWV3V2lk
dGg7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA4MDE5NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCAiRWRpdGluZ0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9j
YXRpb25Qcm92aWRlci5oIgogI2ltcG9ydCAiUG9saWN5RGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN0
b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKICNpbXBvcnQg
IldvcmtRdWV1ZS5oIgogI2ltcG9ydCAiV29ya1F1ZXVlSXRlbS5oIgpAQCAtNjYsNiArNjcsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dlYlF1b3RhTWFuYWdlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YlNjcmlwdFdvcmxkLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViVHlwZXNJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXcuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgpAQCAtMTMzLDExICsxMzUsNTMgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaQogICAgIFtXZWJBcHBsaWNh
dGlvbkNhY2hlIGRlbGV0ZUFsbEFwcGxpY2F0aW9uQ2FjaGVzXTsKIH0KIAordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgW1tXZWJTdG9yYWdlTWFu
YWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gdGVzdFN0b3JhZ2VTeW5jXTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgW3N0b3JhZ2VEZWxlZ2F0ZSBsb2dOb3RpZmljYXRp
b25zOm51bWJlciBjb250cm9sbGVyOnRoaXNdOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hh
cmVkV2ViRGF0YWJhc2VNYW5hZ2VyXSBkZWxldGVBbGxEYXRhYmFzZXNdOwogfQogCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIFtbV2Vi
U3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdpbnNd
OworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBXZWJTdG9yYWdlTWFuYWdlciAq
c3RvcmFnZSA9IFtXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl07CisK
KyAgICBOU0FycmF5ICpvcmlnaW5zID0gW3N0b3JhZ2Ugb3JpZ2luc107CisgICAgTlNJbnRlZ2Vy
IGNvdW50ID0gW29yaWdpbnMgY291bnRdOworCisgICAgSlNWYWx1ZVJlZiBqc09yaWdpbnNBcnJh
eVtjb3VudF07CisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg
ICAgICAgIE5TU3RyaW5nICpvcmlnaW4gPSBbW29yaWdpbnMgb2JqZWN0QXRJbmRleDppXSBkYXRh
YmFzZUlkZW50aWZpZXJdOworICAgICAgICBKU1N0cmluZ1JlZiBzdHIgPSBKU1N0cmluZ0NyZWF0
ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpb3JpZ2luKTsKKyAgICAgICAganNPcmlnaW5zQXJy
YXlbaV0gPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHIpOworICAgIH0KKworICAgIEpT
T2JqZWN0UmVmIGpzQXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3Vu
dCwganNPcmlnaW5zQXJyYXksIE5VTEwpOworICAgIHJldHVybiBqc0FycmF5T2JqZWN0OworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4o
SlNTdHJpbmdSZWYgVVJMKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRv
cHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVJMKSk7Cisg
ICAgCisgICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4g
YWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXVybENG
LmdldCgpXV07CisKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5h
Z2VyXSBkZWxldGVPcmlnaW46b3JpZ2luXTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewogICAgIFdlYkJhY2tGb3J3YXJkTGlzdCAqYmFj
a0ZvcndhcmRMaXN0ID0gW1ttYWluRnJhbWUgd2ViVmlld10gYmFja0ZvcndhcmRMaXN0XTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDgwMTk3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMDIgIEFudG9uIEQnQXVyaWEgIDxhZGF1
cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisK
KyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2Vy
OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3Jh
Z2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2Vy
L3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXIt
Mi1jcmVhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwuaHRtbDogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdl
LXRyYWNrZXItNC1jcmVhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00
LWNyZWF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbDogQWRkZWQu
CisKIDIwMTEtMDMtMDIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBHZW50aWxjb3JlLgpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBA
QAorUHJlcGFyZSBmb3IgU3RvcmFnZVRyYWNrZXIgdGVzdHMgYnkgZW5zdXJpbmcgdGhhdCBldmVy
eSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlIGlzIGRlbGV0ZWQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitUaGlzIHRlc3Qgc2hvdWxkIGhhdmUgbm8gdmlzaWJsZSBvdXRwdXQg
b24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1m
dW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlByZXBhcmUgZm9yIFN0b3JhZ2VUcmFja2VyIHRlc3RzIGJ5IGVuc3VyaW5nIHRoYXQgZXZlcnkg
b3JpZ2luIHdpdGggbG9jYWwgc3RvcmFnZSBpcyBkZWxldGVkLiIpOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3Jh
Z2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGVidWcoIlRoaXMgdGVzdCBzaG91
bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLiIpOworCisgICAgaWYgKGxheW91
dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgewor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmlj
YXRpb25zKDEpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVBbGxMb2NhbFN0
b3JhZ2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgfQorfQor
Cit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vz
c2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3Rv
cmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3Jh
Z2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3Jh
Z2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTAgQEAKK09yaWdpbiBpZGVudGlmaWVyOiAnZmlsZV9fMCcKK1N0b3JhZ2VUcmFja2VyIHRlc3Qg
LSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBh
ZnRlciBvcmlnaW5zLXByZXBhcmUuaHRtbC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3Rv
cmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci0yLWNyZWF0ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFj
a2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJl
IGNhbGxlZCBhZnRlciBvcmlnaW5zLXByZXBhcmUuaHRtbC4iKTsKKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdl
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoImxvY2FsU3RvcmFnZSBET0VTIE5PVCBleGlzdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxl
ci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgLy8gQW4g
b3JpZ2luIGFscmVhZHkgZXhpc3RzIHNvIHdlIGNhbiBleGl0LgorICAgICAgICB0ZXN0RmFpbGVk
KCJBbiBvcmlnaW4gYWxyZWFkeSBleGlzdGVkIHdpdGggbG9jYWwgc3RvcmFnZS4iKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgCisg
ICAgICAgIGxvY2FsU3RvcmFnZS5zb21lRGF0YSA9ICd3cml0ZW1lJzsKKyAgICAgICAgLy8gTGF5
b3V0VGVzdENvbnRyb2xsZXIncyBub3RpZnlEb25lIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBv
cmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbiBjb21lcyBpbi4KKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICB9Cit9
CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNj
ZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9z
dG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2Vy
L3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJh
Y2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBs
b2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGxheW91dFRlc3RDb250cm9sbGVyLm9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9fMCIKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3Jh
Z2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci0zLWRlbGV0ZS1hbGwuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2Vy
LTMtZGVsZXRlLWFsbC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQVBJIHRv
IHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2Fs
IHN0b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0
aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygibGF5
b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIiwg
ImZpbGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0byBkZWxldGUgdGhlIGV4
aXN0aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlv
bi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90
aWZpY2F0aW9ucygxKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZGVsZXRlQWxsTG9j
YWxTdG9yYWdlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBvcmlnaW5zIHdp
dGggbG9jYWwgc3RvcmFnZSIpOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3Jl
IGd1YXJhbnRlZWQgdG8gaGF2ZSBvbmUgb3JpZ2luIHdpdGggbG9jYWwgc3RvcmFnZS4KK30KKwor
dGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3Jh
Z2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdl
LXRyYWNrZXItNC1jcmVhdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdl
LXRyYWNrZXItNC1jcmVhdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEx
IEBACitPcmlnaW4gaWRlbnRpZmllcjogJ2ZpbGVfXzAnCitTdG9yYWdlVHJhY2tlciB0ZXN0IC0g
d3JpdGUgbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBvcmlnaW4uIFNob3VsZCBiZSBjYWxsZWQgYWZ0
ZXIgc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0IG9u
IHN1Y2Nlc3MuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFj
a2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9y
YWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rp
b24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJTdG9y
YWdlVHJhY2tlciB0ZXN0IC0gd3JpdGUgbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBvcmlnaW4uIFNo
b3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sLiIp
OworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAo
IXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdl
IERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGVi
dWcoIlRoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLiIp
OworCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KCkubGVuZ3RoID4gMCkgeworICAgICAgICAvLyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28g
d2UgY2FuIGV4aXQuCisgICAgICAgIHRlc3RGYWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0
ZWQgd2l0aCBsb2NhbCBzdG9yYWdlLiIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICBsb2NhbFN0b3JhZ2Uuc29tZU90aGVyRGF0YSA9
ICd3cml0ZW1lTW9yZSc7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAgfQorfQorCit0ZXN0KCk7CQorCit3aW5k
b3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVs
ZXRlLW9uZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9k
b21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1k
ZWxldGUtb25lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2Vy
LTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAK
K1Rlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8g
ZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2luLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZSgpLnRvU3RyaW5nKCkgaXMgImZpbGVfXzAiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUt
b25lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEFQSSB0byB2aWV3IG9yaWdpbnMgdGhhdCBo
YXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRlbGV0ZSBsb2NhbCBzdG9yYWdlIGJ5IG9yaWdpbi4i
KTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkgewor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYg
KCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImxvY2FsU3RvcmFn
ZSBET0VTIE5PVCBleGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxh
eW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkg
eworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImxheW91dFRlc3RDb250cm9sbGVyLm9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSIsICJmaWxlX18wIik7CisgICAgICAg
IC8vIFdlJ3JlIGp1c3QgZ29pbmcgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBvcmlnaW4sIHNvIHdl
J2xsIGdldCBvbmUgb3JpZ2luIGNoYW5nZSBub3RpZmljYXRpb24uCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAg
ICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZSBvbmUgb3JpZ2lu
IHdpdGggbG9jYWwgc3RvcmFnZS4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2luKCJmaWxlOi8vIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgiUmFuIHdpdGggbm8gb3JpZ2lucyB3aXRoIGxvY2FsIHN0b3JhZ2UuIik7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKK30KKwor
dGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84520</attachid>
            <date>2011-03-02 22:38:42 -0800</date>
            <delta_ts>2011-03-10 01:18:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110302223841.patch</filename>
            <type>text/plain</type>
            <size>126846</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDMtMDIgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6dGVzdEZvcmNlTG9jYWxTdG9yYWdl
U3luYyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERp
cmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3Rv
cmFnZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTZXRPcmlnaW5EZXRh
aWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVB
bGxPcmlnaW5zKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1
bGVDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6b3Bl
bkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyT3JpZ2luRm9y
RGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzZXRPcmlnaW5EZXRh
aWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzY2hlZHVsZVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6d2lsbERlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
VHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0ZXN0
U3RvcmFnZVN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+U3RvcmFnZVRyYWNrZXJDbGllbnQp
OgorCiAyMDExLTAzLTAyICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtMzE5NSw2ICszMTk1LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTA4Nyw2ICsxMDg3LDE2IEBAIF9fWk5LN1dlYkNvcmUxNFJl
c291cmNlTG9hZGVyMTFmcmFtZUxvYWQKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMTBj
YW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4ZGF0
YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luNWVxdWFsRVBL
UzBfCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tl
cjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFN0b3Jh
Z2VUcmFja2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNr
ZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKK19fWk43V2ViQ29yZTE0U3Rv
cmFnZVRyYWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyN29yaWdp
bnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTG0wRUVF
CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyOXNldENsaWVudEVQTlNfMjBTdG9yYWdlVHJh
Y2tlckNsaWVudEUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNXRlc3RTdG9yYWdlU3lu
Y0V2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMzJzeW5jRmlsZVN5c3RlbUFuZFRyYWNr
ZXJEYXRhYmFzZUV2CisjZW5kaWYKIF9fWk5LN1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE4Zm9j
dXNlZE9yTWFpbkZyYW1lRXYKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1cGxhdGZv
cm1Db250ZXh0RXYKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE2cGFpbnRpbmdEaXNh
YmxlZEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDE4OCw2ICs0MTg4LDggQEAK
ICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFn
ZS9TdG9yYWdlU3luY01hbmFnZXIuaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlVHJh
Y2tlci5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCcsCiAgICAg
ICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9h
bmltYXRpb24vU01JTFRpbWUuaCcsCiAgICAgICAgICAgICAnc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZUNvbnRhaW5lci5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDgwMTk3KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3MjIsNyArMjcy
Miw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAg
c3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2Uu
aCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNF
UyArPSBcCkBAIC0yNzM5LDcgKzI3NDEsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9N
X1NUT1JBR0U9MSkgCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBz
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAK
KyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVf
U1lTVEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTMxMCw2ICs2NTMxMCwxNCBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlVHJhY2tlci5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFu
Z2VDYWxsYmFjay5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDgwMTk3KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTEsNiArODUxLDkgQEAKIAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1
IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNw
b25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OwogCQkzN0ZENDI5ODExODM2
ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVw
dGhMaW1pdC5oICovOyB9OworCQkzQUIwMkQyQTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRy
YWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNB
QjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNBQjAyRDJCMTJENEY5MTYwMEZC
QjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNr
ZXIuY3BwICovOyB9OworCQkzQUMzNjgwMDEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNBQzY0OEIyMTI5
RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzY0OEIxMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0
aW5nQm91bmRhcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0MTAwMkNDRDBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTAwMkNDQjBG
NjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi87IH07CiAJCTQxMDAyQ0NF
MEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBE
IC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi87IH07CkBAIC03MjIzLDYgKzcyMjYsOSBAQAog
CQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQg
LyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZURlcHRoTGltaXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0
b3JhZ2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VU
cmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI5MTJENEY5MTYw
MEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdG9yYWdlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyog
RWRpdGluZ0JvdW5kYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRp
bmdCb3VuZGFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTAwMkNDQzBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjk0Niw2ICsxMjk1Miw5IEBA
CiAJCQkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgg
Ki8sCiAJCQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5j
cHAgKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdl
ci5oICovLAorCQkJCTNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5o
ICovLAorCQkJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAg
Ki8sCisJCQkJM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50
LmggKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwogCQkJcGF0aCA9IHN0b3JhZ2U7CkBA
IC0yMjAxNCw2ICsyMjAyMyw3IEBACiAJCQkJQzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0
b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NUUzOEJGMTAwNDBENUQwMEE1
NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxMDJE
OTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJM0FCMDJEMkExMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTQ4OEQ2QjBERDVBODNEMDA5RDgzQjIgLyogU3RyaW5nU291cmNlUHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0OUY3Nzc2MEVGRUM2MjAwMDkw
ODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI1MDcsNiAr
MjI1MTcsNyBAQAogCQkJCUUxRjFFODMwMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQ
cm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAv
KiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBQzM2ODAwMTJFRjdBMDkw
MDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3
RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QTU3NEYyOTEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNDc3OCw2ICsyNDc4OSw3IEBACiAJCQkJQzUwRDBFODIwRkY0MjcyOTAwQUMyNjQ0
IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU1RTM4QzAxMDA0
MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUM1MTAyRDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFj
a2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTMwMEQwMDZDMUQwMEVGNkYyNiAvKiBT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMjY0NUMwRDAwQTc3RTAwMEFDQzFEIC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVEMEQwMEE3N0UwMDBBQ0Mx
RCAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdy
b3VwU2V0dGluZ3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCkBAIC0xMTAsNiAr
MTExLDQ2IEBAIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCiAjZW5kaWYKIH0K
IAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxT
dG9yYWdlRm9yQWxsT3JpZ2lucygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVu
ZCgpOworICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9j
YWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xl
YXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpj
bGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAg
IGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjpp
dGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQt
PnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsK
KyAgICB9ICAgIAorfQorICAgIAordm9pZCBQYWdlR3JvdXA6OnRlc3RGb3JjZUxvY2FsU3RvcmFn
ZVN5bmMoKQoreworICAgIGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3Ig
KFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQor
ICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPnRlc3RGb3JjZVN5bmMoKTsK
KyAgICB9Cit9CisKKyNlbmRpZgorCiB2b2lkIFBhZ2VHcm91cDo6YWRkUGFnZShQYWdlKiBwYWdl
KQogewogICAgIEFTU0VSVChwYWdlKTsKQEAgLTIwOSw2ICsyNTAsNyBAQCBTdG9yYWdlTmFtZXNw
YWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnCiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2Uu
Z2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JvdXBTZXR0aW5nczsKICAgICBjbGFzcyBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTsKICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiAKICAgICBjbGFzcyBQYWdl
R3JvdXAgewpAQCAtNDksOCArNTAsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+
UGFnZUdyb3VwKCk7CiAKICAgICAgICAgc3RhdGljIFBhZ2VHcm91cCogcGFnZUdyb3VwKGNvbnN0
IFN0cmluZyYgZ3JvdXBOYW1lKTsKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICAgICAg
c3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsKLSAgICAgICAgCisgICAgICAgIHN0YXRp
YyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgICAgICBzdGF0aWMg
dm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOworICAgICAg
ICAvLyBEdW1wUmVuZGVyVHJlZSBoZWxwZXIgdGhhdCB0cmlnZ2VycyBhIFN0b3JhZ2VBcmVhIHN5
bmMuCisgICAgICAgIHN0YXRpYyB2b2lkIHRlc3RGb3JjZUxvY2FsU3RvcmFnZVN5bmMoKTsKKyNl
bmRpZiAgICAgICAgCiAgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZXM7IH0KIAogICAgICAgICB2b2lkIGFkZFBhZ2UoUGFnZSopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw0ICsxMTIsMTEgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbAog
ICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5n
dGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQkocmV2
aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNCArODYsMjMgQEAgYm9vbCBleGNsdWRlRnJvbUJh
Y2t1cChjb25zdCBTdHJpbmcmIHBhdAogI2VuZGlmCiB9CiAKK1ZlY3RvcjxTdHJpbmc+IGxpc3RE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworCisgICAgLy8gVGhpcyBjYW4gcnVuIG9uIGEgYmFj
a2dyb3VuZCB0aHJlYWQsIHNvIG11c3QgY3JlYXRlIGFuIGF1dG9yZWxlYXNlIHBvb2wuCisgICAg
TlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0
XTsKKworICAgIE5TRGlyZWN0b3J5RW51bWVyYXRvciAqZGlyID0gW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBlbnVtZXJhdG9yQXRQYXRoOnBhdGhdOyAKKyAgICBOU1N0cmluZyAqZmls
ZTsKKyAgICB3aGlsZSAoKGZpbGUgPSBbZGlyIG5leHRPYmplY3RdKSkgeworICAgICAgICBpZiAo
ZmlsdGVyLmlzRW1wdHkoKSB8fCAoW2ZpbGUgcmFuZ2VPZlN0cmluZzpmaWx0ZXJdLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpKQorICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoW3BhdGggc3RyaW5n
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVdKTsKKyAgICB9CisKKyAgICBbcG9vbCByZWxl
YXNlXTsKKworICAgIHJldHVybiBlbnRyaWVzOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3Bw
CShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
VGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZVRocmVhZC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsNiAr
NTEsMjcgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIAogICAgIEFT
U0VSVChtX3RocmVhZCk7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBUZXJtaW5hdGVUaHJlYWQpOwog
fQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUpCisg
ICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IEltcG9ydE9yaWdpbnMg
fHwgbV90eXBlID09IERlbGV0ZUFsbE9yaWdpbnMpOworfQorICAgIAorTG9jYWxTdG9yYWdlVGFz
azo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllcikKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9vcmlnaW5JZGVudGlmaWVyKG9yaWdp
bklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBEZWxldGVPcmlnaW4pOworfQor
CitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpCisg
ICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlm
aWVyKQorICAgICwgbV9kYXRhYmFzZUZpbGVuYW1lKGRhdGFiYXNlRmlsZW5hbWUpCit7CisgICAg
QVNTRVJUKG1fdHlwZSA9PSBTZXRPcmlnaW5EZXRhaWxzKTsKK30KIAogTG9jYWxTdG9yYWdlVGFz
azo6fkxvY2FsU3RvcmFnZVRhc2soKQogewpAQCAtNjQsNiArODYsMTggQEAgdm9pZCBMb2NhbFN0
b3JhZ2VUYXNrOjpwZXJmb3JtVGFzaygpCiAgICAgICAgIGNhc2UgQXJlYVN5bmM6CiAgICAgICAg
ICAgICBtX2FyZWEtPnBlcmZvcm1TeW5jKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTZXRPcmlnaW5EZXRhaWxzOgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNr
ZXIoKS5zeW5jU2V0T3JpZ2luRGV0YWlscyhtX29yaWdpbklkZW50aWZpZXIsIG1fZGF0YWJhc2VG
aWxlbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbXBvcnRPcmlnaW5z
OgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jSW1wb3J0T3JpZ2lu
SWRlbnRpZmllcnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlbGV0ZUFs
bE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNEZWxl
dGVBbGxPcmlnaW5zKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWxldGVP
cmlnaW46CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNEZWxldGVP
cmlnaW4obV9vcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIERlbGV0ZUVtcHR5RGF0YWJhc2U6CiAgICAgICAgICAgICBtX2FyZWEtPmRlbGV0ZUVtcHR5
RGF0YWJhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKQEAgLTQwLDEzICs0MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTG9jYWxTdG9yYWdlVGFzayB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2Fs
U3RvcmFnZVRhc2spOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBEZWxldGVFbXB0eURhdGFiYXNl
LCBUZXJtaW5hdGVUaHJlYWQgfTsKKyAgICAgICAgZW51bSBUeXBlIHsgQXJlYUltcG9ydCwgQXJl
YVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFNldE9yaWdpbkRldGFpbHMsIEltcG9ydE9yaWdp
bnMsIERlbGV0ZUFsbE9yaWdpbnMsIERlbGV0ZU9yaWdpbiwgVGVybWluYXRlVGhyZWFkIH07CiAK
ICAgICAgICAgfkxvY2FsU3RvcmFnZVRhc2soKTsKIAogICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoU3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7
IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3lu
YyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3Jh
Z2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9j
YWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlRW1wdHlEYXRhYmFzZShTdG9yYWdlQXJlYVN5bmMq
IGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZUVtcHR5
RGF0YWJhc2UsIGFyZWEpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3Jh
Z2VUYXNrPiBjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCgpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEltcG9ydE9yaWdpbnMpKTsgfQorICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTZXRPcmlnaW5EZXRhaWxzKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1l
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhTZXRPcmlnaW5EZXRhaWxz
LCBvcmlnaW5JZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFn
ZVRhc2soRGVsZXRlT3JpZ2luLCBvcmlnaW5JZGVudGlmaWVyKSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlQWxsT3JpZ2lucygpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZUFsbE9yaWdpbnMpKTsg
fQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJt
aW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBM
b2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KIAogICAgICAgICB2
b2lkIHBlcmZvcm1UYXNrKCk7CkBAIC01NCwxMCArNTksMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgU3RvcmFnZUFy
ZWFTeW5jKik7CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgTG9jYWxTdG9yYWdlVGhy
ZWFkKik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgY29uc3QgU3RyaW5nJik7Cisg
ICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSk7CiAKICAgICAgICAgVHlwZSBtX3R5
cGU7CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyogbV9hcmVhOwogICAgICAgICBMb2NhbFN0b3Jh
Z2VUaHJlYWQqIG1fdGhyZWFkOworICAgICAgICBTdHJpbmcgbV9vcmlnaW5JZGVudGlmaWVyOwor
ICAgICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDMxIEBAIHZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpjbG9zZSgpCiAjZW5kaWYKIH0KIAordm9pZCBTdG9yYWdlQXJlYUltcGw6
OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBpZiAobV9zdG9yYWdl
TWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+
cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3Rh
KTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKKyAgICAgICAgbV9zdG9y
YWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKyAgICAKK3ZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjp0ZXN0Rm9yY2VTeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cisg
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1fc3RvcmFnZUFy
ZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+dGVzdEZvcmNlU3luYygpOworfQor
CiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QK
IHsKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBPbmx5IGNhbGxlZCBmcm9tIGEgYmFj
a2dyb3VuZCB0aHJlYWQuCiAgICAgICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKKyAgICAgICAgLy8gVXNlZCB0byBjbGVhciBhIFN0
b3JhZ2VBcmVhIGFuZCBjbG9zZSBkYiBiZWZvcmUgYmFja2luZyBkYiBmaWxlIGlzIGRlbGV0ZWQu
CisgICAgICAgIHZvaWQgY2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworICAgICAgICB2b2lkIHRl
c3RGb3JjZVN5bmMoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChT
dG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZUFyZWFJbXBsKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuY3BwCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIu
aCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIApAQCAtMTM4LDYgKzEzOSwyNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2No
ZWR1bGVDbGVhcigpCiAgICAgfQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVD
bG9zZURhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAg
ICAKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGlt
ZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5U
ZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisg
ICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwogdm9pZCBTdG9y
YWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yMjIsNiArMjQyLDEwIEBAIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIC8vIEEgU3RvcmFnZVRyYWNrZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2NoZWR1bGVk
IHRvIGRlbGV0ZSB0aGUgZGIgd2UncmUKKyAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNlbCBwb3Nz
aWJsZSBkZWxldGlvbi4KKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNlbERlbGV0
aW5nT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRhYmFzZS5v
cGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9w
ZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUu
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpAQCAtMjM1LDYgKzI1OSw4
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgbV9k
YXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAg
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRPcmlnaW5EZXRhaWxzKG1fZGF0YWJhc2VJZGVu
dGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBl
cmZvcm1JbXBvcnQoKQpAQCAtMzE5LDYgKzM0NSwxNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
c3luYyhib29sIGNsZWFySXRlCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBpdCBpcyBhYm91dCB0
byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBkZWxldGUgd2lsbCBi
ZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3BlbiB0aGUgZGIKKyAg
ICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVxdWVzdCB0byBkZWxl
dGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7CisgICAgICAgIG1fc3lu
Y0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIElmIHRoZSBjbGVhciBmbGFnIGlzIHNl
dCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkgbmV3IG9u
ZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNs
ZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKQEAgLTMzMyw3ICszNjgs
NyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBTUUxpdGVTdGF0ZW1lbnQg
aW5zZXJ0KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSIp
OwogICAgIGlmIChpbnNlcnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0
ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CkBAIC00MjEsMTIgKzQ1NiwxNSBAQCB2b2lk
IFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzCiAgICAgaWYgKCFjb3VudCkgewog
ICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwogICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0g
ICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFi
YXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIVNRTGl0ZUZp
bGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRh
YmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLmRlbGV0ZU9yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CiAgICAgfQotfQorfSAg
ICAgICAgCiAKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjp0ZXN0Rm9yY2VTeW5jKCkKK3sKKyAgICBz
eW5jVGltZXJGaXJlZCgmbV9zeW5jVGltZXIpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVJdGVt
Rm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAg
IHZvaWQgc2NoZWR1bGVDbGVhcigpOworICAgICAgICB2b2lkIHNjaGVkdWxlQ2xvc2VEYXRhYmFz
ZSgpOworCisgICAgICAgIHZvaWQgdGVzdEZvcmNlU3luYygpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgU3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmll
cik7CkBAIC05Miw2ICs5NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X3N5bmNTY2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9zeW5jSW5Qcm9ncmVzczsKICAgICAgICAg
Ym9vbCBtX2RhdGFiYXNlT3BlbkZhaWxlZDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9zeW5j
Q2xvc2VEYXRhYmFzZTsKIAogICAgICAgICBtdXRhYmxlIE11dGV4IG1faW1wb3J0TG9jazsKICAg
ICAgICAgbXV0YWJsZSBUaHJlYWRDb25kaXRpb24gbV9pbXBvcnRDb25kaXRpb247CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkocmV2aXNpb24gODAxOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
T3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXN0
Rm9yY2VTeW5jKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHJldmlz
aW9uIDgwMTk3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTdG9yYWdl
QXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5
bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0x
NDQsNiArMTQ1LDM0IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnVubG9jaygpCiAgICAg
Ly8gQmVjYXVzZSB0aGVyZSdzIGEgc2luZ2xlIGV2ZW50IGxvb3AgcGVyLXByb2Nlc3MsIHRoaXMg
aXMgYSBuby1vcC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJPcmlnaW5G
b3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSA9IG1f
c3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgICAg
ICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQorCit2b2lkIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBpdC0+c2Vjb25kOwor
ICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworICAgIH0KK30K
KyAgICAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnRlc3RGb3JjZVN5bmMoKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgaXQtPnNlY29uZC0+dGVzdEZvcmNlU3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCShyZXZpc2lvbiA4MDE5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNiArNTEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisg
ICAgICAgIC8vIE5vdCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0
b3JhZ2VBcmVhTWFwIGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUg
dW5kZXJseWluZyBkYiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAg
ICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEg
dG8gZXZlbnR1YWxseSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VB
cmVhU3luYyB0byByZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHRlc3RGb3JjZVN5bmMoKTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAg
U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5z
aWduZWQgcXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRy
YWNrZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisjaW5jbHVk
ZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0b3JhZ2VUcmFja2VyKiBzdG9yYWdlVHJh
Y2tlciA9IDA7CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0
IFN0cmluZyYgc3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFzdG9yYWdlVHJhY2tlcik7Cisg
ICAgaWYgKHN0b3JhZ2VUcmFja2VyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmFn
ZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgpOworfQorCitTdG9yYWdl
VHJhY2tlciYgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKQoreworICAgIGlmICghc3RvcmFnZVRy
YWNrZXIpCisgICAgICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKCIiKTsK
KyAgICAKKyAgICByZXR1cm4gKnN0b3JhZ2VUcmFja2VyOworfQorCitTdG9yYWdlVHJhY2tlcjo6
U3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKKyAgICA6IG1fY2xpZW50
KDApCisgICAgLCBtX3RocmVhZChMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIAorICAgIHNldFN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3Rl
clNRTGl0ZVZGUygpOworICAgIAorICAgIG1fdGhyZWFkLT5zdGFydCgpOyAgCisgICAgaW1wb3J0
T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFn
ZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09w
ZW4oKSk7CisgICAgCisgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2Fm
ZUNvcHkoKTsKK30KKworU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VG
aWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCAiU3RvcmFnZVRyYWNrZXIuZGIi
KTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisKKyAgICBpZiAobV9kYXRhYmFz
ZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBkYXRhYmFzZVBh
dGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7CisgICAgCisgICAgaWYgKCFTUUxpdGVGaWxlU3lz
dGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCkpIHsKKyAgICAgICAgaWYgKGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFi
YXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWko
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2Uu
ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJs
ZUV4aXN0cygiT3JpZ2lucyIpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCBwYXRoIFRFWFQpOyIpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIE9yaWdpbnMgdGFibGUuIik7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFj
a2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit7ICAgIAorICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fb3JpZ2luU2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
bV9vcmlnaW5TZXQgPSBhZG9wdFB0cihuZXcgT3JpZ2luU2V0KTsKKyAgICB9CisgICAgCisgICAg
bV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVu
dGlmaWVyc0ltcG9ydCgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisK
KyAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBP
cmlnaW5zIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50
IHJlc3VsdDsKKyAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBT
UUxSZXN1bHRSb3cpCisgICAgICAgICAgICBtX29yaWdpblNldC0+YWRkKHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApLnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICB9CisgICAgCisg
ICAgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICBpZiAobV9j
bGllbnQpIHsKKyAgICAgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdp
blNldC0+ZW5kKCk7CisgICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oKml0KTsKKyAgICB9Cit9CisgICAgCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpCit7Cisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBmaWxlRXh0LCAoIi5sb2NhbHN0b3JhZ2UiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCB1bnNpZ25lZCwgZmlsZUV4dExlbmd0aCwgKGZpbGVF
eHQubGVuZ3RoKCkpKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzID0gbGlzdERpcmVjdG9y
eShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCBmaWxlRXh0KTsKKworICAgIC8vIEFkZCBtaXNzaW5n
IFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAg
ICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGF0aHMuZW5kKCk7CisgICAg
Zm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSAqaXQ7CisgICAgICAgIGlm
IChwYXRoLmVuZHNXaXRoKGZpbGVFeHQsIHRydWUpICYmIHBhdGgubGVuZ3RoKCkgPiBmaWxlRXh0
TGVuZ3RoKSB7CisgICAgICAgICAgICBTdHJpbmcgZmlsZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRo
KTsKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmco
MCwgZmlsZS5sZW5ndGgoKSAtIGZpbGVFeHRMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtX29y
aWdpblNldC0+Y29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldE9yaWdpbkRldGFpbHMo
b3JpZ2luSWRlbnRpZmllciwgcGF0aCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzeW5jU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9yYWdl
VHJhY2tlciByZWNvcmRzLgorICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0g
bV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBzZXRFbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKCFmb3VuZE9yaWdpbnMuY29udGFpbnMoKml0KSkgeworICAgICAgICAgICAgaWYgKGlzTWFp
blRocmVhZCgpKQorICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbigqaXQpOworICAgICAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgICAgICBzeW5jRGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkK
K3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgICAgICBBU1NFUlQobV9vcmlnaW5TZXQpOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fb3JpZ2luU2V0LT5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX29yaWdpblNldC0+YWRkKG9yaWdpbklkZW50aWZpZXIpOworICAg
IH0KKworICAgIExvY2FsU3RvcmFnZVRhc2sqIHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVh
dGVTZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0
YWJhc2VGaWxlKS5sZWFrUHRyKCk7CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNr
KTsKKyAgICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAo
dm9pZCopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayh2b2lk
KiB0YXNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQpOworICAgIAorICAgIGlmIChTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkKQorICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLm1fdGhyZWFkLT5zY2hlZHVsZVRhc2soKExvY2FsU3RvcmFnZVRhc2sqKXRhc2spOworfQor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIAor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBW
QUxVRVMgKD8sID8pIik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMn
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmln
aW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsK
KyAgICAKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNr
ZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIGlmICghbV9vcmln
aW5TZXQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICBtX29yaWdpblNldC0+
YWRkKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgU3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
PiYgcmVzdWx0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIEFTU0VSVChtX29yaWdpblNldCk7CisgICAgCisgICAgT3JpZ2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC0+ZW5kKCk7CisgICAgZm9yIChPcmlnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFi
YXNlSWRlbnRpZmllcigqaXQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlQWxs
T3JpZ2lucygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90
aHJlYWQpOworICAgIEFTU0VSVChtX29yaWdpblNldCk7CisKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICB3aWxsRGVsZXRl
QWxsT3JpZ2lucygpOworICAgICAgICBtX29yaWdpblNldC0+Y2xlYXIoKTsKKyAgICB9CisKKyAg
ICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgIAorICAg
IG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxs
T3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxP
cmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1FM
aXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDEpKTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3Bh
dGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAg
IAorICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNlLmNsb3Nl
KCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRh
YmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKK30KKwordm9pZCBTdG9yYWdl
VHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sK
KyAgICBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50
aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sgICAgCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAgIEFTU0VSVChtX29y
aWdpblNldCk7CisgICAgCisgICAgLy8gQmVmb3JlIGRlbGV0aW5nIGRhdGFiYXNlLCB3ZSBuZWVk
IHRvIGNsZWFyIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlIGRhdGEKKyAgICAvLyBpbiBTdG9yYWdl
QXJlYSwgYW5kIHRvIGNsb3NlIHRoZSBTdG9yYWdlQXJlYSBkYi4gSXQncyBwb3NzaWJsZSBmb3Ig
YW4KKyAgICAvLyBpdGVtIHRvIGJlIGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NpbmcgdGhl
IGRiIGFuZCBjYXVzZSBTdG9yYWdlQXJlYVN5bmMKKyAgICAvLyB0byByZW9wZW4gdGhlIGRiIGJl
Zm9yZSB0aGUgZGIgaXMgZGVsZXRlZCBieSBhIFN0b3JhZ2VUcmFja2VyIHRocmVhZC4KKyAgICAv
LyBJbiB0aGlzIGNhc2UsIHJlb3BlbmluZyB0aGUgZGIgaW4gU3RvcmFnZUFyZWFTeW5jIHdpbGwg
Y2FuY2VsIGEgcGVuZGluZworICAgIC8vIFN0b3JhZ2VUcmFja2VyIGRiIGRlbGV0aW9uLgorICAg
IFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKKworICAgIFN0
cmluZyBvcmlnaW5JZCA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAg
ICAgICAgd2lsbERlbGV0ZU9yaWdpbihvcmlnaW5JZCk7CisgICAgICAgIG1fb3JpZ2luU2V0LT5y
ZW1vdmUob3JpZ2luSWQpOworICAgIH0KKyAgICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNr
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbihvcmlnaW5JZCkpOworfQorCit2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIAorICAgIGlmICghY2Fu
RGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0
ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxu
Iiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IG9yaWdp
bidzIGRiIGZpbGUgcGF0aCwgZGVsZXRlIGVudHJ5IGluIHRyYWNrZXIncyBkYiwgdGhlbiBkZWxl
dGUgZGIgZmlsZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgaWYgKHBh
dGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwg
b3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBp
bnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZmluZCBvcmlnaW4gJyVz
JyBpbiBPcmlnaW5zIHRhYmxlIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHBhdGggPSBwYXRoU3RhdGVt
ZW50LmdldENvbHVtblRleHQoMCk7CisKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAg
ICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7CisgICAgaWYgKGRlbGV0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcHJlcGFyZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVu
dC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1
dGUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX29yaWdpblNldC0+cmVt
b3ZlKG9yaWdpbklkZW50aWZpZXIpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShwYXRoKTsKKyAgICAKKyAgICAvLyBDbGVhbiB1cCB0cmFja2VyIGRpcmVjdG9yeSBp
ZiB0aGUgbGFzdCBvcmlnaW4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICBpZiAobV9vcmlnaW5TZXQt
PmlzRW1wdHkoKSkgeworICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwor
ICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1f
c3RvcmFnZURpcmVjdG9yeVBhdGgpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVy
KTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKCkK
K3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIGlmICghbV9v
cmlnaW5zQmVpbmdEZWxldGVkKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQgPSBhZG9w
dFB0cihuZXcgT3JpZ2luU2V0KTsKKworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9vcmlnaW5TZXQtPmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fb3JpZ2luU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKCppdCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6
OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZCkKKyAgICAgICAgbV9vcmln
aW5zQmVpbmdEZWxldGVkID0gYWRvcHRQdHIobmV3IE9yaWdpblNldCk7CisgICAgICAgIAorICAg
IG1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+YWRkKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAor
Ym9vbCBTdG9yYWdlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwor
ICAgIHJldHVybiBtX29yaWdpbnNCZWluZ0RlbGV0ZWQtPmNvbnRhaW5zKG9yaWdpbklkZW50aWZp
ZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0Rl
bGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZC0+aXNF
bXB0eSgpKQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQtPnJlbW92ZShvcmlnaW5JZGVu
dGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFj
a2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OnRlc3RTdG9yYWdlU3luYygpCit7CisgICAgUGFnZUdyb3VwOjp0ZXN0
Rm9yY2VMb2NhbFN0b3JhZ2VTeW5jKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlVHJhY2tlcl9oCisj
ZGVmaW5lIFN0b3JhZ2VUcmFja2VyX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrOworY2xhc3MgTG9j
YWxTdG9yYWdlVGhyZWFkOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9yYWdlVHJh
Y2tlckNsaWVudDsgICAgCisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5n
JiBzdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2VyKCk7Cisg
ICAgc3RhdGljIHZvaWQgc2NoZWR1bGVUYXNrKHZvaWQqKTsKKworICAgIHZvaWQgaW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMoKTsKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgCisg
ICAgdm9pZCBkZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBkZWxldGVPcmlnaW4oU2VjdXJp
dHlPcmlnaW4qKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpOworICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiA+JiByZXN1bHQpOworCisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KFN0b3JhZ2VU
cmFja2VyQ2xpZW50Kik7CisKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFja2dyb3VuZCB0aHJl
YWQuCisgICAgdm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQgc3luY0RlbGV0
ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc3luY1Nl
dE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMo
KTsKKyAgICB2b2lkIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisgICAgCisg
ICAgdm9pZCB0ZXN0U3RvcmFnZVN5bmMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tl
cihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTdHJpbmcgdHJhY2tlckRh
dGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KTsKKyAgICAKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKyAg
ICAKKyAgICBib29sIGNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICB2b2lk
IG9yaWdpbkZpbGVQYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworICAgIAorICAgIE11dGV4
IG1fZGF0YWJhc2VHdWFyZDsKKyAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworCisgICAg
U3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7CisKKyAgICBTdG9yYWdlVHJhY2tlckNsaWVu
dCogbV9jbGllbnQ7CisgICAgCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2luU2V0
OworCisgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgYW4gb3ducHRyIGhlcmU/CisgICAgT3duUHRy
PE9yaWdpblNldD4gbV9vcmlnaW5TZXQ7CisgICAgCisgICAgT3duUHRyPE9yaWdpblNldD4gbV9v
cmlnaW5zQmVpbmdEZWxldGVkOworICAgIAorICAgIE93blB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+
IG1fdGhyZWFkOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2lmbmRlZiBTdG9y
YWdlVHJhY2tlckNsaWVudF9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKworI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3Rv
cmFnZVRyYWNrZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflN0b3JhZ2VUcmFja2Vy
Q2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJDbGllbnRfaApJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDgwMTk3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wMy0wMiAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFA
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAg
ICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAg
ICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDExLTAzLTAyICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDExIEBA
CiAJCTM3QjZGQjRGMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QjZGQjREMTA2
MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSAqLzsgfTsKIAkJMzdEMURD
QTgxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENBNjEwNjU5MjhDMDA2OEY3RUYgLyogV2Vi
SlNQREZEb2MuaCAqLzsgfTsKIAkJMzdEMURDQTkxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERG
RG9jLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdE
MURDQTcxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tICovOyB9OworCQkzQUIwMkFG
NjEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQg
LyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi87IH07CisJCTNBQjAyQjAwMTJDMTMyQjIwMEZCQjY5
NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9y
YWdlTWFuYWdlclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICov
OyB9OworCQkzQUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJC
M0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi87IH07
CisJCTNBRTE1RDUwMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUUxNUQ0
RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICovOyB9Owog
CQk0MUY0NDg0RjEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjQ0ODREMTAzMzhFOEMw
MDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJX
b3JrZXJzUHJpdmF0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxRjQ0ODRFMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSAq
LzsgfTsKIAkJNDRCQjhCMTQxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRCQjhCMTMx
MjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5oICovOyB9OwpAQCAtNDgzLDYg
KzQ4OCwxMSBAQAogCQkzOTQ0NjA3RTAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRM
aXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViQmFja0ZvcndhcmRMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3
IC8qIFdlYkhpc3RvcnlJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkhpc3RvcnlJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA4MDAyMEY1MEVEMEVDQTE3
NjcgLyogV2ViSGlzdG9yeUl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJIaXN0b3J5SXRlbS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTNBQjAyQUY1MTJD
MTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1h
bmFnZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3Jh
Z2VNYW5hZ2VyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUJCM0M3
ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2Vy
SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEQxMDMzOEU4
QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYldvcmtlcnNQcml2YXRlLmg7IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3Jr
ZXJzUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY0NDg0RTEwMzM4
RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJXb3JrZXJzUHJpdmF0ZS5tbTsgcGF0aCA9IG1hYy9Xb3Jr
ZXJzL1dlYldvcmtlcnNQcml2YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDkwOThCOTBGOEY4MkRGMDA3NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU2LDYgKzEwNjYsMTEgQEAKIAkJCQlBNURFRkMw
RTExRDUzNDNFMDA4ODUyNzMgLyogV2ViRGF0YWJhc2VRdW90YU1hbmFnZXIubW0gKi8sCiAJCQkJ
NTExRjNGRDMwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5oICov
LAogCQkJCTUxMUYzRkQ0MENFQ0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZVRyYWNrZXJDbGll
bnQubW0gKi8sCisJCQkJM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VyLm1tICovLAorCQkJCTNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFu
YWdlclByaXZhdGUuaCAqLywKKwkJCQkzQUUxNUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3Rv
cmFnZU1hbmFnZXJJbnRlcm5hbC5oICovLAorCQkJCTNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAv
KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICovLAorCQkJCTNBQkIzQzc5MTMwOUMzQjUwMEU5
M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0g
U3RvcmFnZTsKIAkJCXBhdGggPSBtYWMvU3RvcmFnZTsKQEAgLTE2MjUsNyArMTY0MCwxMCBAQAog
CQkJCTU5OEFEOTJBMTIwMUNGM0IwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3Zp
ZGVyTW9ja0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThBREE0NjEyMDIyNzUwMDBB
QkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNFMkExQTQxMjNCMEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBNjJBRTIxMjVGODdDMjAwN0ZEMTE4
IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUUxNUQ1
MDEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJM0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQyRDMyNDEzMUVEMUUwMDA3NUZBNEIgLyog
V2ViTG9jYWxpemFibGVTdHJpbmdzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTk5Myw3ICsyMDEx
LDkgQEAKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRp
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFFNEUgLyogV2Vi
RGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0Uy
QTFBNTEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJM0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNjJBRTMxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0FCQjNDN0IxMzA5QzNCNTAw
RTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MkQzNEQxMzFFRDM4ODAwNzVGQTRCIC8qIFdlYkxvY2FsaXphYmxlU3RyaW5nc0ludGVybmFs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODAx
OTcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMwIEBACisyMDExLTAzLTAyICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAg
ICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OnRlc3RGb3JjZVN5bmMp
OgorICAgICAgICAqIHNyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaDoKKworMjAxMS0wMy0wMiAg
QW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVs
ZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBTdHVicyBmb3IgQ2hyb21pdW0gYnVpbGQuCisK
KyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0ZvckRl
bGV0aW9uKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5Lmg6CisKIDIwMTEt
MDMtMDIgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
dG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMjEgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlUHJveHk6
OnVubG9jaygpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAordm9pZCBTdG9yYWdlTmFt
ZXNwYWNlUHJveHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIFN0b3JhZ2VOYW1lc3Bh
Y2VQcm94eTo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp0ZXN0Rm9yY2VTeW5j
KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgYSBz
eW5jIHRvIGJhY2tpbmcgZGIuCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCShyZXZpc2lvbiA4MDE5NykKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3Jp
Z2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGVzdEZvcmNl
U3luYygpOwogCiBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3Bh
Y2U+IG1fc3RvcmFnZU5hbWVzcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgw
MTk3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTEtMDMtMDIgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAgICAgQWRkIFdl
YktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAgICAgICAgKiBT
dG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKCtbV2ViU3RvcmFn
ZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdKToKKyAgICAgICAgKC1bV2ViU3RvcmFn
ZU1hbmFnZXIgb3JpZ2luc10pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciBkZWxldGVB
bGxPcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZU9yaWdpbjpd
KToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgdGVzdFN0b3JhZ2VTeW5jXSk6CisgICAg
ICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIHRlc3RGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNl
U3luY10pOgorICAgICAgICAoc3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViS2l0
SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFn
ZU1hbmFnZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZVRy
YWNrZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hh
cmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFj
a2VyQ2xpZW50Ojp+V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdpbik6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW06CisgICAgICAg
ICgtW1dlYlNlY3VyaXR5T3JpZ2luIHByb3RvY29sXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5
T3JpZ2luIGhvc3RdKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gZGF0YWJhc2VJZGVu
dGlmaWVyXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIGRvbWFpbl0pOgorICAgICAg
ICAoLVtXZWJTZWN1cml0eU9yaWdpbiBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46XSk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg6Cisg
ICAgICAgICogV2ViS2l0LmV4cDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5h
bWU6dXNlc0RvY3VtZW50Vmlld3M6XSk6IEluaXRpYWxpemUgU3RvcmFnZVRyYWNrZXIuCisKIDIw
MTEtMDMtMDIgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCShyZXZpc2lvbiA4
MDE5NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTYsNiArNiw3IEBACiAub2JqY19jbGFzc19uYW1lX1dlYkNvcmVTdGF0aXN0aWNzCiAub2JqY19j
bGFzc19uYW1lX1dlYkRhdGFTb3VyY2UKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0YWJhc2VNYW5h
Z2VyCisub2JqY19jbGFzc19uYW1lX1dlYlN0b3JhZ2VNYW5hZ2VyCiAub2JqY19jbGFzc19uYW1l
X1dlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmll
bnRhdGlvbgogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9j
awpAQCAtMTE0LDYgKzExNSw4IEBAIF9XZWJSZXBvcnRFcnJvcgogX1dlYlNjcmlwdEVycm9yRGVz
Y3JpcHRpb25LZXkKIF9XZWJTY3JpcHRFcnJvckRvbWFpbgogX1dlYlNjcmlwdEVycm9yTGluZU51
bWJlcktleQorX1dlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleQorX1dlYlN0b3JhZ2VEaWRN
b2RpZnlPcmlnaW5Ob3RpZmljYXRpb24KIF9XZWJVUkxOYW1lUGJvYXJkVHlwZQogX1dlYlVSTFBi
b2FyZFR5cGUKIF9XZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFn
ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKworI2lt
cG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdl
VHJhY2tlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTlNTdHJpbmcgKiBjb25z
dCBXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsU3RvcmFnZURh
dGFiYXNlUGF0aFByZWZlcmVuY2VLZXkiOworTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlk
TW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uID0gQCJXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90
aWZpY2F0aW9uIjsKKworc3RhdGljIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpOwor
CitAaW1wbGVtZW50YXRpb24gV2ViU3RvcmFnZU1hbmFnZXIKKworKyAoV2ViU3RvcmFnZU1hbmFn
ZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcgoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlTWFu
YWdlciAqc2hhcmVkTWFuYWdlciA9IFtbV2ViU3RvcmFnZU1hbmFnZXIgYWxsb2NdIGluaXRdOwor
ICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOworfQorCistIChOU0FycmF5ICopb3JpZ2lucworewor
ICAgIFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gY29yZU9yaWdpbnM7CisKKyAgICBT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMpOworCisgICAgTlNN
dXRhYmxlQXJyYXkgKndlYk9yaWdpbnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OmNvcmVPcmlnaW5zLnNpemUoKV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlNlY3VyaXR5T3JpZ2lu
ICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3Jl
U2VjdXJpdHlPcmlnaW46Y29yZU9yaWdpbnNbaV0uZ2V0KCldOworICAgICAgICBbd2ViT3JpZ2lu
cyBhZGRPYmplY3Q6d2ViT3JpZ2luXTsKKyAgICAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKKyAg
ICB9CisKKyAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworfQorCistICh2b2lk
KWRlbGV0ZUFsbE9yaWdpbnMKK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0
ZUFsbE9yaWdpbnMoKTsKK30KKworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNlY3VyaXR5T3Jp
Z2luICopb3JpZ2luCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmln
aW4oW29yaWdpbiBfY29yZV0pOworfQorCistICh2b2lkKXRlc3RTdG9yYWdlU3luYworeworICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkudGVzdFN0b3JhZ2VTeW5jKCk7Cit9CisKKy0gKHZv
aWQpdGVzdEZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VTeW5jCit7CisgICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKS5zeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworfQor
CitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OworICAgIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktl
eTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVj
dG9yeSB8fCAhW3N0b3JhZ2VEaXJlY3RvcnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkKKyAgICAgICAgc3RvcmFnZURpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0
b3JhZ2UiOworICAgIAorICAgIHJldHVybiBbc3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5k
YXJkaXppbmdQYXRoXTsKK30KKwordm9pZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNz
YXJ5KCkKK3sKKyAgICBzdGF0aWMgQk9PTCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0
aWFsaXplVHJhY2tlcihzdG9yYWdlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICAKKyAgICBTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hh
cmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKSk7CisgICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZ
RVM7Cit9CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOwor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdl
RGlyZWN0b3J5RGVmYXVsdHNLZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdl
RGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uOworCitAY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47
CisKK0BpbnRlcmZhY2UgV2ViU3RvcmFnZU1hbmFnZXIgOiBOU09iamVjdAorCisrIChXZWJTdG9y
YWdlTWFuYWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyOworCisvLyBSZXR1cm5zIGFuIGFy
cmF5IG9mIFdlYlNlY3VyaXR5T3JpZ2luIG9iamVjdHMgdGhhdCBoYXZlIExvY2FsU3RvcmFnZS4K
Ky0gKE5TQXJyYXkgKilvcmlnaW5zOworCistICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnM7CistICh2
b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CisKKy0gKHZvaWQp
dGVzdFN0b3JhZ2VTeW5jOworLSAodm9pZCl0ZXN0RmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFz
ZVN5bmM7CisKK0BlbmQKKwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3Jh
Z2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisj
aW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3Jh
Z2VUcmFja2VyQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFy
ZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpOworICAgIAorICAgIHZpcnR1
YWwgfldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+KTsKK3ByaXZhdGU6CisgICAgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKK307CisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNs
aWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bi5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQo
KQoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogc2hhcmVkQ2xpZW50ID0g
bmV3IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgcmV0dXJuIHNoYXJlZENsaWVudDsK
K30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkK
K3sKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVu
dCgpCit7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGljX2Nhc3Q8U2Vj
dXJpdHlPcmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9y
aWdpbikKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHdlYlNlY3VyaXR5T3Jp
Z2luKEFkb3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVT
ZWN1cml0eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViU3RvcmFnZURpZE1vZGlm
eU9yaWdpbk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3VyaXR5T3JpZ2luLmdldCgpXTsKK30K
Kwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVu
dGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhy
ZWFkLCBzdGF0aWNfY2FzdDx2b2lkKj4ob3JpZ2luLmxlYWtSZWYoKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0
eU9yaWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJTZWN1cml0eU9yaWdpbi5tbQkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDYsMjMgKzQ2LDI4IEBAIC0gKGlkKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybAogCiAgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtV
UkwoW3VybCBhYnNvbHV0ZVVSTF0pKTsKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRl
ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4uZ2V0
KCkpOworICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUgKj4ob3JpZ2luLmdldCgpKTsKIAogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1N0
cmluZyopcHJvdG9jb2wKKy0gKE5TU3RyaW5nICopcHJvdG9jb2wKIHsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+cHJvdG9jb2woKTsKIH0K
IAotLSAoTlNTdHJpbmcqKWhvc3QKKy0gKE5TU3RyaW5nICopaG9zdAogewogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAK
Ky0gKE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCit7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPmRhdGFiYXNlSWRlbnRpZmllcigp
OworfQorCiAvLyBEZXByZWNhdGVkLiBVc2UgaG9zdCBpbnN0ZWFkLiBUaGlzIG5lZWRzIHRvIHN0
YXkgaGVyZSB1bnRpbCB3ZSBzaGlwIGEgbmV3IFNhZmFyaS4KLS0gKE5TU3RyaW5nKilkb21haW4K
Ky0gKE5TU3RyaW5nICopZG9tYWluCiB7CiAgICAgcmV0dXJuIFtzZWxmIGhvc3RdOwogfQpAQCAt
MTExLDcgKzExNiw3IEBAIC0gKGlkKV9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjooU2UK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIG9yaWdpbi0+cmVmKCk7Ci0gICAgX3ByaXZhdGUg
PSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSo+KG9yaWdpbik7Cisg
ICAgX3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSAq
PihvcmlnaW4pOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZh
dGUuaAkocmV2aXNpb24gODAxOTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcs
MTAgQEAgQGludGVyZmFjZSBXZWJTZWN1cml0eU9yaWdpbiA6IE5TT2JqZWN0IAogCiAtIChpZClp
bml0V2l0aFVSTDooTlNVUkwgKil1cmw7CiAKLS0gKE5TU3RyaW5nKilwcm90b2NvbDsKLS0gKE5T
U3RyaW5nKilob3N0OworLSAoTlNTdHJpbmcgKilwcm90b2NvbDsKKy0gKE5TU3RyaW5nICopaG9z
dDsKKworLSAoTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXI7CiAKIC8vIFJldHVybnMgemVy
byBpZiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16
ZXJvIG90aGVyd2lzZS4KIC0gKHVuc2lnbmVkIHNob3J0KXBvcnQ7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA4MDE5NykKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAog
I2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1
Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCisjaW1wb3J0
ICJXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZh
Y2UuaCIKICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAi
V2ViVGV4dEl0ZXJhdG9yLmgiCkBAIC02ODcsNiArNjg4LDEwIEBAIC0gKHZvaWQpX2NvbW1vbklu
aXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIFdl
YktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3Nh
cnkoKTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBh
dGhJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVzTWV0aG9k
KCk7CiAgICAgICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gODAxOTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMS0wMy0wMiAgQW50b24gRCdBdXJpYSAgPGFkYXVy
aWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAg
ICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKwor
ICAgICAgICBBZGRlZCB0ZXN0cyB0aGF0IHdyaXRlIHRvIExvY2FsU3RvcmFnZSwgZGVsZXRlIG9u
ZSBvcmlnaW4sIGdldCBsaXN0IG9mIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlLCBkZWxldGUg
YWxsIG9yaWdpbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayk6
CisgICAgICAgIChvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2spOgor
ICAgICAgICAoZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2spOgorICAgICAgICAob3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGlj
RnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAg
ICAgICAgKHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoYWxsb2Nh
dGVHbG9iYWxDb250cm9sbGVycyk6CisgICAgICAgIChyZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2Up
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JP
cmlnaW4pOgorCiAyMDExLTAzLTAxICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTQsNiArMzk0LDY0IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQWxsRGF0YWJhc2Vz
Q2FsbGIKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0
YXRpYyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgY29udHJvbGxl
ci0+c3luY0xvY2FsU3RvcmFnZSgpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgdW5zaWduZWQg
bnVtTm90aWZpY2F0aW9ucyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbik7CisKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxl
ci0+b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhudW1Ob3RpZmljYXRpb25zKTsK
KworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8v
IEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHVybChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBj
b250cm9sbGVyLT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4odXJsLmdldCgpKTsKKworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXItPm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNv
bnRleHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tGb3J3YXJkTGlzdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2lu
ZG93cyBpbXBsZW1lbnRhdGlvbgpAQCAtMjE0Nyw2ICsyMjA1LDExIEBAIEpTU3RhdGljRnVuY3Rp
b24qIExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICAgICAgeyAiYWRkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkiLCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgInNldFNjcm9sbGJhclBvbGljeSIsIHNldFNjcm9sbGJhclBvbGljeUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImF1dGhlbnRpY2F0ZVNlc3Npb24iLCBhdXRoZW50
aWNhdGVTZXNzaW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZGVsZXRlQWxsTG9jYWxT
dG9yYWdlIiwgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAic3luY0xvY2FsU3RvcmFnZSIsIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAg
ICAgICAgICAgICAgICAKKyAgICAgICAgeyAib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0
aW9ucyIsIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LCAgICAgICAgCisgICAgICAgIHsgImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIsIGRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlIiwgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJzZXRTaG91bGRQYWludEJyb2tlbkltYWdlIiwgc2V0U2hvdWxkUGFp
bnRCcm9rZW5JbWFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAg
fTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gODAxOTcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDEyIEBAIHB1YmxpYzoKIAogICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3Q7CiAKKyAgICBKU1ZhbHVl
UmVmIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZik7CisgICAgdm9pZCBkZWxl
dGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2Nh
bFN0b3JhZ2UoKTsKKwogICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sKTsK
ICAgICBib29sIHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFBhaW50QnJva2VuSW1hZ2U7IH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFn
ZVRyYWNrZXJEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0
b3JhZ2VUcmFja2VyRGVsZWdhdGUuaAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitjbGFzcyBM
YXlvdXRUZXN0Q29udHJvbGxlcjsKKworQGludGVyZmFjZSBTdG9yYWdlVHJhY2tlckRlbGVnYXRl
IDogTlNPYmplY3QgeworICAgIHVuc2lnbmVkIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nOwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyVG9Ob3RpZnlEb25lOworfQorCist
ICh2b2lkKWxvZ05vdGlmaWNhdGlvbnM6KGludCludW1iZXIgY29udHJvbGxlcjooTGF5b3V0VGVz
dENvbnRyb2xsZXIgKiljb250cm9sbGVyOworLSAodm9pZClvcmlnaW5Nb2RpZmllZDooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb247CistICh2b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURv
bmU6KExheW91dFRlc3RDb250cm9sbGVyICopY29udHJvbGxlcjsKKworQGVuZApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tCShyZXZpc2lv
biAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlN0b3JhZ2VU
cmFja2VyRGVsZWdhdGUuaCIKKworI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNp
bXBvcnQgPFdFYktpdC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaD4KKworQGltcGxlbWVudGF0aW9uIFN0b3JhZ2VU
cmFja2VyRGVsZWdhdGUKKworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3Iob3JpZ2luTW9kaWZpZWQ6KSBuYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5O
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpbG9nTm90aWZpY2F0aW9uczooaW50KW51bWJlciBjb250cm9sbGVyOihMYXlvdXRUZXN0
Q29udHJvbGxlciAqKWNvbnRyb2xsZXIKK3sKKyAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lID0g
Y29udHJvbGxlcjsKKworICAgIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nID0gbnVtYmVyOwor
fQorCistICh2b2lkKW9yaWdpbk1vZGlmaWVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIGlmICghbnVtYmVyT2ZOb3RpZmljYXRpb25zVG9Mb2cpCisgICAgICAgIHJldHVy
bjsKKworICAgIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nLS07CisgICAgCisgICAgaWYgKG51
bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nID09IDAgJiYgY29udHJvbGxlclRvTm90aWZ5RG9uZSkg
eworICAgICAgICBOU0FycmF5ICpvcmlnaW5zID0gW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRX
ZWJTdG9yYWdlTWFuYWdlcl0gb3JpZ2luc107CisgICAgICAgIGZvciAoV2ViU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiBpbiBvcmlnaW5zKQorICAgICAgICAgICAgcHJpbnRmKCJPcmlnaW4gaWRlbnRp
ZmllcjogJyVzJ1xuIiwgW1tvcmlnaW4gZGF0YWJhc2VJZGVudGlmaWVyXSBVVEY4U3RyaW5nXSk7
CisgICAgICAgIAorICAgICAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lLT5ub3RpZnlEb25lKCk7
CisgICAgfQorfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJTdG9yYWdlRGlk
TW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIAorICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRU
ZXN0Q29udHJvbGxlciAqKWNvbnRyb2xsZXIKK3sKKyAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25l
ID0gY29udHJvbGxlcjsKK30KKworCitAZW5kCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
OCBAQAogCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0g
Ki87IH07CiAJCTM3MTNFREUyMTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcgaW4g
Q29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MTNF
RERGMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcgKi87IH07CiAJCTM3MTNFREUz
MTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEzRURFMDExNUJFMTZGMDA3MDU3MjAg
LyogQ29sb3JCaXRzLnR0ZiAqLzsgfTsKKwkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJFNkQ5IC8qIFN0
b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzQTU2MjZDMTEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJE
ZWxlZ2F0ZS5tbSAqLzsgfTsKKwkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJFNkQ5IC8qIFN0b3JhZ2VU
cmFja2VyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNBNTYyNkMwMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRl
LmggKi87IH07CiAJCTQ0MDU5MDcxMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1
cHBvcnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NDA1OTA3MDEyNjg0NTM4MDBDRkQ0OEQgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1t
ICovOyB9OwogCQk0NDM3NzMwRTEyNUNCQzM2MDBBQUUwMkMgLyogV2ViQXJjaGl2ZUR1bXBTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwICovOyB9
OwogCQk0NDM3NzMwRjEyNUNCQzREMDBBQUUwMkMgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEE5OTc4MjBG
Q0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmggKi87IH07CkBAIC0yMzAs
NiArMjMyLDggQEAKIAkJMzc1RjA5NzcwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdh
dGNoZXI3MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI3MDAudHRmOyBwYXRoID0gZm9u
dHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3NUYwOTc4MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0
ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7
IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdl
aWdodFdhdGNoZXI4MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3
OTBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVy
OTAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0E1NjI2QzAxMzFDOEIxNzAw
MkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzQTU2MjZDMTEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxl
Z2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0b3JhZ2VU
cmFja2VyRGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MDU5MDcw
MTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMu
bW07IHBhdGggPSBtYWMvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NEE5OTc4MjBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFyY2hpdmVE
dW1wU3VwcG9ydC5oOyBwYXRoID0gY2YvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNo
aXZlRHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVEdW1wU3VwcG9y
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjAsNiArNDY0LDggQEAKIAkJ
CQlCQ0ExOEI1RTBDOUIwOEMyMDAxMTQzNjkgLyogUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0gKi8s
CiAJCQkJQkNBMThCNUYwQzlCMDhDMjAwMTE0MzY5IC8qIFVJRGVsZWdhdGUuaCAqLywKIAkJCQlC
Q0ExOEI2MDBDOUIwOEMyMDAxMTQzNjkgLyogVUlEZWxlZ2F0ZS5tbSAqLywKKwkJCQkzQTU2MjZD
MDEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oICovLAorCQkJCTNB
NTYyNkMxMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovLAog
CQkJKTsKIAkJCW5hbWUgPSBEZWxlZ2F0ZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtNjIwLDYgKzYyNiw3IEBACiAJCQkJNTE4NUY2QjMxMDcxNEUxMjAwN0FBMzkzIC8qIEhpc3Rv
cnlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNzgxNjcxMUFGMzFDMzAwN0UxQkMy
IC8qIE1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNGQkEx
MDEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTNBNTYyNkNDMTMxQ0EwMzYwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVn
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTgwOSw2ICs4MTYsNyBAQAogCQkJCUUxQjc4MTY1MTFB
RjMxQjcwMDdFMUJDMiAvKiBNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTI5Q0ZCQTExMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMwQzAgLyogQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQTU2MjZDQjEz
MUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODAxOTcpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Miw3ICsxOTIsMTIgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9s
bAogICAgIGJpbmRNZXRob2QoInNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogICAgIGJpbmRNZXRob2Qo
InNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSk7CiAgICAgYmluZE1ldGhvZCgic3Rv
cmVXZWJTY3JpcHRPYmplY3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0b3JlV2ViU2NyaXB0
T2JqZWN0KTsKLQorICAgIGJpbmRNZXRob2QoImRlbGV0ZUFsbExvY2FsU3RvcmFnZSIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKTsKKyAgICBiaW5kTWV0aG9k
KCJvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ25z
V2l0aExvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdlRm9y
T3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4pOworICAgIGJpbmRNZXRob2QoIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlv
bnMpOworICAgIGJpbmRNZXRob2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOworICAgIAogICAgIC8vIFRoZSBmYWxsYmFjayBtZXRo
b2QgaXMgY2FsbGVkIHdoZW4gYW4gdW5rbm93biBtZXRob2QgaXMgaW52b2tlZC4KICAgICBiaW5k
RmFsbGJhY2tNZXRob2QoJkxheW91dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZCk7CiAK
QEAgLTE2MDIsMyArMTYwNywzMCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5p
bXVtVGltCiAgICAgICAgIHJldHVybjsKICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdz
KCktPnNldE1pbmltdW1UaW1lckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKIH0K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKK3sKKyAgICAvLyBOb3Qg
SW1wbGVtZW50ZWQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhM
b2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
KQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2
b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQg
c3luY0xvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKK3sK
KyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKworCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDgw
MTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNywxMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKIAorICAgIC8vIExvY2FsU3RvcmFnZSBvcmlnaW4tcmVsYXRlZAorICAgIHZvaWQg
ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBvYnNlcnZlU3Rv
cmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworCiBwdWJsaWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGFy
ZSBub3QgZXhwb3NlZCB0byBKYXZhU2NyaXB0LgogICAgIHZvaWQgc2V0V29ya1F1ZXVlRnJvemVu
KGJvb2wgZnJvemVuKSB7IG1fd29ya1F1ZXVlLnNldEZyb3plbihmcm96ZW4pOyB9CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDYgKzY0MiwzMSBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9zZXRfd2ViX2RhdGFiYXNlX3F1b3RhKG9yaWdpbiwgcXVvdGEpOwogfQog
CitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZShKU0NvbnRleHRSZWYpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikK
K3sKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJl
cikKK3sKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCwgSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IGlt
cGxlbWVudApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQkocmV2aXNpb24gODAxOTcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbXBvcnQgIlBpeGVs
RHVtcFN1cHBvcnQuaCIKICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCiAjaW1wb3J0ICJSZXNv
dXJjZUxvYWREZWxlZ2F0ZS5oIgorI2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgog
I2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmgi
CiAjaW1wb3J0ICJXb3JrUXVldWUuaCIKQEAgLTc3LDYgKzc4LDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0
ZS5oPgogI2ltcG9ydCA8Z2V0b3B0Lmg+CkBAIC0xMzQsNiArMTM2LDcgQEAgc3RhdGljIEVkaXRp
bmdEZWxlZ2F0ZSAqZWRpdGluZ0RlbGVnYXRlOwogc3RhdGljIFJlc291cmNlTG9hZERlbGVnYXRl
ICpyZXNvdXJjZUxvYWREZWxlZ2F0ZTsKIHN0YXRpYyBIaXN0b3J5RGVsZWdhdGUgKmhpc3RvcnlE
ZWxlZ2F0ZTsKIFBvbGljeURlbGVnYXRlICpwb2xpY3lEZWxlZ2F0ZTsKK1N0b3JhZ2VUcmFja2Vy
RGVsZWdhdGUgKnN0b3JhZ2VEZWxlZ2F0ZTsKIAogc3RhdGljIGludCBkdW1wUGl4ZWxzOwogc3Rh
dGljIGludCB0aHJlYWRlZDsKQEAgLTQxNCw2ICs0MTcsNyBAQCBzdGF0aWMgdm9pZCByZXNldERl
ZmF1bHRzVG9Db25zaXN0ZW50VmFsCiAKICAgICBOU1N0cmluZyAqcGF0aCA9IGxpYnJhcnlQYXRo
Rm9yRHVtcFJlbmRlclRyZWUoKTsKICAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmlu
Z0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkRhdGFiYXNlcyJdIGZvcktleTpXZWJEYXRhYmFz
ZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0
cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxvY2FsU3RvcmFnZSJdIGZvcktleTpXZWJT
dG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOwogICAgIFtkZWZhdWx0cyBzZXRPYmplY3Q6W3Bh
dGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiTG9jYWxDYWNoZSJdIGZvcktleTpX
ZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXldOwogCiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZl
cmVuY2VzID0gW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwpAQCAtNTQ1LDYg
KzU0OSw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMoKQogICAgIHJl
c291cmNlTG9hZERlbGVnYXRlID0gW1tSZXNvdXJjZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF07
CiAgICAgcG9saWN5RGVsZWdhdGUgPSBbW1BvbGljeURlbGVnYXRlIGFsbG9jXSBpbml0XTsKICAg
ICBoaXN0b3J5RGVsZWdhdGUgPSBbW0hpc3RvcnlEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAg
c3RvcmFnZURlbGVnYXRlID0gW1tTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsK
IH0KIAogLy8gT2JqQysrIGRvZW5zJ3Qgc2VlbSB0byBsZXQgbWUgcGFzcyBOU09iamVjdComIHNh
ZGx5LgpAQCAtNTYyLDYgKzU2Nyw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VHbG9iYWxDb250cm9s
bGVycygpCiAgICAgcmVsZWFzZUFuZFplcm8oJnJlc291cmNlTG9hZERlbGVnYXRlKTsKICAgICBy
ZWxlYXNlQW5kWmVybygmdWlEZWxlZ2F0ZSk7CiAgICAgcmVsZWFzZUFuZFplcm8oJnBvbGljeURl
bGVnYXRlKTsKKyAgICByZWxlYXNlQW5kWmVybygmc3RvcmFnZURlbGVnYXRlKTsKIH0KIAogc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdj
LCBjb25zdCBjaGFyICphcmd2W10pCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWVNYWMuaAkocmV2aXNpb24gODAxOTcpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogQGNsYXNzIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvOwogQGNsYXNzIE5hdmlnYXRp
b25Db250cm9sbGVyOwogQGNsYXNzIFBvbGljeURlbGVnYXRlOworQGNsYXNzIFN0b3JhZ2VUcmFj
a2VyRGVsZWdhdGU7CiBAY2xhc3MgV2ViRnJhbWU7CiBAY2xhc3MgV2ViU2NyaXB0V29ybGQ7CiBA
Y2xhc3MgV2ViVmlldzsKQEAgLTQyLDYgKzQzLDcgQEAKIGNsYXNzIER1bXBSZW5kZXJUcmVlRHJh
Z2dpbmdJbmZvOwogY2xhc3MgTmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBQb2xpY3lEZWxl
Z2F0ZTsKK2NsYXNzIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGU7CiBjbGFzcyBXZWJGcmFtZTsKIGNs
YXNzIFdlYlNjcmlwdFdvcmxkOwogY2xhc3MgV2ViVmlldzsKQEAgLTU0LDYgKzU2LDcgQEAgZXh0
ZXJuIFdlYkZyYW1lKiB0b3BMb2FkaW5nRnJhbWU7CiBleHRlcm4gRHVtcFJlbmRlclRyZWVEcmFn
Z2luZ0luZm8gKmRyYWdnaW5nSW5mbzsKIGV4dGVybiBOYXZpZ2F0aW9uQ29udHJvbGxlciogZ05h
dmlnYXRpb25Db250cm9sbGVyOwogZXh0ZXJuIFBvbGljeURlbGVnYXRlKiBwb2xpY3lEZWxlZ2F0
ZTsKK2V4dGVybiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlKiBzdG9yYWdlRGVsZWdhdGU7CiAKIGV4
dGVybiBjb25zdCB1bnNpZ25lZCBtYXhWaWV3SGVpZ2h0OwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVk
IG1heFZpZXdXaWR0aDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0
Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbXBvcnQg
Ik1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgor
I2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5o
IgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWVJdGVtLmgiCkBAIC02
Niw2ICs2Nyw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViUXVvdGFNYW5hZ2VyLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViU2NyaXB0V29ybGQuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJTZWN1cml0eU9y
aWdpblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJUeXBlc0ludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CkBAIC0xMzMsMTEg
KzEzNSw1MyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpCiAgICAg
W1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGVsZXRlQWxsQXBwbGljYXRpb25DYWNoZXNdOwogfQogCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBbW1dl
YlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSB0ZXN0U3RvcmFnZVN5bmNd
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICBbc3RvcmFnZURlbGVnYXRlIGxv
Z05vdGlmaWNhdGlvbnM6bnVtYmVyIGNvbnRyb2xsZXI6dGhpc107Cit9CisKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBbW1dlYkRhdGFiYXNl
TWFuYWdlciBzaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXJdIGRlbGV0ZUFsbERhdGFiYXNlc107CiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7
CisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gZGVsZXRl
QWxsT3JpZ2luc107Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIFdlYlN0b3Jh
Z2VNYW5hZ2VyICpzdG9yYWdlID0gW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VN
YW5hZ2VyXTsKKworICAgIE5TQXJyYXkgKm9yaWdpbnMgPSBbc3RvcmFnZSBvcmlnaW5zXTsKKyAg
ICBOU0ludGVnZXIgY291bnQgPSBbb3JpZ2lucyBjb3VudF07CisKKyAgICBKU1ZhbHVlUmVmIGpz
T3JpZ2luc0FycmF5W2NvdW50XTsKKyAgICBmb3IgKE5TSW50ZWdlciBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKm9yaWdpbiA9IFtbb3JpZ2lucyBvYmplY3RBdElu
ZGV4OmldIGRhdGFiYXNlSWRlbnRpZmllcl07CisgICAgICAgIEpTU3RyaW5nUmVmIHN0ciA9IEpT
U3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilvcmlnaW4pOworICAgICAgICBq
c09yaWdpbnNBcnJheVtpXSA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHN0cik7CisgICAg
fQorCisgICAgSlNPYmplY3RSZWYganNBcnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNv
bnRleHQsIGNvdW50LCBqc09yaWdpbnNBcnJheSwgTlVMTCk7CisgICAgcmV0dXJuIGpzQXJyYXlP
YmplY3Q7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFn
ZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBVUkwpKTsKKyAgICAKKyAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1
cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3Ry
aW5nICopdXJsQ0YuZ2V0KCldXTsKKworICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2Vi
U3RvcmFnZU1hbmFnZXJdIGRlbGV0ZU9yaWdpbjpvcmlnaW5dOworfQorCiB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7CiAgICAgV2ViQmFja0Zvcndh
cmRMaXN0ICpiYWNrRm9yd2FyZExpc3QgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBiYWNrRm9yd2Fy
ZExpc3RdOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVz
dENvbnRyb2xsZXJRdC5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0MSw1
ICs4NDEsMzAgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbQogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtX2RydC0+
d2ViUGFnZSgpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0
b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMo
dW5zaWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCit9CisKIGNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpt
YXhWaWV3V2lkdGggPSA4MDA7CiBjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bWF4Vmlld0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9x
dC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMsNiArMjUzLDEyIEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0KGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOwogCiAgICAgdm9pZCBzZXRNaW5pbXVtVGlt
ZXJJbnRlcnZhbChkb3VibGUpOworICAgIAorICAgIHZvaWQgb3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UoKTsKKyAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1i
ZXIpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwogCiBwcml2YXRlIHNsb3RzOgogICAg
IHZvaWQgcHJvY2Vzc1dvcmsoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlv
dXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gODAxOTcpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIzLDYgKzE0MjMsNDEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0U2VyaWFsaXplSAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNM
b2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5z
aWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2Nh
bFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0pTVmFsdWVSZWYg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJl
ZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBV
UkwpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVy
dmFsKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKQEAgLTE0MzUsMyArMTQ3MCw1
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KIAogICAgIHZpZXdQ
cml2YXRlLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9
CisKKwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJX
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENv
bnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDgwMTk3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw0ICs1
NTMsMzMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSAogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVy
dmFsKSB7CiAKIH0KLSAgICAKKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2Fs
U3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25l
ZCBudW1iZXIpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3Rv
cmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworSlNWYWx1ZVJlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNv
bnRleHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gODAxOTcp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBA
QAorMjAxMS0wMy0wMiAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQxIEFQ
SSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAgICAqIHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXI6IEFkZGVkLgorICAgICAgICAqIHN0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJl
cGFyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10
cmFja2VyLTMtZGVsZXRlLWFsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2Vy
LTMtZGVsZXRlLWFsbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTUtZGVsZXRlLW9uZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0wMiAgTWloYWkg
UGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBU
b255IEdlbnRpbGNvcmUuCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitQcmVwYXJlIGZvciBTdG9yYWdl
VHJhY2tlciB0ZXN0cyBieSBlbnN1cmluZyB0aGF0IGV2ZXJ5IG9yaWdpbiB3aXRoIGxvY2FsIHN0
b3JhZ2UgaXMgZGVsZXRlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMg
dGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2Vy
LTEtcHJlcGFyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21z
dG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVw
YXJlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiUHJlcGFyZSBmb3IgU3RvcmFnZVRy
YWNrZXIgdGVzdHMgYnkgZW5zdXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9y
YWdlIGlzIGRlbGV0ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24g
ZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFp
bGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0
cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2lu
c1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5z
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorT3JpZ2luIGlkZW50aWZp
ZXI6ICdmaWxlX18wJworU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2Ug
Zm9yIHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5o
dG1sLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2Vy
LTItY3JlYXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2Fs
IHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMt
cHJlcGFyZS5odG1sLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZp
bmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0
KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICAvLyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMg
c28gd2UgY2FuIGV4aXQuCisgICAgICAgIHRlc3RGYWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4
aXN0ZWQgd2l0aCBsb2NhbCBzdG9yYWdlLiIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNv
bWVEYXRhID0gJ3dyaXRlbWUnOworICAgICAgICAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcidzIG5v
dGlmeURvbmUgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0
aW9uIGNvbWVzIGluLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFn
ZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgIH0KK30KKwordGVzdCgpOwkKKword2luZG93
LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0
ZS1hbGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVs
ZXRlLWFsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0z
LWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitU
ZXN0IEFQSSB0byB2aWV3IG9yaWdpbnMgdGhhdCBoYXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRl
bGV0ZSBsb2NhbCBzdG9yYWdlIGJ5IG9yaWdpbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgbGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2Uo
KS50b1N0cmluZygpIGlzICJmaWxlX18wIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFs
bC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2
ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uIik7
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICgh
d2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2Ug
RE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlv
dXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJsYXlvdXRUZXN0Q29udHJvbGxlci5vcmln
aW5zV2l0aExvY2FsU3RvcmFnZSgpLnRvU3RyaW5nKCkiLCAiZmlsZV9fMCIpOworICAgICAgICAv
LyBXZSdyZSBqdXN0IGdvaW5nIHRvIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb3JpZ2luLCBzbyB3ZSds
bCBnZXQgb25lIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9uLgorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IHRlc3RGYWlsZWQoIlJhbiB3aXRoIG5vIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlIik7Cisg
ICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9u
ZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK09yaWdpbiBpZGVudGlmaWVy
OiAnZmlsZV9fMCcKK1N0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZv
ciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1k
ZWxldGUtYWxsLmh0bWwuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUaGlzIHRl
c3Qgc2hvdWxkIGhhdmUgbm8gdmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2Ut
dHJhY2tlci00LWNyZWF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQt
Y3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0
ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBz
dG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwuIik7CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkg
eworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBo
YXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVz
dENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAg
ICAgIC8vIEFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0cyBzbyB3ZSBjYW4gZXhpdC4KKyAgICAgICAg
dGVzdEZhaWxlZCgiQW4gb3JpZ2luIGFscmVhZHkgZXhpc3RlZCB3aXRoIGxvY2FsIHN0b3JhZ2Uu
Iik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zeW5jTG9jYWxTdG9yYWdlKCk7Cisg
ICAgICAgIGxvY2FsU3RvcmFnZS5zb21lT3RoZXJEYXRhID0gJ3dyaXRlbWVNb3JlJzsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cygxKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmln
aW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBi
eSBvcmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGxheW91dFRl
c3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmls
ZV9fMCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3Jh
Z2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFj
a2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQg
dG8gZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2Up
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygibGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2Uo
KS50b1N0cmluZygpIiwgImZpbGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0
byBkZWxldGUgdGhlIGV4aXN0aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hh
bmdlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0
b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwg
d2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4o
ImZpbGU6Ly8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBu
byBvcmlnaW5zIHdpdGggbG9jYWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85296</attachid>
            <date>2011-03-10 01:18:12 -0800</date>
            <delta_ts>2011-03-10 15:00:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110310011811.patch</filename>
            <type>text/plain</type>
            <size>126892</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6dGVzdEZvcmNlTG9jYWxTdG9yYWdl
U3luYyk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERp
cmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3Rv
cmFnZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTZXRPcmlnaW5EZXRh
aWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVB
bGxPcmlnaW5zKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1
bGVDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6b3Bl
bkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmRlbGV0ZUVtcHR5RGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyT3JpZ2luRm9y
RGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjp0ZXN0Rm9yY2VTeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzZXRPcmlnaW5EZXRh
aWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzY2hlZHVsZVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6d2lsbERlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
VHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0ZXN0
U3RvcmFnZVN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+U3RvcmFnZVRyYWNrZXJDbGllbnQp
OgorCiAyMDExLTAzLTEwICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMzIwMyw2ICszMjAzLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBc
CisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkocmV2aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtMTA5Miw2ICsxMDkyLDE2IEBAIF9fWk5LN1dlYkNvcmUxNFJlc291cmNl
TG9hZGVyMTFmcmFtZUxvYWQKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMTBjYW5EaXNw
bGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4ZGF0YWJhc2VJ
ZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luNWVxdWFsRVBLUzBfCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjE3aW5p
dGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFj
a2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxMmRl
bGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRy
YWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyN29yaWdpbnNFUk4z
V1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTG0wRUVFCitfX1pO
N1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyOXNldENsaWVudEVQTlNfMjBTdG9yYWdlVHJhY2tlckNs
aWVudEUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNnN5bmNMb2NhbFN0b3JhZ2VFdgor
X19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjMyc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0
YWJhc2VFdgorI2VuZGlmCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXIxOGZvY3VzZWRP
ck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNXBsYXRmb3JtQ29u
dGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNnBhaW50aW5nRGlzYWJsZWRF
dgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQ2MjAsNiArNDYyMCw4IEBACiAgICAg
ICAgICAgICAnc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3Rv
cmFnZVN5bmNNYW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAg
ICAnc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAnLApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDgwNjk1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsNyArMjczNyw5IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmgg
XAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaCBcCiAgICAgICAgIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmgKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXJD
bGllbnQuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0yNzU0LDcgKzI3
NTYsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9MSkgCiAgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgXAotICAg
ICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9y
YWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAK
IH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lTVEVNPTEpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4
MDY5NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02NTYxMCw2ICs2NTYxMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxTdG9yYWdlVHJhY2tlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDgwNjk1KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNiAr
ODUxLDkgQEAKIAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25z
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4
RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlLm1tICovOyB9OwogCQkzN0ZENDI5ODExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURl
cHRoTGltaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oICovOyB9OworCQkz
QUIwMkQyQTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI4MTJENEY5MTYwMEZCQjY5
NCAvKiBTdG9yYWdlVHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIw
MkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OworCQkzQUMz
NjgwMDEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzM2N0ZFMTJFRjdBMDkwMDZB
M0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNBQzY0OEIyMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0
aW5nQm91bmRhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDNBQzY0OEIxMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTAwMkNDRDBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2Ny
aXB0RnVuY3Rpb25DYWxsLmggKi87IH07CiAJCTQxMDAyQ0NFMEY2NkVERUYwMDlFNjYwRCAvKiBT
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAgKi87IH07CkBAIC03MjM5LDYgKzcyNDIsOSBAQAogCQkzN0Y4MThGQzBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290
SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxv
YXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZENDI5
NzExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJlZURlcHRoTGltaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJh
Y2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlVHJh
Y2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQzM2N0ZFMTJFRjdBMDkw
MDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCb3VuZGFyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0
RnVuY3Rpb25DYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEZ1
bmN0aW9uQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQzBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMjk4NSw2ICsxMjk5MSw5IEBACiAJCQkJQzU1RTM4QkIxMDA0MEQ1
RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8sCiAJCQkJQzUxMDJEOTMwRkQ5
QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8sCiAJCQkJQzUxMDJEOTIw
RkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJCTNBQjAyRDI4
MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovLAorCQkJCTNBQjAyRDI5MTJE
NEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi8sCisJCQkJM0FDMzY3RkUxMkVG
N0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkpOwogCQkJaW5k
ZW50V2lkdGggPSA0OwogCQkJcGF0aCA9IHN0b3JhZ2U7CkBAIC0yMjA3MSw2ICsyMjA4MCw3IEBA
CiAJCQkJQzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNw
YWNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8q
IFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FCMDJEMkExMkQ0Rjkx
NjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTQ4OEQ2
QjBERDVBODNEMDA5RDgzQjIgLyogU3RyaW5nU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg0OUY3Nzc2MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFw
cGxpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI1NjUsNiArMjI1NzUsNyBAQAogCQkJCUUxRjFF
ODMwMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJh
Y2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5
IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1
NkYwIC8qIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVBNTc0
RjI1MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NDg0Miw2ICsyNDg1Myw3IEBACiAJCQkJQzUwRDBFODIwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3Jh
Z2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2
QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1MTAy
RDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyQzNEQTMwMEQwMDZDMUQwMEVGNkYyNiAvKiBTdHJpbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMjY0NUMwRDAwQTc3RTAwMEFDQzFEIC8qIFN0cmluZ0NG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVEMEQwMEE3N0UwMDBBQ0MxRCAvKiBTdHJp
bmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCShyZXZpc2lvbiA4MDY5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyb3VwU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCkBAIC0xMTAsNiArMTExLDQ2IEBA
IHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCiAjZW5kaWYKIH0KIAorI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9y
QWxsT3JpZ2lucygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47CisK
KyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOworICAg
IGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9yYWdl
KCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxPcmln
aW5zRm9yRGVsZXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2Fs
U3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIGlmICghcGFn
ZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBl
bmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3Ig
aXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnNlY29uZC0+
bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKKyAgICB9ICAg
IAorfQorICAgIAordm9pZCBQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIGlm
ICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjppdGVy
YXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRl
cmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnNl
Y29uZC0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKKyAgICB9Cit9CisKKyNlbmRpZgorCiB2b2lk
IFBhZ2VHcm91cDo6YWRkUGFnZShQYWdlKiBwYWdlKQogewogICAgIEFTU0VSVChwYWdlKTsKQEAg
LTIwOSw2ICsyNTAsNyBAQCBTdG9yYWdlTmFtZXNwYWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFn
CiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJl
dmlzaW9uIDgwNjk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
R3JvdXBTZXR0aW5nczsKICAgICBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKICAg
ICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3Jh
Z2VOYW1lc3BhY2U7CiAKICAgICBjbGFzcyBQYWdlR3JvdXAgewpAQCAtNDksOCArNTAsMTQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+UGFnZUdyb3VwKCk7CiAKICAgICAgICAgc3Rh
dGljIFBhZ2VHcm91cCogcGFnZUdyb3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKTsKKworI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKICAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3Jh
Z2UoKTsKLSAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9y
QWxsT3JpZ2lucygpOworICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvck9y
aWdpbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBoZWxwZXIg
dGhhdCB0cmlnZ2VycyBhIFN0b3JhZ2VBcmVhIHN5bmMuCisgICAgICAgIHN0YXRpYyB2b2lkIHN5
bmNMb2NhbFN0b3JhZ2UoKTsKKyNlbmRpZiAgICAgICAgCiAgICAgICAgIGNvbnN0IEhhc2hTZXQ8
UGFnZSo+JiBwYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZXM7IH0KIAogICAgICAgICB2b2lk
IGFkZFBhZ2UoUGFnZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MDY5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw0ICsxMTIsMTEgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbAogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0Zp
bGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJKHJldmlzaW9uIDgwNjk1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPGVycm5vLmg+
CiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CiAjaW5jbHVkZSA8bGli
Z2VuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAg
LTIyNywxMCArMjI5LDI4IEBAIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICByZXR1cm4gZGlybmFtZShmc1JlcC5tdXRhYmxlRGF0YSgpKTsKIH0KIAotLy8gT0sg
dG8gbm90IGltcGxlbWVudCBsaXN0RGlyZWN0b3J5IGF0IHRoZSBtb21lbnQsIGJlY2F1c2UgaXQn
cyBvbmx5IHVzZWQgZm9yIHBsdWctaW5zLCBhbmQKLS8vIGFsbCBwbGF0Zm9ybXMgdGhhdCB1c2Ug
dGhlIHNoYXJlZCBwbHVnLWluIGltcGxlbWVudGF0aW9uIGhhdmUgaW1wbGVtZW50YXRpb25zLiBX
ZSdkIG5lZWQKLS8vIHRvIGltcGxlbWVudCBpdCBpZiB3ZSB3YW50ZWQgdG8gdXNlIFBsdWdpbkRh
dGFiYXNlLmNwcCBvbiB0aGUgTWFjLiBCZXR0ZXIgdG8gbm90IGltcGxlbWVudAotLy8gYXQgYWxs
IGFuZCBnZXQgYSBsaW5rIGVycm9yIGluIGNhc2UgdGhpcyBhcmlzZXMsIHJhdGhlciB0aGFuIGhh
dmluZyBhIHN0dWIgaGVyZSwgYmVjYXVzZQotLy8gd2l0aCBhIHN0dWIgeW91IGxlYXJuIGFib3V0
IHRoZSBwcm9ibGVtIGF0IHJ1bnRpbWUgaW5zdGVhZCBvZiBsaW5rIHRpbWUuCitWZWN0b3I8U3Ry
aW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0
ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKyAgICBDU3RyaW5nIGNwYXRoID0g
cGF0aC51dGY4KCk7CisgICAgQ1N0cmluZyBjZmlsdGVyID0gZmlsdGVyLnV0ZjgoKTsKKyAgICBE
SVIqIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgpKTsKKyAgICBpZiAoZGlyKSB7CisgICAgICAg
IHN0cnVjdCBkaXJlbnQqIGRwOworICAgICAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkg
eworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7CisgICAgICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZm5tYXRjaChjZmlsdGVyLmRhdGEo
KSwgbmFtZSwgMCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjaGFy
IGZpbGVQYXRoWzEwMjRdOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KGZpbGVQYXRoKSAtIDEpIDwgc25wcmludGYoZmlsZVBhdGgsIHNpemVvZihmaWxlUGF0aCksICIl
cy8lcyIsIGNwYXRoLmRhdGEoKSwgbmFtZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7IC8v
IGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZVBhdGgpOwor
ICAgICAgICB9CisgICAgICAgIGNsb3NlZGlyKGRpcik7CisgICAgfQorICAgIHJldHVybiBlbnRy
aWVzOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJKHJldmlzaW9uIDgwNjk1KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw2ICs1MSwyNyBAQCBMb2NhbFN0b3JhZ2VUYXNrOjpM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUgCiAgICAgQVNTRVJUKG1fdGhyZWFkKTsKICAgICBBU1NFUlQo
bV90eXBlID09IFRlcm1pbmF0ZVRocmVhZCk7CiB9CisgICAgCitMb2NhbFN0b3JhZ2VUYXNrOjpM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworICAgIEFT
U0VSVChtX3R5cGUgPT0gSW1wb3J0T3JpZ2lucyB8fCBtX3R5cGUgPT0gRGVsZXRlQWxsT3JpZ2lu
cyk7Cit9CisgICAgCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorICAgIDogbV90eXBlKHR5cGUpCisg
ICAgLCBtX29yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IERlbGV0ZU9yaWdpbik7Cit9CisKK0xvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3Rv
cmFnZVRhc2soVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VGaWxlbmFtZSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9v
cmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpCisgICAgLCBtX2RhdGFiYXNlRmlsZW5h
bWUoZGF0YWJhc2VGaWxlbmFtZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFNldE9yaWdpbkRl
dGFpbHMpOworfQogCiBMb2NhbFN0b3JhZ2VUYXNrOjp+TG9jYWxTdG9yYWdlVGFzaygpCiB7CkBA
IC02NCw2ICs4NiwxOCBAQCB2b2lkIExvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKCkKICAg
ICAgICAgY2FzZSBBcmVhU3luYzoKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybVN5bmMoKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldE9yaWdpbkRldGFpbHM6CisgICAg
ICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNTZXRPcmlnaW5EZXRhaWxzKG1f
b3JpZ2luSWRlbnRpZmllciwgbV9kYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEltcG9ydE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRGVsZXRlQWxsT3JpZ2luczoKKyAgICAgICAgICAgIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERlbGV0ZU9yaWdpbjoKKyAgICAgICAgICAgIFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZU9yaWdpbihtX29yaWdpbklkZW50aWZpZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGVsZXRlRW1wdHlEYXRhYmFzZToKICAg
ICAgICAgICAgIG1fYXJlYS0+ZGVsZXRlRW1wdHlEYXRhYmFzZSgpOwogICAgICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkocmV2
aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNDAsMTMgKzQxLDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrIHsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxTdG9yYWdlVGFzayk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgQXJlYUltcG9ydCwg
QXJlYVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFRlcm1pbmF0ZVRocmVhZCB9OworICAgICAg
ICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwg
U2V0T3JpZ2luRGV0YWlscywgSW1wb3J0T3JpZ2lucywgRGVsZXRlQWxsT3JpZ2lucywgRGVsZXRl
T3JpZ2luLCBUZXJtaW5hdGVUaHJlYWQgfTsKIAogICAgICAgICB+TG9jYWxTdG9yYWdlVGFzaygp
OwogCiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZUlt
cG9ydChTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0
b3JhZ2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsgfQog
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVF
bXB0eURhdGFiYXNlKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlRW1wdHlEYXRhYmFzZSwgYXJlYSkpOyB9CisgICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZU9yaWdpbklkZW50aWZp
ZXJzSW1wb3J0KCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soSW1wb3J0
T3JpZ2lucykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZVNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKFNldE9yaWdpbkRldGFpbHMsIG9yaWdpbklkZW50aWZpZXIsIGRhdGFiYXNl
RmlsZW5hbWUpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNr
PiBjcmVhdGVEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVPcmlnaW4sIG9yaWdpbklk
ZW50aWZpZXIpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNr
PiBjcmVhdGVEZWxldGVBbGxPcmlnaW5zKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3Rv
cmFnZVRhc2soRGVsZXRlQWxsT3JpZ2lucykpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRy
PExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVRlcm1pbmF0ZShMb2NhbFN0b3JhZ2VUaHJlYWQqIHRo
cmVhZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhy
ZWFkLCB0aHJlYWQpKTsgfQogCiAgICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKQEAgLTU0LDEw
ICs1OSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgTG9j
YWxTdG9yYWdlVGFzayhUeXBlLCBTdG9yYWdlQXJlYVN5bmMqKTsKICAgICAgICAgTG9jYWxTdG9y
YWdlVGFzayhUeXBlLCBMb2NhbFN0b3JhZ2VUaHJlYWQqKTsKKyAgICAgICAgTG9jYWxTdG9yYWdl
VGFzayhUeXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICBMb2Nh
bFN0b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBl
KTsKIAogICAgICAgICBUeXBlIG1fdHlwZTsKICAgICAgICAgU3RvcmFnZUFyZWFTeW5jKiBtX2Fy
ZWE7CiAgICAgICAgIExvY2FsU3RvcmFnZVRocmVhZCogbV90aHJlYWQ7CisgICAgICAgIFN0cmlu
ZyBtX29yaWdpbklkZW50aWZpZXI7CisgICAgICAgIFN0cmluZyBtX2RhdGFiYXNlRmlsZW5hbWU7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkocmV2aXNpb24gODA2OTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
Nyw2ICsyMjcsMzEgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKICNlbmRpZgogfQog
Cit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpCit7CisgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwor
ICAgIAorICAgIGlmIChtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKSB7CisgICAgICAgIHVuc2lnbmVk
IHF1b3RhID0gbV9zdG9yYWdlTWFwLT5xdW90YSgpOworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBT
dG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOworICAgIH0KKworICAgIGlmIChtX3N0b3JhZ2VBcmVh
U3luYykgeworICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOworICAg
ICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7CisgICAgfQor
fQorICAgIAordm9pZCBTdG9yYWdlQXJlYUltcGw6OnN5bmMoKQoreworICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBp
ZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVs
ZVN5bmMoKTsKK30KKwogdm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCShyZXZpc2lvbiA4MDY5NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gT25seSBjYWxs
ZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgICAgICB2b2lkIGltcG9ydEl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCisgICAgICAgIC8vIFVzZWQg
dG8gY2xlYXIgYSBTdG9yYWdlQXJlYSBhbmQgY2xvc2UgZGIgYmVmb3JlIGJhY2tpbmcgZGIgZmls
ZSBpcyBkZWxldGVkLgorICAgICAgICB2b2lkIGNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKwor
ICAgICAgICB2b2lkIHN5bmMoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVh
SW1wbChTdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8
U3RvcmFnZVN5bmNNYW5hZ2VyPiwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBTdG9yYWdlQXJl
YUltcGwoU3RvcmFnZUFyZWFJbXBsKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA4MDY5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBs
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRy
YWNrZXIuaCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTM4LDYgKzEzOSwyNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6c2NoZWR1bGVDbGVhcigpCiAgICAgfQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2No
ZWR1bGVDbG9zZURhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1
ZTsKKyAgICAKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9z
eW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVT
dWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rp
b24uCisgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwogdm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4q
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yMjIsNiArMjQyLDEwIEBAIHZv
aWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIC8vIEEgU3RvcmFnZVRyYWNrZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2No
ZWR1bGVkIHRvIGRlbGV0ZSB0aGUgZGIgd2UncmUKKyAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNl
bCBwb3NzaWJsZSBkZWxldGlvbi4KKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNl
bERlbGV0aW5nT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRh
YmFzZS5vcGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmls
ZW5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpAQCAtMjM1LDYg
KzI1OSw4IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAg
ICAgbV9kYXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQor
CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRPcmlnaW5EZXRhaWxzKG1fZGF0YWJh
c2VJZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnBlcmZvcm1JbXBvcnQoKQpAQCAtMzE5LDYgKzM0NSwxNSBAQCB2b2lkIFN0b3JhZ2VBcmVh
U3luYzo6c3luYyhib29sIGNsZWFySXRlCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBpdCBpcyBh
Ym91dCB0byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBkZWxldGUg
d2lsbCBiZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3BlbiB0aGUg
ZGIKKyAgICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVxdWVzdCB0
byBkZWxldGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7CisgICAgICAg
IG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIElmIHRoZSBjbGVhciBmbGFn
IGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkg
bmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKQEAgLTQyMSwx
MiArNDU2LDE1IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXMKICAg
ICBpZiAoIWNvdW50KSB7CiAgICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7CiAgICAgICAgIG1fZGF0
YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNN
YW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAg
ICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGRhdGFiYXNlRmls
ZW5hbWUpKQotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNl
IGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVy
KTsKICAgICB9CiB9CiAKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZVN5bmMoKQorewor
ICAgIHN5bmNUaW1lckZpcmVkKCZtX3N5bmNUaW1lcik7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHJldmlzaW9uIDgwNjk1KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzY2hlZHVs
ZUl0ZW1Gb3JTeW5jKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAg
ICAgICAgdm9pZCBzY2hlZHVsZUNsZWFyKCk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVDbG9zZURh
dGFiYXNlKCk7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZVN5bmMoKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4s
IFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50
aWZpZXIpOwpAQCAtOTIsNiArOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgbV9zeW5jU2NoZWR1bGVkOwogICAgICAgICBib29sIG1fc3luY0luUHJvZ3Jlc3M7CiAgICAg
ICAgIGJvb2wgbV9kYXRhYmFzZU9wZW5GYWlsZWQ7CisgICAgICAgIAorICAgICAgICBib29sIG1f
c3luY0Nsb3NlRGF0YWJhc2U7CiAKICAgICAgICAgbXV0YWJsZSBNdXRleCBtX2ltcG9ydExvY2s7
CiAgICAgICAgIG11dGFibGUgVGhyZWFkQ29uZGl0aW9uIG1faW1wb3J0Q29uZGl0aW9uOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgJKHJldmlzaW9uIDgw
Njk1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luYygpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZpc2lvbiA4
MDY5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJ
bXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFu
YWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMTQ0LDYg
KzE0NSwzMiBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjp1bmxvY2soKQogICAgIC8vIEJl
Y2F1c2UgdGhlcmUncyBhIHNpbmdsZSBldmVudCBsb29wIHBlci1wcm9jZXNzLCB0aGlzIGlzIGEg
bm8tb3AuCiB9CiAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyT3JpZ2luRm9yRGVs
ZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmdldChvcmlnaW4pOworICAgIGlmIChzdG9yYWdlQXJlYSkKKyAgICAgICAgc3Rv
cmFnZUFyZWEtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKK30KKwordm9pZCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9z
dG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBp
dCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBp
dC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisgICAgCit2b2lkIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgp
OworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnN5bmMoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9S
QUdFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaAkocmV2aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCB1bmxvY2soKTsKIAorICAgICAgICAvLyBOb3QgcmVtb3ZpbmcgdGhlIG9yaWdpbidz
IFN0b3JhZ2VBcmVhIGZyb20gbV9zdG9yYWdlQXJlYU1hcCBiZWNhdXNlCisgICAgICAgIC8vIHdl
J3JlIGp1c3QgZGVsZXRpbmcgdGhlIHVuZGVybHlpbmcgZGIgZmlsZS4gSWYgYW4gaXRlbSBpcyBh
ZGRlZCBpbW1lZGlhdGVseQorICAgICAgICAvLyBhZnRlciBmaWxlIGRlbGV0aW9uLCB3ZSB3YW50
IHRoZSBzYW1lIFN0b3JhZ2VBcmVhIHRvIGV2ZW50dWFsbHkgdHJpZ2dlcgorICAgICAgICAvLyBh
IHN5bmMgYW5kIGZvciBTdG9yYWdlQXJlYVN5bmMgdG8gcmVjcmVhdGUgdGhlIGJhY2tpbmcgZGIg
ZmlsZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJp
dHlPcmlnaW4qKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0
aW9uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jKCk7CisgICAgICAgIAogICAgIHByaXZh
dGU6CiAgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlLCBjb25zdCBTdHJp
bmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIu
aCIKKworI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VU
aHJlYWQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisj
aW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXJD
bGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdG9yYWdlVHJhY2tl
ciogc3RvcmFnZVRyYWNrZXIgPSAwOworCit2b2lkIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXpl
VHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCghc3RvcmFn
ZVRyYWNrZXIpOworICAgIGlmIChzdG9yYWdlVHJhY2tlcikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKHN0b3JhZ2VQYXRoKTsK
KyAgICBzdG9yYWdlVHJhY2tlci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKworU3Rv
cmFnZVRyYWNrZXImIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKK3sKKyAgICBpZiAoIXN0b3Jh
Z2VUcmFja2VyKSB7CisgICAgICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2Vy
KCIiKTsKKyAgICAgICAgc3RvcmFnZVRyYWNrZXItPmltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7
CisgICAgfQorICAgIAorICAgIHJldHVybiAqc3RvcmFnZVRyYWNrZXI7Cit9CisKK1N0b3JhZ2VU
cmFja2VyOjpTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQorICAgIDog
bV9jbGllbnQoMCkKKyAgICAsIG1fdGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCkp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgCisgICAgc2V0U3RvcmFn
ZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBhdGgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06
OnJlZ2lzdGVyU1FMaXRlVkZTKCk7CisgICAgCisgICAgbV90aHJlYWQtPnN0YXJ0KCk7ICAKK30K
Kwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CisgICAgCisgICAgbV9zdG9y
YWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2FmZUNvcHkoKTsKK30KKworU3RyaW5nIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VE
aXJlY3RvcnlQYXRoLCAiU3RvcmFnZVRyYWNrZXIuZGIiKTsKK30KKwordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorewor
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJk
LnRyeUxvY2soKSk7CisKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFN0cmluZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRo
KCk7CisgICAgCisgICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVF
eGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkpIHsKKyAgICAgICAgaWYg
KGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4o
ZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFi
YXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGluZ0NoZWNrcygp
OworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiT3JpZ2lucyIpKSB7Cisg
ICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdp
bnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCBwYXRoIFRFWFQpOyIp
KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFibGUu
Iik7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmlnaW5JZGVudGlm
aWVycygpCit7ICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1f
dGhyZWFkKTsKKworICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6
Y3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQoKSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNr
ZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOworCisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAg
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGludCByZXN1bHQ7CisKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgICAgICB3aGlsZSAo
KHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgICAg
ICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkudGhyZWFkc2Fm
ZUNvcHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
UmVzdWx0RG9uZSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgaW4gYWxs
IG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7CisgICAgfQorICAgIAorICAgIHN5bmNGaWxl
U3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisgICAgCisgICAgaWYgKG1fY2xpZW50KSB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAg
ICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOworICAg
ICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRN
b2RpZnlPcmlnaW4oKml0KTsKKyAgICB9Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpz
eW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdHJpbmcsIGZpbGVNYXRjaFBhdHRlcm4sICgiKi5sb2NhbHN0b3JhZ2UiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGZpbGVFeHQsICgiLmxvY2Fs
c3RvcmFnZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IHVuc2lnbmVkLCBmaWxl
RXh0TGVuZ3RoLCAoZmlsZUV4dC5sZW5ndGgoKSkpOworCisgICAgVmVjdG9yPFN0cmluZz4gcGF0
aHMgPSBsaXN0RGlyZWN0b3J5KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgsIGZpbGVNYXRjaFBhdHRl
cm4pOworICAgIAorICAgIC8vIEFkZCBtaXNzaW5nIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisg
ICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gcGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
U3RyaW5nIHBhdGggPSAqaXQ7CisgICAgICAgIGlmIChwYXRoLmVuZHNXaXRoKGZpbGVFeHQsIHRy
dWUpICYmIHBhdGgubGVuZ3RoKCkgPiBmaWxlRXh0TGVuZ3RoKSB7CisgICAgICAgICAgICBTdHJp
bmcgZmlsZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKKyAgICAgICAgICAgIFN0cmluZyBvcmln
aW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmcoMCwgZmlsZS5sZW5ndGgoKSAtIGZpbGVFeHRM
ZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtX29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVu
dGlmaWVyKSkgeworICAgICAgICAgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN5bmNTZXRPcmlnaW5EZXRh
aWxzKG9yaWdpbklkZW50aWZpZXIsIHBhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3VuZE9yaWdpbnMuYWRkKG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRGVsZXRlIHN0YWxlIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAgT3JpZ2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBzZXRFbmQgPSBtX29yaWdpblNldC5lbmQoKTsKKyAgICBmb3Ig
KE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAh
PSBzZXRFbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFmb3VuZE9yaWdpbnMuY29udGFpbnMoKml0
KSkgeworICAgICAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICAgICAgICAgIGRl
bGV0ZU9yaWdpbigqaXQpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBzeW5j
RGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRy
YWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworCisgICAgICAgIGlmIChtX29yaWdpblNl
dC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX29yaWdpblNldC5hZGQob3JpZ2luSWRlbnRpZmllcik7CisgICAgfQorCisgICAgTG9j
YWxTdG9yYWdlVGFzayogdGFzayA9IExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRl
dGFpbHMob3JpZ2luSWRlbnRpZmllci50aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFzZUZpbGUpLmxl
YWtQdHIoKTsKKworICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAgICBBU1NFUlQobV90
aHJlYWQpOworICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKHRhc2spOworICAgIH0gZWxz
ZSAKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChzY2hlZHVsZVRhc2ssICh2b2lkKil0YXNrKTsK
K30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKHZvaWQqIHRhc2spCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoU3RvcmFnZVRyYWNrZXI6OnRy
YWNrZXIoKS5tX3RocmVhZCk7CisgICAgCisgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkubV90aHJlYWQpCisgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQt
PnNjaGVkdWxlVGFzaygoTG9jYWxTdG9yYWdlVGFzayopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFn
ZVRyYWNrZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJk
KTsKKworICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CisgICAgCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywgPyki
KTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNr
ZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gCisgICAgCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIp
OworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUpOworICAgIAorICAgIGlm
IChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklk
ZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgaWYgKCFtX29yaWdpblNldC5j
b250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChv
cmlnaW5JZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiA+JiByZXN1bHQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRH
dWFyZCk7CisKKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0
LmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2lu
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcigqaXQpKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworCisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgd2lsbERlbGV0
ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgbV9vcmlnaW5TZXQuY2xlYXIoKTsKKyAgICB9CisKKyAg
ICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgIAorICAg
IG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxs
T3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxP
cmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgxKSk7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5k
aXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAg
fQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsK
KyAgICAKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgbV9kYXRhYmFzZS5j
bG9zZSgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0
cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5
RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgU3Rv
cmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
Cit7CisgICAgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpLmdldCgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7ICAgIAorICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKworICAgIC8vIEJl
Zm9yZSBkZWxldGluZyBkYXRhYmFzZSwgd2UgbmVlZCB0byBjbGVhciBpbi1tZW1vcnkgbG9jYWwg
c3RvcmFnZSBkYXRhCisgICAgLy8gaW4gU3RvcmFnZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUgU3Rv
cmFnZUFyZWEgZGIuIEl0J3MgcG9zc2libGUgZm9yIGFuCisgICAgLy8gaXRlbSB0byBiZSBhZGRl
ZCBpbW1lZGlhdGVseSBhZnRlciBjbG9zaW5nIHRoZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFyZWFT
eW5jCisgICAgLy8gdG8gcmVvcGVuIHRoZSBkYiBiZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQgYnkg
YSBTdG9yYWdlVHJhY2tlciB0aHJlYWQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCByZW9wZW5pbmcg
dGhlIGRiIGluIFN0b3JhZ2VBcmVhU3luYyB3aWxsIGNhbmNlbCBhIHBlbmRpbmcKKyAgICAvLyBT
dG9yYWdlVHJhY2tlciBkYiBkZWxldGlvbi4KKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9y
YWdlRm9yT3JpZ2luKG9yaWdpbik7CisKKyAgICBTdHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgIHdpbGxEZWxldGVPcmlnaW4ob3Jp
Z2luSWQpOworICAgICAgICBtX29yaWdpblNldC5yZW1vdmUob3JpZ2luSWQpOworICAgIH0KKyAg
ICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURl
bGV0ZU9yaWdpbihvcmlnaW5JZCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVs
ZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFi
YXNlR3VhcmQpOworICAgIAorICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZp
ZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVz
JyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxuIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3BlblRyYWNrZXJE
YXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgLy8gR2V0IG9yaWdpbidzIGRiIGZpbGUgcGF0aCwgZGVsZXRlIGVu
dHJ5IGluIHRyYWNrZXIncyBkYiwgdGhlbiBkZWxldGUgZGIgZmlsZS4KKyAgICBTUUxpdGVTdGF0
ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBPcmlnaW5z
IFdIRVJFIG9yaWdpbj0/Iik7CisgICAgaWYgKHBhdGhTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc2VsZWN0
aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGF0aFN0YXRlbWVudC5iaW5kVGV4
dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0ID0gcGF0aFN0YXRlbWVudC5z
dGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZmluZCBvcmlnaW4gJyVzJyBpbiBPcmlnaW5zIHRhYmxlIiwgb3JpZ2lu
SWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgU3RyaW5nIHBhdGggPSBwYXRoU3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisKKyAg
ICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVs
ZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIHdoZXJlIG9yaWdp
bj0/Iik7CisgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBvcmln
aW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlm
aWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyci
LCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShwYXRoKTsKKyAg
ICAKKyAgICBib29sIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IGZhbHNlOworICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgb3JpZ2luTG9jayhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAg
bV9vcmlnaW5TZXQucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICBzaG91bGREZWxl
dGVUcmFja2VyRmlsZXMgPSBtX29yaWdpblNldC5pc0VtcHR5KCk7CisgICAgfQorCisgICAgaWYg
KHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcykgeworICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7
CisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0
YWJhc2VQYXRoKCkpOworICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFi
YXNlRGlyZWN0b3J5KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgpOworICAgIH0KKyAgICAKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihv
cmlnaW5JZGVudGlmaWVyKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxl
dGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIW1fb3JpZ2luU2V0R3VhcmQudHJ5TG9jaygp
KTsKKworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5k
KCk7CisgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQu
YWRkKCgqaXQpLnRocmVhZHNhZmVDb3B5KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjp3
aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9vcmlnaW5TZXRHdWFyZC50cnlM
b2NrKCkpOworCisgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZChvcmlnaW5JZGVudGlmaWVy
KTsKK30KKyAgICAKK2Jvb2wgU3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQu
dHJ5TG9jaygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJk
KTsKKyAgICByZXR1cm4gbV9vcmlnaW5zQmVpbmdEZWxldGVkLmNvbnRhaW5zKG9yaWdpbklkZW50
aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja09y
aWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0RlbGV0ZWQuaXNFbXB0eSgp
KQorICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIp
OworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRDbGllbnQoU3RvcmFnZVRyYWNrZXJDbGll
bnQqIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKK30KKwordm9pZCBTdG9yYWdl
VHJhY2tlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgUGFnZUdyb3VwOjpzeW5jTG9jYWxT
dG9yYWdlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlVHJhY2tlcl9oCisjZGVmaW5lIFN0b3JhZ2VU
cmFja2VyX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrOworY2xhc3MgTG9jYWxTdG9yYWdlVGhyZWFk
OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudDsgICAg
CisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9y
YWdlVHJhY2tlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCk7
CisgICAgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2VyKCk7CisgICAgc3RhdGljIHZvaWQg
c2NoZWR1bGVUYXNrKHZvaWQqKTsKKworICAgIHZvaWQgaW1wb3J0T3JpZ2luSWRlbnRpZmllcnMo
KTsKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgdm9pZCBkZWxldGVB
bGxPcmlnaW5zKCk7CisgICAgdm9pZCBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAg
ICB2b2lkIGRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAg
IHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpOwor
CisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KFN0b3JhZ2VUcmFja2VyQ2xpZW50Kik7
CisKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFja2dyb3VuZCB0aHJlYWQuCisgICAgdm9pZCBz
eW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQgc3luY0RlbGV0ZU9yaWdpbihjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc3luY1NldE9yaWdpbkRldGFpbHMo
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmls
ZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB2b2lkIHN5
bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisKKyAgICB2b2lkIHN5bmNMb2NhbFN0
b3JhZ2UoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoKTsKKworICAgIFN0cmluZyB0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3Q7Cisg
ICAgdm9pZCBvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpOwor
CisgICAgdm9pZCBzZXRTdG9yYWdlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmKTsKKworICAg
IHZvaWQgZGVsZXRlVHJhY2tlckZpbGVzKCk7CisKKyAgICBib29sIGNhbkRlbGV0ZU9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZU9yaWdp
bihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZUFs
bE9yaWdpbnMoKTsKKworICAgIHZvaWQgb3JpZ2luRmlsZVBhdGhzKFZlY3RvcjxTdHJpbmc+JiBw
YXRocyk7CisKKyAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CisgICAgU1FMaXRlRGF0YWJhc2Ug
bV9kYXRhYmFzZTsKKworICAgIFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOworCisgICAg
U3RvcmFnZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50OworCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0
cmluZz4gT3JpZ2luU2V0OworCisgICAgTXV0ZXggbV9vcmlnaW5TZXRHdWFyZDsKKyAgICBPcmln
aW5TZXQgbV9vcmlnaW5TZXQ7CisgICAgT3JpZ2luU2V0IG1fb3JpZ2luc0JlaW5nRGVsZXRlZDsK
KworICAgIE93blB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOworfTsKKyAgICAKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKwor
I2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworIAorI2lmbmRlZiBTdG9yYWdlVHJhY2tlckNsaWVudF9oCisjZGVm
aW5lIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgflN0b3JhZ2VUcmFja2VyQ2xpZW50KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllcikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3Rv
cmFnZVRyYWNrZXJDbGllbnRfaApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjk2KQorKysgU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAx
MS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQxIEFQSSB0byB2
aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCisyMDExLTAzLTAyICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisgICAgICAg
IEFkZCBXZWJLaXQxIEFQSSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorCisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTEtMDMtMDIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMg
Q2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDgwNjk1KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTEgQEAK
IAkJMzdCNkZCNEYxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdCNkZCNEQxMDYz
NTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tICovOyB9OwogCQkzN0QxRENB
ODEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E2MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJK
U1BERkRvYy5oICovOyB9OwogCQkzN0QxRENBOTEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZE
b2MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Qx
RENBNzEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gKi87IH07CisJCTNBQjAyQUY2
MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAv
KiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLzsgfTsKKwkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0
IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3Jh
Z2VNYW5hZ2VyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTNBQkIzQzdBMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87
IH07CisJCTNBQkIzQzdCMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVu
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQkIz
Qzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSAqLzsgfTsK
KwkJM0FFMTVENTAxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBRTE1RDRG
MTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggKi87IH07CiAJ
CTQxRjQ0ODRGMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNDQ4NEQxMDMzOEU4QzAw
MzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGNDQ4NTAxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldv
cmtlcnNQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDFGNDQ4NEUxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLm1tICov
OyB9OwogCQk0NEJCOEIxNDEyNDFBMDIyMDAxRTNBMjIgLyogV2ViQXJjaGl2ZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEJCOEIxMzEy
NDFBMDIyMDAxRTNBMjIgLyogV2ViQXJjaGl2ZUludGVybmFsLmggKi87IH07CkBAIC00ODMsNiAr
NDg4LDExIEBACiAJCTM5NDQ2MDdFMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJCYWNrRm9yd2FyZExp
c3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJCYWNrRm9yd2FyZExpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA3RjAyMEY1MEVEMEVDQTE3Njcg
LyogV2ViSGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDgwMDIwRjUwRUQwRUNBMTc2
NyAvKiBXZWJIaXN0b3J5SXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhpc3RvcnlJdGVtLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJM0FCMDJBRjUxMkMx
MzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFu
YWdlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFn
ZU1hbmFnZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQkIzQzc4
MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzQUJCM0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0FFMTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJu
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXJJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY0NDg0RDEwMzM4RThD
MDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViV29ya2Vyc1ByaXZhdGUuaDsgcGF0aCA9IG1hYy9Xb3JrZXJzL1dlYldvcmtl
cnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjQ0ODRFMTAzMzhF
OEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdlYldvcmtlcnNQcml2YXRlLm1tOyBwYXRoID0gbWFjL1dvcmtl
cnMvV2ViV29ya2Vyc1ByaXZhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
OTA5OEI5MEY4RjgyREYwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTYsNiArMTA2NiwxMSBAQAogCQkJCUE1REVGQzBF
MTFENTM0M0UwMDg4NTI3MyAvKiBXZWJEYXRhYmFzZVF1b3RhTWFuYWdlci5tbSAqLywKIAkJCQk1
MTFGM0ZEMzBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8s
CiAJCQkJNTExRjNGRDQwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVu
dC5tbSAqLywKKwkJCQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFn
ZXIubW0gKi8sCisJCQkJM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VyUHJpdmF0ZS5oICovLAorCQkJCTNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9y
YWdlTWFuYWdlckludGVybmFsLmggKi8sCisJCQkJM0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8q
IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8sCisJCQkJM0FCQjNDNzkxMzA5QzNCNTAwRTkz
RDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBT
dG9yYWdlOwogCQkJcGF0aCA9IG1hYy9TdG9yYWdlOwpAQCAtMTYyNSw3ICsxNjQwLDEwIEBACiAJ
CQkJNTk4QUQ5MkExMjAxQ0YzQjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlk
ZXJNb2NrSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5OEFEQTQ2MTIwMjI3NTAwMEFC
QUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0UyQTFBNDEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTgg
LyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBRTE1RDUw
MTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDJEMzI0MTMxRUQxRTAwMDc1RkE0QiAvKiBX
ZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xOTkzLDcgKzIwMTEs
OSBAQAogCQkJCTU5OEFEOTIyMTIwMUNGMTAwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlv
bi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5OEFEOTI4MTIwMUNGMzIwMEFCQUU0RSAvKiBXZWJE
ZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTJB
MUE1MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQkzQUIwMkFGNjEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQlDREE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQUJCM0M3QjEzMDlDM0I1MDBF
OTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
QzQyRDM0RDEzMUVEMzg4MDA3NUZBNEIgLyogV2ViTG9jYWxpemFibGVTdHJpbmdzSW50ZXJuYWwu
bW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDY5
NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMDggIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAg
KiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6dGVzdEZvcmNlU3luYyk6
CisgICAgICAgICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oOgorCiAyMDExLTAzLTA4ICBI
YW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
SmVyZW15IE9ybG93LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5h
bWVzcGFjZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCShyZXZpc2lvbiA4MDY5NSkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDYgKzkyLDIxIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp1bmxvY2so
KQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVBy
b3h5OjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5
OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpzeW5jKCkKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
U3RvcmFnZU5hbWVzcGFjZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgJKHJldmlzaW9uIDgwNjk1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAg
IHZpcnR1YWwgdm9pZCB1bmxvY2soKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcmln
aW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFs
bE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCB0ZXN0Rm9yY2VT
eW5jKCk7CiAKIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFj
ZT4gbV9zdG9yYWdlTmFtZXNwYWNlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gODA2
OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzOSBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2Vi
S2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICAqIFN0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAoK1tXZWJTdG9yYWdl
TWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0pOgorICAgICAgICAoLVtXZWJTdG9yYWdl
TWFuYWdlciBvcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZUFs
bE9yaWdpbnNdKToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgZGVsZXRlT3JpZ2luOl0p
OgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciB0ZXN0U3RvcmFnZVN5bmNdKToKKyAgICAg
ICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgdGVzdEZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VT
eW5jXSk6CisgICAgICAgIChzdG9yYWdlRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXRJ
bml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3Jh
Z2VNYW5hZ2VySW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdl
TWFuYWdlclByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlVHJh
Y2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFy
ZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNs
aWVudDo6V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChXZWJTdG9yYWdl
VHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbToKKyAgICAgICAg
KC1bV2ViU2VjdXJpdHlPcmlnaW4gcHJvdG9jb2xdKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlP
cmlnaW4gaG9zdF0pOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBkYXRhYmFzZUlkZW50
aWZpZXJdKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gZG9tYWluXSk6CisgICAgICAg
ICgtW1dlYlNlY3VyaXR5T3JpZ2luIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpdKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaDoKKyAg
ICAgICAgKiBXZWJLaXQuZXhwOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAg
ICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFt
ZTp1c2VzRG9jdW1lbnRWaWV3czpdKTogSW5pdGlhbGl6ZSBTdG9yYWdlVHJhY2tlci4KKwogMjAx
MS0wMy0wOSAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHJldmlzaW9uIDgw
Njk1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4cAkod29ya2luZyBjb3B5KQpAQCAt
Niw2ICs2LDcgQEAKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVN0YXRpc3RpY3MKIC5vYmpjX2Ns
YXNzX25hbWVfV2ViRGF0YVNvdXJjZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEYXRhYmFzZU1hbmFn
ZXIKKy5vYmpjX2NsYXNzX25hbWVfV2ViU3RvcmFnZU1hbmFnZXIKIC5vYmpjX2NsYXNzX25hbWVf
V2ViRGVmYXVsdFBvbGljeURlbGVnYXRlCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVu
dGF0aW9uCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2Nr
CkBAIC0xMTQsNiArMTE1LDggQEAgX1dlYlJlcG9ydEVycm9yCiBfV2ViU2NyaXB0RXJyb3JEZXNj
cmlwdGlvbktleQogX1dlYlNjcmlwdEVycm9yRG9tYWluCiBfV2ViU2NyaXB0RXJyb3JMaW5lTnVt
YmVyS2V5CitfV2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5CitfV2ViU3RvcmFnZURpZE1v
ZGlmeU9yaWdpbk5vdGlmaWNhdGlvbgogX1dlYlVSTE5hbWVQYm9hcmRUeXBlCiBfV2ViVVJMUGJv
YXJkVHlwZQogX1dlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKKworI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdl
ckludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorCisjaW1w
b3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VU
cmFja2VyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitOU1N0cmluZyAqIGNvbnN0
IFdlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleSA9IEAiV2ViS2l0TG9jYWxTdG9yYWdlRGF0
YWJhc2VQYXRoUHJlZmVyZW5jZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaWRN
b2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gPSBAIldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3Rp
ZmljYXRpb24iOworCitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCk7CisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJTdG9yYWdlTWFuYWdlcgorCisrIChXZWJTdG9yYWdlTWFuYWdl
ciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyCit7CisgICAgc3RhdGljIFdlYlN0b3JhZ2VNYW5h
Z2VyICpzaGFyZWRNYW5hZ2VyID0gW1tXZWJTdG9yYWdlTWFuYWdlciBhbGxvY10gaW5pdF07Cisg
ICAgcmV0dXJuIHNoYXJlZE1hbmFnZXI7Cit9CisKKy0gKE5TQXJyYXkgKilvcmlnaW5zCit7Cisg
ICAgVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBjb3JlT3JpZ2luczsKKworICAgIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7CisKKyAgICBOU011
dGFibGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29yZU9yaWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViU2VjdXJpdHlPcmlnaW4g
KndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVT
ZWN1cml0eU9yaWdpbjpjb3JlT3JpZ2luc1tpXS5nZXQoKV07CisgICAgICAgIFt3ZWJPcmlnaW5z
IGFkZE9iamVjdDp3ZWJPcmlnaW5dOworICAgICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOworICAg
IH0KKworICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07Cit9CisKKy0gKHZvaWQp
ZGVsZXRlQWxsT3JpZ2lucworeworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRl
QWxsT3JpZ2lucygpOworfQorCistICh2b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmln
aW4gKilvcmlnaW4KK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdp
bihbb3JpZ2luIF9jb3JlXSk7Cit9CisKKy0gKHZvaWQpc3luY0xvY2FsU3RvcmFnZQoreworICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0xvY2FsU3RvcmFnZSgpOworfQorCistICh2
b2lkKXN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlCit7CisgICAgU3RvcmFnZVRyYWNr
ZXI6OnRyYWNrZXIoKS5zeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworfQorCitz
dGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJEZWZh
dWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwor
ICAgIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpX
ZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVjdG9y
eSB8fCAhW3N0b3JhZ2VEaXJlY3RvcnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkK
KyAgICAgICAgc3RvcmFnZURpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0b3Jh
Z2UiOworICAgIAorICAgIHJldHVybiBbc3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJk
aXppbmdQYXRoXTsKK30KKwordm9pZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBzdGF0aWMgQk9PTCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0aWFs
aXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0aWFs
aXplVHJhY2tlcihzdG9yYWdlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICAKKyAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLnNldENsaWVudChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVk
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKSk7CisgICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZRVM7
Cit9CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOworCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGly
ZWN0b3J5RGVmYXVsdHNLZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlk
TW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uOworCitAY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CisK
K0BpbnRlcmZhY2UgV2ViU3RvcmFnZU1hbmFnZXIgOiBOU09iamVjdAorCisrIChXZWJTdG9yYWdl
TWFuYWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyOworCisvLyBSZXR1cm5zIGFuIGFycmF5
IG9mIFdlYlNlY3VyaXR5T3JpZ2luIG9iamVjdHMgdGhhdCBoYXZlIExvY2FsU3RvcmFnZS4KKy0g
KE5TQXJyYXkgKilvcmlnaW5zOworCistICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnM7CistICh2b2lk
KWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CisKKy0gKHZvaWQpc3lu
Y0xvY2FsU3RvcmFnZTsKKy0gKHZvaWQpc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2U7
CisKK0BlbmQKKwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJh
Y2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW1wb3J0
IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFj
a2VyQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBXZWJTdG9y
YWdlVHJhY2tlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFyZWRXZWJT
dG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpOworICAgIAorICAgIHZpcnR1YWwgfldl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsK
K3ByaXZhdGU6CisgICAgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKK307CisKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VUcmFj
a2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9X
ZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgor
I2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBXZWJT
dG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKQorewor
ICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogc2hhcmVkQ2xpZW50ID0gbmV3IFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgcmV0dXJuIHNoYXJlZENsaWVudDsKK30KKwor
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkKK3sKK30K
KworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpCit7
Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGljX2Nhc3Q8U2VjdXJpdHlP
cmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRp
c3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikK
K3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHdlYlNlY3VyaXR5T3JpZ2luKEFk
b3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0
eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViU3RvcmFnZURpZE1vZGlmeU9yaWdp
bk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3VyaXR5T3JpZ2luLmdldCgpXTsKK30KKwordm9p
ZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVy
KG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkLCBz
dGF0aWNfY2FzdDx2b2lkKj4ob3JpZ2luLmxlYWtSZWYoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKK30KKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdp
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
ZWN1cml0eU9yaWdpbi5tbQkocmV2aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYs
MjMgKzQ2LDI4IEBAIC0gKGlkKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybAogCiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoW3Vy
bCBhYnNvbHV0ZVVSTF0pKTsKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRlID0gcmVp
bnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4uZ2V0KCkpOwor
ICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUg
Kj4ob3JpZ2luLmdldCgpKTsKIAogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1N0cmluZyop
cHJvdG9jb2wKKy0gKE5TU3RyaW5nICopcHJvdG9jb2wKIHsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+cHJvdG9jb2woKTsKIH0KIAotLSAo
TlNTdHJpbmcqKWhvc3QKKy0gKE5TU3RyaW5nICopaG9zdAogewogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAKKy0gKE5T
U3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPmRhdGFiYXNlSWRlbnRpZmllcigpOworfQor
CiAvLyBEZXByZWNhdGVkLiBVc2UgaG9zdCBpbnN0ZWFkLiBUaGlzIG5lZWRzIHRvIHN0YXkgaGVy
ZSB1bnRpbCB3ZSBzaGlwIGEgbmV3IFNhZmFyaS4KLS0gKE5TU3RyaW5nKilkb21haW4KKy0gKE5T
U3RyaW5nICopZG9tYWluCiB7CiAgICAgcmV0dXJuIFtzZWxmIGhvc3RdOwogfQpAQCAtMTExLDcg
KzExNiw3IEBAIC0gKGlkKV9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjooU2UKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAogICAgIG9yaWdpbi0+cmVmKCk7Ci0gICAgX3ByaXZhdGUgPSByZWlu
dGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSo+KG9yaWdpbik7CisgICAgX3By
aXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSAqPihvcmln
aW4pOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAko
cmV2aXNpb24gODA2OTUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
ZWN1cml0eU9yaWdpblByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTAgQEAg
QGludGVyZmFjZSBXZWJTZWN1cml0eU9yaWdpbiA6IE5TT2JqZWN0IAogCiAtIChpZClpbml0V2l0
aFVSTDooTlNVUkwgKil1cmw7CiAKLS0gKE5TU3RyaW5nKilwcm90b2NvbDsKLS0gKE5TU3RyaW5n
Kilob3N0OworLSAoTlNTdHJpbmcgKilwcm90b2NvbDsKKy0gKE5TU3RyaW5nICopaG9zdDsKKwor
LSAoTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXI7CiAKIC8vIFJldHVybnMgemVybyBpZiB0
aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJvIG90
aGVyd2lzZS4KIC0gKHVuc2lnbmVkIHNob3J0KXBvcnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA4MDY5NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2ltcG9y
dCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVn
YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCisjaW1wb3J0ICJXZWJT
dG9yYWdlTWFuYWdlckludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIK
ICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVGV4
dEl0ZXJhdG9yLmgiCkBAIC02ODcsNiArNjg4LDEwIEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxp
emF0aW9uV2l0aEZyYW1lTmEKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIFdlYktpdElu
aXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsK
KyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJZk5l
Y2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVzTWV0aG9kKCk7CiAg
ICAgICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gODA2OTYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzMyBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBB
ZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAg
ICBBZGRlZCB0ZXN0cyB0aGF0IHdyaXRlIHRvIExvY2FsU3RvcmFnZSwgZGVsZXRlIG9uZSBvcmln
aW4sIGdldCBsaXN0IG9mIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlLCBkZWxldGUgYWxsIG9y
aWdpbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayk6CisgICAg
ICAgIChvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2spOgorICAgICAg
ICAoZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2spOgorICAgICAgICAob3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2VDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rp
b25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAg
KHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoYWxsb2NhdGVHbG9i
YWxDb250cm9sbGVycyk6CisgICAgICAgIChyZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4p
OgorCiAyMDExLTAzLTA5ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBIaWRlIExlYWtzIFZpZXdlcidzIFVSTCBwcm9tcHQgYnkgZGVmYXVsdApJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODA2
OTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNjAgQEAgc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJB
bGxEYXRhYmFzZXNDYWxsYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGNvbnRyb2xsZXItPnN5bmNMb2NhbFN0b3JhZ2Uo
KTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgdW5z
aWduZWQgbnVtTm90aWZpY2F0aW9ucyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbik7CisKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29u
dHJvbGxlci0+b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhudW1Ob3RpZmljYXRp
b25zKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgp
OworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiB1cmwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAg
Y29udHJvbGxlci0+ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKHVybC5nZXQoKSk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIHJldHVybiBjb250cm9sbGVyLT5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZShj
b250ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJCYWNrRm9yd2FyZExpc3RDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdp
bmRvd3MgaW1wbGVtZW50YXRpb24KQEAgLTIxNjMsNiArMjIxNywxMSBAQCBKU1N0YXRpY0Z1bmN0
aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgImFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5IiwgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJzZXRTY3JvbGxiYXJQb2xpY3kiLCBzZXRTY3JvbGxiYXJQb2xpY3lD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhdXRoZW50aWNhdGVTZXNzaW9uIiwgYXV0aGVu
dGljYXRlU2Vzc2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImRlbGV0ZUFsbExvY2Fs
U3RvcmFnZSIsIGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgInN5bmNMb2NhbFN0b3JhZ2UiLCBzeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwg
ICAgICAgICAgICAgICAgCisgICAgICAgIHsgIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnMiLCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwgICAgICAgIAorICAgICAgICB7ICJkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCBkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJvcmln
aW5zV2l0aExvY2FsU3RvcmFnZSIsIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAic2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZSIsIHNldFNob3VsZFBh
aW50QnJva2VuSW1hZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAg
IH07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDgwNjk1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMiBAQCBwdWJsaWM6CiAKICAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0OwogCisgICAgSlNWYWx1
ZVJlZiBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYpOworICAgIHZvaWQgZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKCk7CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBvYnNlcnZlU3RvcmFn
ZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcik7CisgICAgdm9pZCBzeW5jTG9j
YWxTdG9yYWdlKCk7CisKICAgICB2b2lkIHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UoYm9vbCk7
CiAgICAgYm9vbCBzaG91bGRQYWludEJyb2tlbkltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRQYWludEJyb2tlbkltYWdlOyB9CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3Jh
Z2VUcmFja2VyRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9T
dG9yYWdlVHJhY2tlckRlbGVnYXRlLmgJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworY2xhc3Mg
TGF5b3V0VGVzdENvbnRyb2xsZXI7CisKK0BpbnRlcmZhY2UgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZSA6IE5TT2JqZWN0IHsKKyAgICB1bnNpZ25lZCBudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZzsK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlclRvTm90aWZ5RG9uZTsKK30KKwor
LSAodm9pZClsb2dOb3RpZmljYXRpb25zOih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjooTGF5
b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CistICh2b2lkKW9yaWdpbk1vZGlmaWVkOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpc2V0Q29udHJvbGxlclRvTm90
aWZ5RG9uZTooTGF5b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CisKK0BlbmQKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQkocmV2
aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
bW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTdG9y
YWdlVHJhY2tlckRlbGVnYXRlLmgiCisKKyNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgi
CisjaW1wb3J0IDxXZWJLaXQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBTdG9y
YWdlVHJhY2tlckRlbGVnYXRlCisKKy0gKGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3Iob3JpZ2luTW9kaWZpZWQ6KSBuYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5O
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClsb2dOb3RpZmljYXRpb25zOih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjooTGF5b3V0VGVz
dENvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lID0g
Y29udHJvbGxlcjsKKworICAgIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nID0gbnVtYmVyOwor
fQorCistICh2b2lkKW9yaWdpbk1vZGlmaWVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIGlmICghbnVtYmVyT2ZOb3RpZmljYXRpb25zVG9Mb2cpCisgICAgICAgIHJldHVy
bjsKKworICAgIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nLS07CisgICAgCisgICAgaWYgKG51
bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nID09IDAgJiYgY29udHJvbGxlclRvTm90aWZ5RG9uZSkg
eworICAgICAgICBOU0FycmF5ICpvcmlnaW5zID0gW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRX
ZWJTdG9yYWdlTWFuYWdlcl0gb3JpZ2luc107CisgICAgICAgIGZvciAoV2ViU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiBpbiBvcmlnaW5zKQorICAgICAgICAgICAgcHJpbnRmKCJPcmlnaW4gaWRlbnRp
ZmllcjogJyVzJ1xuIiwgW1tvcmlnaW4gZGF0YWJhc2VJZGVudGlmaWVyXSBVVEY4U3RyaW5nXSk7
CisgICAgICAgIAorICAgICAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lLT5ub3RpZnlEb25lKCk7
CisgICAgfQorfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJTdG9yYWdlRGlk
TW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIAorICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRU
ZXN0Q29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIGNvbnRyb2xsZXJUb05vdGlmeURvbmUg
PSBjb250cm9sbGVyOworfQorCisKK0BlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gODA2OTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4
IEBACiAJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
Q0ZCQTJEMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSAq
LzsgfTsKIAkJMzcxM0VERTIxMTVCRTE5MzAwNzA1NzIwIC8qIENvbG9yQml0cy1BLnBuZyBpbiBD
b3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VE
REYxMTVCRTE2RjAwNzA1NzIwIC8qIENvbG9yQml0cy1BLnBuZyAqLzsgfTsKIAkJMzcxM0VERTMx
MTVCRTE5MzAwNzA1NzIwIC8qIENvbG9yQml0cy50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MTNFREUwMTE1QkUxNkYwMDcwNTcyMCAv
KiBDb2xvckJpdHMudHRmICovOyB9OworCQkzQTU2MjZDQjEzMUNBMDJBMDAyQkU2RDkgLyogU3Rv
cmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNBNTYyNkMxMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRl
bGVnYXRlLm1tICovOyB9OworCQkzQTU2MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRy
YWNrZXJEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0E1NjI2QzAxMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
aCAqLzsgfTsKIAkJNDQwNTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3Vw
cG9ydE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0MDU5MDcwMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0g
Ki87IH07CiAJCTQ0Mzc3MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBv
cnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRB
OTk3ODMwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07
CiAJCTQ0Mzc3MzBGMTI1Q0JDNEQwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTk5NzgyMEZD
REU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCAqLzsgfTsKQEAgLTIzMCw2
ICsyMzIsOCBAQAogCQkzNzVGMDk3NzBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0
Y2hlcjcwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGY7IHBhdGggPSBmb250
cy9XZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc1RjA5NzgwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRm
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsg
bmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjgwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTc5
MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJL
aXRXZWlnaHRXYXRjaGVyOTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5
MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQTU2MjZDMDEzMUM4QjE3MDAy
QkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTNBNTYyNkMxMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVn
YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RvcmFnZVRy
YWNrZXJEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQwNTkwNzAx
MjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5t
bTsgcGF0aCA9IG1hYy9XZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ0QTk5NzgyMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVt
cFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0Lmg7IHBhdGggPSBjZi9XZWJBcmNoaXZlRHVtcFN1cHBvcnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRBOTk3ODMwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hp
dmVEdW1wU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwOyBwYXRoID0gY2YvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MCw2ICs0NjQsOCBAQAogCQkJ
CUJDQTE4QjVFMEM5QjA4QzIwMDExNDM2OSAvKiBSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbSAqLywK
IAkJCQlCQ0ExOEI1RjBDOUIwOEMyMDAxMTQzNjkgLyogVUlEZWxlZ2F0ZS5oICovLAogCQkJCUJD
QTE4QjYwMEM5QjA4QzIwMDExNDM2OSAvKiBVSURlbGVnYXRlLm1tICovLAorCQkJCTNBNTYyNkMw
MTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggKi8sCisJCQkJM0E1
NjI2QzExMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IERlbGVnYXRlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC02MjAsNiArNjI2LDcgQEAKIAkJCQk1MTg1RjZCMzEwNzE0RTEyMDA3QUEzOTMgLyogSGlzdG9y
eURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUI3ODE2NzExQUYzMUMzMDA3RTFCQzIg
LyogTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0ZCQTEw
MTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtODA5LDYgKzgxNiw3IEBACiAJCQkJRTFCNzgxNjUxMUFG
MzFCNzAwN0UxQkMyIC8qIE1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjlDRkJBMTExMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNBNTYyNkNCMTMx
Q0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4MDY5NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkyLDcgKzE5MiwxMiBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xs
CiAgICAgYmluZE1ldGhvZCgic2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CiAgICAgYmluZE1ldGhvZCgi
c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKTsKICAgICBiaW5kTWV0aG9kKCJzdG9y
ZVdlYlNjcmlwdE9iamVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RvcmVXZWJTY3JpcHRP
YmplY3QpOwotCisgICAgYmluZE1ldGhvZCgiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRNZXRob2Qo
Im9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvcmlnbnNX
aXRoTG9jYWxTdG9yYWdlKTsKKyAgICBiaW5kTWV0aG9kKCJkZWxldGVMb2NhbFN0b3JhZ2VGb3JP
cmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bik7CisgICAgYmluZE1ldGhvZCgib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cyk7CisgICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c3luY0xvY2FsU3RvcmFnZSk7CisgICAgCiAgICAgLy8gVGhlIGZhbGxiYWNrIG1ldGhv
ZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3duIG1ldGhvZCBpcyBpbnZva2VkLgogICAgIGJpbmRG
YWxsYmFja01ldGhvZCgmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZhbGxiYWNrTWV0aG9kKTsKIApA
QCAtMTYwMiwzICsxNjA3LDMwIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmlt
dW1UaW0KICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3Mo
KS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOwogfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJ
bXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExv
Y2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCop
Cit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3Zv
aWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KikKK3sKKyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwordm9pZCBz
eW5jTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQorewor
ICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODA2
OTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDEzIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwogCisgICAgLy8gTG9jYWxTdG9yYWdlIG9yaWdpbi1yZWxhdGVkCisgICAgdm9pZCBk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworICAgIHZvaWQgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKIHB1YmxpYzoKICAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJl
IG5vdCBleHBvc2VkIHRvIEphdmFTY3JpcHQuCiAgICAgdm9pZCBzZXRXb3JrUXVldWVGcm96ZW4o
Ym9vbCBmcm96ZW4pIHsgbV93b3JrUXVldWUuc2V0RnJvemVuKGZyb3plbik7IH0KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3Rr
LmNwcAkocmV2aXNpb24gODA2OTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDMxIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXUKICAgICB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7CiB9CiAK
K0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KEpTQ29udGV4dFJlZikKK3sKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQor
eworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVy
KQoreworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShib29sLCBKU1N0cmluZ1JlZikKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
CShyZXZpc2lvbiA4MDY5NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2ltcG9ydCAiUGl4ZWxE
dW1wU3VwcG9ydC5oIgogI2ltcG9ydCAiUG9saWN5RGVsZWdhdGUuaCIKICNpbXBvcnQgIlJlc291
cmNlTG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgiCiAj
aW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCIK
ICNpbXBvcnQgIldvcmtRdWV1ZS5oIgpAQCAtNzcsNiArNzgsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlByZWZlcmVuY2VL
ZXlzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlJlc291cmNlTG9hZERlbGVnYXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViVHlwZXNJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRl
Lmg+CiAjaW1wb3J0IDxnZXRvcHQuaD4KQEAgLTEzNCw2ICsxMzYsNyBAQCBzdGF0aWMgRWRpdGlu
Z0RlbGVnYXRlICplZGl0aW5nRGVsZWdhdGU7CiBzdGF0aWMgUmVzb3VyY2VMb2FkRGVsZWdhdGUg
KnJlc291cmNlTG9hZERlbGVnYXRlOwogc3RhdGljIEhpc3RvcnlEZWxlZ2F0ZSAqaGlzdG9yeURl
bGVnYXRlOwogUG9saWN5RGVsZWdhdGUgKnBvbGljeURlbGVnYXRlOworU3RvcmFnZVRyYWNrZXJE
ZWxlZ2F0ZSAqc3RvcmFnZURlbGVnYXRlOwogCiBzdGF0aWMgaW50IGR1bXBQaXhlbHM7CiBzdGF0
aWMgaW50IHRocmVhZGVkOwpAQCAtNDE0LDYgKzQxNyw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0RGVm
YXVsdHNUb0NvbnNpc3RlbnRWYWwKIAogICAgIE5TU3RyaW5nICpwYXRoID0gbGlicmFyeVBhdGhG
b3JEdW1wUmVuZGVyVHJlZSgpOwogICAgIFtkZWZhdWx0cyBzZXRPYmplY3Q6W3BhdGggc3RyaW5n
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiRGF0YWJhc2VzIl0gZm9yS2V5OldlYkRhdGFiYXNl
RGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIFtkZWZhdWx0cyBzZXRPYmplY3Q6W3BhdGggc3Ry
aW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiTG9jYWxTdG9yYWdlIl0gZm9yS2V5OldlYlN0
b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleV07CiAgICAgW2RlZmF1bHRzIHNldE9iamVjdDpbcGF0
aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJMb2NhbENhY2hlIl0gZm9yS2V5Oldl
YktpdExvY2FsQ2FjaGVEZWZhdWx0c0tleV07CiAKICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVy
ZW5jZXMgPSBbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc107CkBAIC01NDUsNiAr
NTQ5LDcgQEAgc3RhdGljIHZvaWQgYWxsb2NhdGVHbG9iYWxDb250cm9sbGVycygpCiAgICAgcmVz
b3VyY2VMb2FkRGVsZWdhdGUgPSBbW1Jlc291cmNlTG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XTsK
ICAgICBwb2xpY3lEZWxlZ2F0ZSA9IFtbUG9saWN5RGVsZWdhdGUgYWxsb2NdIGluaXRdOwogICAg
IGhpc3RvcnlEZWxlZ2F0ZSA9IFtbSGlzdG9yeURlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICBz
dG9yYWdlRGVsZWdhdGUgPSBbW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdOwog
fQogCiAvLyBPYmpDKysgZG9lbnMndCBzZWVtIHRvIGxldCBtZSBwYXNzIE5TT2JqZWN0KiYgc2Fk
bHkuCkBAIC01NjIsNiArNTY3LDcgQEAgc3RhdGljIHZvaWQgcmVsZWFzZUdsb2JhbENvbnRyb2xs
ZXJzKCkKICAgICByZWxlYXNlQW5kWmVybygmcmVzb3VyY2VMb2FkRGVsZWdhdGUpOwogICAgIHJl
bGVhc2VBbmRaZXJvKCZ1aURlbGVnYXRlKTsKICAgICByZWxlYXNlQW5kWmVybygmcG9saWN5RGVs
ZWdhdGUpOworICAgIHJlbGVhc2VBbmRaZXJvKCZzdG9yYWdlRGVsZWdhdGUpOwogfQogCiBzdGF0
aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2Ms
IGNvbnN0IGNoYXIgKmFyZ3ZbXSkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9E
dW1wUmVuZGVyVHJlZU1hYy5oCShyZXZpc2lvbiA4MDY5NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiBAY2xhc3MgRHVtcFJlbmRlclRyZWVEcmFnZ2luZ0luZm87CiBAY2xhc3MgTmF2aWdhdGlv
bkNvbnRyb2xsZXI7CiBAY2xhc3MgUG9saWN5RGVsZWdhdGU7CitAY2xhc3MgU3RvcmFnZVRyYWNr
ZXJEZWxlZ2F0ZTsKIEBjbGFzcyBXZWJGcmFtZTsKIEBjbGFzcyBXZWJTY3JpcHRXb3JsZDsKIEBj
bGFzcyBXZWJWaWV3OwpAQCAtNDIsNiArNDMsNyBAQAogY2xhc3MgRHVtcFJlbmRlclRyZWVEcmFn
Z2luZ0luZm87CiBjbGFzcyBOYXZpZ2F0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFBvbGljeURlbGVn
YXRlOworY2xhc3MgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZTsKIGNsYXNzIFdlYkZyYW1lOwogY2xh
c3MgV2ViU2NyaXB0V29ybGQ7CiBjbGFzcyBXZWJWaWV3OwpAQCAtNTQsNiArNTYsNyBAQCBleHRl
cm4gV2ViRnJhbWUqIHRvcExvYWRpbmdGcmFtZTsKIGV4dGVybiBEdW1wUmVuZGVyVHJlZURyYWdn
aW5nSW5mbyAqZHJhZ2dpbmdJbmZvOwogZXh0ZXJuIE5hdmlnYXRpb25Db250cm9sbGVyKiBnTmF2
aWdhdGlvbkNvbnRyb2xsZXI7CiBleHRlcm4gUG9saWN5RGVsZWdhdGUqIHBvbGljeURlbGVnYXRl
OworZXh0ZXJuIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUqIHN0b3JhZ2VEZWxlZ2F0ZTsKIAogZXh0
ZXJuIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdIZWlnaHQ7CiBleHRlcm4gY29uc3QgdW5zaWduZWQg
bWF4Vmlld1dpZHRoOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gODA2OTUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkVkaXRpbmdEZWxlZ2F0ZS5oIgogI2ltcG9ydCAi
TW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCIKICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCisj
aW1wb3J0ICJTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgiCiAjaW1wb3J0ICJVSURlbGVnYXRlLmgi
CiAjaW1wb3J0ICJXb3JrUXVldWUuaCIKICNpbXBvcnQgIldvcmtRdWV1ZUl0ZW0uaCIKQEAgLTY2
LDYgKzY3LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XZWJRdW90YU1hbmFnZXIuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJTY3JpcHRXb3JsZC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlNlY3VyaXR5T3Jp
Z2luUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KQEAgLTEzMywxMSAr
MTM1LDUzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGkKICAgICBb
V2ViQXBwbGljYXRpb25DYWNoZSBkZWxldGVBbGxBcHBsaWNhdGlvbkNhY2hlc107CiB9CiAKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIFtbV2Vi
U3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIHN5bmNMb2NhbFN0b3JhZ2Vd
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICBbc3RvcmFnZURlbGVnYXRlIGxv
Z05vdGlmaWNhdGlvbnM6bnVtYmVyIGNvbnRyb2xsZXI6dGhpc107Cit9CisKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBbW1dlYkRhdGFiYXNl
TWFuYWdlciBzaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXJdIGRlbGV0ZUFsbERhdGFiYXNlc107CiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7
CisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gZGVsZXRl
QWxsT3JpZ2luc107Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIFdlYlN0b3Jh
Z2VNYW5hZ2VyICpzdG9yYWdlID0gW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VN
YW5hZ2VyXTsKKworICAgIE5TQXJyYXkgKm9yaWdpbnMgPSBbc3RvcmFnZSBvcmlnaW5zXTsKKyAg
ICBOU0ludGVnZXIgY291bnQgPSBbb3JpZ2lucyBjb3VudF07CisKKyAgICBKU1ZhbHVlUmVmIGpz
T3JpZ2luc0FycmF5W2NvdW50XTsKKyAgICBmb3IgKE5TSW50ZWdlciBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKm9yaWdpbiA9IFtbb3JpZ2lucyBvYmplY3RBdElu
ZGV4OmldIGRhdGFiYXNlSWRlbnRpZmllcl07CisgICAgICAgIEpTU3RyaW5nUmVmIHN0ciA9IEpT
U3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilvcmlnaW4pOworICAgICAgICBq
c09yaWdpbnNBcnJheVtpXSA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHN0cik7CisgICAg
fQorCisgICAgSlNPYmplY3RSZWYganNBcnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNv
bnRleHQsIGNvdW50LCBqc09yaWdpbnNBcnJheSwgTlVMTCk7CisgICAgcmV0dXJuIGpzQXJyYXlP
YmplY3Q7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFn
ZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBVUkwpKTsKKyAgICAKKyAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1
cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3Ry
aW5nICopdXJsQ0YuZ2V0KCldXTsKKworICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2Vi
U3RvcmFnZU1hbmFnZXJdIGRlbGV0ZU9yaWdpbjpvcmlnaW5dOworfQorCiB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7CiAgICAgV2ViQmFja0Zvcndh
cmRMaXN0ICpiYWNrRm9yd2FyZExpc3QgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBiYWNrRm9yd2Fy
ZExpc3RdOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVz
dENvbnRyb2xsZXJRdC5jcHAJKHJldmlzaW9uIDgwNjk1KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Miw1
ICs4NDIsMzAgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbQogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtX2RydC0+
d2ViUGFnZSgpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0
b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMo
dW5zaWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCit9CisKIGNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpt
YXhWaWV3V2lkdGggPSA4MDA7CiBjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bWF4Vmlld0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9x
dC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDgwNjk1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMsNiArMjUzLDEyIEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0KGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOwogCiAgICAgdm9pZCBzZXRNaW5pbXVtVGlt
ZXJJbnRlcnZhbChkb3VibGUpOworICAgIAorICAgIHZvaWQgb3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UoKTsKKyAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1i
ZXIpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwogCiBwcml2YXRlIHNsb3RzOgogICAg
IHZvaWQgcHJvY2Vzc1dvcmsoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlv
dXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gODA2OTUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDI4LDYgKzE0MjgsNDEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0U2VyaWFsaXplSAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNM
b2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5z
aWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2Nh
bFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0pTVmFsdWVSZWYg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJl
ZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBV
UkwpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVy
dmFsKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKQEAgLTE0NDAsMyArMTQ3NSw1
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KIAogICAgIHZpZXdQ
cml2YXRlLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9
CisKKwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJX
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENv
bnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDgwNjk1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OCw0ICs1
NTgsMzMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSAogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVy
dmFsKSB7CiAKIH0KLSAgICAKKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2Fs
U3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25l
ZCBudW1iZXIpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3Rv
cmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworSlNWYWx1ZVJlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNv
bnRleHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gODA2OTYp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBA
QAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQxIEFQ
SSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAgICAqIHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXI6IEFkZGVkLgorICAgICAgICAqIHN0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJl
cGFyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10
cmFja2VyLTMtZGVsZXRlLWFsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2Vy
LTMtZGVsZXRlLWFsbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTUtZGVsZXRlLW9uZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xMCAgT2phbiBW
YWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorUHJlcGFyZSBmb3IgU3RvcmFnZVRyYWNrZXIgdGVz
dHMgYnkgZW5zdXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlIGlzIGRl
bGV0ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUaGlzIHRlc3Qgc2hvdWxk
IGhhdmUgbm8gdmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0x
LXByZXBhcmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlByZXBhcmUgZm9yIFN0b3JhZ2VUcmFja2VyIHRlc3Rz
IGJ5IGVuc3VyaW5nIHRoYXQgZXZlcnkgb3JpZ2luIHdpdGggbG9jYWwgc3RvcmFnZSBpcyBkZWxl
dGVkLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3Qo
KSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxT
dG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgZGVidWcoIlRoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNj
ZXNzLiIpOworCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBm
aW5pc2hUZXN0KCk7CisgICAgfQorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK09yaWdpbiBpZGVudGlmaWVyOiAnZmlsZV9f
MCcKK1N0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9y
aWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBvcmlnaW5zLXByZXBhcmUuaHRtbC4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZv
ciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBvcmlnaW5zLXByZXBhcmUuaHRt
bC4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAg
aWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImxvY2FsU3Rv
cmFnZSBET0VTIE5PVCBleGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLmxlbmd0
aCA+IDApIHsKKyAgICAgICAgLy8gQW4gb3JpZ2luIGFscmVhZHkgZXhpc3RzIHNvIHdlIGNhbiBl
eGl0LgorICAgICAgICB0ZXN0RmFpbGVkKCJBbiBvcmlnaW4gYWxyZWFkeSBleGlzdGVkIHdpdGgg
bG9jYWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnN5bmNMb2Nh
bFN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGxvY2FsU3RvcmFnZS5zb21lRGF0YSA9ICd3
cml0ZW1lJzsKKyAgICAgICAgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXIncyBub3RpZnlEb25lIHdp
bGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbiBjb21lcyBp
bi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90
aWZpY2F0aW9ucygxKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fs
c3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxs
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8g
dmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwg
c3RvcmFnZSBieSBvcmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmco
KSBpcyAiZmlsZV9fMCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlRlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3Rv
cmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2Nh
bFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4
aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRy
b2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygibGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoKS50b1N0cmluZygpIiwgImZpbGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVz
dCBnb2luZyB0byBkZWxldGUgdGhlIGV4aXN0aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBv
cmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB0ZXN0RmFpbGVk
KCJSYW4gd2l0aCBubyBvcmlnaW5zIHdpdGggbG9jYWwgc3RvcmFnZSIpOworICAgIH0KKworICAg
IC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZSBvbmUgb3JpZ2luIHdp
dGggbG9jYWwgc3RvcmFnZS4KK30KKwordGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitPcmlnaW4gaWRlbnRpZmllcjogJ2ZpbGVfXzAn
CitTdG9yYWdlVHJhY2tlciB0ZXN0IC0gd3JpdGUgbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBvcmln
aW4uIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5o
dG1sLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGhpcyB0ZXN0IHNob3VsZCBo
YXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9k
b21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1j
cmVhdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJTdG9yYWdlVHJhY2tlciB0ZXN0IC0gd3JpdGUgbG9jYWwgc3Rv
cmFnZSBmb3IgdGhpcyBvcmlnaW4uIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RvcmFnZS10cmFj
a2VyLTMtZGVsZXRlLWFsbC5odG1sLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgZGVidWcoIlRoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNp
YmxlIG91dHB1dCBvbiBzdWNjZXNzLiIpOworCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVy
Lm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICAvLyBBbiBv
cmlnaW4gYWxyZWFkeSBleGlzdHMgc28gd2UgY2FuIGV4aXQuCisgICAgICAgIHRlc3RGYWlsZWQo
IkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0ZWQgd2l0aCBsb2NhbCBzdG9yYWdlLiIpOworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICBsb2Nh
bFN0b3JhZ2Uuc29tZU90aGVyRGF0YSA9ICd3cml0ZW1lTW9yZSc7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAg
fQorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lz
U3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNr
ZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJh
Y2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhh
dmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2luLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLnRvU3RyaW5nKCkgaXMgImZpbGVfXzAiCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9z
dG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdl
LXRyYWNrZXItNS1kZWxldGUtb25lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEFQ
SSB0byB2aWV3IG9yaWdpbnMgdGhhdCBoYXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRlbGV0ZSBs
b2NhbCBzdG9yYWdlIGJ5IG9yaWdpbi4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgCitm
dW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAg
IHRlc3RGYWlsZWQoImxvY2FsU3RvcmFnZSBET0VTIE5PVCBleGlzdCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
ImxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmco
KSIsICJmaWxlX18wIik7CisgICAgICAgIC8vIFdlJ3JlIGp1c3QgZ29pbmcgdG8gZGVsZXRlIHRo
ZSBleGlzdGluZyBvcmlnaW4sIHNvIHdlJ2xsIGdldCBvbmUgb3JpZ2luIGNoYW5nZSBub3RpZmlj
YXRpb24uCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tl
ck5vdGlmaWNhdGlvbnMoMSk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGd1YXJh
bnRlZWQgdG8gaGF2ZSBvbmUgb3JpZ2luIHdpdGggbG9jYWwgc3RvcmFnZS4KKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKCJmaWxlOi8vIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiUmFuIHdpdGggbm8gb3JpZ2lucyB3
aXRoIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICB9CisKK30KKwordGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85392</attachid>
            <date>2011-03-10 15:01:01 -0800</date>
            <delta_ts>2011-03-10 16:42:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110310150100.patch</filename>
            <type>text/plain</type>
            <size>131736</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3Vwcyk6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERpcmVjdG9yeSk6CisgICAg
ICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYyk6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjppbml0aWFsaXplVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRy
YWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0lt
cG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2Vy
OjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRl
QWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJD
bGllbnQ6On5TdG9yYWdlVHJhY2tlckNsaWVudCk6CisKIDIwMTEtMDMtMTAgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggZm9y
IHI4MDc1MjsgTmVnYXRlZCB0aGUgYm9vbGVhbiBsb2dpYy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjAzLDYgKzMyMDMsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCiAJU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJh
Y2tlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCSh3b3JraW5nIGNvcHkpCkBAIC05NzAsNiArOTcwLDcgQEAgX19aTjdXZWJDb3JlOVBhZ2VH
cm91cDI2c2V0U2hvdWxkVHJhY2tWaQogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI5cmVtb3ZlVXNl
clN0eWxlU2hlZXRGcm9tV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRVJLTlNfNEtVUkxFCiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwMzByZW1vdmVVc2VyU3R5bGVTaGVldHNGcm9tV29ybGRFUE5T
XzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDlwYWdlR3JvdXBFUktO
M1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmU5UGFnZUdyb3VwMThudW1iZXJPZlBhZ2VHcm91cHNF
dgogX19aTjdXZWJDb3JlOVNjcm9sbGJhcjIybWF4T3ZlcmxhcEJldHdlZW5QYWdlc0V2CiBfX1pO
N1dlYkNvcmU5VGltZXJCYXNlNHN0b3BFdgogX19aTjdXZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVk
ZApAQCAtMTA5Myw2ICsxMDk0LDE2IEBAIF9fWk5LN1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMTFm
cmFtZUxvYWQKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMTBjYW5EaXNwbGF5RVJLTlNf
NEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4ZGF0YWJhc2VJZGVudGlmaWVy
RXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luNWVxdWFsRVBLUzBfCisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRy
YWNrZXJFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMTZkZWxl
dGVBbGxPcmlnaW5zRXYKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxMmRlbGV0ZU9yaWdp
bkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3dHJh
Y2tlckV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3Rv
cklOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTG0wRUVFCitfX1pON1dlYkNvcmUx
NFN0b3JhZ2VUcmFja2VyOXNldENsaWVudEVQTlNfMjBTdG9yYWdlVHJhY2tlckNsaWVudEUKK19f
Wk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNnN5bmNMb2NhbFN0b3JhZ2VFdgorX19aTjdXZWJD
b3JlMTRTdG9yYWdlVHJhY2tlcjMyc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VFdgor
I2VuZGlmCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFt
ZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNXBsYXRmb3JtQ29udGV4dEV2CiBf
X1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNnBhaW50aW5nRGlzYWJsZWRFdgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODA3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQ2MjAsNiArNDYyMCw4IEBACiAgICAgICAgICAgICAn
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0
b3JhZ2VTeW5jTWFuYWdlci5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwJywKKyAg
ICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oJywKICAgICAgICAgICAgICdzdG9yYWdlL2No
cm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFn
ZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAnLApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTI3MzcsNyArMjczNyw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAg
ICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAg
ICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAog
CiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkBAIC0yNzU0LDcgKzI3NTYsOCBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9MSkgCiAgICAgICAgIHN0b3JhZ2Uv
U3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwK
ICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lTVEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4MDc2NikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC02NTYxMCw2ICs2NTYxMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9y
YWdlVHJhY2tlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNiArODUxLDkgQEAK
IAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBX
ZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNl
Lm1tICovOyB9OwogCQkzN0ZENDI5ODExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkQ0Mjk3
MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oICovOyB9OworCQkzQUIwMkQyQTEy
RDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9y
YWdlVHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRG
OTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OworCQkzQUMzNjgwMDEyRUY3
QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBT
dG9yYWdlVHJhY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTNBQzY0OEIyMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRh
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzY0
OEIxMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTAwMkNDRDBGNjZFREVGMDA5RTY2
MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rp
b25DYWxsLmggKi87IH07CiAJCTQxMDAyQ0NFMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5j
dGlvbkNhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi87
IH07CkBAIC03MjM5LDYgKzcyNDIsOSBAQAogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElu
bGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZENDI5NzExODM2ODQ2
MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHJlZURlcHRoTGltaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FC
MDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlVHJhY2tlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAv
KiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
QUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCb3VuZGFyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25D
YWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQzBGNjZFREVGMDA5RTY2
MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjk4NSw2ICsxMjk5MSw5IEBACiAJCQkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8sCiAJCQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFG
RjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAw
RkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJCTNBQjAyRDI4MTJENEY5MTYw
MEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovLAorCQkJCTNBQjAyRDI5MTJENEY5MTYwMEZC
QjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi8sCisJCQkJM0FDMzY3RkUxMkVGN0EwOTAwNkEz
RDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGgg
PSA0OwogCQkJcGF0aCA9IHN0b3JhZ2U7CkBAIC0yMjA3MSw2ICsyMjA4MCw3IEBACiAJCQkJQzUw
RDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VT
eW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FCMDJEMkExMkQ0RjkxNjAwRkJCNjk0
IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTQ4OEQ2QjBERDVBODNE
MDA5RDgzQjIgLyogU3RyaW5nU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg0OUY3Nzc2MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMjI1NjUsNiArMjI1NzUsNyBAQAogCQkJCUUxRjFFODMwMEMzQzJC
QjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0Zp
bHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENT
U1ByaW1pdGl2ZVZhbHVlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVBNTc0RjI1MTMxREI5
MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjYzNiw2ICsy
MjY0Nyw3IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAi
WGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5u
ZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkBA
IC0yNDg0MSw2ICsyNDg1Myw3IEBACiAJCQkJQzUwRDBFODIwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0
b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU1RTM4QzAxMDA0MEQ1RDAw
QTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1
MTAyRDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTMwMEQwMDZDMUQwMEVGNkYyNiAvKiBTdHJpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMjY0NUMwRDAwQTc3RTAwMEFDQzFEIC8qIFN0cmlu
Z0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVEMEQwMEE3N0UwMDBBQ0MxRCAvKiBT
dHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuY3BwCShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyb3VwU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCkBAIC0xMTAsNiArMTExLDU0
IEBAIHZvaWQgUGFnZUdyb3VwOjpjbG9zZUxvY2FsU3RvcmFnZSgpCiAjZW5kaWYKIH0KIAorI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdl
Rm9yQWxsT3JpZ2lucygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47
CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwor
ICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9y
YWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJBbGxP
cmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpjbGVhckxv
Y2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIGlmICgh
cGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRv
ciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0
b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnNlY29u
ZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyT3JpZ2luRm9yRGVsZXRpb24ob3JpZ2luKTsKKyAgICB9
ICAgIAorfQorICAgIAordm9pZCBQYWdlR3JvdXA6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAg
IGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjpp
dGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQt
PnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPnN5bmMoKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIFBh
Z2VHcm91cDo6bnVtYmVyT2ZQYWdlR3JvdXBzKCkKK3sKKyAgICBpZiAoIXBhZ2VHcm91cHMpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VHcm91cHMtPnNpemUoKTsKK30KKwor
I2VuZGlmCisKIHZvaWQgUGFnZUdyb3VwOjphZGRQYWdlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgQVNT
RVJUKHBhZ2UpOwpAQCAtMjA5LDYgKzI1OCw3IEBAIFN0b3JhZ2VOYW1lc3BhY2UqIFBhZ2VHcm91
cDo6bG9jYWxTdG9yYWcKIAogICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZS5nZXQoKTsKIH0KKwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuaAkocmV2aXNpb24gODA3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBHcm91cFNldHRpbmdzOwogICAgIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlOwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAg
ICAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZTsKIAogICAgIGNsYXNzIFBhZ2VHcm91cCB7CkBAIC00
OSw3ICs1MCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH5QYWdlR3JvdXAoKTsK
IAogICAgICAgICBzdGF0aWMgUGFnZUdyb3VwKiBwYWdlR3JvdXAoY29uc3QgU3RyaW5nJiBncm91
cE5hbWUpOworCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgICAgICBzdGF0aWMgdm9pZCBj
bG9zZUxvY2FsU3RvcmFnZSgpOworICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFn
ZUZvckFsbE9yaWdpbnMoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJMb2NhbFN0b3JhZ2VG
b3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICAgICAgLy8gRHVtcFJlbmRlclRyZWUgaGVs
cGVyIHRoYXQgdHJpZ2dlcnMgYSBTdG9yYWdlQXJlYSBzeW5jLgorICAgICAgICBzdGF0aWMgdm9p
ZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisjZW5kaWYKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIG51
bWJlck9mUGFnZUdyb3VwcygpOwogICAgICAgICAKICAgICAgICAgY29uc3QgSGFzaFNldDxQYWdl
Kj4mIHBhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlczsgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDQgKzExMiwxMSBA
QCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAgICAgcmV0dXJuIFBs
YXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKK1Zl
Y3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGZpbHRlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgcmV0dXJuIFZlY3Rv
cjxTdHJpbmc+KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAkocmV2aXNp
b24gODA3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8ZGlyZW50
Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGZu
bWF0Y2guaD4KICNpbmNsdWRlIDxsaWJnZW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMjI3LDEwICsyMjksMjggQEAgU3RyaW5nIGRpcmVjdG9y
eU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBkaXJuYW1lKGZzUmVwLm11dGFi
bGVEYXRhKCkpOwogfQogCi0vLyBPSyB0byBub3QgaW1wbGVtZW50IGxpc3REaXJlY3RvcnkgYXQg
dGhlIG1vbWVudCwgYmVjYXVzZSBpdCdzIG9ubHkgdXNlZCBmb3IgcGx1Zy1pbnMsIGFuZAotLy8g
YWxsIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgc2hhcmVkIHBsdWctaW4gaW1wbGVtZW50YXRpb24g
aGF2ZSBpbXBsZW1lbnRhdGlvbnMuIFdlJ2QgbmVlZAotLy8gdG8gaW1wbGVtZW50IGl0IGlmIHdl
IHdhbnRlZCB0byB1c2UgUGx1Z2luRGF0YWJhc2UuY3BwIG9uIHRoZSBNYWMuIEJldHRlciB0byBu
b3QgaW1wbGVtZW50Ci0vLyBhdCBhbGwgYW5kIGdldCBhIGxpbmsgZXJyb3IgaW4gY2FzZSB0aGlz
IGFyaXNlcywgcmF0aGVyIHRoYW4gaGF2aW5nIGEgc3R1YiBoZXJlLCBiZWNhdXNlCi0vLyB3aXRo
IGEgc3R1YiB5b3UgbGVhcm4gYWJvdXQgdGhlIHByb2JsZW0gYXQgcnVudGltZSBpbnN0ZWFkIG9m
IGxpbmsgdGltZS4KK1ZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVz
OworICAgIENTdHJpbmcgY3BhdGggPSBwYXRoLnV0ZjgoKTsKKyAgICBDU3RyaW5nIGNmaWx0ZXIg
PSBmaWx0ZXIudXRmOCgpOworICAgIERJUiogZGlyID0gb3BlbmRpcihjcGF0aC5kYXRhKCkpOwor
ICAgIGlmIChkaXIpIHsKKyAgICAgICAgc3RydWN0IGRpcmVudCogZHA7CisgICAgICAgIHdoaWxl
ICgoZHAgPSByZWFkZGlyKGRpcikpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0g
ZHAtPmRfbmFtZTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNt
cChuYW1lLCAiLi4iKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChmbm1hdGNoKGNmaWx0ZXIuZGF0YSgpLCBuYW1lLCAwKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGNoYXIgZmlsZVBhdGhbMTAyNF07CisgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoZmlsZVBhdGgpIC0gMSkgPCBzbnByaW50ZihmaWxlUGF0
aCwgc2l6ZW9mKGZpbGVQYXRoKSwgIiVzLyVzIiwgY3BhdGguZGF0YSgpLCBuYW1lKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gYnVmZmVyIG92ZXJmbG93CisgICAgICAgICAgICBlbnRy
aWVzLmFwcGVuZChmaWxlUGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2VkaXIoZGlyKTsK
KyAgICB9CisgICAgcmV0dXJuIGVudHJpZXM7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkocmV2
aXNpb24gODA3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VUaHJlYWQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNpbmNsdWRlICJT
dG9yYWdlVHJhY2tlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDYgKzUxLDI3
IEBAIExvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSAKICAgICBBU1NFUlQo
bV90aHJlYWQpOwogICAgIEFTU0VSVChtX3R5cGUgPT0gVGVybWluYXRlVGhyZWFkKTsKIH0KKyAg
ICAKK0xvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSB0eXBlKQorICAgIDog
bV90eXBlKHR5cGUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJbXBvcnRPcmlnaW5zIHx8IG1f
dHlwZSA9PSBEZWxldGVBbGxPcmlnaW5zKTsKK30KKyAgICAKK0xvY2FsU3RvcmFnZVRhc2s6Okxv
Y2FsU3RvcmFnZVRhc2soVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
CisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVu
dGlmaWVyKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gRGVsZXRlT3JpZ2luKTsKK30KKworTG9j
YWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1lKQorICAgIDog
bV90eXBlKHR5cGUpCisgICAgLCBtX29yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikK
KyAgICAsIG1fZGF0YWJhc2VGaWxlbmFtZShkYXRhYmFzZUZpbGVuYW1lKQoreworICAgIEFTU0VS
VChtX3R5cGUgPT0gU2V0T3JpZ2luRGV0YWlscyk7Cit9CiAKIExvY2FsU3RvcmFnZVRhc2s6On5M
b2NhbFN0b3JhZ2VUYXNrKCkKIHsKQEAgLTY0LDYgKzg2LDE4IEBAIHZvaWQgTG9jYWxTdG9yYWdl
VGFzazo6cGVyZm9ybVRhc2soKQogICAgICAgICBjYXNlIEFyZWFTeW5jOgogICAgICAgICAgICAg
bV9hcmVhLT5wZXJmb3JtU3luYygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2V0T3JpZ2luRGV0YWlsczoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCku
c3luY1NldE9yaWdpbkRldGFpbHMobV9vcmlnaW5JZGVudGlmaWVyLCBtX2RhdGFiYXNlRmlsZW5h
bWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW1wb3J0T3JpZ2luczoKKyAg
ICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0ltcG9ydE9yaWdpbklkZW50
aWZpZXJzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWxldGVBbGxPcmln
aW5zOgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jRGVsZXRlQWxs
T3JpZ2lucygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVsZXRlT3JpZ2lu
OgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jRGVsZXRlT3JpZ2lu
KG1fb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBE
ZWxldGVFbXB0eURhdGFiYXNlOgogICAgICAgICAgICAgbV9hcmVhLT5kZWxldGVFbXB0eURhdGFi
YXNlKCk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGFzay5oCShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogCkBAIC00MCwxMyArNDEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIExv
Y2FsU3RvcmFnZVRhc2sgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbFN0b3Jh
Z2VUYXNrKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBl
bnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwgVGVy
bWluYXRlVGhyZWFkIH07CisgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5j
LCBEZWxldGVFbXB0eURhdGFiYXNlLCBTZXRPcmlnaW5EZXRhaWxzLCBJbXBvcnRPcmlnaW5zLCBE
ZWxldGVBbGxPcmlnaW5zLCBEZWxldGVPcmlnaW4sIFRlcm1pbmF0ZVRocmVhZCB9OwogCiAgICAg
ICAgIH5Mb2NhbFN0b3JhZ2VUYXNrKCk7CiAKICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9j
YWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9ydCwgYXJlYSkpOyB9CiAg
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVN5bmMoU3Rv
cmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFz
ayhBcmVhU3luYywgYXJlYSkpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3Rv
cmFnZVRhc2s+IGNyZWF0ZURlbGV0ZUVtcHR5RGF0YWJhc2UoU3RvcmFnZUFyZWFTeW5jKiBhcmVh
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVFbXB0eURhdGFi
YXNlLCBhcmVhKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFz
az4gY3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQoKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
TG9jYWxTdG9yYWdlVGFzayhJbXBvcnRPcmlnaW5zKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NP
d25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlbmFtZSkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soU2V0T3JpZ2luRGV0YWlscywgb3Jp
Z2luSWRlbnRpZmllciwgZGF0YWJhc2VGaWxlbmFtZSkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNz
T3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNr
KERlbGV0ZU9yaWdpbiwgb3JpZ2luSWRlbnRpZmllcikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNz
T3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMoKSB7IHJldHVy
biBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVBbGxPcmlnaW5zKSk7IH0KICAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlVGVybWluYXRl
KExvY2FsU3RvcmFnZVRocmVhZCogdGhyZWFkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxT
dG9yYWdlVGFzayhUZXJtaW5hdGVUaHJlYWQsIHRocmVhZCkpOyB9CiAKICAgICAgICAgdm9pZCBw
ZXJmb3JtVGFzaygpOwpAQCAtNTQsMTAgKzU5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBwcml2YXRlOgogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFN0b3JhZ2VBcmVhU3lu
YyopOwogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIExvY2FsU3RvcmFnZVRocmVhZCop
OworICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAg
ICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUpOwogCiAgICAgICAgIFR5cGUgbV90eXBlOwogICAgICAg
ICBTdG9yYWdlQXJlYVN5bmMqIG1fYXJlYTsKICAgICAgICAgTG9jYWxTdG9yYWdlVGhyZWFkKiBt
X3RocmVhZDsKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2luSWRlbnRpZmllcjsKKyAgICAgICAgU3Ry
aW5nIG1fZGF0YWJhc2VGaWxlbmFtZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZp
c2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNywzMSBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1w
bDo6Y2xvc2UoKQogI2VuZGlmCiB9CiAKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9y
aWdpbkRlbGV0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1fc3RvcmFnZU1hcC0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgdW5zaWduZWQgcXVvdGEgPSBtX3N0b3JhZ2VNYXAtPnF1b3RhKCk7Cisg
ICAgICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSk7CisgICAgfQor
CisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKSB7CisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5j
LT5zY2hlZHVsZUNsZWFyKCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNs
b3NlRGF0YWJhc2UoKTsKKyAgICB9Cit9CisgICAgCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c3lu
YygpCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOworICAgIAorICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9z
dG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlU3luYygpOworfQorCiB2b2lkIFN0b3JhZ2VBcmVhSW1w
bDo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKIHsKICAgICBpZiAobV9zdG9yYWdl
QXJlYVN5bmMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJ
KHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUlt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBPbmx5IGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAg
ICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CiAKKyAgICAgICAgLy8gVXNlZCB0byBjbGVhciBhIFN0b3JhZ2VBcmVhIGFuZCBjbG9zZSBk
YiBiZWZvcmUgYmFja2luZyBkYiBmaWxlIGlzIGRlbGV0ZWQuCisgICAgICAgIHZvaWQgY2xlYXJG
b3JPcmlnaW5EZWxldGlvbigpOworCisgICAgICAgIHZvaWQgc3luYygpOworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+LCB1bnNpZ25lZCBxdW90
YSk7CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYUltcGwqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDgwNzY2
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIu
aCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgIlN1ZGRlblRlcm1pbmF0
aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0xMzgsNiArMTM5LDI1
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsZWFyKCkKICAgICB9CiB9CiAKK3Zv
aWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7CisK
KyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c3luY0Nsb3NlRGF0YWJhc2UgPSB0cnVlOworICAgIAorICAgIGlmICghbV9zeW5jVGltZXIuaXNB
Y3RpdmUoKSkgeworICAgICAgICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3QoU3RvcmFnZVN5bmNJ
bnRlcnZhbCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2Vk
IGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAgICAv
LyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0
aW9uKCk7CisgICAgfQorfQorCiB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQo
VGltZXI8U3RvcmFnZUFyZWFTeW5jPiopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTIyMiw2ICsyNDIsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om9wZW5EYXRhYmFzZShP
cGVuRAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gQSBTdG9yYWdlVHJhY2tlciB0
aHJlYWQgbWF5IGhhdmUgYmVlbiBzY2hlZHVsZWQgdG8gZGVsZXRlIHRoZSBkYiB3ZSdyZQorICAg
IC8vIHJlb3BlbmluZywgc28gY2FuY2VsIHBvc3NpYmxlIGRlbGV0aW9uLgorICAgIFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuY2FuY2VsRGVsZXRpbmdPcmlnaW4obV9kYXRhYmFzZUlkZW50aWZp
ZXIpOworCiAgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VGaWxlbmFtZSkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBmaWxlICVzIGZvciBsb2Nh
bCBzdG9yYWdlIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbWFy
a0ltcG9ydGVkKCk7CkBAIC0yMzUsNiArMjU5LDggQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om9w
ZW5EYXRhYmFzZShPcGVuRAogICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxlZCA9IHRydWU7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNl
dE9yaWdpbkRldGFpbHMobV9kYXRhYmFzZUlkZW50aWZpZXIsIGRhdGFiYXNlRmlsZW5hbWUpOwog
fQogCiB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCkBAIC0zMTksNiArMzQ1
LDE1IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGUKICAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIENsb3Npbmcg
dGhpcyBkYiBiZWNhdXNlIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQgYnkgU3RvcmFnZVRyYWNr
ZXIuCisgICAgLy8gVGhlIGRlbGV0ZSB3aWxsIGJlIGNhbmNlbGxlZCBpZiBTdG9yYWdlQXJlYVN5
bmMgbmVlZHMgdG8gcmVvcGVuIHRoZSBkYgorICAgIC8vIHRvIHdyaXRlIG5ldyBpdGVtcyBjcmVh
dGVkIGFmdGVyIHRoZSByZXF1ZXN0IHRvIGRlbGV0ZSB0aGUgZGIuCisgICAgaWYgKG1fc3luY0Ns
b3NlRGF0YWJhc2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IGZhbHNlOworICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAg
ICAgLy8gSWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBv
dXQgYmVmb3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBpbi4KICAgICBpZiAoY2xlYXJJdGVtcykg
ewogICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9N
IEl0ZW1UYWJsZSIpOwpAQCAtNDIxLDEyICs0NTYsMTUgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OmRlbGV0ZUVtcHR5RGF0YWJhcwogICAgIGlmICghY291bnQpIHsKICAgICAgICAgcXVlcnkuZmlu
YWxpemUoKTsKICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICBTdHJpbmcgZGF0
YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fZGF0
YWJhc2VJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVE
YXRhYmFzZUZpbGUoZGF0YWJhc2VGaWxlbmFtZSkpCi0gICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmlsZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmln
aW4obV9kYXRhYmFzZUlkZW50aWZpZXIpOwogICAgIH0KIH0KIAordm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnNjaGVkdWxlU3luYygpCit7CisgICAgc3luY1RpbWVyRmlyZWQoJm1fc3luY1RpbWVyKTsK
K30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01f
U1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAko
cmV2aXNpb24gODA3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICB2b2lkIHNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICB2b2lkIHNjaGVkdWxlQ2xlYXIoKTsKKyAgICAg
ICAgdm9pZCBzY2hlZHVsZUNsb3NlRGF0YWJhc2UoKTsKKworICAgICAgICB2b2lkIHNjaGVkdWxl
U3luYygpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQ
dHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+LCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CkBAIC05Miw2ICs5NSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3N5bmNTY2hlZHVsZWQ7CiAgICAgICAgIGJvb2wg
bV9zeW5jSW5Qcm9ncmVzczsKICAgICAgICAgYm9vbCBtX2RhdGFiYXNlT3BlbkZhaWxlZDsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgbV9zeW5jQ2xvc2VEYXRhYmFzZTsKIAogICAgICAgICBtdXRh
YmxlIE11dGV4IG1faW1wb3J0TG9jazsKICAgICAgICAgbXV0YWJsZSBUaHJlYWRDb25kaXRpb24g
bV9pbXBvcnRDb25kaXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaAkocmV2aXNpb24gODA3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmln
aW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAJKHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIu
aCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCkBAIC0xNDQsNiArMTQ1LDMyIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUlt
cGw6OnVubG9jaygpCiAgICAgLy8gQmVjYXVzZSB0aGVyZSdzIGEgc2luZ2xlIGV2ZW50IGxvb3Ag
cGVyLXByb2Nlc3MsIHRoaXMgaXMgYSBuby1vcC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNl
SW1wbDo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBs
PiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0
b3JhZ2VBcmVhKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigp
OworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxl
dGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVh
TWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24o
KTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgaXQtPnNlY29uZC0+c3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisgICAgICAgIC8vIE5v
dCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0b3JhZ2VBcmVhTWFw
IGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUgdW5kZXJseWluZyBk
YiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAgICAgIC8vIGFmdGVy
IGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxs
eSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VBcmVhU3luYyB0byBy
ZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJP
cmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN5bmMo
KTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwo
U3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIK
KyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgor
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIFN0b3JhZ2VUcmFja2VyKiBzdG9yYWdlVHJhY2tlciA9IDA7CisKK3ZvaWQgU3Rv
cmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgp
Cit7CisgICAgQVNTRVJUKCFzdG9yYWdlVHJhY2tlcik7CisgICAgaWYgKHN0b3JhZ2VUcmFja2Vy
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmFnZVRyYWNrZXIgPSBuZXcgU3RvcmFn
ZVRyYWNrZXIoc3RvcmFnZVBhdGgpOworICAgIHN0b3JhZ2VUcmFja2VyLT5pbXBvcnRPcmlnaW5J
ZGVudGlmaWVycygpOworfQorCitTdG9yYWdlVHJhY2tlciYgU3RvcmFnZVRyYWNrZXI6OnRyYWNr
ZXIoKQoreworICAgIGlmICghc3RvcmFnZVRyYWNrZXIpIHsKKyAgICAgICAgc3RvcmFnZVRyYWNr
ZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoIiIpOworICAgICAgICBzdG9yYWdlVHJhY2tlci0+aW1w
b3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICpzdG9yYWdl
VHJhY2tlcjsKK30KKworU3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmlu
ZyYgc3RvcmFnZVBhdGgpCisgICAgOiBtX2NsaWVudCgwKQorICAgICwgbV90aHJlYWQoTG9jYWxT
dG9yYWdlVGhyZWFkOjpjcmVhdGUoKSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICAKKyAgICBzZXRTdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlUGF0aCk7CisgICAg
CisgICAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKKyAgICAKKyAgICBt
X3RocmVhZC0+c3RhcnQoKTsgIAorfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdl
RGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKTsKKyAgICAKKyAgICBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoID0gcGF0aC50aHJlYWRzYWZl
Q29weSgpOworfQorCitTdHJpbmcgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgo
KSBjb25zdAoreworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZp
bGVOYW1lVG9QYXRoKG1fc3RvcmFnZURpcmVjdG9yeVBhdGgsICJTdG9yYWdlVHJhY2tlci5kYiIp
OworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3Jl
YXRlSWZEb2VzTm90RXhpc3QpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKworICAgIGlmIChtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5nIGRhdGFiYXNlUGF0
aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKKyAgICAKKyAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0
ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KSkgeworICAgICAgICBpZiAoY3JlYXRlSWZEb2VzTm90RXhpc3QpCisgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGF0YWJhc2UgZmlsZSAnJXMnIiwgZGF0YWJh
c2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2VQYXRoICVzLiIsIGRhdGFiYXNlUGF0aC5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9kYXRhYmFzZS5k
aXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxl
RXhpc3RzKCJPcmlnaW5zIikpIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNU
IFJFUExBQ0UsIHBhdGggVEVYVCk7IikpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgT3JpZ2lucyB0YWJsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNr
ZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKK3sgICAgCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworCisgICAgbV90aHJlYWQtPnNjaGVkdWxl
VGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCgpKTsK
K30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkK
K3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisKKyAgICAgICAgb3BlblRyYWNr
ZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIik7CisgICAgICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAg
ICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJk
KTsKKyAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
UmVzdWx0Um93KQorICAgICAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKS50aHJlYWRzYWZlQ29weSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAg
ICB9CisgICAgCisgICAgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAK
KyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9v
cmlnaW5TZXRHdWFyZCk7CisgICAgICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9vcmlnaW5TZXQuZW5kKCk7CisgICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbigqaXQpOworICAgIH0KK30KKyAgICAK
K3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZmlsZU1hdGNoUGF0dGVy
biwgKCIqLmxvY2Fsc3RvcmFnZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgZmlsZUV4dCwgKCIubG9jYWxzdG9yYWdlIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgdW5zaWduZWQsIGZpbGVFeHRMZW5ndGgsIChmaWxlRXh0Lmxlbmd0aCgpKSk7CisK
KyAgICBWZWN0b3I8U3RyaW5nPiBwYXRocyA9IGxpc3REaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0
b3J5UGF0aCwgZmlsZU1hdGNoUGF0dGVybik7CisgICAgCisgICAgLy8gQWRkIG1pc3NpbmcgU3Rv
cmFnZVRyYWNrZXIgcmVjb3Jkcy4KKyAgICBPcmlnaW5TZXQgZm91bmRPcmlnaW5zOworICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3Ig
KFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0aCA9ICppdDsKKyAgICAgICAgaWYgKHBh
dGguZW5kc1dpdGgoZmlsZUV4dCwgdHJ1ZSkgJiYgcGF0aC5sZW5ndGgoKSA+IGZpbGVFeHRMZW5n
dGgpIHsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwor
ICAgICAgICAgICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlLnN1YnN0cmluZygwLCBm
aWxlLmxlbmd0aCgpIC0gZmlsZUV4dExlbmd0aCk7CisgICAgICAgICAgICBpZiAoIW1fb3JpZ2lu
U2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
TWFpblRocmVhZCgpKQorICAgICAgICAgICAgICAgICAgICBzZXRPcmlnaW5EZXRhaWxzKG9yaWdp
bklkZW50aWZpZXIsIHBhdGgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgc3luY1NldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllciwgcGF0aCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvdW5kT3JpZ2lucy5hZGQob3JpZ2luSWRlbnRpZmll
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWxldGUgc3RhbGUgU3RvcmFnZVRyYWNr
ZXIgcmVjb3Jkcy4KKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIHNldEVuZCA9IG1fb3Jp
Z2luU2V0LmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
b3JpZ2luU2V0LmJlZ2luKCk7IGl0ICE9IHNldEVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWZv
dW5kT3JpZ2lucy5jb250YWlucygqaXQpKSB7CisgICAgICAgICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpCisgICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAgICAgICBlbHNl
IAorICAgICAgICAgICAgICAgIHN5bmNEZWxldGVPcmlnaW4oKml0KTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisK
KyAgICAgICAgaWYgKG1fb3JpZ2luU2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlm
aWVyKTsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VUYXNrKiB0YXNrID0gTG9jYWxTdG9yYWdl
VGFzazo6Y3JlYXRlU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLnRocmVhZHNhZmVD
b3B5KCksIGRhdGFiYXNlRmlsZSkubGVha1B0cigpOworCisgICAgaWYgKGlzTWFpblRocmVhZCgp
KSB7CisgICAgICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVs
ZVRhc2sodGFzayk7CisgICAgfSBlbHNlIAorICAgICAgICBjYWxsT25NYWluVGhyZWFkKHNjaGVk
dWxlVGFzaywgKHZvaWQqKXRhc2spOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzY2hlZHVs
ZVRhc2sodm9pZCogdGFzaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkKTsKKyAgICAKKyAgICBpZiAo
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5tX3RocmVhZCkKKyAgICAgICAgU3RvcmFnZVRyYWNr
ZXI6OnRyYWNrZXIoKS5tX3RocmVhZC0+c2NoZWR1bGVUYXNrKChMb2NhbFN0b3JhZ2VUYXNrKil0
YXNrKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkK
K3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0cnVl
KTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRP
IE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBv
cmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICAKKyAgICBzdGF0ZW1lbnQuYmluZFRl
eHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFi
YXNlRmlsZSk7CisgICAgCisgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9u
ZSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGlu
IHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAg
ICAgICBpZiAoIW1fb3JpZ2luU2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAg
ICAgICAgbV9vcmlnaW5TZXQuYWRkKG9yaWdpbklkZW50aWZpZXIpOworICAgIH0KKworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9y
aWdpbklkZW50aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKFZlY3Rv
cjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogU3Rv
cmFnZVRyYWNrZXIgaXMgY3VycmVudGx5IGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgYXNzdW1l
ZAorICAgIC8vIHRvIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIHdpdGggbW9yZSB0aGFuIG9uZSBQ
YWdlR3JvdXAuCisgICAgQVNTRVJUKFBhZ2VHcm91cDo6bnVtYmVyT2ZQYWdlR3JvdXBzKCkgPT0g
MSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKwor
ICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7Cisg
ICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKCppdCkpOworfQorCit2b2lkIFN0b3JhZ2VU
cmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgCisgICAgLy8gRklYTUU6IFN0b3JhZ2VUcmFj
a2VyIGlzIGN1cnJlbnRseSBhIHNpbmdsZXRvbiBhbmQgc2hvdWxkIGJlIGFzc3VtZWQKKyAgICAv
LyB0byBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciB3aXRoIG1vcmUgdGhhbiBvbmUgUGFnZUdyb3Vw
LgorICAgIEFTU0VSVChQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3VwcygpID09IDEpOworCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsK
KyAgICAgICAgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgbV9vcmlnaW5TZXQuY2xl
YXIoKTsKKyAgICB9CisKKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3Jp
Z2lucygpOworICAgIAorICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFz
azo6Y3JlYXRlRGVsZXRlQWxsT3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNr
ZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
KyAgICAKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lucyIp
OworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5EZWxl
dGVPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgwKSk7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9u
ZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9t
IHRoZSBkYXRhYmFzZS4iKTsKKyAgICAKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgIFNRTGl0ZUZpbGVT
eXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0
aCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpLmdldCgpKTsKK30K
Kwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCit7ICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhy
ZWFkKTsKKworICAgIC8vIEZJWE1FOiBTdG9yYWdlVHJhY2tlciBpcyBjdXJyZW50bHkgYSBzaW5n
bGV0b24gYW5kIHNob3VsZCBiZSBhc3N1bWVkCisgICAgLy8gdG8gaGF2ZSB1bmRlZmluZWQgYmVo
YXZpb3Igd2l0aCBtb3JlIHRoYW4gb25lIFBhZ2VHcm91cC4KKyAgICBBU1NFUlQoUGFnZUdyb3Vw
OjpudW1iZXJPZlBhZ2VHcm91cHMoKSA9PSAxKTsKKyAgICAKKyAgICAvLyBCZWZvcmUgZGVsZXRp
bmcgZGF0YWJhc2UsIHdlIG5lZWQgdG8gY2xlYXIgaW4tbWVtb3J5IGxvY2FsIHN0b3JhZ2UgZGF0
YQorICAgIC8vIGluIFN0b3JhZ2VBcmVhLCBhbmQgdG8gY2xvc2UgdGhlIFN0b3JhZ2VBcmVhIGRi
LiBJdCdzIHBvc3NpYmxlIGZvciBhbgorICAgIC8vIGl0ZW0gdG8gYmUgYWRkZWQgaW1tZWRpYXRl
bHkgYWZ0ZXIgY2xvc2luZyB0aGUgZGIgYW5kIGNhdXNlIFN0b3JhZ2VBcmVhU3luYworICAgIC8v
IHRvIHJlb3BlbiB0aGUgZGIgYmVmb3JlIHRoZSBkYiBpcyBkZWxldGVkIGJ5IGEgU3RvcmFnZVRy
YWNrZXIgdGhyZWFkLgorICAgIC8vIEluIHRoaXMgY2FzZSwgcmVvcGVuaW5nIHRoZSBkYiBpbiBT
dG9yYWdlQXJlYVN5bmMgd2lsbCBjYW5jZWwgYSBwZW5kaW5nCisgICAgLy8gU3RvcmFnZVRyYWNr
ZXIgZGIgZGVsZXRpb24uCisgICAgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdp
bihvcmlnaW4pOworCisgICAgU3RyaW5nIG9yaWdpbklkID0gb3JpZ2luLT5kYXRhYmFzZUlkZW50
aWZpZXIoKTsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1f
b3JpZ2luU2V0R3VhcmQpOworICAgICAgICB3aWxsRGVsZXRlT3JpZ2luKG9yaWdpbklkKTsKKyAg
ICAgICAgbV9vcmlnaW5TZXQucmVtb3ZlKG9yaWdpbklkKTsKKyAgICB9CisgICAgCisgICAgbV90
aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVEZWxldGVPcmlnaW4o
b3JpZ2luSWQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
KyAgICAKKyAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkF0dGVtcHRlZCB0byBkZWxldGUgb3JpZ2luICclcycgd2hpbGUgaXQg
d2FzIGJlaW5nIGNyZWF0ZWRcbiIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFs
c2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIC8vIEdldCBvcmlnaW4ncyBkYiBmaWxlIHBhdGgsIGRlbGV0ZSBlbnRyeSBpbiB0cmFj
a2VyJ3MgZGIsIHRoZW4gZGVsZXRlIGRiIGZpbGUuCisgICAgU1FMaXRlU3RhdGVtZW50IHBhdGhT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gT3JpZ2lucyBXSEVSRSBvcmln
aW49PyIpOworICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHNlbGVjdGlvbiBvZiBwYXRo
IGZvciBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIHBhdGhTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0ZW1lbnQuc3RlcCgpOworICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIGZpbmQgb3JpZ2luICclcycgaW4gT3JpZ2lucyB0YWJsZSIsIG9yaWdpbklkZW50aWZpZXIu
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFN0cmlu
ZyBwYXRoID0gcGF0aFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworCisgICAgQVNTRVJUKCFw
YXRoLmlzRW1wdHkoKSk7CisgICAgCisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyB3aGVyZSBvcmlnaW49PyIpOworICAg
IGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2Ygb3JpZ2luICclcyciLCBv
cmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAg
aWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCk7CisgICAgCisgICAgYm9v
bCBzaG91bGREZWxldGVUcmFja2VyRmlsZXMgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIG9yaWdpbkxvY2sobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgIG1fb3JpZ2luU2V0
LnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc2hvdWxkRGVsZXRlVHJhY2tlckZp
bGVzID0gbV9vcmlnaW5TZXQuaXNFbXB0eSgpOworICAgIH0KKworICAgIGlmIChzaG91bGREZWxl
dGVUcmFja2VyRmlsZXMpIHsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgICAgICBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgp
KTsKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9y
eShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRp
Zmllcik7Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2lu
cygpCit7CisgICAgQVNTRVJUKCFtX29yaWdpblNldEd1YXJkLnRyeUxvY2soKSk7CisKKyAgICBP
cmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOworICAgIGZv
ciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZCgoKml0KS50
aHJlYWRzYWZlQ29weSgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZU9y
aWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fb3JpZ2luU2V0R3VhcmQudHJ5TG9jaygpKTsKKwor
ICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQob3JpZ2luSWRlbnRpZmllcik7Cit9CisgICAg
Citib29sIFN0b3JhZ2VUcmFja2VyOjpjYW5EZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgcmV0
dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKTsKK30K
Kwordm9pZCBTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4oY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3Jp
Z2luU2V0R3VhcmQpOworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlzRW1wdHkoKSkKKyAgICAgICAg
bV9vcmlnaW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFja2VyQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5
bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIFBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU3RvcmFnZVRyYWNrZXJfaAorI2RlZmluZSBTdG9yYWdlVHJhY2tlcl9oCisK
KyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgTG9jYWxTdG9yYWdlVGFzazsKK2NsYXNzIExvY2FsU3RvcmFnZVRocmVhZDsKK2NsYXNzIFNl
Y3VyaXR5T3JpZ2luOworY2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnQ7ICAgIAorCitjbGFzcyBT
dG9yYWdlVHJhY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZVRyYWNrZXIp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOworICAgIHN0YXRp
YyBTdG9yYWdlVHJhY2tlciYgdHJhY2tlcigpOworICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlVGFz
ayh2b2lkKik7CisKKyAgICB2b2lkIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9p
ZCBzZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUZpbGUpOworICAgIAorICAgIHZvaWQgZGVsZXRlQWxsT3JpZ2lucygp
OworICAgIHZvaWQgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgdm9pZCBkZWxl
dGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9yaWdp
bnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKKworICAgIHZvaWQg
Y2FuY2VsRGVsZXRpbmdPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAg
ICAKKyAgICB2b2lkIHNldENsaWVudChTdG9yYWdlVHJhY2tlckNsaWVudCopOworCisgICAgLy8g
U3luYyB0byBkaXNrIG9uIGJhY2tncm91bmQgdGhyZWFkLgorICAgIHZvaWQgc3luY0RlbGV0ZUFs
bE9yaWdpbnMoKTsKKyAgICB2b2lkIHN5bmNEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHN5bmNTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpOworICAgIHZv
aWQgc3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBzeW5jRmlsZVN5c3Rl
bUFuZFRyYWNrZXJEYXRhYmFzZSgpOworCisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisK
K3ByaXZhdGU6CisgICAgU3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCk7
CisKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgb3Bl
blRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKworICAgIHZvaWQg
c2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGRlbGV0
ZVRyYWNrZXJGaWxlcygpOworCisgICAgYm9vbCBjYW5EZWxldGVPcmlnaW4oY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHdpbGxEZWxldGVPcmlnaW4oY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHdpbGxEZWxldGVBbGxPcmlnaW5zKCk7
CisKKyAgICB2b2lkIG9yaWdpbkZpbGVQYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworCisg
ICAgTXV0ZXggbV9kYXRhYmFzZUd1YXJkOworICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7
CisKKyAgICBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKKworICAgIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50KiBtX2NsaWVudDsKKworICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IE9yaWdp
blNldDsKKworICAgIE11dGV4IG1fb3JpZ2luU2V0R3VhcmQ7CisgICAgT3JpZ2luU2V0IG1fb3Jp
Z2luU2V0OworICAgIE9yaWdpblNldCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQ7CisKKyAgICBPd25Q
dHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKK307CisgICAgCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBT
dG9yYWdlVHJhY2tlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKyAKKyNpZm5kZWYgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAorI2RlZmluZSBTdG9yYWdl
VHJhY2tlckNsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpID0gMDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2Vy
Q2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDMtMTAgIEFu
dG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVs
ZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKworMjAxMS0wMy0wMiAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0
MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICAqIFdlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDExLTAzLTAyICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA4MDc2NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDExIEBACiAJCTM3QjZGQjRG
MTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QjZGQjREMTA2MzUzMEMwMDBGREIz
QiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSAqLzsgfTsKIAkJMzdEMURDQTgxMDY1OTI4QzAw
NjhGN0VGIC8qIFdlYkpTUERGRG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzN0QxRENBNjEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MuaCAq
LzsgfTsKIAkJMzdEMURDQTkxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdEMURDQTcxMDY1OTI4
QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tICovOyB9OworCQkzQUIwMkFGNjEyQzEzMTlCMDBG
QkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFn
ZU1hbmFnZXIubW0gKi87IH07CisJCTNBQjAyQjAwMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9y
YWdlTWFuYWdlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclBy
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQkIzQzc4MTMw
OUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICovOyB9OworCQkzQUJC
M0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJCM0M3OTEzMDlDM0I1
MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi87IH07CisJCTNBRTE1RDUw
MTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUUxNUQ0RjEyREJERUQ0MDA5
MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICovOyB9OwogCQk0MUY0NDg0RjEw
MzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjQ0ODREMTAzMzhFOEMwMDMwRTU1RSAvKiBX
ZWJXb3JrZXJzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxRjQ0ODUwMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjQ0
ODRFMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSAqLzsgfTsKIAkJNDRC
QjhCMTQxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRCQjhCMTMxMjQxQTAyMjAwMUUz
QTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5hbC5oICovOyB9OwpAQCAtNDgzLDYgKzQ4OCwxMSBAQAog
CQkzOTQ0NjA3RTAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRMaXN0Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
QmFja0ZvcndhcmRMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3Rv
cnlJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkhpc3RvcnlJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA4MDAyMEY1MEVEMEVDQTE3NjcgLyogV2ViSGlz
dG9yeUl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJIaXN0b3J5SXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5
NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2VyUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUJCM0M3ODEzMDlDM0I1MDBF
OTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJM0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBRTE1
RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEQxMDMzOEU4QzAwMzBFNTVFIC8q
IFdlYldvcmtlcnNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YldvcmtlcnNQcml2YXRlLmg7IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3JrZXJzUHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY0NDg0RTEwMzM4RThDMDAzMEU1NUUg
LyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWJXb3JrZXJzUHJpdmF0ZS5tbTsgcGF0aCA9IG1hYy9Xb3JrZXJzL1dlYldvcmtl
cnNQcml2YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDkwOThCOTBGOEY4
MkRGMDA3NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDU2LDYgKzEwNjYsMTEgQEAKIAkJCQlBNURFRkMwRTExRDUzNDNFMDA4
ODUyNzMgLyogV2ViRGF0YWJhc2VRdW90YU1hbmFnZXIubW0gKi8sCiAJCQkJNTExRjNGRDMwQ0VD
Qzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5oICovLAogCQkJCTUxMUYz
RkQ0MENFQ0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8sCisJ
CQkJM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tICovLAor
CQkJCTNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUu
aCAqLywKKwkJCQkzQUUxNUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJ
bnRlcm5hbC5oICovLAorCQkJCTNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdl
VHJhY2tlckNsaWVudC5oICovLAorCQkJCTNBQkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJT
dG9yYWdlVHJhY2tlckNsaWVudC5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gU3RvcmFnZTsKIAkJ
CXBhdGggPSBtYWMvU3RvcmFnZTsKQEAgLTE2MjUsNyArMTY0MCwxMCBAQAogCQkJCTU5OEFEOTJB
MTIwMUNGM0IwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9ja0ludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThBREE0NjEyMDIyNzUwMDBBQkFFNEUgLyogV2Vi
RGV2aWNlT3JpZW50YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFMkExQTQx
MjNCMEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBNjJBRTIxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUUxNUQ1MDEyREJERUQ0MDA5
MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
M0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzQyRDMyNDEzMUVEMUUwMDA3NUZBNEIgLyogV2ViTG9jYWxpemFi
bGVTdHJpbmdzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTk5Myw3ICsyMDExLDkgQEAKIAkJCQk1
OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50
YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0UyQTFBNTEyM0IwQjND
MDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0FC
MDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0RBNjJBRTMxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0FCQjNDN0IxMzA5QzNCNTAwRTkzRDk0IC8qIFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MkQzNEQxMzFF
RDM4ODAwNzVGQTRCIC8qIFdlYkxvY2FsaXphYmxlU3RyaW5nc0ludGVybmFsLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODA3NjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDExLTAzLTEwICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktpdDEg
QVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAgICogc3JjL1N0b3Jh
Z2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNl
UHJveHk6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OnN5bmMpOgorICAgICAgICAqIHNyYy9TdG9y
YWdlTmFtZXNwYWNlUHJveHkuaDoKKwogMjAxMS0wMy0xMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGwgY2hyb21pdW0gdmVyc2lvbiB0
byByNzcyNTkgdG8gcGljayB1cApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3Rv
cmFnZU5hbWVzcGFjZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCShyZXZpc2lvbiA4MDc2NikKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDYgKzkyLDIxIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp1
bmxvY2soKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKK3ZvaWQgU3RvcmFnZU5hbWVz
cGFjZVByb3h5OjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFj
ZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpzeW5jKCkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgJKHJldmlzaW9uIDgwNzY2KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgp
OwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzeW5j
KCk7CiAKIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZT4g
bV9zdG9yYWdlTmFtZXNwYWNlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gODA3NjYp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzOSBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0
MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICAqIFN0b3Jh
Z2UvV2ViU3RvcmFnZU1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAoK1tXZWJTdG9yYWdlTWFu
YWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFu
YWdlciBvcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZUFsbE9y
aWdpbnNdKToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgZGVsZXRlT3JpZ2luOl0pOgor
ICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciBzeW5jTG9jYWxTdG9yYWdlXSk6CisgICAgICAg
ICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlXSk6
CisgICAgICAgIChzdG9yYWdlRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXRJbml0aWFs
aXplU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5h
Z2VySW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNs
aWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJT
dG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbToKKyAgICAgICAgKC1bV2Vi
U2VjdXJpdHlPcmlnaW4gcHJvdG9jb2xdKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4g
aG9zdF0pOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBkYXRhYmFzZUlkZW50aWZpZXJd
KToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gZG9tYWluXSk6CisgICAgICAgICgtW1dl
YlNlY3VyaXR5T3JpZ2luIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpdKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaDoKKyAgICAgICAg
KiBXZWJLaXQuZXhwOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTp1c2Vz
RG9jdW1lbnRWaWV3czpdKToKKwogMjAxMS0wMy0xMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYktpdC5leHAJKHJldmlzaW9uIDgwNzY2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
S2l0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKIC5vYmpjX2NsYXNzX25hbWVf
V2ViQ29yZVN0YXRpc3RpY3MKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0YVNvdXJjZQogLm9iamNf
Y2xhc3NfbmFtZV9XZWJEYXRhYmFzZU1hbmFnZXIKKy5vYmpjX2NsYXNzX25hbWVfV2ViU3RvcmFn
ZU1hbmFnZXIKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGVmYXVsdFBvbGljeURlbGVnYXRlCiAub2Jq
Y19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uCiAub2JqY19jbGFzc19uYW1lX1dlYkRl
dmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrCkBAIC0xMTQsNiArMTE1LDggQEAgX1dlYlJlcG9y
dEVycm9yCiBfV2ViU2NyaXB0RXJyb3JEZXNjcmlwdGlvbktleQogX1dlYlNjcmlwdEVycm9yRG9t
YWluCiBfV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmVyS2V5CitfV2ViU3RvcmFnZURpcmVjdG9yeURl
ZmF1bHRzS2V5CitfV2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbgogX1dlYlVS
TE5hbWVQYm9hcmRUeXBlCiBfV2ViVVJMUGJvYXJkVHlwZQogX1dlYlZpZXdEaWRCZWdpbkVkaXRp
bmdOb3RpZmljYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFn
ZU1hbmFnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlci5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3Jh
Z2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2ltcG9ydCAiV2ViU2VjdXJp
dHlPcmlnaW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgi
CisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oIgorCisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tl
eSA9IEAiV2ViS2l0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoUHJlZmVyZW5jZUtleSI7CitOU1N0
cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gPSBAIldl
YlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24iOworCitzdGF0aWMgTlNTdHJpbmcg
KnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCk7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTdG9yYWdlTWFu
YWdlcgorCisrIChXZWJTdG9yYWdlTWFuYWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyCit7
CisgICAgc3RhdGljIFdlYlN0b3JhZ2VNYW5hZ2VyICpzaGFyZWRNYW5hZ2VyID0gW1tXZWJTdG9y
YWdlTWFuYWdlciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHNoYXJlZE1hbmFnZXI7Cit9CisK
Ky0gKE5TQXJyYXkgKilvcmlnaW5zCit7CisgICAgVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4gPiBjb3JlT3JpZ2luczsKKworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lu
cyhjb3JlT3JpZ2lucyk7CisKKyAgICBOU011dGFibGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29yZU9yaWdpbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgV2ViU2VjdXJpdHlPcmlnaW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmln
aW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpjb3JlT3JpZ2luc1tpXS5n
ZXQoKV07CisgICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmlnaW5dOworICAgICAg
ICBbd2ViT3JpZ2luIHJlbGVhc2VdOworICAgIH0KKworICAgIHJldHVybiBbd2ViT3JpZ2lucyBh
dXRvcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpZGVsZXRlQWxsT3JpZ2lucworeworICAgIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsT3JpZ2lucygpOworfQorCistICh2b2lkKWRl
bGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KK3sKKyAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihbb3JpZ2luIF9jb3JlXSk7Cit9CisKKy0gKHZv
aWQpc3luY0xvY2FsU3RvcmFnZQoreworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3lu
Y0xvY2FsU3RvcmFnZSgpOworfQorCistICh2b2lkKXN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRh
dGFiYXNlCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jRmlsZVN5c3RlbUFu
ZFRyYWNrZXJEYXRhYmFzZSgpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5
ID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXld
OworICAgIGlmICghc3RvcmFnZURpcmVjdG9yeSB8fCAhW3N0b3JhZ2VEaXJlY3RvcnkgaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgc3RvcmFnZURpcmVjdG9yeSA9IEAi
fi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0b3JhZ2UiOworICAgIAorICAgIHJldHVybiBbc3RvcmFn
ZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKK30KKwordm9pZCBXZWJLaXRJ
bml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgQk9PTCBpbml0aWFs
aXplZCA9IE5POworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihzdG9yYWdlRGlyZWN0b3J5UGF0
aCgpKTsKKyAgICAKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudChXZWJT
dG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKSk7Cisg
ICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZRVM7Cit9CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50
ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3Rv
cmFnZU1hbmFnZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKyAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6
ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNT
dHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXk7CitleHRlcm4gTlNT
dHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uOworCitA
Y2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CisKK0BpbnRlcmZhY2UgV2ViU3RvcmFnZU1hbmFnZXIg
OiBOU09iamVjdAorCisrIChXZWJTdG9yYWdlTWFuYWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5h
Z2VyOworCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIFdlYlNlY3VyaXR5T3JpZ2luIG9iamVjdHMg
dGhhdCBoYXZlIExvY2FsU3RvcmFnZS4KKy0gKE5TQXJyYXkgKilvcmlnaW5zOworCistICh2b2lk
KWRlbGV0ZUFsbE9yaWdpbnM7CistICh2b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmln
aW4gKilvcmlnaW47CisKKy0gKHZvaWQpc3luY0xvY2FsU3RvcmFnZTsKKy0gKHZvaWQpc3luY0Zp
bGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2U7CisKK0BlbmQKKwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGll
bnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQorCisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitjbGFzcyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50KiBzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHN0
YXRpYyB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRl
eHQpOworICAgIAorICAgIHZpcnR1YWwgfldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKK3ByaXZhdGU6CisgICAgV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQoKTsKK307CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFn
ZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisKKyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQg
IldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2Vy
UHJpdmF0ZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQoKQoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNs
aWVudCogc2hhcmVkQ2xpZW50ID0gbmV3IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAg
cmV0dXJuIHNoYXJlZENsaWVudDsKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50KCkKK3sKK30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5X
ZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpCit7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNs
aWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlP
cmlnaW4oc3RhdGljX2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQg
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlP
cmlnaW4+IHdlYlNlY3VyaXR5T3JpZ2luKEFkb3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxs
b2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5h
bWU6V2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3Vy
aXR5T3JpZ2luLmdldCgpXTsKK30KKwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorewor
ICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYg
KCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkLCBzdGF0aWNfY2FzdDx2b2lkKj4ob3JpZ2luLmxlYWtS
ZWYoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hEaWRNb2RpZnlP
cmlnaW4ob3JpZ2luKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQkocmV2aXNpb24gODA3
NjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdp
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsMjMgKzQ2LDI4IEBAIC0gKGlkKWluaXRXaXRoVVJM
OihOU1VSTCAqKXVybAogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoW3VybCBhYnNvbHV0ZVVSTF0pKTsKICAgICBvcmlnaW4t
PnJlZigpOwotICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdp
blByaXZhdGUqPihvcmlnaW4uZ2V0KCkpOworICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgKj4ob3JpZ2luLmdldCgpKTsKIAogICAgIHJldHVy
biBzZWxmOwogfQogCi0tIChOU1N0cmluZyopcHJvdG9jb2wKKy0gKE5TU3RyaW5nICopcHJvdG9j
b2wKIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2
YXRlKS0+cHJvdG9jb2woKTsKIH0KIAotLSAoTlNTdHJpbmcqKWhvc3QKKy0gKE5TU3RyaW5nICop
aG9zdAogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3By
aXZhdGUpLT5ob3N0KCk7CiB9CiAKKy0gKE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCit7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSkt
PmRhdGFiYXNlSWRlbnRpZmllcigpOworfQorCiAvLyBEZXByZWNhdGVkLiBVc2UgaG9zdCBpbnN0
ZWFkLiBUaGlzIG5lZWRzIHRvIHN0YXkgaGVyZSB1bnRpbCB3ZSBzaGlwIGEgbmV3IFNhZmFyaS4K
LS0gKE5TU3RyaW5nKilkb21haW4KKy0gKE5TU3RyaW5nICopZG9tYWluCiB7CiAgICAgcmV0dXJu
IFtzZWxmIGhvc3RdOwogfQpAQCAtMTExLDcgKzExNiw3IEBAIC0gKGlkKV9pbml0V2l0aFdlYkNv
cmVTZWN1cml0eU9yaWdpbjooU2UKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIG9yaWdpbi0+
cmVmKCk7Ci0gICAgX3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZSo+KG9yaWdpbik7CisgICAgX3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNl
Y3VyaXR5T3JpZ2luUHJpdmF0ZSAqPihvcmlnaW4pOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkocmV2aXNpb24gODA3NjYpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsOCArMzcsMTAgQEAgQGludGVyZmFjZSBXZWJTZWN1cml0eU9yaWdpbiA6
IE5TT2JqZWN0IAogCiAtIChpZClpbml0V2l0aFVSTDooTlNVUkwgKil1cmw7CiAKLS0gKE5TU3Ry
aW5nKilwcm90b2NvbDsKLS0gKE5TU3RyaW5nKilob3N0OworLSAoTlNTdHJpbmcgKilwcm90b2Nv
bDsKKy0gKE5TU3RyaW5nICopaG9zdDsKKworLSAoTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZp
ZXI7CiAKIC8vIFJldHVybnMgemVybyBpZiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZv
ciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJvIG90aGVyd2lzZS4KIC0gKHVuc2lnbmVkIHNob3J0KXBv
cnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA4MDc2
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtOTcsNiArOTcsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAj
aW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3Js
ZEludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCiAjaW1w
b3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29u
dHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVGV4dEl0ZXJhdG9yLmgiCkBAIC02ODcsNiArNjg4LDEw
IEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgICAgIFdlYktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgp
OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRp
YWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFs
aXplQXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxS
ZW1vdmVBdHRyaWJ1dGVzTWV0aG9kKCk7CiAgICAgICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gODA3NjYpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3NiBAQAorMjAxMS0wMy0xMCAg
QW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVs
ZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBBZGRlZCB0ZXN0cyB0aGF0IHdyaXRlIHRvIExv
Y2FsU3RvcmFnZSwgZGVsZXRlIG9uZSBvcmlnaW4sIGdldCBsaXN0IG9mIG9yaWdpbnMgd2l0aCBs
b2NhbCBzdG9yYWdlLCBkZWxldGUgYWxsIG9yaWdpbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHN5bmNM
b2NhbFN0b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJh
Y2spOgorICAgICAgICAoZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2spOgorICAg
ICAgICAob3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1N0b3Jh
Z2VUcmFja2VyRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvU3Rv
cmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbTogQWRkZWQuCisgICAgICAgICgtW1N0b3JhZ2VUcmFja2Vy
RGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAoLVtTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGxvZ05v
dGlmaWNhdGlvbnM6Y29udHJvbGxlcjpdKToKKyAgICAgICAgKC1bU3RvcmFnZVRyYWNrZXJEZWxl
Z2F0ZSBvcmlnaW5Nb2RpZmllZDpdKToKKyAgICAgICAgKC1bU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZSBkZWFsbG9jXSk6CisgICAgICAgICgtW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgc2V0Q29udHJv
bGxlclRvTm90aWZ5RG9uZTpdKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChvYnNlcnZlU3RvcmFnZVRyYWNr
ZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKHN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlm
aWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3Jh
Z2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAg
ICAgICAgKHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoYWxsb2Nh
dGVHbG9iYWxDb250cm9sbGVycyk6CisgICAgICAgIChyZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2Up
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JP
cmlnaW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0
b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFn
ZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVz
dENvbnRyb2xsZXJRdC5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0
Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3lu
Y0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0
b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJBbGxEYXRhYmFzZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gv
TGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisKIDIwMTEtMDMtMTAgIEFkYW0gUm9i
ZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIElnbm9yZSBlcnJvcnMgZnJvbSBmaWxl
cyBiZWluZyBoZWxkIG9wZW4gd2hlbiBjcmVhdGluZyBhIHRlc3QgcmVzdWx0IGFyY2hpdmUKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDgwNzY2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDYwIEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIGNsZWFyQWxsRGF0YWJhc2VzQ2FsbGIKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jTG9j
YWxTdG9yYWdlKCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlv
bnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIHVuc2lnbmVkIG51bU5vdGlmaWNhdGlvbnMgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworCisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KworICAgIGNvbnRyb2xsZXItPm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMobnVt
Tm90aWZpY2F0aW9ucyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5kZWxldGVBbGxMb2Nh
bFN0b3JhZ2UoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKKworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbih1cmwuZ2V0
KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitz
dGF0aWMgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gY29udHJvbGxlci0+b3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQmFja0Zvcndh
cmRMaXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhh
cyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCkBAIC0yMTYzLDYgKzIyMTcsMTEgQEAgSlNT
dGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJhZGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5Q2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0U2Nyb2xsYmFyUG9saWN5Iiwgc2V0U2Nyb2xs
YmFyUG9saWN5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYXV0aGVudGljYXRlU2Vzc2lv
biIsIGF1dGhlbnRpY2F0ZVNlc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkZWxl
dGVBbGxMb2NhbFN0b3JhZ2UiLCBkZWxldGVBbGxMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJzeW5jTG9jYWxTdG9yYWdlIiwgc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sICAgICAgICAgICAgICAgIAorICAgICAgICB7ICJvYnNlcnZlU3RvcmFnZVRyYWNr
ZXJOb3RpZmljYXRpb25zIiwgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sICAgICAgICAKKyAgICAgICAgeyAiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luIiwgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAib3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UiLCBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UiLCBz
ZXRTaG91bGRQYWludEJyb2tlbkltYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAw
LCAwIH0KICAgICB9OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5oCShyZXZpc2lvbiA4MDc2NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsMTIgQEAgcHVi
bGljOgogCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHRGb3JMaXN0SXRl
bShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdDsKIAor
ICAgIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmKTsKKyAg
ICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9y
YWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgb2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpOworICAgIHZv
aWQgc3luY0xvY2FsU3RvcmFnZSgpOworCiAgICAgdm9pZCBzZXRTaG91bGRQYWludEJyb2tlbklt
YWdlKGJvb2wpOwogICAgIGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsgfQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworCitAaW50ZXJmYWNlIFN0b3JhZ2VUcmFj
a2VyRGVsZWdhdGUgOiBOU09iamVjdCB7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZOb3RpZmljYXRp
b25zVG9Mb2c7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXJUb05vdGlmeURv
bmU7Cit9CisKKy0gKHZvaWQpbG9nTm90aWZpY2F0aW9uczoodW5zaWduZWQpbnVtYmVyIGNvbnRy
b2xsZXI6KExheW91dFRlc3RDb250cm9sbGVyKiljb250cm9sbGVyOworLSAodm9pZClvcmlnaW5N
b2RpZmllZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CistICh2b2lkKXNldENvbnRy
b2xsZXJUb05vdGlmeURvbmU6KExheW91dFRlc3RDb250cm9sbGVyKiljb250cm9sbGVyOworCitA
ZW5kCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdh
dGUubW0JKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tl
ckRlbGVnYXRlLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgorCisjaW1wb3J0ICJMYXlvdXRUZXN0Q29u
dHJvbGxlci5oIgorI2ltcG9ydCA8V2ViS2l0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgorCitAaW1wbGVtZW50
YXRpb24gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZQorCistIChpZClpbml0Cit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKG9yaWdpbk1vZGlmaWVkOikgbmFtZTpXZWJTdG9yYWdlRGlkTW9k
aWZ5T3JpZ2luTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpbG9nTm90aWZpY2F0aW9uczoodW5zaWduZWQpbnVtYmVyIGNvbnRyb2xsZXI6
KExheW91dFRlc3RDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgY29udHJvbGxlclRvTm90
aWZ5RG9uZSA9IGNvbnRyb2xsZXI7CisKKyAgICBudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZyA9
IG51bWJlcjsKK30KKworLSAodm9pZClvcmlnaW5Nb2RpZmllZDooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KK3sKKyAgICBpZiAoIW51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZy0tOworICAgIAor
ICAgIGlmIChudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZyA9PSAwICYmIGNvbnRyb2xsZXJUb05v
dGlmeURvbmUpIHsKKyAgICAgICAgTlNBcnJheSAqb3JpZ2lucyA9IFtbV2ViU3RvcmFnZU1hbmFn
ZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIG9yaWdpbnNdOworICAgICAgICBmb3IgKFdlYlNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4gaW4gb3JpZ2lucykKKyAgICAgICAgICAgIHByaW50ZigiT3Jp
Z2luIGlkZW50aWZpZXI6ICclcydcbiIsIFtbb3JpZ2luIGRhdGFiYXNlSWRlbnRpZmllcl0gVVRG
OFN0cmluZ10pOworICAgICAgICAKKyAgICAgICAgY29udHJvbGxlclRvTm90aWZ5RG9uZS0+bm90
aWZ5RG9uZSgpOworICAgIH0KK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V2Vi
U3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q29udHJvbGxlclRvTm90aWZ5RG9u
ZTooTGF5b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBjb250cm9sbGVyVG9O
b3RpZnlEb25lID0gY29udHJvbGxlcjsKK30KKworCitAZW5kCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDgwNzY2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsOCBAQAogCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyOUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJNYWMubW0gKi87IH07CiAJCTM3MTNFREUyMTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMt
QS5wbmcgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3MTNFRERGMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcgKi87IH07CiAJ
CTM3MTNFREUzMTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmIGluIENvcHkgRm9udCBG
aWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEzRURFMDExNUJFMTZG
MDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiAqLzsgfTsKKwkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJF
NkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQTU2MjZDMTEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFn
ZVRyYWNrZXJEZWxlZ2F0ZS5tbSAqLzsgfTsKKwkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJFNkQ5IC8q
IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNBNTYyNkMwMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tl
ckRlbGVnYXRlLmggKi87IH07CiAJCTQ0MDU5MDcxMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNo
aXZlRHVtcFN1cHBvcnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDA1OTA3MDEyNjg0NTM4MDBDRkQ0OEQgLyogV2ViQXJjaGl2ZUR1bXBTdXBw
b3J0TWFjLm1tICovOyB9OwogCQk0NDM3NzMwRTEyNUNCQzM2MDBBQUUwMkMgLyogV2ViQXJjaGl2
ZUR1bXBTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQu
Y3BwICovOyB9OwogCQk0NDM3NzMwRjEyNUNCQzREMDBBQUUwMkMgLyogV2ViQXJjaGl2ZUR1bXBT
dXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NEE5OTc4MjBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmggKi87IH07
CkBAIC0yMzAsNiArMjMyLDggQEAKIAkJMzc1RjA5NzcwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktp
dFdlaWdodFdhdGNoZXI3MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI3MDAudHRmOyBw
YXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3NUYwOTc4MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRj
aGVyODAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZjsgcGF0aCA9IGZvbnRz
L1dlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzVGMDk3OTBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBu
YW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWln
aHRXYXRjaGVyOTAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0E1NjI2QzAx
MzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzQTU2MjZDMTEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRy
YWNrZXJEZWxlZ2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0MDU5MDcwMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1
cHBvcnRNYWMubW07IHBhdGggPSBtYWMvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEE5OTc4MjBGQ0RFODY0MDA1ODBGMTAgLyogV2Vi
QXJjaGl2ZUR1bXBTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YkFyY2hpdmVEdW1wU3VwcG9ydC5oOyBwYXRoID0gY2YvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QTk5NzgzMEZDREU4NjQwMDU4MEYxMCAv
KiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVE
dW1wU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjAsNiArNDY0
LDggQEAKIAkJCQlCQ0ExOEI1RTBDOUIwOEMyMDAxMTQzNjkgLyogUmVzb3VyY2VMb2FkRGVsZWdh
dGUubW0gKi8sCiAJCQkJQkNBMThCNUYwQzlCMDhDMjAwMTE0MzY5IC8qIFVJRGVsZWdhdGUuaCAq
LywKIAkJCQlCQ0ExOEI2MDBDOUIwOEMyMDAxMTQzNjkgLyogVUlEZWxlZ2F0ZS5tbSAqLywKKwkJ
CQkzQTU2MjZDMDEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oICov
LAorCQkJCTNBNTYyNkMxMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRl
Lm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBEZWxlZ2F0ZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtNjIwLDYgKzYyNiw3IEBACiAJCQkJNTE4NUY2QjMxMDcxNEUxMjAwN0FBMzkz
IC8qIEhpc3RvcnlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNzgxNjcxMUFGMzFD
MzAwN0UxQkMyIC8qIE1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyOUNGQkExMDEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTNBNTYyNkNDMTMxQ0EwMzYwMDJCRTZEOSAvKiBTdG9yYWdlVHJh
Y2tlckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTgwOSw2ICs4MTYsNyBAQAogCQkJCUUx
Qjc4MTY1MTFBRjMxQjcwMDdFMUJDMiAvKiBNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTI5Q0ZCQTExMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMw
QzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkz
QTU2MjZDQjEzMUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODA3NjYpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Miw3ICsxOTIsMTIgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRl
c3RDb250cm9sbAogICAgIGJpbmRNZXRob2QoInNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogICAgIGJp
bmRNZXRob2QoInNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSk7CiAgICAgYmluZE1l
dGhvZCgic3RvcmVXZWJTY3JpcHRPYmplY3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0b3Jl
V2ViU2NyaXB0T2JqZWN0KTsKLQorICAgIGJpbmRNZXRob2QoImRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKTsKKyAgICBi
aW5kTWV0aG9kKCJvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ25zV2l0aExvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3Jh
Z2VGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlm
aWNhdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnMpOworICAgIGJpbmRNZXRob2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOworICAgIAogICAgIC8vIFRoZSBmYWxs
YmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gdW5rbm93biBtZXRob2QgaXMgaW52b2tlZC4K
ICAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkxheW91dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01l
dGhvZCk7CiAKQEAgLTE2MDIsMyArMTYwNywzMCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNaW5pbXVtVGltCiAgICAgICAgIHJldHVybjsKICAgICBtX3NoZWxsLT53ZWJWaWV3KCkt
PnNldHRpbmdzKCktPnNldE1pbmltdW1UaW1lckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJs
ZSgpKTsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9y
YWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKK3sKKyAg
ICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRl
ZAorfQorCit2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9
CisKK3ZvaWQgc3luY0xvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KikKK3sKKyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKworCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDgwNzY2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNywxMyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKIAorICAgIC8vIExvY2FsU3RvcmFnZSBvcmlnaW4tcmVsYXRlZAor
ICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBv
YnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCiBwdWJsaWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBt
ZXRob2RzIGFyZSBub3QgZXhwb3NlZCB0byBKYXZhU2NyaXB0LgogICAgIHZvaWQgc2V0V29ya1F1
ZXVlRnJvemVuKGJvb2wgZnJvemVuKSB7IG1fd29ya1F1ZXVlLnNldEZyb3plbihmcm96ZW4pOyB9
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDgwNzY2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYg
KzY1MSwzMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfd2ViX2RhdGFiYXNlX3F1b3RhKG9yaWdpbiwgcXVv
dGEpOwogfQogCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExv
Y2FsU3RvcmFnZShKU0NvbnRleHRSZWYpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkK
K3sKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRl
bnRpZmllcikKK3sKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2ln
bmVkIG51bWJlcikKK3sKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCwgSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQkocmV2aXNpb24gODA3NjYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbXBv
cnQgIlBpeGVsRHVtcFN1cHBvcnQuaCIKICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCiAjaW1w
b3J0ICJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oIgorI2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxl
Z2F0ZS5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZUR1bXBT
dXBwb3J0LmgiCiAjaW1wb3J0ICJXb3JrUXVldWUuaCIKQEAgLTc3LDYgKzc4LDcgQEAKICNpbXBv
cnQgPFdlYktpdC9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJQ
cmVmZXJlbmNlS2V5c1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJW
aWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8Z2V0b3B0Lmg+CkBAIC0xMzQsNiArMTM2LDcgQEAgc3Rh
dGljIEVkaXRpbmdEZWxlZ2F0ZSAqZWRpdGluZ0RlbGVnYXRlOwogc3RhdGljIFJlc291cmNlTG9h
ZERlbGVnYXRlICpyZXNvdXJjZUxvYWREZWxlZ2F0ZTsKIHN0YXRpYyBIaXN0b3J5RGVsZWdhdGUg
Kmhpc3RvcnlEZWxlZ2F0ZTsKIFBvbGljeURlbGVnYXRlICpwb2xpY3lEZWxlZ2F0ZTsKK1N0b3Jh
Z2VUcmFja2VyRGVsZWdhdGUgKnN0b3JhZ2VEZWxlZ2F0ZTsKIAogc3RhdGljIGludCBkdW1wUGl4
ZWxzOwogc3RhdGljIGludCB0aHJlYWRlZDsKQEAgLTQxNCw2ICs0MTcsNyBAQCBzdGF0aWMgdm9p
ZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsCiAKICAgICBOU1N0cmluZyAqcGF0aCA9IGxp
YnJhcnlQYXRoRm9yRHVtcFJlbmRlclRyZWUoKTsKICAgICBbZGVmYXVsdHMgc2V0T2JqZWN0Oltw
YXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkRhdGFiYXNlcyJdIGZvcktleTpX
ZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAgICBbZGVmYXVsdHMgc2V0T2JqZWN0
OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxvY2FsU3RvcmFnZSJdIGZv
cktleTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOwogICAgIFtkZWZhdWx0cyBzZXRP
YmplY3Q6W3BhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiTG9jYWxDYWNoZSJd
IGZvcktleTpXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXldOwogCiAgICAgV2ViUHJlZmVyZW5j
ZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwpA
QCAtNTQ1LDYgKzU0OSw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMo
KQogICAgIHJlc291cmNlTG9hZERlbGVnYXRlID0gW1tSZXNvdXJjZUxvYWREZWxlZ2F0ZSBhbGxv
Y10gaW5pdF07CiAgICAgcG9saWN5RGVsZWdhdGUgPSBbW1BvbGljeURlbGVnYXRlIGFsbG9jXSBp
bml0XTsKICAgICBoaXN0b3J5RGVsZWdhdGUgPSBbW0hpc3RvcnlEZWxlZ2F0ZSBhbGxvY10gaW5p
dF07CisgICAgc3RvcmFnZURlbGVnYXRlID0gW1tTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGFsbG9j
XSBpbml0XTsKIH0KIAogLy8gT2JqQysrIGRvZW5zJ3Qgc2VlbSB0byBsZXQgbWUgcGFzcyBOU09i
amVjdComIHNhZGx5LgpAQCAtNTYyLDYgKzU2Nyw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VHbG9i
YWxDb250cm9sbGVycygpCiAgICAgcmVsZWFzZUFuZFplcm8oJnJlc291cmNlTG9hZERlbGVnYXRl
KTsKICAgICByZWxlYXNlQW5kWmVybygmdWlEZWxlZ2F0ZSk7CiAgICAgcmVsZWFzZUFuZFplcm8o
JnBvbGljeURlbGVnYXRlKTsKKyAgICByZWxlYXNlQW5kWmVybygmc3RvcmFnZURlbGVnYXRlKTsK
IH0KIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25z
KGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWVNYWMuaAkocmV2aXNpb24gODA3NjYpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogQGNsYXNzIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvOwogQGNsYXNz
IE5hdmlnYXRpb25Db250cm9sbGVyOwogQGNsYXNzIFBvbGljeURlbGVnYXRlOworQGNsYXNzIFN0
b3JhZ2VUcmFja2VyRGVsZWdhdGU7CiBAY2xhc3MgV2ViRnJhbWU7CiBAY2xhc3MgV2ViU2NyaXB0
V29ybGQ7CiBAY2xhc3MgV2ViVmlldzsKQEAgLTQyLDYgKzQzLDcgQEAKIGNsYXNzIER1bXBSZW5k
ZXJUcmVlRHJhZ2dpbmdJbmZvOwogY2xhc3MgTmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBQ
b2xpY3lEZWxlZ2F0ZTsKK2NsYXNzIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGU7CiBjbGFzcyBXZWJG
cmFtZTsKIGNsYXNzIFdlYlNjcmlwdFdvcmxkOwogY2xhc3MgV2ViVmlldzsKQEAgLTU0LDYgKzU2
LDcgQEAgZXh0ZXJuIFdlYkZyYW1lKiB0b3BMb2FkaW5nRnJhbWU7CiBleHRlcm4gRHVtcFJlbmRl
clRyZWVEcmFnZ2luZ0luZm8gKmRyYWdnaW5nSW5mbzsKIGV4dGVybiBOYXZpZ2F0aW9uQ29udHJv
bGxlciogZ05hdmlnYXRpb25Db250cm9sbGVyOwogZXh0ZXJuIFBvbGljeURlbGVnYXRlKiBwb2xp
Y3lEZWxlZ2F0ZTsKK2V4dGVybiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlKiBzdG9yYWdlRGVsZWdh
dGU7CiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBtYXhWaWV3SGVpZ2h0OwogZXh0ZXJuIGNvbnN0
IHVuc2lnbmVkIG1heFZpZXdXaWR0aDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDgwNzY2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIK
ICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxl
Z2F0ZS5oIgorI2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVUlE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWVJdGVt
LmgiCkBAIC02Niw2ICs2Nyw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViUXVvdGFNYW5hZ2VyLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2NyaXB0V29ybGQuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJT
ZWN1cml0eU9yaWdpblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJUeXBlc0ludGVybmFsLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CkBA
IC0xMzMsMTEgKzEzNSw1MyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFw
cGxpCiAgICAgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGVsZXRlQWxsQXBwbGljYXRpb25DYWNoZXNd
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sK
KyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBzeW5jTG9j
YWxTdG9yYWdlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgW3N0b3JhZ2VE
ZWxlZ2F0ZSBsb2dOb3RpZmljYXRpb25zOm51bWJlciBjb250cm9sbGVyOnRoaXNdOworfQorCiB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgW1tX
ZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJhc2VNYW5hZ2VyXSBkZWxldGVBbGxEYXRh
YmFzZXNdOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0
b3JhZ2UoKQoreworICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFn
ZXJdIGRlbGV0ZUFsbE9yaWdpbnNdOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9s
bGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAg
ICBXZWJTdG9yYWdlTWFuYWdlciAqc3RvcmFnZSA9IFtXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRX
ZWJTdG9yYWdlTWFuYWdlcl07CisKKyAgICBOU0FycmF5ICpvcmlnaW5zID0gW3N0b3JhZ2Ugb3Jp
Z2luc107CisgICAgTlNJbnRlZ2VyIGNvdW50ID0gW29yaWdpbnMgY291bnRdOworCisgICAgSlNW
YWx1ZVJlZiBqc09yaWdpbnNBcnJheVtjb3VudF07CisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIE5TU3RyaW5nICpvcmlnaW4gPSBbW29yaWdpbnMg
b2JqZWN0QXRJbmRleDppXSBkYXRhYmFzZUlkZW50aWZpZXJdOworICAgICAgICBKU1N0cmluZ1Jl
ZiBzdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpb3JpZ2luKTsK
KyAgICAgICAganNPcmlnaW5zQXJyYXlbaV0gPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBz
dHIpOworICAgIH0KKworICAgIEpTT2JqZWN0UmVmIGpzQXJyYXlPYmplY3QgPSBKU09iamVjdE1h
a2VBcnJheShjb250ZXh0LCBjb3VudCwganNPcmlnaW5zQXJyYXksIE5VTEwpOworICAgIHJldHVy
biBqc0FycmF5T2JqZWN0OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVM
b2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQoreworICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgVVJMKSk7CisgICAgCisgICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9
IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07CisKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2Vy
IHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkZWxldGVPcmlnaW46b3JpZ2luXTsKK30KKwogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewogICAgIFdl
YkJhY2tGb3J3YXJkTGlzdCAqYmFja0ZvcndhcmRMaXN0ID0gW1ttYWluRnJhbWUgd2ViVmlld10g
YmFja0ZvcndhcmRMaXN0XTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA4MDc2NikKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NDIsNSArODQyLDMwIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmlt
dW1UaW0KICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2
YWwobV9kcnQtPndlYlBhZ2UoKSwgbWluaW11bVRpbWVySW50ZXJ2YWwpOwogfQogCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRl
QWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3Qg
UVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiBjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bWF4Vmlld1dpZHRoID0gODAwOwogY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om1heFZpZXdIZWlnaHQgPSA2MDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCShyZXZpc2lvbiA4MDc2NikKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzLDYgKzI1MywxMiBAQCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBhZGRV
c2VyU3R5bGVTaGVldChjb25zdCBRU3RyaW5nJiBzb3VyY2VDb2RlKTsKIAogICAgIHZvaWQgc2V0
TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlKTsKKyAgICAKKyAgICB2b2lkIG9yaWdpbnNXaXRo
TG9jYWxTdG9yYWdlKCk7CisgICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB2
b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5z
aWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKIAogcHJpdmF0ZSBz
bG90czoKICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDgw
NzY2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyOCw2ICsxNDI4LDQxIEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUgKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQog
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmlj
YXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitK
U1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShK
U0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNT
dHJpbmdSZWYgVVJMKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVt
VGltZXJJbnRlcnZhbCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CkBAIC0xNDQw
LDMgKzE0NzUsNSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltCiAK
ICAgICB2aWV3UHJpdmF0ZS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobWluaW11bVRpbWVySW50
ZXJ2YWwpOwogfQorCisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xh
eW91dFRlc3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA4MDc2NikKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NTgsNCArNTU4LDMzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6
ZUgKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRv
dWJsZSBpbnRlcnZhbCkgewogCiB9Ci0gICAgCisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlv
bnModW5zaWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0pTVmFs
dWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29u
dGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmlu
Z1JlZiBVUkwpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDgwNzY2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
V2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisgICAgICAgICogc3RvcmFn
ZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlcjogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdl
LXRyYWNrZXItMS1wcmVwYXJlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXIt
MS1wcmVwYXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9y
YWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMy1kZWxldGUtYWxsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fs
c3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbDogQWRk
ZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJh
Y2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9z
dG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLmh0bWw6IEFkZGVkLgorCiAyMDExLTAzLTEwICBE
YXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBGcmFzZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA4MDc2NikKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDYgKzE1MSwxMCBAQCBXT05URklYIFNLSVAgOiBmYXN0L3dtbCA9IEZBSUwKIC8vIG1vc3Qg
bGlrZWx5IHRoZXNlIHRlc3RzIHdpbGwgYWx3YXlzIGJlIEpTQyBzcGVjaWZpYy4KIFdPTlRGSVgg
U0tJUCA6IGZhc3QvcHJvZmlsZXIgPSBGQUlMIFRJTUVPVVQKIAorLy8gU3RvcmFnZVRyYWNrZXIg
aXNuJ3QgdXNlZCBieSBDaHJvbWl1bSBhbmQgbm90IGFsbCByZXF1aXNpdGUgcGxhdGZvcm0gY29k
ZQorLy8gaXMgaW1wbGVtZW50ZWQuCitXT05URklYIFNLSVAgOiBzdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyID0gUEFTUyBUSU1FT1VUIEZBSUwKKwogLy8gV2Ug
dXNlIHdvcmtlcl91aXRlc3RzIHRvIHJ1biB3b3JrZXJzIHRlc3RzLiBEb24ndCBydW4gdGhlbSBp
biB0ZXN0X3NoZWxsLgogV09OVEZJWCBTS0lQIDogZmFzdC93b3JrZXJzID0gUEFTUyBUSU1FT1VU
IEZBSUwKIFdPTlRGSVggU0tJUCA6IGZhc3QvZmlsZXMvd29ya2VycyA9IFBBU1MgVElNRU9VVCBG
QUlMCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitQcmVwYXJlIGZvciBTdG9yYWdlVHJhY2tlciB0ZXN0
cyBieSBlbnN1cmluZyB0aGF0IGV2ZXJ5IG9yaWdpbiB3aXRoIGxvY2FsIHN0b3JhZ2UgaXMgZGVs
ZXRlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMgdGVzdCBzaG91bGQg
aGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEt
cHJlcGFyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fs
c3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiUHJlcGFyZSBmb3IgU3RvcmFnZVRyYWNrZXIgdGVzdHMg
YnkgZW5zdXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlIGlzIGRlbGV0
ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAg
IGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0
b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nl
c3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZp
bmlzaFRlc3QoKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorT3JpZ2luIGlkZW50aWZpZXI6ICdmaWxlX18w
JworU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3Jp
Z2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1sLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9y
IHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1s
LiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBp
ZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9y
YWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3Ro
ID4gMCkgeworICAgICAgICAvLyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28gd2UgY2FuIGV4
aXQuCisgICAgICAgIHRlc3RGYWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0ZWQgd2l0aCBs
b2NhbCBzdG9yYWdlLiIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc3luY0xvY2Fs
U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNvbWVEYXRhID0gJ3dy
aXRlbWUnOworICAgICAgICAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcidzIG5vdGlmeURvbmUgd2ls
bCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9uIGNvbWVzIGlu
LgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKDEpOworICAgIH0KK30KKwordGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IEFQSSB0byB2
aWV3IG9yaWdpbnMgdGhhdCBoYXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRlbGV0ZSBsb2NhbCBz
dG9yYWdlIGJ5IG9yaWdpbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygp
IGlzICJmaWxlX18wIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdl
dHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9y
YWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uIik7CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2Fs
U3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhp
c3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRUZXN0Q29udHJv
bGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZSgpLnRvU3RyaW5nKCkiLCAiZmlsZV9fMCIpOworICAgICAgICAvLyBXZSdyZSBqdXN0
IGdvaW5nIHRvIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb3JpZ2luLCBzbyB3ZSdsbCBnZXQgb25lIG9y
aWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9uLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5v
YnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHRlc3RGYWlsZWQo
IlJhbiB3aXRoIG5vIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlIik7CisgICAgfQorCisgICAg
Ly8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0
aCBsb2NhbCBzdG9yYWdlLgorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK09yaWdpbiBpZGVudGlmaWVyOiAnZmlsZV9fMCcK
K1N0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdp
bi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0
bWwuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUaGlzIHRlc3Qgc2hvdWxkIGhh
dmUgbm8gdmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNy
ZWF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9y
YWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNr
ZXItMy1kZWxldGUtYWxsLmh0bWwuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVu
Y3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0
ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2li
bGUgb3V0cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIu
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIC8vIEFuIG9y
aWdpbiBhbHJlYWR5IGV4aXN0cyBzbyB3ZSBjYW4gZXhpdC4KKyAgICAgICAgdGVzdEZhaWxlZCgi
QW4gb3JpZ2luIGFscmVhZHkgZXhpc3RlZCB3aXRoIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5zeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgICAgIGxvY2Fs
U3RvcmFnZS5zb21lT3RoZXJEYXRhID0gJ3dyaXRlbWVNb3JlJzsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICB9
Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNT
dWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFj
a2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdl
dHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2
ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGxheW91dFRlc3RDb250cm9sbGVy
Lm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9fMCIKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0
b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2Ut
dHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTUtZGVsZXRlLW9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQVBJ
IHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
bGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygp
IiwgImZpbGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0byBkZWxldGUgdGhl
IGV4aXN0aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNh
dGlvbi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9ucygxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFu
dGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oImZpbGU6Ly8iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBvcmlnaW5zIHdp
dGggbG9jYWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgIH0KKworfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85409</attachid>
            <date>2011-03-10 16:42:24 -0800</date>
            <delta_ts>2011-03-10 17:38:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110310164223.patch</filename>
            <type>text/plain</type>
            <size>132060</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNzg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3Vwcyk6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERpcmVjdG9yeSk6CisgICAg
ICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYyk6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjppbml0aWFsaXplVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRy
YWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0lt
cG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2Vy
OjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRl
QWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJD
bGllbnQ6On5TdG9yYWdlVHJhY2tlckNsaWVudCk6CisKIDIwMTEtMDEtMjUgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3Blei4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAzLDYgKzMyMDMs
OSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZUltcGwuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWUuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA4MDc4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NzAsNiAr
OTcwLDcgQEAgX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI2c2V0U2hvdWxkVHJhY2tWaQogX19aTjdX
ZWJDb3JlOVBhZ2VHcm91cDI5cmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9tV29ybGRFUE5TXzE1RE9N
V3JhcHBlcldvcmxkRVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMzByZW1vdmVV
c2VyU3R5bGVTaGVldHNGcm9tV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJD
b3JlOVBhZ2VHcm91cDlwYWdlR3JvdXBFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmU5UGFn
ZUdyb3VwMThudW1iZXJPZlBhZ2VHcm91cHNFdgogX19aTjdXZWJDb3JlOVNjcm9sbGJhcjIybWF4
T3ZlcmxhcEJldHdlZW5QYWdlc0V2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNHN0b3BFdgogX19a
TjdXZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZApAQCAtMTA5Myw2ICsxMDk0LDE2IEBAIF9fWk5L
N1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMTFmcmFtZUxvYWQKIF9fWk5LN1dlYkNvcmUxNFNlY3Vy
aXR5T3JpZ2luMTBjYW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0
eU9yaWdpbjE4ZGF0YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3Jp
Z2luNWVxdWFsRVBLUzBfCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorX19aTjdXZWJDb3JlMTRT
dG9yYWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFCitfX1pON1dl
YkNvcmUxNFN0b3JhZ2VUcmFja2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19fWk43V2ViQ29yZTE0
U3RvcmFnZVRyYWNrZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKK19fWk43
V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VU
cmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3Jp
Z2luRUVFTG0wRUVFCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyOXNldENsaWVudEVQTlNf
MjBTdG9yYWdlVHJhY2tlckNsaWVudEUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNnN5
bmNMb2NhbFN0b3JhZ2VFdgorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjMyc3luY0ZpbGVT
eXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VFdgorI2VuZGlmCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0Nv
bnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQxNXBsYXRmb3JtQ29udGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQx
NnBhaW50aW5nRGlzYWJsZWRFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODA3ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQ2MjAs
NiArNDYyMCw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3N0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXIuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDgwNzg0KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsNyArMjczNyw5
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3Rv
cmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaCBc
CiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFn
ZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisgICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyAr
PSBcCkBAIC0yNzU0LDcgKzI3NTYsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NU
T1JBR0U9MSkgCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKKyAg
ICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lT
VEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTYxMyw2ICs2NTYxMywxNCBAQAog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxWZXJzaW9uQ2hhbmdlQ2FsbGJhY2suaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxT
dG9yYWdlVHJhY2tlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJzdHJpbmdzIgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gODA3ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw2ICs4NTEsOSBAQAogCQkzN0Y4MThGRDBENjU3
NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2Vi
Q29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25z
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3Rjgx
OEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3
RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5
IC8qIFRyZWVEZXB0aExpbWl0LmggKi87IH07CisJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAv
KiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0FCMDJEMkIx
MkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBT
dG9yYWdlVHJhY2tlci5jcHAgKi87IH07CisJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBT
dG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
M0FDNjQ4QjIxMjlFMTQ2NTAwQzNFQjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDNjQ4QjExMjlFMTQ2NTAwQzNF
QjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQxMDAyQ0NEMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5j
dGlvbkNhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxMDAyQ0NCMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCAqLzsgfTsK
IAkJNDEwMDJDQ0UwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTAwMkNDQzBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLzsgfTsKQEAgLTcyMzksNiAr
NzI0Miw5IEBACiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9u
c2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJM
UmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkM5NkRBMTEwNEVE
NzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVl
RGVwdGhMaW1pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlRGVwdGhM
aW1pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUIwMkQyODEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcmFnZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCMDJE
MjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2Vy
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2Vy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNBQzY0OEIxMTI5RTE0NjUw
MEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWRpdGluZ0JvdW5kYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MDAyQ0NCMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RnVuY3Rpb25DYWxsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5j
dGlvbkNhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTg1LDYg
KzEyOTkxLDkgQEAKIAkJCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVz
cGFjZUltcGwuaCAqLywKIAkJCQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcCAqLywKIAkJCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFn
ZVN5bmNNYW5hZ2VyLmggKi8sCisJCQkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3Jh
Z2VUcmFja2VyLmggKi8sCisJCQkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmNwcCAqLywKKwkJCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRy
YWNrZXJDbGllbnQuaCAqLywKIAkJCSk7CiAJCQlpbmRlbnRXaWR0aCA9IDQ7CiAJCQlwYXRoID0g
c3RvcmFnZTsKQEAgLTIyMDcxLDYgKzIyMDgwLDcgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBB
QzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU1RTM4QkYx
MDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDNTEwMkQ5NDBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzQUIwMkQyQTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NDg4RDZCMERENUE4M0QwMDlEODNCMiAvKiBTdHJp
bmdTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIzNTQwRjMwRDAwNzgyRTAw
MjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYw
RUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMjU2NSw2ICsyMjU3NSw3IEBACiAJCQkJRTFGMUU4MzAwQzNDMkJCOTAwNkRCMzkxIC8qIFhT
TFRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlB
QkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUx
MjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FDMzY4
MDAxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTRmlsdGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDlCRDlGQTEzMUZEMkVEMDAzQzU2RjAgLyogQ1NTUHJpbWl0aXZlVmFsdWVD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4IC8qIFJl
bmRlclF1b3RlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0ODQyLDYgKzI0ODUzLDcgQEAKIAkJCQlD
NTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTVFMzhDMDEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzQUIwMkQyQjEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RB
MzAwRDAwNkMxRDAwRUY2RjI2IC8qIFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIy
NjQ1QzBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJCMjY0NUQwRDAwQTc3RTAwMEFDQzFEIC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDgwNzg0KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiR3JvdXBTZXR0aW5ncy5oIgogI2luY2x1ZGUgIklEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFt
ZXNwYWNlLmgiCiAKQEAgLTExMCw2ICsxMTEsNTQgQEAgdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9j
YWxTdG9yYWdlKCkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCit2b2lk
IFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKK3sKKyAgICBpZiAo
IXBhZ2VHcm91cHMpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0
b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CisgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJh
dG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT5zZWNv
bmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgIH0K
K30KKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47
CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwor
ICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9y
YWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmln
aW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAgIH0gICAgCit9CisgICAgCit2b2lkIFBhZ2VHcm91
cDo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVu
ZCgpOworICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9j
YWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+c3lu
YygpOworICAgIH0KK30KKwordW5zaWduZWQgUGFnZUdyb3VwOjpudW1iZXJPZlBhZ2VHcm91cHMo
KQoreworICAgIGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gcGFnZUdyb3Vwcy0+c2l6ZSgpOworfQorCisjZW5kaWYKKwogdm9pZCBQYWdlR3JvdXA6OmFk
ZFBhZ2UoUGFnZSogcGFnZSkKIHsKICAgICBBU1NFUlQocGFnZSk7CkBAIC0yMDksNiArMjU4LDcg
QEAgU3RvcmFnZU5hbWVzcGFjZSogUGFnZUdyb3VwOjpsb2NhbFN0b3JhZwogCiAgICAgcmV0dXJu
IG1fbG9jYWxTdG9yYWdlLmdldCgpOwogfQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiA4MDc4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdyb3VwU2V0dGluZ3M7
CiAgICAgY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CiAgICAgY2xhc3MgUGFnZTsK
KyAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwog
CiAgICAgY2xhc3MgUGFnZUdyb3VwIHsKQEAgLTQ5LDcgKzUwLDE1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgflBhZ2VHcm91cCgpOwogCiAgICAgICAgIHN0YXRpYyBQYWdlR3JvdXAq
IHBhZ2VHcm91cChjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSk7CisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAgICAgICAgIHN0YXRpYyB2b2lkIGNsb3NlTG9jYWxTdG9yYWdlKCk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgICAgICBz
dGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwor
ICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBoZWxwZXIgdGhhdCB0cmlnZ2VycyBhIFN0b3JhZ2VB
cmVhIHN5bmMuCisgICAgICAgIHN0YXRpYyB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyNlbmRp
ZgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZQYWdlR3JvdXBzKCk7CiAgICAgICAg
IAogICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VzOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gODA3ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTIsNCArMTEyLDExIEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGwKICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9GaWxlKGhh
bmRsZSwgZGF0YSwgbGVuZ3RoKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDggKzMwLDEwIEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2lu
Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgogI2luY2x1ZGUgPGxpYmdlbi5o
PgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0yMjcs
MTAgKzIyOSwyOCBAQCBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiAg
ICAgcmV0dXJuIGRpcm5hbWUoZnNSZXAubXV0YWJsZURhdGEoKSk7CiB9CiAKLS8vIE9LIHRvIG5v
dCBpbXBsZW1lbnQgbGlzdERpcmVjdG9yeSBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIGl0J3Mgb25s
eSB1c2VkIGZvciBwbHVnLWlucywgYW5kCi0vLyBhbGwgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBz
aGFyZWQgcGx1Zy1pbiBpbXBsZW1lbnRhdGlvbiBoYXZlIGltcGxlbWVudGF0aW9ucy4gV2UnZCBu
ZWVkCi0vLyB0byBpbXBsZW1lbnQgaXQgaWYgd2Ugd2FudGVkIHRvIHVzZSBQbHVnaW5EYXRhYmFz
ZS5jcHAgb24gdGhlIE1hYy4gQmV0dGVyIHRvIG5vdCBpbXBsZW1lbnQKLS8vIGF0IGFsbCBhbmQg
Z2V0IGEgbGluayBlcnJvciBpbiBjYXNlIHRoaXMgYXJpc2VzLCByYXRoZXIgdGhhbiBoYXZpbmcg
YSBzdHViIGhlcmUsIGJlY2F1c2UKLS8vIHdpdGggYSBzdHViIHlvdSBsZWFybiBhYm91dCB0aGUg
cHJvYmxlbSBhdCBydW50aW1lIGluc3RlYWQgb2YgbGluayB0aW1lLgorVmVjdG9yPFN0cmluZz4g
bGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQor
eworICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CisgICAgQ1N0cmluZyBjcGF0aCA9IHBhdGgu
dXRmOCgpOworICAgIENTdHJpbmcgY2ZpbHRlciA9IGZpbHRlci51dGY4KCk7CisgICAgRElSKiBk
aXIgPSBvcGVuZGlyKGNwYXRoLmRhdGEoKSk7CisgICAgaWYgKGRpcikgeworICAgICAgICBzdHJ1
Y3QgZGlyZW50KiBkcDsKKyAgICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICAgICAgaWYg
KCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZubWF0Y2goY2ZpbHRlci5kYXRhKCksIG5h
bWUsIDApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2hhciBmaWxl
UGF0aFsxMDI0XTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihmaWxl
UGF0aCkgLSAxKSA8IHNucHJpbnRmKGZpbGVQYXRoLCBzaXplb2YoZmlsZVBhdGgpLCAiJXMvJXMi
LCBjcGF0aC5kYXRhKCksIG5hbWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBidWZm
ZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKGZpbGVQYXRoKTsKKyAgICAg
ICAgfQorICAgICAgICBjbG9zZWRpcihkaXIpOworICAgIH0KKyAgICByZXR1cm4gZW50cmllczsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhU3luYy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTAsNiArNTEsMjcgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayhUeXBlIAogICAgIEFTU0VSVChtX3RocmVhZCk7CiAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBUZXJtaW5hdGVUaHJlYWQpOwogfQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayhUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IEltcG9ydE9yaWdpbnMgfHwgbV90eXBlID09IERlbGV0ZUFsbE9yaWdpbnMpOwor
fQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwg
bV9vcmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBEZWxldGVPcmlnaW4pOworfQorCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VU
YXNrKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRmlsZW5hbWUpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2lu
SWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKQorICAgICwgbV9kYXRhYmFzZUZpbGVuYW1lKGRh
dGFiYXNlRmlsZW5hbWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBTZXRPcmlnaW5EZXRhaWxz
KTsKK30KIAogTG9jYWxTdG9yYWdlVGFzazo6fkxvY2FsU3RvcmFnZVRhc2soKQogewpAQCAtNjQs
NiArODYsMTggQEAgdm9pZCBMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3JtVGFzaygpCiAgICAgICAg
IGNhc2UgQXJlYVN5bmM6CiAgICAgICAgICAgICBtX2FyZWEtPnBlcmZvcm1TeW5jKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRPcmlnaW5EZXRhaWxzOgorICAgICAgICAg
ICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jU2V0T3JpZ2luRGV0YWlscyhtX29yaWdp
bklkZW50aWZpZXIsIG1fZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbXBvcnRPcmlnaW5zOgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRy
YWNrZXIoKS5zeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERlbGV0ZUFsbE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLnN5bmNEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBEZWxldGVPcmlnaW46CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLnN5bmNEZWxldGVPcmlnaW4obV9vcmlnaW5JZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERlbGV0ZUVtcHR5RGF0YWJhc2U6CiAgICAgICAg
ICAgICBtX2FyZWEtPmRlbGV0ZUVtcHR5RGF0YWJhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9u
IDgwNzg0KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
IAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTQwLDEzICs0MSwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzayB7CiAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKExvY2FsU3RvcmFnZVRhc2spOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFT
eW5jLCBEZWxldGVFbXB0eURhdGFiYXNlLCBUZXJtaW5hdGVUaHJlYWQgfTsKKyAgICAgICAgZW51
bSBUeXBlIHsgQXJlYUltcG9ydCwgQXJlYVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFNldE9y
aWdpbkRldGFpbHMsIEltcG9ydE9yaWdpbnMsIERlbGV0ZUFsbE9yaWdpbnMsIERlbGV0ZU9yaWdp
biwgVGVybWluYXRlVGhyZWFkIH07CiAKICAgICAgICAgfkxvY2FsU3RvcmFnZVRhc2soKTsKIAog
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQo
U3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdl
VGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9j
YWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlRW1wdHlE
YXRhYmFzZShTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKERlbGV0ZUVtcHR5RGF0YWJhc2UsIGFyZWEpKTsgfQorICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0lt
cG9ydCgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEltcG9ydE9yaWdp
bnMpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVh
dGVTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1lKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9y
YWdlVGFzayhTZXRPcmlnaW5EZXRhaWxzLCBvcmlnaW5JZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVu
YW1lKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3Jl
YXRlRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgeyByZXR1cm4g
YWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlT3JpZ2luLCBvcmlnaW5JZGVudGlm
aWVyKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3Jl
YXRlRGVsZXRlQWxsT3JpZ2lucygpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VU
YXNrKERlbGV0ZUFsbE9yaWdpbnMpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2Nh
bFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQp
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwg
dGhyZWFkKSk7IH0KIAogICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKCk7CkBAIC01NCwxMCArNTks
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3Rv
cmFnZVRhc2soVHlwZSwgU3RvcmFnZUFyZWFTeW5jKik7CiAgICAgICAgIExvY2FsU3RvcmFnZVRh
c2soVHlwZSwgTG9jYWxTdG9yYWdlVGhyZWFkKik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2so
VHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgTG9jYWxTdG9y
YWdlVGFzayhUeXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSk7CiAK
ICAgICAgICAgVHlwZSBtX3R5cGU7CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyogbV9hcmVhOwog
ICAgICAgICBMb2NhbFN0b3JhZ2VUaHJlYWQqIG1fdGhyZWFkOworICAgICAgICBTdHJpbmcgbV9v
cmlnaW5JZGVudGlmaWVyOworICAgICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDgwNzg0KQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiAr
MjI3LDMxIEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZSgpCiAjZW5kaWYKIH0KIAordm9p
ZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAK
KyAgICBpZiAobV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90
YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFn
ZU1hcDo6Y3JlYXRlKHF1b3RhKTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMp
IHsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAg
bV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKyAg
ICAKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVTeW5j
KCk7Cit9CisKIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KSBjb25zdAogewogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkocmV2aXNpb24gODA3ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIE9ubHkgY2FsbGVkIGZy
b20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAorICAgICAgICAvLyBVc2VkIHRvIGNs
ZWFyIGEgU3RvcmFnZUFyZWEgYW5kIGNsb3NlIGRiIGJlZm9yZSBiYWNraW5nIGRiIGZpbGUgaXMg
ZGVsZXRlZC4KKyAgICAgICAgdm9pZCBjbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisKKyAgICAg
ICAgdm9pZCBzeW5jKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3Jh
Z2VTeW5jTWFuYWdlcj4sIHVuc2lnbmVkIHF1b3RhKTsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBs
KFN0b3JhZ2VBcmVhSW1wbCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcAkocmV2aXNpb24gODA3ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2Vy
LmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVybWluYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKQEAgLTEzOCw2ICsxMzksMjUgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNj
aGVkdWxlQ2xlYXIoKQogICAgIH0KIH0KIAordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxl
Q2xvc2VEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQoIW1fZmluYWxTeW5jU2NoZWR1bGVkKTsKKworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IHRydWU7Cisg
ICAgCisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1fc3luY1Rp
bWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVu
VGVybWluYXRpb24gaW4gdGhlCisgICAgICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgor
ICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICB9Cit9CisKIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMjIyLDYgKzI0MiwxMCBAQCB2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNlKE9wZW5ECiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICAvLyBBIFN0b3JhZ2VUcmFja2VyIHRocmVhZCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxl
ZCB0byBkZWxldGUgdGhlIGRiIHdlJ3JlCisgICAgLy8gcmVvcGVuaW5nLCBzbyBjYW5jZWwgcG9z
c2libGUgZGVsZXRpb24uCisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5jZWxEZWxl
dGluZ09yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CisKICAgICBpZiAoIW1fZGF0YWJhc2Uu
b3BlbihkYXRhYmFzZUZpbGVuYW1lKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBv
cGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIGxvY2FsIHN0b3JhZ2UiLCBkYXRhYmFzZUZpbGVuYW1l
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKQEAgLTIzNSw2ICsyNTks
OCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNlKE9wZW5ECiAgICAgICAgIG1f
ZGF0YWJhc2VPcGVuRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc2V0T3JpZ2luRGV0YWlscyhtX2RhdGFiYXNlSWRl
bnRpZmllciwgZGF0YWJhc2VGaWxlbmFtZSk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpw
ZXJmb3JtSW1wb3J0KCkKQEAgLTMxOSw2ICszNDUsMTUgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnN5bmMoYm9vbCBjbGVhckl0ZQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgLy8gQ2xvc2luZyB0aGlzIGRiIGJlY2F1c2UgaXQgaXMgYWJvdXQg
dG8gYmUgZGVsZXRlZCBieSBTdG9yYWdlVHJhY2tlci4KKyAgICAvLyBUaGUgZGVsZXRlIHdpbGwg
YmUgY2FuY2VsbGVkIGlmIFN0b3JhZ2VBcmVhU3luYyBuZWVkcyB0byByZW9wZW4gdGhlIGRiCisg
ICAgLy8gdG8gd3JpdGUgbmV3IGl0ZW1zIGNyZWF0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgdG8gZGVs
ZXRlIHRoZSBkYi4KKyAgICBpZiAobV9zeW5jQ2xvc2VEYXRhYmFzZSkgeworICAgICAgICBtX3N5
bmNDbG9zZURhdGFiYXNlID0gZmFsc2U7CisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBJZiB0aGUgY2xlYXIgZmxhZyBpcyBz
ZXQsIHRoZW4gd2UgY2xlYXIgYWxsIGl0ZW1zIG91dCBiZWZvcmUgd2Ugd3JpdGUgYW55IG5ldyBv
bmVzIGluLgogICAgIGlmIChjbGVhckl0ZW1zKSB7CiAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBj
bGVhcihtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7CkBAIC00MjEsMTIgKzQ1
NiwxNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzCiAgICAgaWYg
KCFjb3VudCkgewogICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwogICAgICAgICBtX2RhdGFiYXNl
LmNsb3NlKCk7Ci0gICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdl
ci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICBp
ZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShkYXRhYmFzZUZpbGVuYW1l
KSkKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxl
ICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CiAg
ICAgfQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVTeW5jKCkKK3sKKyAgICBz
eW5jVGltZXJGaXJlZCgmbV9zeW5jVGltZXIpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVJdGVt
Rm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAg
IHZvaWQgc2NoZWR1bGVDbGVhcigpOworICAgICAgICB2b2lkIHNjaGVkdWxlQ2xvc2VEYXRhYmFz
ZSgpOworCisgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKCk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+LCBQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVy
KTsKQEAgLTkyLDYgKzk1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
c3luY1NjaGVkdWxlZDsKICAgICAgICAgYm9vbCBtX3N5bmNJblByb2dyZXNzOwogICAgICAgICBi
b29sIG1fZGF0YWJhc2VPcGVuRmFpbGVkOworICAgICAgICAKKyAgICAgICAgYm9vbCBtX3N5bmND
bG9zZURhdGFiYXNlOwogCiAgICAgICAgIG11dGFibGUgTXV0ZXggbV9pbXBvcnRMb2NrOwogICAg
ICAgICBtdXRhYmxlIFRocmVhZENvbmRpdGlvbiBtX2ltcG9ydENvbmRpdGlvbjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCShyZXZpc2lvbiA4MDc4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gY29weSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJP
cmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmMo
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24gODA3ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5o
IgogI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIu
aCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTE0NCw2ICsxNDUs
MzIgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6dW5sb2NrKCkKICAgICAvLyBCZWNhdXNl
IHRoZXJlJ3MgYSBzaW5nbGUgZXZlbnQgbG9vcCBwZXItcHJvY2VzcywgdGhpcyBpcyBhIG5vLW9w
LgogfQogCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9u
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KworICAgIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJl
YU1hcC5nZXQob3JpZ2luKTsKKyAgICBpZiAoc3RvcmFnZUFyZWEpCisgICAgICAgIHN0b3JhZ2VB
cmVhLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFn
ZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNl
Y29uZC0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQorICAgIAordm9pZCBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6c3luYygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAg
ICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5zeW5jKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJ
KHJldmlzaW9uIDgwNzg0KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgdW5sb2NrKCk7CiAKKyAgICAgICAgLy8gTm90IHJlbW92aW5nIHRoZSBvcmlnaW4ncyBTdG9y
YWdlQXJlYSBmcm9tIG1fc3RvcmFnZUFyZWFNYXAgYmVjYXVzZQorICAgICAgICAvLyB3ZSdyZSBq
dXN0IGRlbGV0aW5nIHRoZSB1bmRlcmx5aW5nIGRiIGZpbGUuIElmIGFuIGl0ZW0gaXMgYWRkZWQg
aW1tZWRpYXRlbHkKKyAgICAgICAgLy8gYWZ0ZXIgZmlsZSBkZWxldGlvbiwgd2Ugd2FudCB0aGUg
c2FtZSBTdG9yYWdlQXJlYSB0byBldmVudHVhbGx5IHRyaWdnZXIKKyAgICAgICAgLy8gYSBzeW5j
IGFuZCBmb3IgU3RvcmFnZUFyZWFTeW5jIHRvIHJlY3JlYXRlIHRoZSBiYWNraW5nIGRiIGZpbGUu
CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3Jp
Z2luKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc3luYygpOworICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXRoLCB1bnNpZ25lZCBxdW90YSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisK
KyNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFk
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1
ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50
LmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU3RvcmFnZVRyYWNrZXIqIHN0
b3JhZ2VUcmFja2VyID0gMDsKKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNr
ZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKK3sKKyAgICBBU1NFUlQoIXN0b3JhZ2VUcmFj
a2VyKTsKKyAgICBpZiAoc3RvcmFnZVRyYWNrZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKHN0b3JhZ2VQYXRoKTsKKyAgICBzdG9y
YWdlVHJhY2tlci0+c2V0SXNBY3RpdmUodHJ1ZSk7CisgICAgc3RvcmFnZVRyYWNrZXItPmltcG9y
dE9yaWdpbklkZW50aWZpZXJzKCk7Cit9CisKK1N0b3JhZ2VUcmFja2VyJiBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpCit7CisgICAgaWYgKCFzdG9yYWdlVHJhY2tlcikgeworICAgICAgICBzdG9y
YWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcigiIik7CisgICAgICAgIHN0b3JhZ2VUcmFj
a2VyLT5pbXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
KnN0b3JhZ2VUcmFja2VyOworfQorCitTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIoY29u
c3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKKyAgICA6IG1fY2xpZW50KDApCisgICAgLCBtX3RocmVh
ZChMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpKQorICAgICwgbV9pc0FjdGl2ZShmYWxzZSkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAKKyAgICBzZXRTdG9yYWdl
RGlyZWN0b3J5UGF0aChzdG9yYWdlUGF0aCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6
cmVnaXN0ZXJTUUxpdGVWRlMoKTsKKyAgICAKKyAgICBtX3RocmVhZC0+c3RhcnQoKTsgIAorfQor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFy
ZCk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICAKKyAgICBtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoID0gcGF0aC50aHJlYWRzYWZlQ29weSgpOworfQorCitTdHJpbmcgU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBT
UUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG1fc3RvcmFnZURp
cmVjdG9yeVBhdGgsICJTdG9yYWdlVHJhY2tlci5kYiIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFj
a2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCit7Cisg
ICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisKKyAgICBpZiAobV9kYXRhYmFz
ZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBkYXRhYmFzZVBh
dGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7CisgICAgCisgICAgaWYgKCFTUUxpdGVGaWxlU3lz
dGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCkpIHsKKyAgICAgICAgaWYgKGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFi
YXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWko
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGF0YWJhc2Uu
ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworICAgIAorICAgIGlmICghbV9kYXRhYmFzZS50YWJs
ZUV4aXN0cygiT3JpZ2lucyIpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCBwYXRoIFRFWFQpOyIpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIE9yaWdpbnMgdGFibGUuIik7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFj
a2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit7ICAgCisgICAgaWYgKCFtX2lzQWN0aXZl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQobV90aHJlYWQpOworCisgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0
b3JhZ2VUYXNrOjpjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0ltcG9ydCgpKTsKK30KKwordm9pZCBT
dG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKK3sKKyAgICBBU1NF
UlQobV9pc0FjdGl2ZSk7CisgICAgCisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwor
CisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAgICAgICBpZiAoIW1fZGF0
YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00g
T3JpZ2lucyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQu
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlu
dCByZXN1bHQ7CisKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdp
bnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgICAgICAgICBtX29yaWdpblNl
dC5hZGQoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0
aGUgZGF0YWJhc2UuIik7CisgICAgfQorICAgIAorICAgIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tl
ckRhdGFiYXNlKCk7CisgICAgCisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAgICBPcmlnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOworICAgICAgICBmb3IgKE9yaWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oKml0
KTsKKyAgICB9Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFu
ZFRyYWNrZXJEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworCisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGZpbGVNYXRjaFBhdHRlcm4sICgiKi5sb2Nh
bHN0b3JhZ2UiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGZpbGVF
eHQsICgiLmxvY2Fsc3RvcmFnZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IHVu
c2lnbmVkLCBmaWxlRXh0TGVuZ3RoLCAoZmlsZUV4dC5sZW5ndGgoKSkpOworCisgICAgVmVjdG9y
PFN0cmluZz4gcGF0aHMgPSBsaXN0RGlyZWN0b3J5KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgsIGZp
bGVNYXRjaFBhdHRlcm4pOworICAgIAorICAgIC8vIEFkZCBtaXNzaW5nIFN0b3JhZ2VUcmFja2Vy
IHJlY29yZHMuCisgICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSAqaXQ7CisgICAgICAgIGlmIChwYXRoLmVuZHNXaXRo
KGZpbGVFeHQsIHRydWUpICYmIHBhdGgubGVuZ3RoKCkgPiBmaWxlRXh0TGVuZ3RoKSB7CisgICAg
ICAgICAgICBTdHJpbmcgZmlsZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKKyAgICAgICAgICAg
IFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmcoMCwgZmlsZS5sZW5ndGgo
KSAtIGZpbGVFeHRMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtX29yaWdpblNldC5jb250YWlu
cyhvcmlnaW5JZGVudGlmaWVyKSkgeworICAgICAgICAgICAgICAgIGlmIChpc01haW5UaHJlYWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgc2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVy
LCBwYXRoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN5bmNT
ZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIsIHBhdGgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3VuZE9yaWdpbnMuYWRkKG9yaWdpbklkZW50aWZpZXIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gRGVsZXRlIHN0YWxlIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMu
CisgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBzZXRFbmQgPSBtX29yaWdpblNldC5lbmQo
KTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5i
ZWdpbigpOyBpdCAhPSBzZXRFbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFmb3VuZE9yaWdpbnMu
Y29udGFpbnMoKml0KSkgeworICAgICAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAg
ICAgICAgICAgIGRlbGV0ZU9yaWdpbigqaXQpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgICAgICBzeW5jRGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgU3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkKK3sKKyAgICBpZiAoIW1faXNB
Y3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisKKyAgICAgICAgaWYgKG1fb3JpZ2luU2V0LmNv
bnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBMb2NhbFN0
b3JhZ2VUYXNrKiB0YXNrID0gTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU2V0T3JpZ2luRGV0YWls
cyhvcmlnaW5JZGVudGlmaWVyLnRocmVhZHNhZmVDb3B5KCksIGRhdGFiYXNlRmlsZSkubGVha1B0
cigpOworCisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEFTU0VSVChtX3RocmVh
ZCk7CisgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2sodGFzayk7CisgICAgfSBlbHNlIAor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKHNjaGVkdWxlVGFzaywgKHZvaWQqKXRhc2spOworfQor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzY2hlZHVsZVRhc2sodm9pZCogdGFzaykKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLm1fdGhyZWFkKTsKKyAgICAKKyAgICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5t
X3RocmVhZCkKKyAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5tX3RocmVhZC0+c2No
ZWR1bGVUYXNrKChMb2NhbFN0b3JhZ2VUYXNrKil0YXNrKTsKK30KKwordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwor
CisgICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0cnVlKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOwor
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIs
IG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fSAKKyAgICAKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Cisg
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgaWYgKHN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tP
cmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAgICBpZiAoIW1fb3JpZ2luU2V0LmNvbnRh
aW5zKG9yaWdpbklkZW50aWZpZXIpKQorICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKG9yaWdp
bklkZW50aWZpZXIpOworICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGll
bnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworfQorCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4m
IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgCisgICAgaWYgKCFtX2lz
QWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IFN0b3JhZ2VUcmFj
a2VyIGlzIGN1cnJlbnRseSBhIHNpbmdsZXRvbiBhbmQgc2hvdWxkIGJlIGFzc3VtZWQKKyAgICAv
LyB0byBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciB3aXRoIG1vcmUgdGhhbiBvbmUgUGFnZUdyb3Vw
LgorICAgIEFTU0VSVChQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3VwcygpID09IDEpOworCisg
ICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisKKyAgICBPcmln
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOworICAgIGZvciAo
T3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
RnJvbURhdGFiYXNlSWRlbnRpZmllcigqaXQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6
ZGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAKKyAgICBpZiAo
IW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogU3RvcmFn
ZVRyYWNrZXIgaXMgY3VycmVudGx5IGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgYXNzdW1lZAor
ICAgIC8vIHRvIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIHdpdGggbW9yZSB0aGFuIG9uZSBQYWdl
R3JvdXAuCisgICAgQVNTRVJUKFBhZ2VHcm91cDo6bnVtYmVyT2ZQYWdlR3JvdXBzKCkgPT0gMSk7
CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3Vh
cmQpOworICAgICAgICB3aWxsRGVsZXRlQWxsT3JpZ2lucygpOworICAgICAgICBtX29yaWdpblNl
dC5jbGVhcigpOworICAgIH0KKworICAgIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JB
bGxPcmlnaW5zKCk7CisgICAgCisgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3Jh
Z2VUYXNrOjpjcmVhdGVEZWxldGVBbGxPcmlnaW5zKCkpOworfQorICAgIAordm9pZCBTdG9yYWdl
VHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIAorICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4sIHBhdGggRlJPTSBPcmln
aW5zIik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc3VsdDsKKyAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpZiAoIWNh
bkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VG
aWxlKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHREb25lKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5z
IGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAgIAorICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3Rl
bTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgU1FMaXRl
RmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkp
OworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKK3sgICAgCisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAKKyAgICBpZiAoIW1faXNB
Y3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBTdG9yYWdlVHJhY2tlciBp
cyBjdXJyZW50bHkgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBiZSBhc3N1bWVkCisgICAgLy8gdG8g
aGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2l0aCBtb3JlIHRoYW4gb25lIFBhZ2VHcm91cC4KKyAg
ICBBU1NFUlQoUGFnZUdyb3VwOjpudW1iZXJPZlBhZ2VHcm91cHMoKSA9PSAxKTsKKyAgICAKKyAg
ICAvLyBCZWZvcmUgZGVsZXRpbmcgZGF0YWJhc2UsIHdlIG5lZWQgdG8gY2xlYXIgaW4tbWVtb3J5
IGxvY2FsIHN0b3JhZ2UgZGF0YQorICAgIC8vIGluIFN0b3JhZ2VBcmVhLCBhbmQgdG8gY2xvc2Ug
dGhlIFN0b3JhZ2VBcmVhIGRiLiBJdCdzIHBvc3NpYmxlIGZvciBhbgorICAgIC8vIGl0ZW0gdG8g
YmUgYWRkZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgY2xvc2luZyB0aGUgZGIgYW5kIGNhdXNlIFN0b3Jh
Z2VBcmVhU3luYworICAgIC8vIHRvIHJlb3BlbiB0aGUgZGIgYmVmb3JlIHRoZSBkYiBpcyBkZWxl
dGVkIGJ5IGEgU3RvcmFnZVRyYWNrZXIgdGhyZWFkLgorICAgIC8vIEluIHRoaXMgY2FzZSwgcmVv
cGVuaW5nIHRoZSBkYiBpbiBTdG9yYWdlQXJlYVN5bmMgd2lsbCBjYW5jZWwgYSBwZW5kaW5nCisg
ICAgLy8gU3RvcmFnZVRyYWNrZXIgZGIgZGVsZXRpb24uCisgICAgUGFnZUdyb3VwOjpjbGVhckxv
Y2FsU3RvcmFnZUZvck9yaWdpbihvcmlnaW4pOworCisgICAgU3RyaW5nIG9yaWdpbklkID0gb3Jp
Z2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAgICB3aWxsRGVsZXRlT3Jp
Z2luKG9yaWdpbklkKTsKKyAgICAgICAgbV9vcmlnaW5TZXQucmVtb3ZlKG9yaWdpbklkKTsKKyAg
ICB9CisgICAgCisgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayhMb2NhbFN0b3JhZ2VUYXNrOjpj
cmVhdGVEZWxldGVPcmlnaW4ob3JpZ2luSWQpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6
c3luY0RlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2Uo
bV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBpZiAoIWNhbkRlbGV0ZU9yaWdpbihvcmlnaW5J
ZGVudGlmaWVyKSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHRlZCB0byBkZWxldGUgb3Jp
Z2luICclcycgd2hpbGUgaXQgd2FzIGJlaW5nIGNyZWF0ZWRcbiIsIG9yaWdpbklkZW50aWZpZXIu
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG9wZW5U
cmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEdldCBvcmlnaW4ncyBkYiBmaWxlIHBhdGgsIGRl
bGV0ZSBlbnRyeSBpbiB0cmFja2VyJ3MgZGIsIHRoZW4gZGVsZXRlIGRiIGZpbGUuCisgICAgU1FM
aXRlU3RhdGVtZW50IHBhdGhTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00g
T3JpZ2lucyBXSEVSRSBvcmlnaW49PyIpOworICAgIGlmIChwYXRoU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IHNlbGVjdGlvbiBvZiBwYXRoIGZvciBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhdGhTdGF0ZW1lbnQu
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgaW50IHJlc3VsdCA9IHBhdGhTdGF0
ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGZpbmQgb3JpZ2luICclcycgaW4gT3JpZ2lucyB0YWJsZSIs
IG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFN0cmluZyBwYXRoID0gcGF0aFN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
OworCisgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAgCisgICAgU1FMaXRlU3RhdGVt
ZW50IGRlbGV0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyB3aGVy
ZSBvcmlnaW49PyIpOworICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJl
c3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24g
b2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxldGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIG9yaWdp
biAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0
aCk7CisgICAgCisgICAgYm9vbCBzaG91bGREZWxldGVUcmFja2VyRmlsZXMgPSBmYWxzZTsKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIG9yaWdpbkxvY2sobV9vcmlnaW5TZXRHdWFyZCk7Cisg
ICAgICAgIG1fb3JpZ2luU2V0LnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgc2hv
dWxkRGVsZXRlVHJhY2tlckZpbGVzID0gbV9vcmlnaW5TZXQuaXNFbXB0eSgpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGREZWxldGVUcmFja2VyRmlsZXMpIHsKKyAgICAgICAgbV9kYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJh
Y2tlckRhdGFiYXNlUGF0aCgpKTsKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1w
dHlEYXRhYmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAgICB9CisgICAg
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlP
cmlnaW4ob3JpZ2luSWRlbnRpZmllcik7Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjp3
aWxsRGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNTRVJUKCFtX29yaWdpblNldEd1YXJkLnRy
eUxvY2soKSk7CisKKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2lu
U2V0LmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3Jp
Z2luU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9vcmlnaW5zQmVpbmdE
ZWxldGVkLmFkZCgoKml0KS50aHJlYWRzYWZlQ29weSgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6d2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fb3JpZ2luU2V0R3Vh
cmQudHJ5TG9jaygpKTsKKworICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQob3JpZ2luSWRl
bnRpZmllcik7Cit9CisgICAgCitib29sIFN0b3JhZ2VUcmFja2VyOjpjYW5EZWxldGVPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFz
ZUd1YXJkLnRyeUxvY2soKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5T
ZXRHdWFyZCk7CisgICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5jb250YWlucyhvcmln
aW5JZGVudGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIGlmICghbV9pc0Fj
dGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9v
cmlnaW5TZXRHdWFyZCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VH
dWFyZCk7CisgICAgaWYgKCFtX29yaWdpbnNCZWluZ0RlbGV0ZWQuaXNFbXB0eSgpKQorICAgICAg
ICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOworfQorCit2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRDbGllbnQoU3RvcmFnZVRyYWNrZXJDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6
c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgUGFnZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCk7
Cit9CisgICAgCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRJc0FjdGl2ZShib29sIGZsYWcpCit7
CisgICAgbV9pc0FjdGl2ZSA9IGZsYWc7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlVHJhY2tlcl9oCisj
ZGVmaW5lIFN0b3JhZ2VUcmFja2VyX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrOworY2xhc3MgTG9j
YWxTdG9yYWdlVGhyZWFkOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9yYWdlVHJh
Y2tlckNsaWVudDsgICAgCisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5n
JiBzdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2VyKCk7Cisg
ICAgc3RhdGljIHZvaWQgc2NoZWR1bGVUYXNrKHZvaWQqKTsKKworICAgIHZvaWQgaW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMoKTsKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgCisg
ICAgdm9pZCBkZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBkZWxldGVPcmlnaW4oU2VjdXJp
dHlPcmlnaW4qKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpOworICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiA+JiByZXN1bHQpOworCisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KFN0b3JhZ2VU
cmFja2VyQ2xpZW50Kik7CisKKyAgICAvLyBTeW5jIHRvIGRpc2sgb24gYmFja2dyb3VuZCB0aHJl
YWQuCisgICAgdm9pZCBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQgc3luY0RlbGV0
ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgc3luY1Nl
dE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRmlsZSk7CisgICAgdm9pZCBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMo
KTsKKyAgICB2b2lkIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisKKyAgICB2
b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlVHJhY2tlcihj
b25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKKworICAgIFN0cmluZyB0cmFja2VyRGF0YWJhc2VQ
YXRoKCkgY29uc3Q7CisgICAgdm9pZCBvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZE
b2VzTm90RXhpc3QpOworCisgICAgdm9pZCBzZXRTdG9yYWdlRGlyZWN0b3J5UGF0aChjb25zdCBT
dHJpbmcmKTsKKworICAgIHZvaWQgZGVsZXRlVHJhY2tlckZpbGVzKCk7CisKKyAgICBib29sIGNh
bkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQg
d2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZv
aWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKworICAgIHZvaWQgb3JpZ2luRmlsZVBhdGhzKFZl
Y3RvcjxTdHJpbmc+JiBwYXRocyk7CisgICAgCisgICAgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsK
KworICAgIE11dGV4IG1fZGF0YWJhc2VHdWFyZDsKKyAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOworCisgICAgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7CisKKyAgICBTdG9yYWdl
VHJhY2tlckNsaWVudCogbV9jbGllbnQ7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nPiBP
cmlnaW5TZXQ7CisKKyAgICBNdXRleCBtX29yaWdpblNldEd1YXJkOworICAgIE9yaWdpblNldCBt
X29yaWdpblNldDsKKyAgICBPcmlnaW5TZXQgbV9vcmlnaW5zQmVpbmdEZWxldGVkOworCisgICAg
T3duUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7CisgICAgCisgICAgYm9vbCBtX2lz
QWN0aXZlOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2lmbmRlZiBTdG9yYWdl
VHJhY2tlckNsaWVudF9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKworI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RvcmFn
ZVRyYWNrZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflN0b3JhZ2VUcmFja2VyQ2xp
ZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJDbGllbnRfaApJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgwNzg0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMSBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBXZWJLaXQxIEFQSSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDExLTAzLTAyICBBbnRv
biBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUxODc4CisgICAgICAgIEFkZCBXZWJLaXQxIEFQSSB0byB2aWV3IGFuZCBkZWxldGUg
bG9jYWwgc3RvcmFnZQorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMTEtMDMtMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDgwNzg0KQorKysgU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODUsNiArODUsMTEgQEAKIAkJMzdCNkZCNEYxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBE
RkRvY3VtZW50RXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzdCNkZCNEQxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFz
Lm1tICovOyB9OwogCQkzN0QxRENBODEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E2MTA2
NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oICovOyB9OwogCQkzN0QxRENBOTEwNjU5MjhD
MDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENBNzEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2Mu
bW0gKi87IH07CisJCTNBQjAyQUY2MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAy
QUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLzsgfTsKKwkJM0FC
MDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRkYxMkMxMzJC
MjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNBQkIzQzdBMTMwOUMzQjUwMEU5M0Q5
NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50LmggKi87IH07CisJCTNBQkIzQzdCMTMwOUMzQjUwMEU5M0Q5NCAvKiBX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNBQkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJh
Y2tlckNsaWVudC5tbSAqLzsgfTsKKwkJM0FFMTVENTAxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0
b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdl
ckludGVybmFsLmggKi87IH07CiAJCTQxRjQ0ODRGMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3Jr
ZXJzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFGNDQ4NEQxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGNDQ4NTAxMDMz
OEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNDQ4NEUxMDMzOEU4QzAwMzBFNTVFIC8qIFdl
YldvcmtlcnNQcml2YXRlLm1tICovOyB9OwogCQk0NEJCOEIxNDEyNDFBMDIyMDAxRTNBMjIgLyog
V2ViQXJjaGl2ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NEJCOEIxMzEyNDFBMDIyMDAxRTNBMjIgLyogV2ViQXJjaGl2ZUludGVybmFs
LmggKi87IH07CkBAIC00ODMsNiArNDg4LDExIEBACiAJCTM5NDQ2MDdFMDIwRjUwRUQwRUNBMTc2
NyAvKiBXZWJCYWNrRm9yd2FyZExpc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJCYWNrRm9yd2FyZExpc3QubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0
NjA3RjAyMEY1MEVEMEVDQTE3NjcgLyogV2ViSGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5
NDQ2MDgwMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0b3J5SXRlbS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhpc3RvcnlJ
dGVtLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKKwkJM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFn
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyQUZGMTJDMTMyQjIwMEZC
QjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlVHJh
Y2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUJCM0M3OTEzMDlD
M0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FFMTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdl
YlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViV29ya2Vyc1ByaXZhdGUuaDsgcGF0aCA9
IG1hYy9Xb3JrZXJzL1dlYldvcmtlcnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxRjQ0ODRFMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYldvcmtlcnNQcml2YXRl
Lm1tOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vyc1ByaXZhdGUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0OTA5OEI5MEY4RjgyREYwMDc2QTMyNyAvKiBGZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTYsNiArMTA2
NiwxMSBAQAogCQkJCUE1REVGQzBFMTFENTM0M0UwMDg4NTI3MyAvKiBXZWJEYXRhYmFzZVF1b3Rh
TWFuYWdlci5tbSAqLywKIAkJCQk1MTFGM0ZEMzBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJNTExRjNGRDQwQ0VDQzg4RjAwODUyNTY1IC8qIFdl
YkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbSAqLywKKwkJCQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2
OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8sCisJCQkJM0FCMDJBRkYxMkMxMzJCMjAwRkJC
Njk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oICovLAorCQkJCTNBRTE1RDRGMTJEQkRF
RDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggKi8sCisJCQkJM0FCQjND
NzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8sCisJCQkJ
M0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICov
LAogCQkJKTsKIAkJCW5hbWUgPSBTdG9yYWdlOwogCQkJcGF0aCA9IG1hYy9TdG9yYWdlOwpAQCAt
MTYyNSw3ICsxNjQwLDEwIEBACiAJCQkJNTk4QUQ5MkExMjAxQ0YzQjAwQUJBRTRFIC8qIFdlYkRl
dmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU5OEFEQTQ2MTIwMjI3NTAwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyQTFBNDEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFz
aGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2
OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREE2
MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTNBRTE1RDUwMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdl
ckludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQg
LyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDJEMzI0
MTMxRUQxRTAwMDc1RkE0QiAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CkBAIC0xOTkzLDcgKzIwMTEsOSBAQAogCQkJCTU5OEFEOTIyMTIwMUNGMTAwMEFCQUU0RSAv
KiBXZWJEZXZpY2VPcmllbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5OEFEOTI4MTIw
MUNGMzIwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jay5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzRTJBMUE1MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRS
ZWdpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQUIwMkFGNjEyQzEzMTlCMDBGQkI2OTQgLyog
V2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREE2MkFFMzEyNUY4N0My
MDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKKwkJ
CQkzQUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQzQyRDM0RDEzMUVEMzg4MDA3NUZBNEIgLyogV2ViTG9jYWxp
emFibGVTdHJpbmdzSW50ZXJuYWwubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxs
T3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQ
cm94eTo6c3luYyk6CisgICAgICAgICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oOgorCiAy
MDExLTAzLTEwICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbCBjaHJvbWl1bSB2ZXJzaW9uIHRvIHI3NzI1OSB0byBwaWNrIHVwCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQ
cm94eS5jcHAJKHJldmlzaW9uIDgwNzg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
U3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMjEg
QEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlUHJveHk6OnVubG9jaygpCiAgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyT3JpZ2luRm9y
RGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0Zv
ckRlbGV0aW9uKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBTdG9y
YWdlTmFtZXNwYWNlUHJveHk6OnN5bmMoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JB
R0UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFt
ZXNwYWNlUHJveHkuaAkocmV2aXNpb24gODA3ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
MTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBj
b3B5KCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lkIHVubG9j
aygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3Vy
aXR5T3JpZ2luKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9u
KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN5bmMoKTsKIAogcHJpdmF0ZToKICAgICBPd25Q
dHI8V2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlPiBtX3N0b3JhZ2VOYW1lc3BhY2U7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDExLTAzLTEwICBBbnRv
biBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUxODc4CisgICAgICAgIEFkZCBXZWJLaXQxIEFQSSB0byB2aWV3IGFuZCBkZWxldGUg
bG9jYWwgc3RvcmFnZQorCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbTog
QWRkZWQuCisgICAgICAgICgrW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5h
Z2VyXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIG9yaWdpbnNdKToKKyAgICAgICAg
KC1bV2ViU3RvcmFnZU1hbmFnZXIgZGVsZXRlQWxsT3JpZ2luc10pOgorICAgICAgICAoLVtXZWJT
dG9yYWdlTWFuYWdlciBkZWxldGVPcmlnaW46XSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5h
Z2VyIHN5bmNMb2NhbFN0b3JhZ2VdKToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgc3lu
Y0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VdKToKKyAgICAgICAgKHN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKToKKyAgICAgICAgKFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAq
IFN0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW06IEFkZGVkLgorICAgICAgICAoV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAg
ICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpXZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6
CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6fldlYlN0b3JhZ2VUcmFja2VyQ2xp
ZW50KToKKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlm
eU9yaWdpbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6
ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNl
Y3VyaXR5T3JpZ2luLm1tOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBwcm90b2NvbF0p
OgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBob3N0XSk6CisgICAgICAgICgtW1dlYlNl
Y3VyaXR5T3JpZ2luIGRhdGFiYXNlSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXZWJTZWN1cml0
eU9yaWdpbiBkb21haW5dKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gX2luaXRXaXRo
V2ViQ29yZVNlY3VyaXR5T3JpZ2luOl0pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNl
Y3VyaXR5T3JpZ2luUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYktpdC5leHA6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXph
dGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOnVzZXNEb2N1bWVudFZpZXdzOl0pOgorCiAyMDEx
LTAzLTEwICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5l
eHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4cAkocmV2aXNpb24g
ODA3ODQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCSh3b3JraW5nIGNvcHkpCkBA
IC02LDYgKzYsNyBAQAogLm9iamNfY2xhc3NfbmFtZV9XZWJDb3JlU3RhdGlzdGljcwogLm9iamNf
Y2xhc3NfbmFtZV9XZWJEYXRhU291cmNlCiAub2JqY19jbGFzc19uYW1lX1dlYkRhdGFiYXNlTWFu
YWdlcgorLm9iamNfY2xhc3NfbmFtZV9XZWJTdG9yYWdlTWFuYWdlcgogLm9iamNfY2xhc3NfbmFt
ZV9XZWJEZWZhdWx0UG9saWN5RGVsZWdhdGUKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGV2aWNlT3Jp
ZW50YXRpb24KIC5vYmpjX2NsYXNzX25hbWVfV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1v
Y2sKQEAgLTExNCw2ICsxMTUsOCBAQCBfV2ViUmVwb3J0RXJyb3IKIF9XZWJTY3JpcHRFcnJvckRl
c2NyaXB0aW9uS2V5CiBfV2ViU2NyaXB0RXJyb3JEb21haW4KIF9XZWJTY3JpcHRFcnJvckxpbmVO
dW1iZXJLZXkKK19XZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkKK19XZWJTdG9yYWdlRGlk
TW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uCiBfV2ViVVJMTmFtZVBib2FyZFR5cGUKIF9XZWJVUkxQ
Ym9hcmRUeXBlCiBfV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbgpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQorCisjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgiCisjaW1w
b3J0ICJXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5h
Z2VySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNp
bXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3RvcmFn
ZVRyYWNrZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK05TU3RyaW5nICogY29u
c3QgV2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2NhbFN0b3JhZ2VE
YXRhYmFzZVBhdGhQcmVmZXJlbmNlS2V5IjsKK05TU3RyaW5nICogY29uc3QgV2ViU3RvcmFnZURp
ZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiA9IEAiV2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5v
dGlmaWNhdGlvbiI7CisKK3N0YXRpYyBOU1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsK
KworQGltcGxlbWVudGF0aW9uIFdlYlN0b3JhZ2VNYW5hZ2VyCisKKysgKFdlYlN0b3JhZ2VNYW5h
Z2VyICopc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXIKK3sKKyAgICBzdGF0aWMgV2ViU3RvcmFnZU1h
bmFnZXIgKnNoYXJlZE1hbmFnZXIgPSBbW1dlYlN0b3JhZ2VNYW5hZ2VyIGFsbG9jXSBpbml0XTsK
KyAgICByZXR1cm4gc2hhcmVkTWFuYWdlcjsKK30KKworLSAoTlNBcnJheSAqKW9yaWdpbnMKK3sK
KyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IGNvcmVPcmlnaW5zOworCisgICAg
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKGNvcmVPcmlnaW5zKTsKKworICAgIE5T
TXV0YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTpjb3JlT3JpZ2lucy5zaXplKCldOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3JlT3JpZ2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJTZWN1cml0eU9yaWdp
biAqd2ViT3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29y
ZVNlY3VyaXR5T3JpZ2luOmNvcmVPcmlnaW5zW2ldLmdldCgpXTsKKyAgICAgICAgW3dlYk9yaWdp
bnMgYWRkT2JqZWN0OndlYk9yaWdpbl07CisgICAgICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07Cisg
ICAgfQorCisgICAgcmV0dXJuIFt3ZWJPcmlnaW5zIGF1dG9yZWxlYXNlXTsKK30KKworLSAodm9p
ZClkZWxldGVBbGxPcmlnaW5zCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxl
dGVBbGxPcmlnaW5zKCk7Cit9CisKKy0gKHZvaWQpZGVsZXRlT3JpZ2luOihXZWJTZWN1cml0eU9y
aWdpbiAqKW9yaWdpbgoreworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3Jp
Z2luKFtvcmlnaW4gX2NvcmVdKTsKK30KKworLSAodm9pZClzeW5jTG9jYWxTdG9yYWdlCit7Cisg
ICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jTG9jYWxTdG9yYWdlKCk7Cit9CisKKy0g
KHZvaWQpc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UKK3sKKyAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7Cit9CisK
K3N0YXRpYyBOU1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeVBhdGgoKQoreworICAgIE5TVXNlckRl
ZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107
CisgICAgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnkgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5
OldlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleV07CisgICAgaWYgKCFzdG9yYWdlRGlyZWN0
b3J5IHx8ICFbc3RvcmFnZURpcmVjdG9yeSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KQorICAgICAgICBzdG9yYWdlRGlyZWN0b3J5ID0gQCJ+L0xpYnJhcnkvV2ViS2l0L0xvY2FsU3Rv
cmFnZSI7CisgICAgCisgICAgcmV0dXJuIFtzdG9yYWdlRGlyZWN0b3J5IHN0cmluZ0J5U3RhbmRh
cmRpemluZ1BhdGhdOworfQorCit2b2lkIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3Nh
cnkoKQoreworICAgIHN0YXRpYyBCT09MIGluaXRpYWxpemVkID0gTk87CisgICAgaWYgKGluaXRp
YWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RvcmFnZVRyYWNrZXI6OmluaXRp
YWxpemVUcmFja2VyKHN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkpOworICAgIAorICAgIFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuc2V0Q2xpZW50KFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFy
ZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpKTsKKyAgICAKKyAgICBpbml0aWFsaXplZCA9IFlF
UzsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2Uv
V2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKKwordm9pZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7CisK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMv
U3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VE
aXJlY3RvcnlEZWZhdWx0c0tleTsKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VE
aWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb247CisKK0BjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsK
KworQGludGVyZmFjZSBXZWJTdG9yYWdlTWFuYWdlciA6IE5TT2JqZWN0CisKKysgKFdlYlN0b3Jh
Z2VNYW5hZ2VyICopc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXI7CisKKy8vIFJldHVybnMgYW4gYXJy
YXkgb2YgV2ViU2VjdXJpdHlPcmlnaW4gb2JqZWN0cyB0aGF0IGhhdmUgTG9jYWxTdG9yYWdlLgor
LSAoTlNBcnJheSAqKW9yaWdpbnM7CisKKy0gKHZvaWQpZGVsZXRlQWxsT3JpZ2luczsKKy0gKHZv
aWQpZGVsZXRlT3JpZ2luOihXZWJTZWN1cml0eU9yaWdpbiAqKW9yaWdpbjsKKworLSAodm9pZClz
eW5jTG9jYWxTdG9yYWdlOworLSAodm9pZClzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFz
ZTsKKworQGVuZAorCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VU
cmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9X
ZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9t
YWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBv
cnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3RvcmFnZVRy
YWNrZXJDbGllbnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQqIHNoYXJlZFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW5Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCk7CisgICAgCisgICAgdmlydHVhbCB+
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRN
b2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4p
OworcHJpdmF0ZToKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworfTsKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRy
YWNrZXJDbGllbnQubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2ltcG9ydCAiV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQuaCIKKworI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5h
bC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgiCisjaW1wb3J0IDxXZWJD
b3JlL1BsYXRmb3JtU3RyaW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+
CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQqIFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpCit7
CisgICAgc3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFyZWRDbGllbnQgPSBuZXcg
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKKyAgICByZXR1cm4gc2hhcmVkQ2xpZW50OworfQor
CitXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKQorewor
fQorCitXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6fldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkK
K3sKK30KKwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlP
cmlnaW5Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTdG9yYWdlVHJh
Y2tlckNsaWVudCgpLT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0aWNfY2FzdDxTZWN1cml0
eU9yaWdpbio+KGNvbnRleHQpKTsKK30KKwordm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6
ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2lu
KQoreworICAgIFJldGFpblB0cjxXZWJTZWN1cml0eU9yaWdpbj4gd2ViU2VjdXJpdHlPcmlnaW4o
QWRvcHROUywgW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3Vy
aXR5T3JpZ2luOm9yaWdpbi5nZXQoKV0pOworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXZWJTdG9yYWdlRGlkTW9kaWZ5T3Jp
Z2luTm90aWZpY2F0aW9uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6d2ViU2VjdXJpdHlPcmlnaW4uZ2V0KCldOworfQorCit2
b2lkIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZp
ZXIob3JpZ2luSWRlbnRpZmllcik7CisKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJlYWQs
IHN0YXRpY19jYXN0PHZvaWQqPihvcmlnaW4ubGVha1JlZigpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW4pOworfQorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3Jp
Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YlNlY3VyaXR5T3JpZ2luLm1tCShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwyMyArNDYsMjggQEAgLSAoaWQpaW5pdFdpdGhVUkw6KE5TVVJMICopdXJsCiAKICAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChb
dXJsIGFic29sdXRlVVJMXSkpOwogICAgIG9yaWdpbi0+cmVmKCk7Ci0gICAgX3ByaXZhdGUgPSBy
ZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSo+KG9yaWdpbi5nZXQoKSk7
CisgICAgX3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0
ZSAqPihvcmlnaW4uZ2V0KCkpOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKE5TU3RyaW5n
Kilwcm90b2NvbAorLSAoTlNTdHJpbmcgKilwcm90b2NvbAogewogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5wcm90b2NvbCgpOwogfQogCi0t
IChOU1N0cmluZyopaG9zdAorLSAoTlNTdHJpbmcgKilob3N0CiB7CiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPmhvc3QoKTsKIH0KIAorLSAo
TlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Cit9
CisKIC8vIERlcHJlY2F0ZWQuIFVzZSBob3N0IGluc3RlYWQuIFRoaXMgbmVlZHMgdG8gc3RheSBo
ZXJlIHVudGlsIHdlIHNoaXAgYSBuZXcgU2FmYXJpLgotLSAoTlNTdHJpbmcqKWRvbWFpbgorLSAo
TlNTdHJpbmcgKilkb21haW4KIHsKICAgICByZXR1cm4gW3NlbGYgaG9zdF07CiB9CkBAIC0xMTEs
NyArMTE2LDcgQEAgLSAoaWQpX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOihTZQogICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgb3JpZ2luLT5yZWYoKTsKLSAgICBfcHJpdmF0ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKj4ob3JpZ2luKTsKKyAgICBf
cHJpdmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlICo+KG9y
aWdpbik7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5o
CShyZXZpc2lvbiA4MDc4NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMCBA
QCBAaW50ZXJmYWNlIFdlYlNlY3VyaXR5T3JpZ2luIDogTlNPYmplY3QgCiAKIC0gKGlkKWluaXRX
aXRoVVJMOihOU1VSTCAqKXVybDsKIAotLSAoTlNTdHJpbmcqKXByb3RvY29sOwotLSAoTlNTdHJp
bmcqKWhvc3Q7CistIChOU1N0cmluZyAqKXByb3RvY29sOworLSAoTlNTdHJpbmcgKilob3N0Owor
CistIChOU1N0cmluZyAqKWRhdGFiYXNlSWRlbnRpZmllcjsKIAogLy8gUmV0dXJucyB6ZXJvIGlm
IHRoZSBwb3J0IGlzIHRoZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBwcm90b2NvbCwgbm9uLXplcm8g
b3RoZXJ3aXNlLgogLSAodW5zaWduZWQgc2hvcnQpcG9ydDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDgwNzg0KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW1w
b3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYlNjcmlwdERlYnVnRGVs
ZWdhdGUuaCIKICNpbXBvcnQgIldlYlNjcmlwdFdvcmxkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5o
IgogI2ltcG9ydCAiV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJU
ZXh0SXRlcmF0b3IuaCIKQEAgLTY4Nyw2ICs2ODgsMTAgQEAgLSAodm9pZClfY29tbW9uSW5pdGlh
bGl6YXRpb25XaXRoRnJhbWVOYQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgV2ViS2l0
SW5pdGlhbGl6ZURhdGFiYXNlc0lmTmVjZXNzYXJ5KCk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKyAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgp
OworI2VuZGlmCiAgICAgICAgIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElm
TmVjZXNzYXJ5KCk7CiAgICAgICAgIHBhdGNoTWFpbFJlbW92ZUF0dHJpYnV0ZXNNZXRob2QoKTsK
ICAgICAgICAgCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA4MDc4NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDc2IEBACisyMDExLTAzLTEwICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisgICAgICAg
IEFkZCBXZWJLaXQxIEFQSSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorCisgICAg
ICAgIEFkZGVkIHRlc3RzIHRoYXQgd3JpdGUgdG8gTG9jYWxTdG9yYWdlLCBkZWxldGUgb25lIG9y
aWdpbiwgZ2V0IGxpc3Qgb2Ygb3JpZ2lucyB3aXRoIGxvY2FsIHN0b3JhZ2UsIGRlbGV0ZSBhbGwg
b3JpZ2lucy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNrKToKKyAg
ICAgICAgKG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjayk6CisgICAg
ICAgIChkZWxldGVBbGxMb2NhbFN0b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChkZWxldGVMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW5DYWxsYmFjayk6CisgICAgICAgIChvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZUNhbGxiYWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5j
dGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tOiBB
ZGRlZC4KKyAgICAgICAgKC1bU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBpbml0XSk6CisgICAgICAg
ICgtW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgbG9nTm90aWZpY2F0aW9uczpjb250cm9sbGVyOl0p
OgorICAgICAgICAoLVtTdG9yYWdlVHJhY2tlckRlbGVnYXRlIG9yaWdpbk1vZGlmaWVkOl0pOgor
ICAgICAgICAoLVtTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGRlYWxsb2NdKToKKyAgICAgICAgKC1b
U3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOl0pOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lu
KToKKyAgICAgICAgKG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAg
ICAoc3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5
b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAocmVzZXREZWZhdWx0c1RvQ29u
c2lzdGVudFZhbHVlcyk6CisgICAgICAgIChhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKToKKyAg
ICAgICAgKHJlbGVhc2VHbG9iYWxDb250cm9sbGVycyk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlTWFjLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lu
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNl
cyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdl
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9y
T3JpZ2luKToKKwogMjAxMS0wMy0xMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgSWdub3JlIGVycm9ycyBmcm9tIGZpbGVzIGJlaW5nIGhlbGQgb3BlbiB3aGVuIGNy
ZWF0aW5nIGEgdGVzdCByZXN1bHQgYXJjaGl2ZQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODA3ODQpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5NCw2ICszOTQsNjAgQEAgc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJBbGxEYXRhYmFzZXNDYWxs
YgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGlj
IEpTVmFsdWVSZWYgc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKworICAgIGNvbnRyb2xsZXItPnN5bmNMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgdW5zaWduZWQgbnVtTm90aWZp
Y2F0aW9ucyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CisKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+b2JzZXJ2
ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhudW1Ob3RpZmljYXRpb25zKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1
cmwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+ZGVs
ZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKHVybC5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJl
dHVybiBjb250cm9sbGVyLT5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb250ZXh0KTsKK30KKwog
c3RhdGljIEpTVmFsdWVSZWYgY2xlYXJCYWNrRm9yd2FyZExpc3RDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50
YXRpb24KQEAgLTIxNjMsNiArMjIxNywxMSBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6CiAgICAgICAgIHsgImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5Iiwg
YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJzZXRTY3JvbGxiYXJQb2xpY3kiLCBzZXRTY3JvbGxiYXJQb2xpY3lDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJhdXRoZW50aWNhdGVTZXNzaW9uIiwgYXV0aGVudGljYXRlU2Vzc2lvbkNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImRlbGV0ZUFsbExvY2FsU3RvcmFnZSIsIGRlbGV0
ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInN5bmNMb2NhbFN0
b3JhZ2UiLCBzeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgICAgICAgICAgICAgICAg
CisgICAgICAgIHsgIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCBvYnNlcnZl
U3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgICAgICAgIAorICAg
ICAgICB7ICJkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCBkZWxldGVMb2NhbFN0b3JhZ2VG
b3JPcmlnaW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZSIsIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAic2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZSIsIHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2VD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDgwNzg0
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMiBAQCBwdWJsaWM6CiAKICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gbWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0OwogCisgICAgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9y
YWdlKCk7CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYg
b3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmlj
YXRpb25zKHVuc2lnbmVkIG51bWJlcik7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisK
ICAgICB2b2lkIHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UoYm9vbCk7CiAgICAgYm9vbCBzaG91
bGRQYWludEJyb2tlbkltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYWludEJyb2tlbklt
YWdlOyB9CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRl
bGVnYXRlLmgJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJh
Y2tlckRlbGVnYXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworY2xhc3MgTGF5b3V0VGVzdENvbnRy
b2xsZXI7CisKK0BpbnRlcmZhY2UgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IHsK
KyAgICB1bnNpZ25lZCBudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZzsKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlclRvTm90aWZ5RG9uZTsKK30KKworLSAodm9pZClsb2dOb3Rp
ZmljYXRpb25zOih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjooTGF5b3V0VGVzdENvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7CistICh2b2lkKW9yaWdpbk1vZGlmaWVkOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpc2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZTooTGF5b3V0
VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CisKK0BlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMCkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTdG9yYWdlVHJhY2tlckRlbGVn
YXRlLmgiCisKKyNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW1wb3J0IDxXZWJL
aXQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFn
ZU1hbmFnZXJQcml2YXRlLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBTdG9yYWdlVHJhY2tlckRlbGVn
YXRlCisKKy0gKGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iob3JpZ2lu
TW9kaWZpZWQ6KSBuYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gb2Jq
ZWN0Om5pbF07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClsb2dOb3RpZmljYXRp
b25zOih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjooTGF5b3V0VGVzdENvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKK3sKKyAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lID0gY29udHJvbGxlcjsKKwor
ICAgIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nID0gbnVtYmVyOworfQorCistICh2b2lkKW9y
aWdpbk1vZGlmaWVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICgh
bnVtYmVyT2ZOb3RpZmljYXRpb25zVG9Mb2cpCisgICAgICAgIHJldHVybjsKKworICAgIG51bWJl
ck9mTm90aWZpY2F0aW9uc1RvTG9nLS07CisgICAgCisgICAgaWYgKG51bWJlck9mTm90aWZpY2F0
aW9uc1RvTG9nID09IDAgJiYgY29udHJvbGxlclRvTm90aWZ5RG9uZSkgeworICAgICAgICBOU0Fy
cmF5ICpvcmlnaW5zID0gW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdl
cl0gb3JpZ2luc107CisgICAgICAgIGZvciAoV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBv
cmlnaW5zKQorICAgICAgICAgICAgcHJpbnRmKCJPcmlnaW4gaWRlbnRpZmllcjogJyVzJ1xuIiwg
W1tvcmlnaW4gZGF0YWJhc2VJZGVudGlmaWVyXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIAorICAg
ICAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lLT5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCist
ICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90
aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRUZXN0Q29udHJvbGxlciop
Y29udHJvbGxlcgoreworICAgIGNvbnRyb2xsZXJUb05vdGlmeURvbmUgPSBjb250cm9sbGVyOwor
fQorCisKK0BlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODA3
ODQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAJCTI5Q0ZCQTJF
MTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0ZCQTJEMTIyNzNBMTAw
MEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSAqLzsgfTsKIAkJMzcxM0VE
RTIxMTVCRTE5MzAwNzA1NzIwIC8qIENvbG9yQml0cy1BLnBuZyBpbiBDb3B5IEZvbnQgRmlsZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VEREYxMTVCRTE2RjAwNzA1
NzIwIC8qIENvbG9yQml0cy1BLnBuZyAqLzsgfTsKIAkJMzcxM0VERTMxMTVCRTE5MzAwNzA1NzIw
IC8qIENvbG9yQml0cy50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3MTNFREUwMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRm
ICovOyB9OworCQkzQTU2MjZDQjEzMUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxl
Z2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNB
NTYyNkMxMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovOyB9
OworCQkzQTU2MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0E1NjI2QzAx
MzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLzsgfTsKIAkJNDQw
NTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5MDcwMTI2ODQ1
MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07CiAJCTQ0Mzc3
MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMwRkNERTg2NDAw
NTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0Mzc3MzBGMTI1
Q0JDNEQwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTk5NzgyMEZDREU4NjQwMDU4MEYxMCAv
KiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCAqLzsgfTsKQEAgLTIzMCw2ICsyMzIsOCBAQAogCQkz
NzVGMDk3NzBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1l
ID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRX
YXRjaGVyNzAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzgwREFD
M0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdl
aWdodFdhdGNoZXI4MDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50
dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTc5MERBQzNDQjYwMEM4QjRF
NSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVy
OTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzQTU2MjZDMDEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFn
ZVRyYWNrZXJEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9y
YWdlVHJhY2tlckRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBNTYy
NkMxMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQwNTkwNzAxMjY4NDUzODAwQ0ZENDhE
IC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbTsgcGF0aCA9IG1hYy9X
ZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0QTk5NzgyMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmg7IHBh
dGggPSBjZi9XZWJBcmNoaXZlRHVtcFN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDRBOTk3ODMwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1
cHBvcnQuY3BwOyBwYXRoID0gY2YvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MCw2ICs0NjQsOCBAQAogCQkJCUJDQTE4QjVFMEM5QjA4
QzIwMDExNDM2OSAvKiBSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbSAqLywKIAkJCQlCQ0ExOEI1RjBD
OUIwOEMyMDAxMTQzNjkgLyogVUlEZWxlZ2F0ZS5oICovLAogCQkJCUJDQTE4QjYwMEM5QjA4QzIw
MDExNDM2OSAvKiBVSURlbGVnYXRlLm1tICovLAorCQkJCTNBNTYyNkMwMTMxQzhCMTcwMDJCRTZE
OSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggKi8sCisJCQkJM0E1NjI2QzExMzFDOEIxNzAw
MkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9
IERlbGVnYXRlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02MjAsNiArNjI2LDcg
QEAKIAkJCQk1MTg1RjZCMzEwNzE0RTEyMDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMUI3ODE2NzExQUYzMUMzMDA3RTFCQzIgLyogTW9ja0dlb2xvY2F0
aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0ZCQTEwMTIyNzM2RTYwMEJDMzBD
MCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0E1NjI2
Q0MxMzFDQTAzNjAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtODA5LDYgKzgxNiw3IEBACiAJCQkJRTFCNzgxNjUxMUFGMzFCNzAwN0UxQkMyIC8q
IE1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMTEx
MjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNBNTYyNkNCMTMxQ0EwMkEwMDJCRTZEOSAv
KiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiA4MDc4NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5MiwxMiBA
QCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsCiAgICAgYmluZE1ldGhv
ZCgic2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CiAgICAgYmluZE1ldGhvZCgic2V0VXNlRGFzaGJvYXJk
Q29tcGF0aWJpbGl0eU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2Fy
ZENvbXBhdGliaWxpdHlNb2RlKTsKICAgICBiaW5kTWV0aG9kKCJzdG9yZVdlYlNjcmlwdE9iamVj
dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RvcmVXZWJTY3JpcHRPYmplY3QpOwotCisgICAg
YmluZE1ldGhvZCgiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRNZXRob2QoIm9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZSk7CisgICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOworICAgIGJpbmRN
ZXRob2QoIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOworICAgIGJpbmRN
ZXRob2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2Nh
bFN0b3JhZ2UpOworICAgIAogICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdo
ZW4gYW4gdW5rbm93biBtZXRob2QgaXMgaW52b2tlZC4KICAgICBiaW5kRmFsbGJhY2tNZXRob2Qo
JkxheW91dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZCk7CiAKQEAgLTE2MDIsMyArMTYw
NywzMCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltCiAgICAgICAg
IHJldHVybjsKICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldE1pbmltdW1U
aW1lckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKIH0KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKK3sKKyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5v
dCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIG9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQgc3luY0xvY2FsU3RvcmFn
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKK3sKKyAgICAvLyBOb3QgSW1w
bGVtZW50ZWQKK30KKworCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDgwNzg0KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzM3LDYgKzMzNywxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE1pbmltdW1U
aW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAorICAg
IC8vIExvY2FsU3RvcmFnZSBvcmlnaW4tcmVsYXRlZAorICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxT
dG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IHN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
CiBwdWJsaWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBub3QgZXhwb3NlZCB0
byBKYXZhU2NyaXB0LgogICAgIHZvaWQgc2V0V29ya1F1ZXVlRnJvemVuKGJvb2wgZnJvemVuKSB7
IG1fd29ya1F1ZXVlLnNldEZyb3plbihmcm96ZW4pOyB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9u
IDgwNzg0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVy
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSwzMSBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9z
ZXRfd2ViX2RhdGFiYXNlX3F1b3RhKG9yaWdpbiwgcXVvdGEpOwogfQogCitKU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYp
Cit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3Jh
Z2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICAgICAgLy8g
RklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZl
U3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICAgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5j
TG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hl
bWUoYm9vbCwgSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudApJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gODA3
ODQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbXBvcnQgIlBpeGVsRHVtcFN1cHBvcnQuaCIK
ICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCiAjaW1wb3J0ICJSZXNvdXJjZUxvYWREZWxlZ2F0
ZS5oIgorI2ltcG9ydCAiU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVUlEZWxl
Z2F0ZS5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmgiCiAjaW1wb3J0ICJXb3Jr
UXVldWUuaCIKQEAgLTc3LDYgKzc4LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNl
c1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVz
SW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8
Z2V0b3B0Lmg+CkBAIC0xMzQsNiArMTM2LDcgQEAgc3RhdGljIEVkaXRpbmdEZWxlZ2F0ZSAqZWRp
dGluZ0RlbGVnYXRlOwogc3RhdGljIFJlc291cmNlTG9hZERlbGVnYXRlICpyZXNvdXJjZUxvYWRE
ZWxlZ2F0ZTsKIHN0YXRpYyBIaXN0b3J5RGVsZWdhdGUgKmhpc3RvcnlEZWxlZ2F0ZTsKIFBvbGlj
eURlbGVnYXRlICpwb2xpY3lEZWxlZ2F0ZTsKK1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgKnN0b3Jh
Z2VEZWxlZ2F0ZTsKIAogc3RhdGljIGludCBkdW1wUGl4ZWxzOwogc3RhdGljIGludCB0aHJlYWRl
ZDsKQEAgLTQxNCw2ICs0MTcsNyBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0
ZW50VmFsCiAKICAgICBOU1N0cmluZyAqcGF0aCA9IGxpYnJhcnlQYXRoRm9yRHVtcFJlbmRlclRy
ZWUoKTsKICAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAIkRhdGFiYXNlcyJdIGZvcktleTpXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1
bHRzS2V5XTsKKyAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAIkxvY2FsU3RvcmFnZSJdIGZvcktleTpXZWJTdG9yYWdlRGlyZWN0b3J5
RGVmYXVsdHNLZXldOwogICAgIFtkZWZhdWx0cyBzZXRPYmplY3Q6W3BhdGggc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OkAiTG9jYWxDYWNoZSJdIGZvcktleTpXZWJLaXRMb2NhbENhY2hl
RGVmYXVsdHNLZXldOwogCiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlBy
ZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwpAQCAtNTQ1LDYgKzU0OSw3IEBAIHN0YXRp
YyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMoKQogICAgIHJlc291cmNlTG9hZERlbGVn
YXRlID0gW1tSZXNvdXJjZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF07CiAgICAgcG9saWN5RGVs
ZWdhdGUgPSBbW1BvbGljeURlbGVnYXRlIGFsbG9jXSBpbml0XTsKICAgICBoaXN0b3J5RGVsZWdh
dGUgPSBbW0hpc3RvcnlEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgc3RvcmFnZURlbGVnYXRl
ID0gW1tTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKIH0KIAogLy8gT2JqQysr
IGRvZW5zJ3Qgc2VlbSB0byBsZXQgbWUgcGFzcyBOU09iamVjdComIHNhZGx5LgpAQCAtNTYyLDYg
KzU2Nyw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VHbG9iYWxDb250cm9sbGVycygpCiAgICAgcmVs
ZWFzZUFuZFplcm8oJnJlc291cmNlTG9hZERlbGVnYXRlKTsKICAgICByZWxlYXNlQW5kWmVybygm
dWlEZWxlZ2F0ZSk7CiAgICAgcmVsZWFzZUFuZFplcm8oJnBvbGljeURlbGVnYXRlKTsKKyAgICBy
ZWxlYXNlQW5kWmVybygmc3RvcmFnZURlbGVnYXRlKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICph
cmd2W10pCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVNYWMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVN
YWMuaAkocmV2aXNpb24gODA3ODQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogQGNsYXNzIER1
bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvOwogQGNsYXNzIE5hdmlnYXRpb25Db250cm9sbGVyOwog
QGNsYXNzIFBvbGljeURlbGVnYXRlOworQGNsYXNzIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGU7CiBA
Y2xhc3MgV2ViRnJhbWU7CiBAY2xhc3MgV2ViU2NyaXB0V29ybGQ7CiBAY2xhc3MgV2ViVmlldzsK
QEAgLTQyLDYgKzQzLDcgQEAKIGNsYXNzIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvOwogY2xh
c3MgTmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBQb2xpY3lEZWxlZ2F0ZTsKK2NsYXNzIFN0
b3JhZ2VUcmFja2VyRGVsZWdhdGU7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlNjcmlwdFdv
cmxkOwogY2xhc3MgV2ViVmlldzsKQEAgLTU0LDYgKzU2LDcgQEAgZXh0ZXJuIFdlYkZyYW1lKiB0
b3BMb2FkaW5nRnJhbWU7CiBleHRlcm4gRHVtcFJlbmRlclRyZWVEcmFnZ2luZ0luZm8gKmRyYWdn
aW5nSW5mbzsKIGV4dGVybiBOYXZpZ2F0aW9uQ29udHJvbGxlciogZ05hdmlnYXRpb25Db250cm9s
bGVyOwogZXh0ZXJuIFBvbGljeURlbGVnYXRlKiBwb2xpY3lEZWxlZ2F0ZTsKK2V4dGVybiBTdG9y
YWdlVHJhY2tlckRlbGVnYXRlKiBzdG9yYWdlRGVsZWdhdGU7CiAKIGV4dGVybiBjb25zdCB1bnNp
Z25lZCBtYXhWaWV3SGVpZ2h0OwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdXaWR0aDsK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRy
b2xsZXJNYWMubW0JKHJldmlzaW9uIDgwNzg0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlv
blByb3ZpZGVyLmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiU3RvcmFn
ZVRyYWNrZXJEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV29y
a1F1ZXVlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWVJdGVtLmgiCkBAIC02Niw2ICs2Nyw3IEBACiAj
aW1wb3J0IDxXZWJLaXQvV2ViUXVvdGFNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2Ny
aXB0V29ybGQuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJUeXBlc0ludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlldy5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CkBAIC0xMzMsMTEgKzEzNSw1MyBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpCiAgICAgW1dlYkFwcGxpY2F0aW9u
Q2FjaGUgZGVsZXRlQWxsQXBwbGljYXRpb25DYWNoZXNdOwogfQogCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2Vy
IHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBzeW5jTG9jYWxTdG9yYWdlXTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1
bnNpZ25lZCBudW1iZXIpCit7CisgICAgW3N0b3JhZ2VEZWxlZ2F0ZSBsb2dOb3RpZmljYXRpb25z
Om51bWJlciBjb250cm9sbGVyOnRoaXNdOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVk
V2ViRGF0YWJhc2VNYW5hZ2VyXSBkZWxldGVBbGxEYXRhYmFzZXNdOwogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIFtbV2ViU3Rv
cmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdpbnNdOwor
fQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBXZWJTdG9yYWdlTWFuYWdlciAqc3Rv
cmFnZSA9IFtXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl07CisKKyAg
ICBOU0FycmF5ICpvcmlnaW5zID0gW3N0b3JhZ2Ugb3JpZ2luc107CisgICAgTlNJbnRlZ2VyIGNv
dW50ID0gW29yaWdpbnMgY291bnRdOworCisgICAgSlNWYWx1ZVJlZiBqc09yaWdpbnNBcnJheVtj
b3VudF07CisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAg
ICAgIE5TU3RyaW5nICpvcmlnaW4gPSBbW29yaWdpbnMgb2JqZWN0QXRJbmRleDppXSBkYXRhYmFz
ZUlkZW50aWZpZXJdOworICAgICAgICBKU1N0cmluZ1JlZiBzdHIgPSBKU1N0cmluZ0NyZWF0ZVdp
dGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpb3JpZ2luKTsKKyAgICAgICAganNPcmlnaW5zQXJyYXlb
aV0gPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHIpOworICAgIH0KKworICAgIEpTT2Jq
ZWN0UmVmIGpzQXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwg
anNPcmlnaW5zQXJyYXksIE5VTEwpOworICAgIHJldHVybiBqc0FycmF5T2JqZWN0OworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNT
dHJpbmdSZWYgVVJMKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRD
RiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVJMKSk7CisgICAg
CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxs
b2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXVybENGLmdl
dCgpXV07CisKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2Vy
XSBkZWxldGVPcmlnaW46b3JpZ2luXTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewogICAgIFdlYkJhY2tGb3J3YXJkTGlzdCAqYmFja0Zv
cndhcmRMaXN0ID0gW1ttYWluRnJhbWUgd2ViVmlld10gYmFja0ZvcndhcmRMaXN0XTsKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQu
Y3BwCShyZXZpc2lvbiA4MDc4NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDIsNSArODQyLDMwIEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KICAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobV9kcnQtPndlYlBhZ2UoKSwgbWlu
aW11bVRpbWVySW50ZXJ2YWwpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJl
cikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCiBjb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoID0g
ODAwOwogY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQg
PSA2MDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5oCShyZXZpc2lvbiA4MDc4NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Mywx
MiBAQCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBRU3Ry
aW5nJiBzb3VyY2VDb2RlKTsKIAogICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91
YmxlKTsKKyAgICAKKyAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7CisgICAgdm9p
ZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lk
IHN5bmNMb2NhbFN0b3JhZ2UoKTsKIAogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIHByb2Nlc3NX
b3JrKCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xs
ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDgwNzg0KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyOCw2ICsxNDI4LDQxIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6
ZUgKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1p
bmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsKICAgICBD
T01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CkBAIC0xNDQwLDMgKzE0NzUsNSBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltCiAKICAgICB2aWV3UHJpdmF0ZS0+c2V0TWlu
aW11bVRpbWVySW50ZXJ2YWwobWluaW11bVRpbWVySW50ZXJ2YWwpOwogfQorCisKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3Bw
CShyZXZpc2lvbiA4MDc4NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNCArNTU4LDMzIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUgKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkgewogCiB9Ci0g
ICAgCisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNzg0KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMTAg
IEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQg
ZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQ6CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlcjogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMi1jcmVhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxs
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fs
c3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9z
dG9yYWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9k
b21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1k
ZWxldGUtb25lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUt
b25lLmh0bWw6IEFkZGVkLgorCiAyMDExLTAxLTI1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0CShyZXZpc2lvbiA4MDc4NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYgKzE1MSwxMCBAQCBX
T05URklYIFNLSVAgOiBmYXN0L3dtbCA9IEZBSUwKIC8vIG1vc3QgbGlrZWx5IHRoZXNlIHRlc3Rz
IHdpbGwgYWx3YXlzIGJlIEpTQyBzcGVjaWZpYy4KIFdPTlRGSVggU0tJUCA6IGZhc3QvcHJvZmls
ZXIgPSBGQUlMIFRJTUVPVVQKIAorLy8gU3RvcmFnZVRyYWNrZXIgaXNuJ3QgdXNlZCBieSBDaHJv
bWl1bSBhbmQgbm90IGFsbCByZXF1aXNpdGUgcGxhdGZvcm0gY29kZQorLy8gaXMgaW1wbGVtZW50
ZWQuCitXT05URklYIFNLSVAgOiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3Jh
Z2V0cmFja2VyID0gUEFTUyBUSU1FT1VUIEZBSUwKKwogLy8gV2UgdXNlIHdvcmtlcl91aXRlc3Rz
IHRvIHJ1biB3b3JrZXJzIHRlc3RzLiBEb24ndCBydW4gdGhlbSBpbiB0ZXN0X3NoZWxsLgogV09O
VEZJWCBTS0lQIDogZmFzdC93b3JrZXJzID0gUEFTUyBUSU1FT1VUIEZBSUwKIFdPTlRGSVggU0tJ
UCA6IGZhc3QvZmlsZXMvd29ya2VycyA9IFBBU1MgVElNRU9VVCBGQUlMCkluZGV4OiBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3Jh
Z2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3Jh
Z2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitQcmVwYXJlIGZvciBTdG9yYWdlVHJhY2tlciB0ZXN0cyBieSBlbnN1cmluZyB0aGF0
IGV2ZXJ5IG9yaWdpbiB3aXRoIGxvY2FsIHN0b3JhZ2UgaXMgZGVsZXRlZC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91
dHB1dCBvbiBzdWNjZXNzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJh
Y2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiUHJlcGFyZSBmb3IgU3RvcmFnZVRyYWNrZXIgdGVzdHMgYnkgZW5zdXJpbmcgdGhhdCBl
dmVyeSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlIGlzIGRlbGV0ZWQuIik7CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2Fs
U3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhp
c3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0
IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAo
bGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAw
KSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnMoMSk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9
Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNT
dWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMCBAQAorT3JpZ2luIGlkZW50aWZpZXI6ICdmaWxlX18wJworU3RvcmFnZVRyYWNrZXIg
dGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2Fs
bGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1sLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiU3RvcmFn
ZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91
bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1sLiIpOworCitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0
b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGxheW91dFRlc3RDb250
cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICAv
LyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28gd2UgY2FuIGV4aXQuCisgICAgICAgIHRlc3RG
YWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0ZWQgd2l0aCBsb2NhbCBzdG9yYWdlLiIpOwor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc3luY0xvY2FsU3RvcmFnZSgpOworICAgICAg
ICAKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNvbWVEYXRhID0gJ3dyaXRlbWUnOworICAgICAgICAv
LyBMYXlvdXRUZXN0Q29udHJvbGxlcidzIG5vdGlmeURvbmUgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIg
dGhlIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9uIGNvbWVzIGluLgorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAg
IH0KK30KKwordGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citp
c1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFj
a2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3Jh
Z2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IEFQSSB0byB2aWV3IG9yaWdpbnMgdGhhdCBo
YXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRlbGV0ZSBsb2NhbCBzdG9yYWdlIGJ5IG9yaWdpbi4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgbGF5b3V0VGVzdENvbnRyb2xs
ZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIGlzICJmaWxlX18wIgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMy1kZWxldGUtYWxsLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBB
UEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUg
bG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAor
ZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExv
Y2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLnRvU3RyaW5n
KCkiLCAiZmlsZV9fMCIpOworICAgICAgICAvLyBXZSdyZSBqdXN0IGdvaW5nIHRvIGRlbGV0ZSB0
aGUgZXhpc3Rpbmcgb3JpZ2luLCBzbyB3ZSdsbCBnZXQgb25lIG9yaWdpbiBjaGFuZ2Ugbm90aWZp
Y2F0aW9uLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNr
ZXJOb3RpZmljYXRpb25zKDEpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVB
bGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHRlc3RGYWlsZWQoIlJhbiB3aXRoIG5vIG9yaWdp
bnMgd2l0aCBsb2NhbCBzdG9yYWdlIik7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwg
d2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgor
fQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3Vj
Y2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0
b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0
b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEgQEAKK09yaWdpbiBpZGVudGlmaWVyOiAnZmlsZV9fMCcKK1N0b3JhZ2VUcmFja2VyIHRl
c3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxl
ZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitUaGlzIHRlc3Qgc2hvdWxkIGhhdmUgbm8gdmlzaWJsZSBvdXRw
dXQgb24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2Vy
L3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1m
dW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdp
bi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0
bWwuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAg
IGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0
b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nl
c3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIC8vIEFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0
cyBzbyB3ZSBjYW4gZXhpdC4KKyAgICAgICAgdGVzdEZhaWxlZCgiQW4gb3JpZ2luIGFscmVhZHkg
ZXhpc3RlZCB3aXRoIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgICAgIGxvY2FsU3RvcmFnZS5zb21lT3RoZXJE
YXRhID0gJ3dyaXRlbWVNb3JlJzsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2
ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisK
K3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXIt
NS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tl
ci01LWRlbGV0ZS1vbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFu
ZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9fMCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRl
bGV0ZS1vbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1v
bmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0
aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3Jp
Z2luLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3Qo
KSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxT
dG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGgg
PiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygibGF5b3V0VGVzdENvbnRyb2xs
ZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIiwgImZpbGVfXzAiKTsKKyAg
ICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0byBkZWxldGUgdGhlIGV4aXN0aW5nIG9yaWdpbiwg
c28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsK
KyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBv
cmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oImZpbGU6Ly8iKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBvcmlnaW5zIHdpdGggbG9jYWwgc3RvcmFnZS4i
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKwor
fQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3Vj
Y2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85413</attachid>
            <date>2011-03-10 17:38:52 -0800</date>
            <delta_ts>2011-03-10 19:06:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110310173851.patch</filename>
            <type>text/plain</type>
            <size>132379</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNzk2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3Vwcyk6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERpcmVjdG9yeSk6CisgICAg
ICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYyk6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjppbml0aWFsaXplVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRy
YWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0lt
cG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2Vy
OjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRl
QWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJD
bGllbnQ6On5TdG9yYWdlVHJhY2tlckNsaWVudCk6CisKIDIwMTEtMDMtMTAgIEd5dXlvdW5nIEtp
bSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4MDc5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAzLDYgKzMyMDMs
OSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZUltcGwuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWUuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA4MDc5NikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NzAsNiAr
OTcwLDcgQEAgX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI2c2V0U2hvdWxkVHJhY2tWaQogX19aTjdX
ZWJDb3JlOVBhZ2VHcm91cDI5cmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9tV29ybGRFUE5TXzE1RE9N
V3JhcHBlcldvcmxkRVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMzByZW1vdmVV
c2VyU3R5bGVTaGVldHNGcm9tV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJD
b3JlOVBhZ2VHcm91cDlwYWdlR3JvdXBFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmU5UGFn
ZUdyb3VwMThudW1iZXJPZlBhZ2VHcm91cHNFdgogX19aTjdXZWJDb3JlOVNjcm9sbGJhcjIybWF4
T3ZlcmxhcEJldHdlZW5QYWdlc0V2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNHN0b3BFdgogX19a
TjdXZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZApAQCAtMTA5Myw2ICsxMDk0LDE2IEBAIF9fWk5L
N1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMTFmcmFtZUxvYWQKIF9fWk5LN1dlYkNvcmUxNFNlY3Vy
aXR5T3JpZ2luMTBjYW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0
eU9yaWdpbjE4ZGF0YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3Jp
Z2luNWVxdWFsRVBLUzBfCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorX19aTjdXZWJDb3JlMTRT
dG9yYWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFCitfX1pON1dl
YkNvcmUxNFN0b3JhZ2VUcmFja2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19fWk43V2ViQ29yZTE0
U3RvcmFnZVRyYWNrZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKK19fWk43
V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VU
cmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3Jp
Z2luRUVFTG0wRUVFCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyOXNldENsaWVudEVQTlNf
MjBTdG9yYWdlVHJhY2tlckNsaWVudEUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNnN5
bmNMb2NhbFN0b3JhZ2VFdgorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjMyc3luY0ZpbGVT
eXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VFdgorI2VuZGlmCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0Nv
bnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQxNXBsYXRmb3JtQ29udGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQx
NnBhaW50aW5nRGlzYWJsZWRFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODA3OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQ2MjAs
NiArNDYyMCw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3N0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXIuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDgwNzk2KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsNyArMjczNyw5
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3Rv
cmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaCBc
CiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCi0gICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFn
ZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisgICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyAr
PSBcCkBAIC0yNzU0LDcgKzI3NTYsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NU
T1JBR0U9MSkgCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKKyAg
ICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lT
VEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCShyZXZpc2lvbiA4MDc5NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTYxMyw2ICs2NTYxMywxNCBAQAog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxWZXJzaW9uQ2hhbmdlQ2FsbGJhY2suaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxT
dG9yYWdlVHJhY2tlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJzdHJpbmdzIgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gODA3OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw2ICs4NTEsOSBAQAogCQkzN0Y4MThGRDBENjU3
NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2Vi
Q29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25z
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3Rjgx
OEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3
RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5
IC8qIFRyZWVEZXB0aExpbWl0LmggKi87IH07CisJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAv
KiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0FCMDJEMkIx
MkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBT
dG9yYWdlVHJhY2tlci5jcHAgKi87IH07CisJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBT
dG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
M0FDNjQ4QjIxMjlFMTQ2NTAwQzNFQjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDNjQ4QjExMjlFMTQ2NTAwQzNF
QjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQxMDAyQ0NEMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5j
dGlvbkNhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxMDAyQ0NCMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCAqLzsgfTsK
IAkJNDEwMDJDQ0UwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTAwMkNDQzBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLzsgfTsKQEAgLTcyMzksNiAr
NzI0Miw5IEBACiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9u
c2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJM
UmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkM5NkRBMTEwNEVE
NzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVl
RGVwdGhMaW1pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlRGVwdGhM
aW1pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUIwMkQyODEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcmFnZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCMDJE
MjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2Vy
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2Vy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNBQzY0OEIxMTI5RTE0NjUw
MEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWRpdGluZ0JvdW5kYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MDAyQ0NCMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RnVuY3Rpb25DYWxsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5j
dGlvbkNhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTg1LDYg
KzEyOTkxLDkgQEAKIAkJCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVz
cGFjZUltcGwuaCAqLywKIAkJCQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcCAqLywKIAkJCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFn
ZVN5bmNNYW5hZ2VyLmggKi8sCisJCQkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3Jh
Z2VUcmFja2VyLmggKi8sCisJCQkJM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VU
cmFja2VyLmNwcCAqLywKKwkJCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRy
YWNrZXJDbGllbnQuaCAqLywKIAkJCSk7CiAJCQlpbmRlbnRXaWR0aCA9IDQ7CiAJCQlwYXRoID0g
c3RvcmFnZTsKQEAgLTIyMDcxLDYgKzIyMDgwLDcgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBB
QzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU1RTM4QkYx
MDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDNTEwMkQ5NDBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzQUIwMkQyQTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NDg4RDZCMERENUE4M0QwMDlEODNCMiAvKiBTdHJp
bmdTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIzNTQwRjMwRDAwNzgyRTAw
MjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYw
RUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMjU2NSw2ICsyMjU3NSw3IEBACiAJCQkJRTFGMUU4MzAwQzNDMkJCOTAwNkRCMzkxIC8qIFhT
TFRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlB
QkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUx
MjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FDMzY4
MDAxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTRmlsdGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDlCRDlGQTEzMUZEMkVEMDAzQzU2RjAgLyogQ1NTUHJpbWl0aXZlVmFsdWVD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4IC8qIFJl
bmRlclF1b3RlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0ODQyLDYgKzI0ODUzLDcgQEAKIAkJCQlD
NTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTVFMzhDMDEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzQUIwMkQyQjEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RB
MzAwRDAwNkMxRDAwRUY2RjI2IC8qIFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIy
NjQ1QzBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJCMjY0NUQwRDAwQTc3RTAwMEFDQzFEIC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDgwNzk2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiR3JvdXBTZXR0aW5ncy5oIgogI2luY2x1ZGUgIklEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFt
ZXNwYWNlLmgiCiAKQEAgLTExMCw2ICsxMTEsNTQgQEAgdm9pZCBQYWdlR3JvdXA6OmNsb3NlTG9j
YWxTdG9yYWdlKCkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCit2b2lk
IFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCkKK3sKKyAgICBpZiAo
IXBhZ2VHcm91cHMpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0
b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CisgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJh
dG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT5zZWNv
bmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgIH0K
K30KKwordm9pZCBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm47
CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVuZCgpOwor
ICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9jYWxTdG9y
YWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+Y2xlYXJPcmln
aW5Gb3JEZWxldGlvbihvcmlnaW4pOworICAgIH0gICAgCit9CisgICAgCit2b2lkIFBhZ2VHcm91
cDo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhZ2VHcm91cHMtPmVu
ZCgpOworICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBhZ2VHcm91cHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+aGFzTG9j
YWxTdG9yYWdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKS0+c3lu
YygpOworICAgIH0KK30KKwordW5zaWduZWQgUGFnZUdyb3VwOjpudW1iZXJPZlBhZ2VHcm91cHMo
KQoreworICAgIGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gcGFnZUdyb3Vwcy0+c2l6ZSgpOworfQorCisjZW5kaWYKKwogdm9pZCBQYWdlR3JvdXA6OmFk
ZFBhZ2UoUGFnZSogcGFnZSkKIHsKICAgICBBU1NFUlQocGFnZSk7CkBAIC0yMDksNiArMjU4LDcg
QEAgU3RvcmFnZU5hbWVzcGFjZSogUGFnZUdyb3VwOjpsb2NhbFN0b3JhZwogCiAgICAgcmV0dXJu
IG1fbG9jYWxTdG9yYWdlLmdldCgpOwogfQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCShyZXZpc2lvbiA4MDc5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdyb3VwU2V0dGluZ3M7
CiAgICAgY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CiAgICAgY2xhc3MgUGFnZTsK
KyAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwog
CiAgICAgY2xhc3MgUGFnZUdyb3VwIHsKQEAgLTQ5LDcgKzUwLDE1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgflBhZ2VHcm91cCgpOwogCiAgICAgICAgIHN0YXRpYyBQYWdlR3JvdXAq
IHBhZ2VHcm91cChjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSk7CisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAgICAgICAgIHN0YXRpYyB2b2lkIGNsb3NlTG9jYWxTdG9yYWdlKCk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgICAgICBz
dGF0aWMgdm9pZCBjbGVhckxvY2FsU3RvcmFnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwor
ICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBoZWxwZXIgdGhhdCB0cmlnZ2VycyBhIFN0b3JhZ2VB
cmVhIHN5bmMuCisgICAgICAgIHN0YXRpYyB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyNlbmRp
ZgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZQYWdlR3JvdXBzKCk7CiAgICAgICAg
IAogICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VzOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gODA3OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTIsNCArMTEyLDExIEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGwKICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9GaWxlKGhh
bmRsZSwgZGF0YSwgbGVuZ3RoKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCShyZXZpc2lvbiA4MDc5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDggKzMwLDEwIEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2lu
Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgogI2luY2x1ZGUgPGxpYmdlbi5o
PgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0yMjcs
MTAgKzIyOSwyOCBAQCBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiAg
ICAgcmV0dXJuIGRpcm5hbWUoZnNSZXAubXV0YWJsZURhdGEoKSk7CiB9CiAKLS8vIE9LIHRvIG5v
dCBpbXBsZW1lbnQgbGlzdERpcmVjdG9yeSBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIGl0J3Mgb25s
eSB1c2VkIGZvciBwbHVnLWlucywgYW5kCi0vLyBhbGwgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBz
aGFyZWQgcGx1Zy1pbiBpbXBsZW1lbnRhdGlvbiBoYXZlIGltcGxlbWVudGF0aW9ucy4gV2UnZCBu
ZWVkCi0vLyB0byBpbXBsZW1lbnQgaXQgaWYgd2Ugd2FudGVkIHRvIHVzZSBQbHVnaW5EYXRhYmFz
ZS5jcHAgb24gdGhlIE1hYy4gQmV0dGVyIHRvIG5vdCBpbXBsZW1lbnQKLS8vIGF0IGFsbCBhbmQg
Z2V0IGEgbGluayBlcnJvciBpbiBjYXNlIHRoaXMgYXJpc2VzLCByYXRoZXIgdGhhbiBoYXZpbmcg
YSBzdHViIGhlcmUsIGJlY2F1c2UKLS8vIHdpdGggYSBzdHViIHlvdSBsZWFybiBhYm91dCB0aGUg
cHJvYmxlbSBhdCBydW50aW1lIGluc3RlYWQgb2YgbGluayB0aW1lLgorVmVjdG9yPFN0cmluZz4g
bGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQor
eworICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CisgICAgQ1N0cmluZyBjcGF0aCA9IHBhdGgu
dXRmOCgpOworICAgIENTdHJpbmcgY2ZpbHRlciA9IGZpbHRlci51dGY4KCk7CisgICAgRElSKiBk
aXIgPSBvcGVuZGlyKGNwYXRoLmRhdGEoKSk7CisgICAgaWYgKGRpcikgeworICAgICAgICBzdHJ1
Y3QgZGlyZW50KiBkcDsKKyAgICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICAgICAgaWYg
KCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZubWF0Y2goY2ZpbHRlci5kYXRhKCksIG5h
bWUsIDApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2hhciBmaWxl
UGF0aFsxMDI0XTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihmaWxl
UGF0aCkgLSAxKSA8IHNucHJpbnRmKGZpbGVQYXRoLCBzaXplb2YoZmlsZVBhdGgpLCAiJXMvJXMi
LCBjcGF0aC5kYXRhKCksIG5hbWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBidWZm
ZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKGZpbGVQYXRoKTsKKyAgICAg
ICAgfQorICAgICAgICBjbG9zZWRpcihkaXIpOworICAgIH0KKyAgICByZXR1cm4gZW50cmllczsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA4MDc5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhU3luYy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTAsNiArNTEsMjcgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayhUeXBlIAogICAgIEFTU0VSVChtX3RocmVhZCk7CiAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBUZXJtaW5hdGVUaHJlYWQpOwogfQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayhUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IEltcG9ydE9yaWdpbnMgfHwgbV90eXBlID09IERlbGV0ZUFsbE9yaWdpbnMpOwor
fQorICAgIAorTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwg
bV9vcmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBEZWxldGVPcmlnaW4pOworfQorCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VU
YXNrKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRmlsZW5hbWUpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fb3JpZ2lu
SWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKQorICAgICwgbV9kYXRhYmFzZUZpbGVuYW1lKGRh
dGFiYXNlRmlsZW5hbWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBTZXRPcmlnaW5EZXRhaWxz
KTsKK30KIAogTG9jYWxTdG9yYWdlVGFzazo6fkxvY2FsU3RvcmFnZVRhc2soKQogewpAQCAtNjQs
NiArODYsMTggQEAgdm9pZCBMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3JtVGFzaygpCiAgICAgICAg
IGNhc2UgQXJlYVN5bmM6CiAgICAgICAgICAgICBtX2FyZWEtPnBlcmZvcm1TeW5jKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRPcmlnaW5EZXRhaWxzOgorICAgICAgICAg
ICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jU2V0T3JpZ2luRGV0YWlscyhtX29yaWdp
bklkZW50aWZpZXIsIG1fZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbXBvcnRPcmlnaW5zOgorICAgICAgICAgICAgU3RvcmFnZVRyYWNrZXI6OnRy
YWNrZXIoKS5zeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERlbGV0ZUFsbE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLnN5bmNEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBEZWxldGVPcmlnaW46CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLnN5bmNEZWxldGVPcmlnaW4obV9vcmlnaW5JZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERlbGV0ZUVtcHR5RGF0YWJhc2U6CiAgICAgICAg
ICAgICBtX2FyZWEtPmRlbGV0ZUVtcHR5RGF0YWJhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9u
IDgwNzk2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
IAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTQwLDEzICs0MSwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzayB7CiAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKExvY2FsU3RvcmFnZVRhc2spOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFT
eW5jLCBEZWxldGVFbXB0eURhdGFiYXNlLCBUZXJtaW5hdGVUaHJlYWQgfTsKKyAgICAgICAgZW51
bSBUeXBlIHsgQXJlYUltcG9ydCwgQXJlYVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFNldE9y
aWdpbkRldGFpbHMsIEltcG9ydE9yaWdpbnMsIERlbGV0ZUFsbE9yaWdpbnMsIERlbGV0ZU9yaWdp
biwgVGVybWluYXRlVGhyZWFkIH07CiAKICAgICAgICAgfkxvY2FsU3RvcmFnZVRhc2soKTsKIAog
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQo
U3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdl
VGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9j
YWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlRW1wdHlE
YXRhYmFzZShTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKERlbGV0ZUVtcHR5RGF0YWJhc2UsIGFyZWEpKTsgfQorICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVPcmlnaW5JZGVudGlmaWVyc0lt
cG9ydCgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEltcG9ydE9yaWdp
bnMpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVh
dGVTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1lKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9y
YWdlVGFzayhTZXRPcmlnaW5EZXRhaWxzLCBvcmlnaW5JZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVu
YW1lKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3Jl
YXRlRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgeyByZXR1cm4g
YWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlT3JpZ2luLCBvcmlnaW5JZGVudGlm
aWVyKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3Jl
YXRlRGVsZXRlQWxsT3JpZ2lucygpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VU
YXNrKERlbGV0ZUFsbE9yaWdpbnMpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2Nh
bFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQp
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwg
dGhyZWFkKSk7IH0KIAogICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKCk7CkBAIC01NCwxMCArNTks
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3Rv
cmFnZVRhc2soVHlwZSwgU3RvcmFnZUFyZWFTeW5jKik7CiAgICAgICAgIExvY2FsU3RvcmFnZVRh
c2soVHlwZSwgTG9jYWxTdG9yYWdlVGhyZWFkKik7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2so
VHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgTG9jYWxTdG9y
YWdlVGFzayhUeXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSk7CiAK
ICAgICAgICAgVHlwZSBtX3R5cGU7CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyogbV9hcmVhOwog
ICAgICAgICBMb2NhbFN0b3JhZ2VUaHJlYWQqIG1fdGhyZWFkOworICAgICAgICBTdHJpbmcgbV9v
cmlnaW5JZGVudGlmaWVyOworICAgICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGVuYW1lOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDgwNzk2KQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiAr
MjI3LDMxIEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZSgpCiAjZW5kaWYKIH0KIAordm9p
ZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAK
KyAgICBpZiAobV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90
YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFn
ZU1hcDo6Y3JlYXRlKHF1b3RhKTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMp
IHsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAg
bV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKyAg
ICAKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVTeW5j
KCk7Cit9CisKIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KSBjb25zdAogewogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkocmV2aXNpb24gODA3OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIE9ubHkgY2FsbGVkIGZy
b20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAorICAgICAgICAvLyBVc2VkIHRvIGNs
ZWFyIGEgU3RvcmFnZUFyZWEgYW5kIGNsb3NlIGRiIGJlZm9yZSBiYWNraW5nIGRiIGZpbGUgaXMg
ZGVsZXRlZC4KKyAgICAgICAgdm9pZCBjbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7CisKKyAgICAg
ICAgdm9pZCBzeW5jKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3Jh
Z2VTeW5jTWFuYWdlcj4sIHVuc2lnbmVkIHF1b3RhKTsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBs
KFN0b3JhZ2VBcmVhSW1wbCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcAkocmV2aXNpb24gODA3OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2Vy
LmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVybWluYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKQEAgLTEzOCw2ICsxMzksMjUgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNj
aGVkdWxlQ2xlYXIoKQogICAgIH0KIH0KIAordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxl
Q2xvc2VEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQoIW1fZmluYWxTeW5jU2NoZWR1bGVkKTsKKworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IHRydWU7Cisg
ICAgCisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1fc3luY1Rp
bWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVu
VGVybWluYXRpb24gaW4gdGhlCisgICAgICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgor
ICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICB9Cit9CisKIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMjIyLDYgKzI0MiwxMCBAQCB2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNlKE9wZW5ECiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICAvLyBBIFN0b3JhZ2VUcmFja2VyIHRocmVhZCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxl
ZCB0byBkZWxldGUgdGhlIGRiIHdlJ3JlCisgICAgLy8gcmVvcGVuaW5nLCBzbyBjYW5jZWwgcG9z
c2libGUgZGVsZXRpb24uCisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5jZWxEZWxl
dGluZ09yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CisKICAgICBpZiAoIW1fZGF0YWJhc2Uu
b3BlbihkYXRhYmFzZUZpbGVuYW1lKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBv
cGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIGxvY2FsIHN0b3JhZ2UiLCBkYXRhYmFzZUZpbGVuYW1l
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKQEAgLTIzNSw2ICsyNTks
OCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNlKE9wZW5ECiAgICAgICAgIG1f
ZGF0YWJhc2VPcGVuRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc2V0T3JpZ2luRGV0YWlscyhtX2RhdGFiYXNlSWRl
bnRpZmllciwgZGF0YWJhc2VGaWxlbmFtZSk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpw
ZXJmb3JtSW1wb3J0KCkKQEAgLTMxOSw2ICszNDUsMTUgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnN5bmMoYm9vbCBjbGVhckl0ZQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgLy8gQ2xvc2luZyB0aGlzIGRiIGJlY2F1c2UgaXQgaXMgYWJvdXQg
dG8gYmUgZGVsZXRlZCBieSBTdG9yYWdlVHJhY2tlci4KKyAgICAvLyBUaGUgZGVsZXRlIHdpbGwg
YmUgY2FuY2VsbGVkIGlmIFN0b3JhZ2VBcmVhU3luYyBuZWVkcyB0byByZW9wZW4gdGhlIGRiCisg
ICAgLy8gdG8gd3JpdGUgbmV3IGl0ZW1zIGNyZWF0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgdG8gZGVs
ZXRlIHRoZSBkYi4KKyAgICBpZiAobV9zeW5jQ2xvc2VEYXRhYmFzZSkgeworICAgICAgICBtX3N5
bmNDbG9zZURhdGFiYXNlID0gZmFsc2U7CisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBJZiB0aGUgY2xlYXIgZmxhZyBpcyBz
ZXQsIHRoZW4gd2UgY2xlYXIgYWxsIGl0ZW1zIG91dCBiZWZvcmUgd2Ugd3JpdGUgYW55IG5ldyBv
bmVzIGluLgogICAgIGlmIChjbGVhckl0ZW1zKSB7CiAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBj
bGVhcihtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7CkBAIC00MjEsMTIgKzQ1
NiwyMSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzCiAgICAgaWYg
KCFjb3VudCkgewogICAgICAgICBxdWVyeS5maW5hbGl6ZSgpOwogICAgICAgICBtX2RhdGFiYXNl
LmNsb3NlKCk7Ci0gICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdl
ci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotICAgICAgICBp
ZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShkYXRhYmFzZUZpbGVuYW1l
KSkKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxl
ICVzXG4iLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBpZiAoU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW4obV9kYXRhYmFzZUlkZW50aWZpZXIpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5j
TWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOworICAg
ICAgICAgICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZGF0YWJh
c2VGaWxlbmFtZSkpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRl
IGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZVN5bmMo
KQoreworICAgIHN5bmNUaW1lckZpcmVkKCZtX3N5bmNUaW1lcik7Cit9CisgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHJldmlzaW9uIDgwNzk2KQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBz
Y2hlZHVsZUl0ZW1Gb3JTeW5jKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICAgICAgdm9pZCBzY2hlZHVsZUNsZWFyKCk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVD
bG9zZURhdGFiYXNlKCk7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZVN5bmMoKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpOwpAQCAtOTIsNiArOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgbV9zeW5jU2NoZWR1bGVkOwogICAgICAgICBib29sIG1fc3luY0luUHJvZ3Jlc3M7
CiAgICAgICAgIGJvb2wgbV9kYXRhYmFzZU9wZW5GYWlsZWQ7CisgICAgICAgIAorICAgICAgICBi
b29sIG1fc3luY0Nsb3NlRGF0YWJhc2U7CiAKICAgICAgICAgbXV0YWJsZSBNdXRleCBtX2ltcG9y
dExvY2s7CiAgICAgICAgIG11dGFibGUgVGhyZWFkQ29uZGl0aW9uIG1faW1wb3J0Q29uZGl0aW9u
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgJKHJldmlz
aW9uIDgwNzk2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBj
bG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luYygpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZp
c2lvbiA4MDc5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU3RvcmFn
ZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VT
eW5jTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAt
MTQ0LDYgKzE0NSwzMiBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjp1bmxvY2soKQogICAg
IC8vIEJlY2F1c2UgdGhlcmUncyBhIHNpbmdsZSBldmVudCBsb29wIHBlci1wcm9jZXNzLCB0aGlz
IGlzIGEgbm8tb3AuCiB9CiAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyT3JpZ2lu
Rm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBt
X3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pOworICAgIGlmIChzdG9yYWdlQXJlYSkKKyAgICAg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKK30KKwordm9pZCBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICBpdC0+c2Vjb25kLT5jbGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisgICAgCit2b2lk
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFw
LmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdl
QXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnN5
bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERP
TV9TVE9SQUdFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuaAkocmV2aXNpb24gODA3OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCB1bmxvY2soKTsKIAorICAgICAgICAvLyBOb3QgcmVtb3ZpbmcgdGhlIG9y
aWdpbidzIFN0b3JhZ2VBcmVhIGZyb20gbV9zdG9yYWdlQXJlYU1hcCBiZWNhdXNlCisgICAgICAg
IC8vIHdlJ3JlIGp1c3QgZGVsZXRpbmcgdGhlIHVuZGVybHlpbmcgZGIgZmlsZS4gSWYgYW4gaXRl
bSBpcyBhZGRlZCBpbW1lZGlhdGVseQorICAgICAgICAvLyBhZnRlciBmaWxlIGRlbGV0aW9uLCB3
ZSB3YW50IHRoZSBzYW1lIFN0b3JhZ2VBcmVhIHRvIGV2ZW50dWFsbHkgdHJpZ2dlcgorICAgICAg
ICAvLyBhIHN5bmMgYW5kIGZvciBTdG9yYWdlQXJlYVN5bmMgdG8gcmVjcmVhdGUgdGhlIGJhY2tp
bmcgZGIgZmlsZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24o
U2VjdXJpdHlPcmlnaW4qKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0Zv
ckRlbGV0aW9uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jKCk7CisgICAgICAgIAogICAg
IHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlLCBjb25z
dCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRy
YWNrZXIuaCIKKworI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKKyNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VUaHJlYWQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZUdyb3Vw
LmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRy
YWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdG9yYWdl
VHJhY2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOworCit2b2lkIFN0b3JhZ2VUcmFja2VyOjppbml0
aWFsaXplVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCgh
c3RvcmFnZVRyYWNrZXIpOworICAgIGlmIChzdG9yYWdlVHJhY2tlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgc3RvcmFnZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgp
OworICAgIHN0b3JhZ2VUcmFja2VyLT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICBzdG9yYWdlVHJh
Y2tlci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKworU3RvcmFnZVRyYWNrZXImIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKK3sKKyAgICBpZiAoIXN0b3JhZ2VUcmFja2VyKSB7Cisg
ICAgICAgIHN0b3JhZ2VUcmFja2VyID0gbmV3IFN0b3JhZ2VUcmFja2VyKCIiKTsKKyAgICAgICAg
c3RvcmFnZVRyYWNrZXItPmltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiAqc3RvcmFnZVRyYWNrZXI7Cit9CisKK1N0b3JhZ2VUcmFja2VyOjpTdG9yYWdl
VHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQorICAgIDogbV9jbGllbnQoMCkKKyAg
ICAsIG1fdGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCkpCisgICAgLCBtX2lzQWN0
aXZlKGZhbHNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIAorICAg
IHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKHN0b3JhZ2VQYXRoKTsKKyAgICAKKyAgICBTUUxpdGVG
aWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOworICAgIAorICAgIG1fdGhyZWFkLT5zdGFy
dCgpOyAgCit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJlY3RvcnlQYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9k
YXRhYmFzZUd1YXJkKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgIAor
ICAgIG1fc3RvcmFnZURpcmVjdG9yeVBhdGggPSBwYXRoLnRocmVhZHNhZmVDb3B5KCk7Cit9CisK
K1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgo
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0b3JhZ2VUcmFja2VyLmRiIik7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RF
eGlzdCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKworICAgIGlm
IChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5n
IGRhdGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKKyAgICAKKyAgICBpZiAoIVNR
TGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KSkgeworICAgICAgICBpZiAoY3JlYXRlSWZEb2VzTm90RXhpc3Qp
CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGF0YWJhc2UgZmlsZSAn
JXMnIiwgZGF0YWJhc2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2VQYXRoICVzLiIsIGRhdGFiYXNl
UGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
bV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisgICAgCisgICAgaWYgKCFtX2Rh
dGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikpIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNl
LmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRFWFQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHBhdGggVEVYVCk7IikpCisgICAgICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBjcmVhdGUgT3JpZ2lucyB0YWJsZS4iKTsKKyAgICB9Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKK3sgICAKKyAgICBpZiAo
IW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVU
YXNrKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KCkpOwor
fQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQor
eworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICAKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJh
c2VHdWFyZCk7CisKKyAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAg
IGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBv
cmlnaW4gRlJPTSBPcmlnaW5zIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJl
IHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tl
ciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgICAgIHdoaWxlICgocmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KQorICAgICAgICAgICAgICAg
IG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKS50aHJlYWRzYWZlQ29w
eSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHREb25lKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3Jp
Z2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICB9CisgICAgCisgICAgc3luY0ZpbGVTeXN0
ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgIE9y
aWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7CisgICAgICAg
IGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlm
eU9yaWdpbigqaXQpOworICAgIH0KK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNG
aWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7
CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZmlsZU1hdGNoUGF0dGVy
biwgKCIqLmxvY2Fsc3RvcmFnZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgZmlsZUV4dCwgKCIubG9jYWxzdG9yYWdlIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgdW5zaWduZWQsIGZpbGVFeHRMZW5ndGgsIChmaWxlRXh0Lmxlbmd0aCgpKSk7CisK
KyAgICBWZWN0b3I8U3RyaW5nPiBwYXRocyA9IGxpc3REaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0
b3J5UGF0aCwgZmlsZU1hdGNoUGF0dGVybik7CisgICAgCisgICAgLy8gQWRkIG1pc3NpbmcgU3Rv
cmFnZVRyYWNrZXIgcmVjb3Jkcy4KKyAgICBPcmlnaW5TZXQgZm91bmRPcmlnaW5zOworICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3Ig
KFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0aCA9ICppdDsKKyAgICAgICAgaWYgKHBh
dGguZW5kc1dpdGgoZmlsZUV4dCwgdHJ1ZSkgJiYgcGF0aC5sZW5ndGgoKSA+IGZpbGVFeHRMZW5n
dGgpIHsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwor
ICAgICAgICAgICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlLnN1YnN0cmluZygwLCBm
aWxlLmxlbmd0aCgpIC0gZmlsZUV4dExlbmd0aCk7CisgICAgICAgICAgICBpZiAoIW1fb3JpZ2lu
U2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
TWFpblRocmVhZCgpKQorICAgICAgICAgICAgICAgICAgICBzZXRPcmlnaW5EZXRhaWxzKG9yaWdp
bklkZW50aWZpZXIsIHBhdGgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgc3luY1NldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllciwgcGF0aCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvdW5kT3JpZ2lucy5hZGQob3JpZ2luSWRlbnRpZmll
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWxldGUgc3RhbGUgU3RvcmFnZVRyYWNr
ZXIgcmVjb3Jkcy4KKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIHNldEVuZCA9IG1fb3Jp
Z2luU2V0LmVuZCgpOworICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
b3JpZ2luU2V0LmJlZ2luKCk7IGl0ICE9IHNldEVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWZv
dW5kT3JpZ2lucy5jb250YWlucygqaXQpKSB7CisgICAgICAgICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpCisgICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luKCppdCk7CisgICAgICAgICAgICBlbHNl
IAorICAgICAgICAgICAgICAgIHN5bmNEZWxldGVPcmlnaW4oKml0KTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAg
IGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKworICAgICAgICBpZiAobV9v
cmlnaW5TZXQuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbV9vcmlnaW5TZXQuYWRkKG9yaWdpbklkZW50aWZpZXIpOworICAgIH0KKwor
ICAgIExvY2FsU3RvcmFnZVRhc2sqIHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTZXRP
cmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0YWJhc2VG
aWxlKS5sZWFrUHRyKCk7CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fdGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNrKTsKKyAg
ICB9IGVsc2UgCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAodm9pZCop
dGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxlVGFzayh2b2lkKiB0YXNr
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKFN0b3JhZ2VUcmFj
a2VyOjp0cmFja2VyKCkubV90aHJlYWQpOworICAgIAorICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6
dHJhY2tlcigpLm1fdGhyZWFkKQorICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1f
dGhyZWFkLT5zY2hlZHVsZVRhc2soKExvY2FsU3RvcmFnZVRhc2sqKXRhc2spOworfQorCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJh
c2VHdWFyZCk7CisKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIAorICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyBWQUxVRVMg
KD8sID8pIik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRo
ZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9IAorICAgIAorICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJhc2VGaWxlKTsKKyAgICAK
KyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIiLCBv
cmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgIGlmICghbV9vcmln
aW5TZXQuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpCisgICAgICAgICAgICBtX29yaWdpblNl
dC5hZGQob3JpZ2luSWRlbnRpZmllcik7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7
Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gPiYgcmVzdWx0KQoreworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICAKKyAg
ICBpZiAoIW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTog
U3RvcmFnZVRyYWNrZXIgaXMgY3VycmVudGx5IGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgYXNz
dW1lZAorICAgIC8vIHRvIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIHdpdGggbW9yZSB0aGFuIG9u
ZSBQYWdlR3JvdXAuCisgICAgQVNTRVJUKFBhZ2VHcm91cDo6bnVtYmVyT2ZQYWdlR3JvdXBzKCkg
PT0gMSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsK
KworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7
CisgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKCppdCkpOworfQorCit2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAg
IAorICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJ
WE1FOiBTdG9yYWdlVHJhY2tlciBpcyBjdXJyZW50bHkgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBi
ZSBhc3N1bWVkCisgICAgLy8gdG8gaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2l0aCBtb3JlIHRo
YW4gb25lIFBhZ2VHcm91cC4KKyAgICBBU1NFUlQoUGFnZUdyb3VwOjpudW1iZXJPZlBhZ2VHcm91
cHMoKSA9PSAxKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9v
cmlnaW5TZXRHdWFyZCk7CisgICAgICAgIHdpbGxEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgICAg
IG1fb3JpZ2luU2V0LmNsZWFyKCk7CisgICAgfQorCisgICAgUGFnZUdyb3VwOjpjbGVhckxvY2Fs
U3RvcmFnZUZvckFsbE9yaWdpbnMoKTsKKyAgICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNr
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMoKSk7Cit9CisgICAgCit2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7Cisg
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0
aCBGUk9NIE9yaWdpbnMiKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzdWx0OworICAgIHdo
aWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAg
ICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVEYXRhYmFzZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOworICAgICAgICBpZiAo
bV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4o
c3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgaW4g
YWxsIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7CisgICAgCisgICAgaWYgKG1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKKyAgICAKKyAgICBTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKTsK
KyAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fc3Rv
cmFnZURpcmVjdG9yeVBhdGgpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmln
aW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIGRlbGV0ZU9yaWdpbihT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihvcmlnaW5JZGVudGlm
aWVyKS5nZXQoKSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1
cml0eU9yaWdpbiogb3JpZ2luKQoreyAgICAKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAgIAorICAg
IGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFN0b3Jh
Z2VUcmFja2VyIGlzIGN1cnJlbnRseSBhIHNpbmdsZXRvbiBhbmQgc2hvdWxkIGJlIGFzc3VtZWQK
KyAgICAvLyB0byBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciB3aXRoIG1vcmUgdGhhbiBvbmUgUGFn
ZUdyb3VwLgorICAgIEFTU0VSVChQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3VwcygpID09IDEp
OworICAgIAorICAgIC8vIEJlZm9yZSBkZWxldGluZyBkYXRhYmFzZSwgd2UgbmVlZCB0byBjbGVh
ciBpbi1tZW1vcnkgbG9jYWwgc3RvcmFnZSBkYXRhCisgICAgLy8gaW4gU3RvcmFnZUFyZWEsIGFu
ZCB0byBjbG9zZSB0aGUgU3RvcmFnZUFyZWEgZGIuIEl0J3MgcG9zc2libGUgZm9yIGFuCisgICAg
Ly8gaXRlbSB0byBiZSBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBjbG9zaW5nIHRoZSBkYiBhbmQg
Y2F1c2UgU3RvcmFnZUFyZWFTeW5jCisgICAgLy8gdG8gcmVvcGVuIHRoZSBkYiBiZWZvcmUgdGhl
IGRiIGlzIGRlbGV0ZWQgYnkgYSBTdG9yYWdlVHJhY2tlciB0aHJlYWQuCisgICAgLy8gSW4gdGhp
cyBjYXNlLCByZW9wZW5pbmcgdGhlIGRiIGluIFN0b3JhZ2VBcmVhU3luYyB3aWxsIGNhbmNlbCBh
IHBlbmRpbmcKKyAgICAvLyBTdG9yYWdlVHJhY2tlciBkYiBkZWxldGlvbi4KKyAgICBQYWdlR3Jv
dXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKG9yaWdpbik7CisKKyAgICBTdHJpbmcgb3Jp
Z2luSWQgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOworICAgIAorICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgIHdp
bGxEZWxldGVPcmlnaW4ob3JpZ2luSWQpOworICAgICAgICBtX29yaWdpblNldC5yZW1vdmUob3Jp
Z2luSWQpOworICAgIH0KKyAgICAKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKExvY2FsU3Rv
cmFnZVRhc2s6OmNyZWF0ZURlbGV0ZU9yaWdpbihvcmlnaW5JZCkpOworfQorCit2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxv
Y2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIAorICAgIGlmICghY2FuRGVsZXRlT3Jp
Z2luKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdGVkIHRv
IGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxuIiwgb3JpZ2lu
SWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IG9yaWdpbidzIGRiIGZp
bGUgcGF0aCwgZGVsZXRlIGVudHJ5IGluIHRyYWNrZXIncyBkYiwgdGhlbiBkZWxldGUgZGIgZmls
ZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgcGF0aFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
IHBhdGggRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgaWYgKHBhdGhTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHByZXBhcmUgc2VsZWN0aW9uIG9mIHBhdGggZm9yIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGF0
aFN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpbnQgcmVzdWx0
ID0gcGF0aFN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZmluZCBvcmlnaW4gJyVzJyBpbiBPcmln
aW5zIHRhYmxlIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHBhdGggPSBwYXRoU3RhdGVtZW50LmdldENv
bHVtblRleHQoMCk7CisKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICAKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBP
cmlnaW5zIHdoZXJlIG9yaWdpbj0/Iik7CisgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFy
ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZVN0YXRlbWVudC5iaW5kVGV4
dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4ZWN1dGUgZGVsZXRp
b24gb2Ygb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZShwYXRoKTsKKyAgICAKKyAgICBib29sIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9
IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgb3JpZ2luTG9jayhtX29yaWdpblNl
dEd1YXJkKTsKKyAgICAgICAgbV9vcmlnaW5TZXQucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOwor
ICAgICAgICBzaG91bGREZWxldGVUcmFja2VyRmlsZXMgPSBtX29yaWdpblNldC5pc0VtcHR5KCk7
CisgICAgfQorCisgICAgaWYgKHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcykgeworICAgICAgICBt
X2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgICAgICBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaXNwYXRj
aERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFn
ZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIW1fb3JpZ2lu
U2V0R3VhcmQudHJ5TG9jaygpKTsKKworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9vcmlnaW5TZXQuZW5kKCk7CisgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9vcmlnaW5TZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBtX29y
aWdpbnNCZWluZ0RlbGV0ZWQuYWRkKCgqaXQpLnRocmVhZHNhZmVDb3B5KCkpOworfQorCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjp3aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9v
cmlnaW5TZXRHdWFyZC50cnlMb2NrKCkpOworCisgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFk
ZChvcmlnaW5JZGVudGlmaWVyKTsKK30KKyAgICAKK2Jvb2wgU3RvcmFnZVRyYWNrZXI6OmNhbkRl
bGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lu
cyhtX29yaWdpblNldEd1YXJkKTsKKyAgICByZXR1cm4gbV9vcmlnaW5zQmVpbmdEZWxldGVkLmNv
bnRhaW5zKG9yaWdpbklkZW50aWZpZXIpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpjYW5j
ZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAg
aWYgKCFtX2lzQWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2Nr
T3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2Uo
bV9kYXRhYmFzZUd1YXJkKTsKKyAgICBpZiAoIW1fb3JpZ2luc0JlaW5nRGVsZXRlZC5pc0VtcHR5
KCkpCisgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5yZW1vdmUob3JpZ2luSWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldENsaWVudChTdG9yYWdlVHJhY2tlckNs
aWVudCogY2xpZW50KQoreworICAgIG1fY2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBQYWdlR3JvdXA6OnN5bmNMb2Nh
bFN0b3JhZ2UoKTsKK30KKyAgICAKK2Jvb2wgU3RvcmFnZVRyYWNrZXI6OmlzQWN0aXZlKCkKK3sK
KyAgICByZXR1cm4gbV9pc0FjdGl2ZTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0SXNB
Y3RpdmUoYm9vbCBmbGFnKQoreworICAgIG1faXNBY3RpdmUgPSBmbGFnOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tl
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U3RvcmFnZVRyYWNrZXJfaAorI2RlZmluZSBTdG9yYWdlVHJhY2tlcl9oCisKKyNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCisgICAgCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTG9jYWxTdG9y
YWdlVGFzazsKK2NsYXNzIExvY2FsU3RvcmFnZVRocmVhZDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2lu
OworY2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnQ7ICAgIAorCitjbGFzcyBTdG9yYWdlVHJhY2tl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZVRyYWNrZXIpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVU
cmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOworICAgIHN0YXRpYyBTdG9yYWdlVHJh
Y2tlciYgdHJhY2tlcigpOworICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlVGFzayh2b2lkKik7CisK
KyAgICB2b2lkIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBzZXRPcmlnaW5E
ZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUZpbGUpOworICAgIAorICAgIHZvaWQgZGVsZXRlQWxsT3JpZ2lucygpOworICAgIHZvaWQg
ZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgdm9pZCBkZWxldGVPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9yaWdpbnMoVmVjdG9yPFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKKworICAgIHZvaWQgY2FuY2VsRGVsZXRp
bmdPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAKKyAgICB2b2lk
IHNldENsaWVudChTdG9yYWdlVHJhY2tlckNsaWVudCopOworICAgIAorICAgIGJvb2wgaXNBY3Rp
dmUoKTsKKworICAgIC8vIFN5bmMgdG8gZGlzayBvbiBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICB2
b2lkIHN5bmNEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBzeW5jRGVsZXRlT3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBzeW5jU2V0T3JpZ2luRGV0
YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VGaWxlKTsKKyAgICB2b2lkIHN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgIHZv
aWQgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKworICAgIHZvaWQgc3luY0xv
Y2FsU3RvcmFnZSgpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmlu
ZyYgc3RvcmFnZVBhdGgpOworCisgICAgU3RyaW5nIHRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25z
dDsKKyAgICB2b2lkIG9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlz
dCk7CisKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYpOwor
CisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKworICAgIGJvb2wgY2FuRGVsZXRlT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCB3aWxsRGVsZXRl
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCB3aWxsRGVs
ZXRlQWxsT3JpZ2lucygpOworCisgICAgdm9pZCBvcmlnaW5GaWxlUGF0aHMoVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKTsKKyAgICAKKyAgICB2b2lkIHNldElzQWN0aXZlKGJvb2wpOworCisgICAgTXV0
ZXggbV9kYXRhYmFzZUd1YXJkOworICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CisKKyAg
ICBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKKworICAgIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50KiBtX2NsaWVudDsKKworICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IE9yaWdpblNldDsK
KworICAgIE11dGV4IG1fb3JpZ2luU2V0R3VhcmQ7CisgICAgT3JpZ2luU2V0IG1fb3JpZ2luU2V0
OworICAgIE9yaWdpblNldCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQ7CisKKyAgICBPd25QdHI8TG9j
YWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKKyAgICAKKyAgICBib29sIG1faXNBY3RpdmU7Cit9
OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9T
VE9SQUdFKQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJfaApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50X2gKKyNkZWZpbmUgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdG9yYWdlVHJhY2tlckNs
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3RvcmFnZVRyYWNrZXJDbGllbnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBTdG9yYWdlVHJhY2tlckNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gODA3
OTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEyIEBACisyMDExLTAzLTEwICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktp
dDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTEtMDMtMDIgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDgwNzk2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTEgQEAKIAkJMzdCNkZCNEYx
MDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdCNkZCNEQxMDYzNTMwQzAwMEZEQjNC
IC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tICovOyB9OwogCQkzN0QxRENBODEwNjU5MjhDMDA2
OEY3RUYgLyogV2ViSlNQREZEb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3RDFEQ0E2MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oICov
OyB9OwogCQkzN0QxRENBOTEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENBNzEwNjU5MjhD
MDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gKi87IH07CisJCTNBQjAyQUY2MTJDMTMxOUIwMEZC
QjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdl
TWFuYWdlci5tbSAqLzsgfTsKKwkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3Jh
Z2VNYW5hZ2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJp
dmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTNBQkIzQzdBMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzgxMzA5
QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IH07CisJCTNBQkIz
QzdCMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQkIzQzc5MTMwOUMzQjUw
MEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSAqLzsgfTsKKwkJM0FFMTVENTAx
MkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBRTE1RDRGMTJEQkRFRDQwMDkz
MjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggKi87IH07CiAJCTQxRjQ0ODRGMTAz
MzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNDQ4NEQxMDMzOEU4QzAwMzBFNTVFIC8qIFdl
YldvcmtlcnNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDFGNDQ4NTAxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRl
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNDQ4
NEUxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLm1tICovOyB9OwogCQk0NEJC
OEIxNDEyNDFBMDIyMDAxRTNBMjIgLyogV2ViQXJjaGl2ZUludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEJCOEIxMzEyNDFBMDIyMDAxRTNB
MjIgLyogV2ViQXJjaGl2ZUludGVybmFsLmggKi87IH07CkBAIC00ODMsNiArNDg4LDExIEBACiAJ
CTM5NDQ2MDdFMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJCYWNrRm9yd2FyZExpc3QubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJC
YWNrRm9yd2FyZExpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA3RjAyMEY1MEVEMEVDQTE3NjcgLyogV2ViSGlzdG9y
eUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDgwMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0
b3J5SXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkhpc3RvcnlJdGVtLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0
IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXJQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQkIzQzc4MTMwOUMzQjUwMEU5
M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzQUJCM0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FFMTVE
NEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUgLyog
V2ViV29ya2Vyc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
V29ya2Vyc1ByaXZhdGUuaDsgcGF0aCA9IG1hYy9Xb3JrZXJzL1dlYldvcmtlcnNQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjQ0ODRFMTAzMzhFOEMwMDMwRTU1RSAv
KiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdlYldvcmtlcnNQcml2YXRlLm1tOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vy
c1ByaXZhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OTA5OEI5MEY4Rjgy
REYwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEwNTYsNiArMTA2NiwxMSBAQAogCQkJCUE1REVGQzBFMTFENTM0M0UwMDg4
NTI3MyAvKiBXZWJEYXRhYmFzZVF1b3RhTWFuYWdlci5tbSAqLywKIAkJCQk1MTFGM0ZEMzBDRUND
ODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJNTExRjNG
RDQwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbSAqLywKKwkJ
CQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8sCisJ
CQkJM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5o
ICovLAorCQkJCTNBRTE1RDRGMTJEQkRFRDQwMDkzMjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlcklu
dGVybmFsLmggKi8sCisJCQkJM0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VU
cmFja2VyQ2xpZW50LmggKi8sCisJCQkJM0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBTdG9yYWdlOwogCQkJ
cGF0aCA9IG1hYy9TdG9yYWdlOwpAQCAtMTYyNSw3ICsxNjQwLDEwIEBACiAJCQkJNTk4QUQ5MkEx
MjAxQ0YzQjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5OEFEQTQ2MTIwMjI3NTAwMEFCQUU0RSAvKiBXZWJE
ZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyQTFBNDEy
M0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBRTE1RDUwMTJEQkRFRDQwMDkz
MjNDOCAvKiBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkz
QUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNDJEMzI0MTMxRUQxRTAwMDc1RkE0QiAvKiBXZWJMb2NhbGl6YWJs
ZVN0cmluZ3NJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xOTkzLDcgKzIwMTEsOSBAQAogCQkJCTU5
OEFEOTIyMTIwMUNGMTAwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTU5OEFEOTI4MTIwMUNGMzIwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRh
dGlvblByb3ZpZGVyTW9jay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTJBMUE1MTIzQjBCM0Mw
MDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQUIw
MkFGNjEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDREE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkzQUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQyRDM0RDEzMUVE
Mzg4MDA3NUZBNEIgLyogV2ViTG9jYWxpemFibGVTdHJpbmdzSW50ZXJuYWwubW0gaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDc5NikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDMtMTAgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBB
UEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgKiBzcmMvU3RvcmFn
ZU5hbWVzcGFjZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQ
cm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
TmFtZXNwYWNlUHJveHk6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6c3luYyk6CisgICAgICAgICogc3JjL1N0b3Jh
Z2VOYW1lc3BhY2VQcm94eS5oOgorCiAyMDExLTAzLTEwICBOYXQgRHVjYSAgPG5kdWNhQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5
LmNwcAkocmV2aXNpb24gODA3OTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9y
YWdlTmFtZXNwYWNlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwyMSBAQCB2
b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6dW5sb2NrKCkKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgogfQogCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJPcmlnaW5Gb3JEZWxl
dGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVs
ZXRpb24oKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFN0b3JhZ2VO
YW1lc3BhY2VQcm94eTo6c3luYygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3Bh
Y2VQcm94eS5oCShyZXZpc2lvbiA4MDc5NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgdW5sb2NrKCk7
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlP
cmlnaW4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc3luYygpOwogCiBwcml2YXRlOgogICAgIE93blB0cjxX
ZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2U+IG1fc3RvcmFnZU5hbWVzcGFjZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNzk2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTE4NzgKKyAgICAgICAgQWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2Nh
bCBzdG9yYWdlCisKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOiBBZGRl
ZC4KKyAgICAgICAgKCtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJd
KToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgb3JpZ2luc10pOgorICAgICAgICAoLVtX
ZWJTdG9yYWdlTWFuYWdlciBkZWxldGVBbGxPcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3Jh
Z2VNYW5hZ2VyIGRlbGV0ZU9yaWdpbjpdKToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIg
c3luY0xvY2FsU3RvcmFnZV0pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciBzeW5jRmls
ZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZV0pOgorICAgICAgICAoc3RvcmFnZURpcmVjdG9yeVBh
dGgpOgorICAgICAgICAoV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAg
ICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmg6IEFkZGVkLgorICAgICAg
ICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAq
IFN0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogU3Rv
cmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJTdG9y
YWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAg
ICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KToKKyAg
ICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQp
OgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNw
YXRjaERpZE1vZGlmeU9yaWdpbik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJp
dHlPcmlnaW4ubW06CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIHByb3RvY29sXSk6Cisg
ICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIGhvc3RdKToKKyAgICAgICAgKC1bV2ViU2VjdXJp
dHlPcmlnaW4gZGF0YWJhc2VJZGVudGlmaWVyXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3Jp
Z2luIGRvbWFpbl0pOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBfaW5pdFdpdGhXZWJD
b3JlU2VjdXJpdHlPcmlnaW46XSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJp
dHlPcmlnaW5Qcml2YXRlLmg6CisgICAgICAgICogV2ViS2l0LmV4cDoKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9u
V2l0aEZyYW1lTmFtZTpncm91cE5hbWU6dXNlc0RvY3VtZW50Vmlld3M6XSk6CisKIDIwMTEtMDMt
MTAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCShyZXZpc2lvbiA4MDc5
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHdvcmtpbmcgY29weSkKQEAgLTYs
NiArNiw3IEBACiAub2JqY19jbGFzc19uYW1lX1dlYkNvcmVTdGF0aXN0aWNzCiAub2JqY19jbGFz
c19uYW1lX1dlYkRhdGFTb3VyY2UKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0YWJhc2VNYW5hZ2Vy
Cisub2JqY19jbGFzc19uYW1lX1dlYlN0b3JhZ2VNYW5hZ2VyCiAub2JqY19jbGFzc19uYW1lX1dl
YkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRh
dGlvbgogLm9iamNfY2xhc3NfbmFtZV9XZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jawpA
QCAtMTE0LDYgKzExNSw4IEBAIF9XZWJSZXBvcnRFcnJvcgogX1dlYlNjcmlwdEVycm9yRGVzY3Jp
cHRpb25LZXkKIF9XZWJTY3JpcHRFcnJvckRvbWFpbgogX1dlYlNjcmlwdEVycm9yTGluZU51bWJl
cktleQorX1dlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleQorX1dlYlN0b3JhZ2VEaWRNb2Rp
ZnlPcmlnaW5Ob3RpZmljYXRpb24KIF9XZWJVUkxOYW1lUGJvYXJkVHlwZQogX1dlYlVSTFBib2Fy
ZFR5cGUKIF9XZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFnZXJJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKworI2ltcG9y
dCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdlVHJh
Y2tlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTlNTdHJpbmcgKiBjb25zdCBX
ZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsU3RvcmFnZURhdGFi
YXNlUGF0aFByZWZlcmVuY2VLZXkiOworTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlkTW9k
aWZ5T3JpZ2luTm90aWZpY2F0aW9uID0gQCJXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZp
Y2F0aW9uIjsKKworc3RhdGljIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpOworCitA
aW1wbGVtZW50YXRpb24gV2ViU3RvcmFnZU1hbmFnZXIKKworKyAoV2ViU3RvcmFnZU1hbmFnZXIg
KilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcgoreworICAgIHN0YXRpYyBXZWJTdG9yYWdlTWFuYWdl
ciAqc2hhcmVkTWFuYWdlciA9IFtbV2ViU3RvcmFnZU1hbmFnZXIgYWxsb2NdIGluaXRdOworICAg
IHJldHVybiBzaGFyZWRNYW5hZ2VyOworfQorCistIChOU0FycmF5ICopb3JpZ2lucworeworICAg
IFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gY29yZU9yaWdpbnM7CisKKyAgICBTdG9y
YWdlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMpOworCisgICAgTlNNdXRh
YmxlQXJyYXkgKndlYk9yaWdpbnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmNvcmVPcmlnaW5zLnNpemUoKV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luICp3
ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2Vj
dXJpdHlPcmlnaW46Y29yZU9yaWdpbnNbaV0uZ2V0KCldOworICAgICAgICBbd2ViT3JpZ2lucyBh
ZGRPYmplY3Q6d2ViT3JpZ2luXTsKKyAgICAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKKyAgICB9
CisKKyAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworfQorCistICh2b2lkKWRl
bGV0ZUFsbE9yaWdpbnMKK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZUFs
bE9yaWdpbnMoKTsKK30KKworLSAodm9pZClkZWxldGVPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2lu
ICopb3JpZ2luCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW4o
W29yaWdpbiBfY29yZV0pOworfQorCistICh2b2lkKXN5bmNMb2NhbFN0b3JhZ2UKK3sKKyAgICBT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNMb2NhbFN0b3JhZ2UoKTsKK30KKworLSAodm9p
ZClzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZQoreworICAgIFN0b3JhZ2VUcmFja2Vy
Ojp0cmFja2VyKCkuc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKK30KKworc3Rh
dGljIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpCit7CisgICAgTlNVc2VyRGVmYXVs
dHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKKyAg
ICBOU1N0cmluZyAqc3RvcmFnZURpcmVjdG9yeSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6V2Vi
U3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAgICBpZiAoIXN0b3JhZ2VEaXJlY3Rvcnkg
fHwgIVtzdG9yYWdlRGlyZWN0b3J5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisg
ICAgICAgIHN0b3JhZ2VEaXJlY3RvcnkgPSBAIn4vTGlicmFyeS9XZWJLaXQvTG9jYWxTdG9yYWdl
IjsKKyAgICAKKyAgICByZXR1cm4gW3N0b3JhZ2VEaXJlY3Rvcnkgc3RyaW5nQnlTdGFuZGFyZGl6
aW5nUGF0aF07Cit9CisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgp
Cit7CisgICAgc3RhdGljIEJPT0wgaW5pdGlhbGl6ZWQgPSBOTzsKKyAgICBpZiAoaW5pdGlhbGl6
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6
ZVRyYWNrZXIoc3RvcmFnZURpcmVjdG9yeVBhdGgoKSk7CisgICAgCisgICAgU3RvcmFnZVRyYWNr
ZXI6OnRyYWNrZXIoKS5zZXRDbGllbnQoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkpOworICAgIAorICAgIGluaXRpYWxpemVkID0gWUVTOwor
fQorCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
U3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorCit2b2lkIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFn
ZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9y
YWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViU3RvcmFnZURpcmVj
dG9yeURlZmF1bHRzS2V5OworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViU3RvcmFnZURpZE1v
ZGlmeU9yaWdpbk5vdGlmaWNhdGlvbjsKKworQGNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOworCitA
aW50ZXJmYWNlIFdlYlN0b3JhZ2VNYW5hZ2VyIDogTlNPYmplY3QKKworKyAoV2ViU3RvcmFnZU1h
bmFnZXIgKilzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcjsKKworLy8gUmV0dXJucyBhbiBhcnJheSBv
ZiBXZWJTZWN1cml0eU9yaWdpbiBvYmplY3RzIHRoYXQgaGF2ZSBMb2NhbFN0b3JhZ2UuCistIChO
U0FycmF5ICopb3JpZ2luczsKKworLSAodm9pZClkZWxldGVBbGxPcmlnaW5zOworLSAodm9pZClk
ZWxldGVPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICopb3JpZ2luOworCistICh2b2lkKXN5bmNM
b2NhbFN0b3JhZ2U7CistICh2b2lkKXN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlOwor
CitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9T
dG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworIAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2ltcG9ydCA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdlVHJhY2tl
ckNsaWVudC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgV2ViU3RvcmFn
ZVRyYWNrZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnQgewor
cHVibGljOgorICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogc2hhcmVkV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQoKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9y
aWdpbk9uTWFpblRocmVhZCh2b2lkKiBjb250ZXh0KTsKKyAgICAKKyAgICB2aXJ0dWFsIH5XZWJT
dG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlm
eU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7Citw
cml2YXRlOgorICAgIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7Cit9OworCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW1wb3J0ICJXZWJTdG9yYWdl
VHJhY2tlckNsaWVudC5oIgorCisjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgi
CisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1TdHJpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNp
bXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkKK3sKKyAg
ICBzdGF0aWMgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQqIHNoYXJlZENsaWVudCA9IG5ldyBXZWJT
dG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHJldHVybiBzaGFyZWRDbGllbnQ7Cit9CisKK1dl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpXZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpCit7Cit9CisK
K1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Ojp+V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKQorewor
fQorCit2b2lkIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNwYXRjaERpZE1vZGlmeU9yaWdp
bk9uTWFpblRocmVhZCh2b2lkKiBjb250ZXh0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OnNoYXJlZFdlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50KCktPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRpY19jYXN0PFNlY3VyaXR5T3Jp
Z2luKj4oY29udGV4dCkpOworfQorCit2b2lkIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpkaXNw
YXRjaERpZE1vZGlmeU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCit7
CisgICAgUmV0YWluUHRyPFdlYlNlY3VyaXR5T3JpZ2luPiB3ZWJTZWN1cml0eU9yaWdpbihBZG9w
dE5TLCBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlP
cmlnaW46b3JpZ2luLmdldCgpXSk7CisKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5O
b3RpZmljYXRpb24gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdDp3ZWJTZWN1cml0eU9yaWdpbi5nZXQoKV07Cit9CisKK3ZvaWQg
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihv
cmlnaW5JZGVudGlmaWVyKTsKKworICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChkaXNwYXRjaERpZE1vZGlmeU9yaWdpbk9uTWFpblRocmVhZCwgc3Rh
dGljX2Nhc3Q8dm9pZCo+KG9yaWdpbi5sZWFrUmVmKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7Cit9CisKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2Vj
dXJpdHlPcmlnaW4ubW0JKHJldmlzaW9uIDgwNzk2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDIz
ICs0NiwyOCBAQCAtIChpZClpbml0V2l0aFVSTDooTlNVUkwgKil1cmwKIAogICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFt1cmwg
YWJzb2x1dGVVUkxdKSk7CiAgICAgb3JpZ2luLT5yZWYoKTsKLSAgICBfcHJpdmF0ZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKj4ob3JpZ2luLmdldCgpKTsKKyAg
ICBfcHJpdmF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlICo+
KG9yaWdpbi5nZXQoKSk7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoTlNTdHJpbmcqKXBy
b3RvY29sCistIChOU1N0cmluZyAqKXByb3RvY29sCiB7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPnByb3RvY29sKCk7CiB9CiAKLS0gKE5T
U3RyaW5nKilob3N0CistIChOU1N0cmluZyAqKWhvc3QKIHsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+aG9zdCgpOwogfQogCistIChOU1N0
cmluZyAqKWRhdGFiYXNlSWRlbnRpZmllcgoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKK30KKwog
Ly8gRGVwcmVjYXRlZC4gVXNlIGhvc3QgaW5zdGVhZC4gVGhpcyBuZWVkcyB0byBzdGF5IGhlcmUg
dW50aWwgd2Ugc2hpcCBhIG5ldyBTYWZhcmkuCi0tIChOU1N0cmluZyopZG9tYWluCistIChOU1N0
cmluZyAqKWRvbWFpbgogewogICAgIHJldHVybiBbc2VsZiBob3N0XTsKIH0KQEAgLTExMSw3ICsx
MTYsNyBAQCAtIChpZClfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46KFNlCiAgICAgICAg
IHJldHVybiBuaWw7CiAKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRlID0gcmVpbnRl
cnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4pOworICAgIF9wcml2
YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgKj4ob3JpZ2lu
KTsKIAogICAgIHJldHVybiBzZWxmOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgJKHJl
dmlzaW9uIDgwNzk2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2Vj
dXJpdHlPcmlnaW5Qcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEwIEBAIEBp
bnRlcmZhY2UgV2ViU2VjdXJpdHlPcmlnaW4gOiBOU09iamVjdCAKIAogLSAoaWQpaW5pdFdpdGhV
Ukw6KE5TVVJMICopdXJsOwogCi0tIChOU1N0cmluZyopcHJvdG9jb2w7Ci0tIChOU1N0cmluZyop
aG9zdDsKKy0gKE5TU3RyaW5nICopcHJvdG9jb2w7CistIChOU1N0cmluZyAqKWhvc3Q7CisKKy0g
KE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyOwogCiAvLyBSZXR1cm5zIHplcm8gaWYgdGhl
IHBvcnQgaXMgdGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIHByb3RvY29sLCBub24temVybyBvdGhl
cndpc2UuCiAtICh1bnNpZ25lZCBzaG9ydClwb3J0OwpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkocmV2aXNpb24gODA3OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViU2NyaXB0RGVidWdEZWxlZ2F0
ZS5oIgogI2ltcG9ydCAiV2ViU2NyaXB0V29ybGRJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3Rv
cmFnZU1hbmFnZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJmYWNlLmgiCiAj
aW1wb3J0ICJXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldlYlRleHRJ
dGVyYXRvci5oIgpAQCAtNjg3LDYgKzY4OCwxMCBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXph
dGlvbldpdGhGcmFtZU5hCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBXZWJLaXRJbml0
aWFsaXplRGF0YWJhc2VzSWZOZWNlc3NhcnkoKTsKICNlbmRpZgorCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorICAgICAgICBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7Cisj
ZW5kaWYKICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQYXRoSWZOZWNl
c3NhcnkoKTsKICAgICAgICAgcGF0Y2hNYWlsUmVtb3ZlQXR0cmlidXRlc01ldGhvZCgpOwogICAg
ICAgICAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDgwNzk2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKyAgICAgICAgQWRk
IFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisKKyAgICAgICAg
QWRkZWQgdGVzdHMgdGhhdCB3cml0ZSB0byBMb2NhbFN0b3JhZ2UsIGRlbGV0ZSBvbmUgb3JpZ2lu
LCBnZXQgbGlzdCBvZiBvcmlnaW5zIHdpdGggbG9jYWwgc3RvcmFnZSwgZGVsZXRlIGFsbCBvcmln
aW5zLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChzeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2spOgorICAgICAg
ICAob2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNrKToKKyAgICAgICAg
KGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbkNhbGxiYWNrKToKKyAgICAgICAgKG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
Q2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9u
cyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmg6IEFkZGVkLgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW06IEFkZGVk
LgorICAgICAgICAoLVtTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGluaXRdKToKKyAgICAgICAgKC1b
U3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBsb2dOb3RpZmljYXRpb25zOmNvbnRyb2xsZXI6XSk6Cisg
ICAgICAgICgtW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgb3JpZ2luTW9kaWZpZWQ6XSk6CisgICAg
ICAgICgtW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgZGVhbGxvY10pOgorICAgICAgICAoLVtTdG9y
YWdlVHJhY2tlckRlbGVnYXRlIHNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6XSk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgor
ICAgICAgICAob2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChz
eW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRU
ZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChyZXNldERlZmF1bHRzVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgKGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMpOgorICAgICAg
ICAocmVsZWFzZUdsb2JhbENvbnRyb2xsZXJzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWVNYWMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5
b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2
ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4pOgorCiAyMDExLTAzLTEwICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJZ25vcmUgZXJyb3JzIGZyb20gZmlsZXMgYmVpbmcgaGVsZCBvcGVuIHdoZW4gY3JlYXRp
bmcgYSB0ZXN0IHJlc3VsdCBhcmNoaXZlCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4MDc5NikKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0
LDYgKzM5NCw2MCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFsbERhdGFiYXNlc0NhbGxiCiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNW
YWx1ZVJlZiBzeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworCisgICAgY29udHJvbGxlci0+c3luY0xvY2FsU3RvcmFnZSgpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICB1bnNpZ25lZCBudW1Ob3RpZmljYXRp
b25zID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsK
KworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5vYnNlcnZlU3Rv
cmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKG51bU5vdGlmaWNhdGlvbnMpOworCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBk
ZWxldGVBbGxMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgY29udHJvbGxlci0+ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHVybChB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5kZWxldGVM
b2NhbFN0b3JhZ2VGb3JPcmlnaW4odXJsLmdldCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhM
b2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJu
IGNvbnRyb2xsZXItPm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnRleHQpOworfQorCiBzdGF0
aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgpAQCAtMjE2Myw2ICsyMjE3LDEzIEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250
cm9sbGVyOjoKICAgICAgICAgeyAiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCBhZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNl
dFNjcm9sbGJhclBvbGljeSIsIHNldFNjcm9sbGJhclBvbGljeUNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgImF1dGhlbnRpY2F0ZVNlc3Npb24iLCBhdXRoZW50aWNhdGVTZXNzaW9uQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgZGVsZXRlQWxs
TG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3luY0xvY2FsU3RvcmFn
ZSIsIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgICAgICAgICAKKyAg
ICAgICAgeyAib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsIG9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgCisgICAgICAg
IHsgImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIsIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
Iiwgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJv
YnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zIiwgb2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInN5bmNMb2NhbFN0b3Jh
Z2UiLCBzeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0U2hv
dWxkUGFpbnRCcm9rZW5JbWFnZSIsIHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2VDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDgwNzk2KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzA4LDYgKzMwOCwxMiBAQCBwdWJsaWM6CiAKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gbWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IG5vZGVPYmplY3QpIGNvbnN0OwogCisgICAgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZShKU0NvbnRleHRSZWYpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7Cisg
ICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgdm9pZCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVu
c2lnbmVkIG51bWJlcik7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisKICAgICB2b2lk
IHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2UoYm9vbCk7CiAgICAgYm9vbCBzaG91bGRQYWludEJy
b2tlbkltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYWludEJyb2tlbkltYWdlOyB9CiAK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgJ
KHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVn
YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXI7CisK
K0BpbnRlcmZhY2UgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKKyAgICB1bnNp
Z25lZCBudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZzsKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlclRvTm90aWZ5RG9uZTsKK30KKworLSAodm9pZClsb2dOb3RpZmljYXRpb25z
Oih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjooTGF5b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7CistICh2b2lkKW9yaWdpbk1vZGlmaWVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbjsKKy0gKHZvaWQpc2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZTooTGF5b3V0VGVzdENvbnRy
b2xsZXIqKWNvbnRyb2xsZXI7CisKK0BlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0
b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgiCisK
KyNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW1wb3J0IDxXZWJLaXQvV2ViU2Vj
dXJpdHlPcmlnaW5Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlCisKKy0g
KGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iob3JpZ2luTW9kaWZpZWQ6
KSBuYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClsb2dOb3RpZmljYXRpb25zOih1bnNp
Z25lZCludW1iZXIgY29udHJvbGxlcjooTGF5b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lID0gY29udHJvbGxlcjsKKworICAgIG51bWJl
ck9mTm90aWZpY2F0aW9uc1RvTG9nID0gbnVtYmVyOworfQorCistICh2b2lkKW9yaWdpbk1vZGlm
aWVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghbnVtYmVyT2ZO
b3RpZmljYXRpb25zVG9Mb2cpCisgICAgICAgIHJldHVybjsKKworICAgIG51bWJlck9mTm90aWZp
Y2F0aW9uc1RvTG9nLS07CisgICAgCisgICAgaWYgKG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9n
ID09IDAgJiYgY29udHJvbGxlclRvTm90aWZ5RG9uZSkgeworICAgICAgICBOU0FycmF5ICpvcmln
aW5zID0gW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gb3JpZ2lu
c107CisgICAgICAgIGZvciAoV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBvcmlnaW5zKQor
ICAgICAgICAgICAgcHJpbnRmKCJPcmlnaW4gaWRlbnRpZmllcjogJyVzJ1xuIiwgW1tvcmlnaW4g
ZGF0YWJhc2VJZGVudGlmaWVyXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIAorICAgICAgICBjb250
cm9sbGVyVG9Ob3RpZnlEb25lLT5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9u
IG9iamVjdDpuaWxdOworICAgIAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClz
ZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIGNvbnRyb2xsZXJUb05vdGlmeURvbmUgPSBjb250cm9sbGVyOworfQorCisKK0Bl
bmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODA3OTYpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAJCTI5Q0ZCQTJFMTIyNzNBMTAw
MEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0ZCQTJEMTIyNzNBMTAwMEJDMzBDMCAv
KiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSAqLzsgfTsKIAkJMzcxM0VERTIxMTVCRTE5
MzAwNzA1NzIwIC8qIENvbG9yQml0cy1BLnBuZyBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VEREYxMTVCRTE2RjAwNzA1NzIwIC8qIENv
bG9yQml0cy1BLnBuZyAqLzsgfTsKIAkJMzcxM0VERTMxMTVCRTE5MzAwNzA1NzIwIC8qIENvbG9y
Qml0cy50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3MTNFREUwMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmICovOyB9Owor
CQkzQTU2MjZDQjEzMUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBNTYyNkMxMTMx
QzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovOyB9OworCQkzQTU2
MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0E1NjI2QzAxMzFDOEIxNzAw
MkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLzsgfTsKIAkJNDQwNTkwNzExMjY4
NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5MDcwMTI2ODQ1MzgwMENGRDQ4
RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07CiAJCTQ0Mzc3MzBFMTI1Q0JD
MzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMwRkNERTg2NDAwNTgwRjEwIC8q
IFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0Mzc3MzBGMTI1Q0JDNEQwMEFB
RTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTk5NzgyMEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNo
aXZlRHVtcFN1cHBvcnQuaCAqLzsgfTsKQEAgLTIzMCw2ICsyMzIsOCBAQAogCQkzNzVGMDk3NzBE
QUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0
V2VpZ2h0V2F0Y2hlcjcwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyNzAw
LnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzgwREFDM0NCNjAwQzhC
NEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNo
ZXI4MDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGY7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTc5MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJL
aXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0Zjsg
cGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzQTU2MjZDMDEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJE
ZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJhY2tl
ckRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBNTYyNkMxMTMxQzhC
MTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQwNTkwNzAxMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFy
Y2hpdmVEdW1wU3VwcG9ydE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbTsgcGF0aCA9IG1hYy9XZWJBcmNoaXZl
RHVtcFN1cHBvcnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QTk5Nzgy
MEZDREU4NjQwMDU4MEYxMCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmg7IHBhdGggPSBjZi9X
ZWJBcmNoaXZlRHVtcFN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRB
OTk3ODMwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3Bw
OyBwYXRoID0gY2YvV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQ2MCw2ICs0NjQsOCBAQAogCQkJCUJDQTE4QjVFMEM5QjA4QzIwMDExNDM2
OSAvKiBSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbSAqLywKIAkJCQlCQ0ExOEI1RjBDOUIwOEMyMDAx
MTQzNjkgLyogVUlEZWxlZ2F0ZS5oICovLAogCQkJCUJDQTE4QjYwMEM5QjA4QzIwMDExNDM2OSAv
KiBVSURlbGVnYXRlLm1tICovLAorCQkJCTNBNTYyNkMwMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9y
YWdlVHJhY2tlckRlbGVnYXRlLmggKi8sCisJCQkJM0E1NjI2QzExMzFDOEIxNzAwMkJFNkQ5IC8q
IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IERlbGVnYXRl
czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02MjAsNiArNjI2LDcgQEAKIAkJCQk1
MTg1RjZCMzEwNzE0RTEyMDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMUI3ODE2NzExQUYzMUMzMDA3RTFCQzIgLyogTW9ja0dlb2xvY2F0aW9uUHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0ZCQTEwMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0E1NjI2Q0MxMzFDQTAz
NjAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
ODA5LDYgKzgxNiw3IEBACiAJCQkJRTFCNzgxNjUxMUFGMzFCNzAwN0UxQkMyIC8qIE1vY2tHZW9s
b2NhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMTExMjI3MzZFNjAw
QkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTNBNTYyNkNCMTMxQ0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdl
VHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA4MDc5NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5MiwxMiBAQCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsCiAgICAgYmluZE1ldGhvZCgic2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCk7CiAgICAgYmluZE1ldGhvZCgic2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJp
bGl0eU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGli
aWxpdHlNb2RlKTsKICAgICBiaW5kTWV0aG9kKCJzdG9yZVdlYlNjcmlwdE9iamVjdCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3RvcmVXZWJTY3JpcHRPYmplY3QpOwotCisgICAgYmluZE1ldGhv
ZCgiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRNZXRob2QoIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk7CisgICAg
YmluZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoIm9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOworICAgIGJpbmRNZXRob2QoInN5
bmNMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2Up
OworICAgIAogICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gdW5r
bm93biBtZXRob2QgaXMgaW52b2tlZC4KICAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkxheW91dFRl
c3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZCk7CiAKQEAgLTE2MDIsMyArMTYwNywzMCBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldE1pbmltdW1UaW1lckludGVy
dmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KikKK3sKKyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1l
bnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VG
b3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQor
eworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCisKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gODA3OTYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDEz
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCisgICAgLy8gTG9jYWxTdG9yYWdlIG9yaWdp
bi1yZWxhdGVkCisgICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKIHB1YmxpYzoKICAgICAvLyBUaGUg
Zm9sbG93aW5nIG1ldGhvZHMgYXJlIG5vdCBleHBvc2VkIHRvIEphdmFTY3JpcHQuCiAgICAgdm9p
ZCBzZXRXb3JrUXVldWVGcm96ZW4oYm9vbCBmcm96ZW4pIHsgbV93b3JrUXVldWUuc2V0RnJvemVu
KGZyb3plbik7IH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xh
eW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gODA3OTYpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NTEsNiArNjUxLDMxIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFi
YXNlUXUKICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEo
b3JpZ2luLCBxdW90YSk7CiB9CiAKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZikKK3sKKyAgICAgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2Nh
bFN0b3JhZ2UoKQoreworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1Jl
ZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sLCBKU1N0cmluZ1JlZikK
IHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiA4MDc5NikKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQAogI2ltcG9ydCAiUGl4ZWxEdW1wU3VwcG9ydC5oIgogI2ltcG9ydCAiUG9saWN5RGVsZWdh
dGUuaCIKICNpbXBvcnQgIlJlc291cmNlTG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJTdG9yYWdl
VHJhY2tlckRlbGVnYXRlLmgiCiAjaW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJB
cmNoaXZlRHVtcFN1cHBvcnQuaCIKICNpbXBvcnQgIldvcmtRdWV1ZS5oIgpAQCAtNzcsNiArNzgs
NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlJl
c291cmNlTG9hZERlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVHlwZXNJbnRlcm5hbC5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxnZXRvcHQuaD4KQEAgLTEzNCw2ICsx
MzYsNyBAQCBzdGF0aWMgRWRpdGluZ0RlbGVnYXRlICplZGl0aW5nRGVsZWdhdGU7CiBzdGF0aWMg
UmVzb3VyY2VMb2FkRGVsZWdhdGUgKnJlc291cmNlTG9hZERlbGVnYXRlOwogc3RhdGljIEhpc3Rv
cnlEZWxlZ2F0ZSAqaGlzdG9yeURlbGVnYXRlOwogUG9saWN5RGVsZWdhdGUgKnBvbGljeURlbGVn
YXRlOworU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSAqc3RvcmFnZURlbGVnYXRlOwogCiBzdGF0aWMg
aW50IGR1bXBQaXhlbHM7CiBzdGF0aWMgaW50IHRocmVhZGVkOwpAQCAtNDE0LDYgKzQxNyw3IEBA
IHN0YXRpYyB2b2lkIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWwKIAogICAgIE5TU3RyaW5n
ICpwYXRoID0gbGlicmFyeVBhdGhGb3JEdW1wUmVuZGVyVHJlZSgpOwogICAgIFtkZWZhdWx0cyBz
ZXRPYmplY3Q6W3BhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiRGF0YWJhc2Vz
Il0gZm9yS2V5OldlYkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIFtkZWZhdWx0
cyBzZXRPYmplY3Q6W3BhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiTG9jYWxT
dG9yYWdlIl0gZm9yS2V5OldlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleV07CiAgICAgW2Rl
ZmF1bHRzIHNldE9iamVjdDpbcGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJM
b2NhbENhY2hlIl0gZm9yS2V5OldlYktpdExvY2FsQ2FjaGVEZWZhdWx0c0tleV07CiAKICAgICBX
ZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVm
ZXJlbmNlc107CkBAIC01NDUsNiArNTQ5LDcgQEAgc3RhdGljIHZvaWQgYWxsb2NhdGVHbG9iYWxD
b250cm9sbGVycygpCiAgICAgcmVzb3VyY2VMb2FkRGVsZWdhdGUgPSBbW1Jlc291cmNlTG9hZERl
bGVnYXRlIGFsbG9jXSBpbml0XTsKICAgICBwb2xpY3lEZWxlZ2F0ZSA9IFtbUG9saWN5RGVsZWdh
dGUgYWxsb2NdIGluaXRdOwogICAgIGhpc3RvcnlEZWxlZ2F0ZSA9IFtbSGlzdG9yeURlbGVnYXRl
IGFsbG9jXSBpbml0XTsKKyAgICBzdG9yYWdlRGVsZWdhdGUgPSBbW1N0b3JhZ2VUcmFja2VyRGVs
ZWdhdGUgYWxsb2NdIGluaXRdOwogfQogCiAvLyBPYmpDKysgZG9lbnMndCBzZWVtIHRvIGxldCBt
ZSBwYXNzIE5TT2JqZWN0KiYgc2FkbHkuCkBAIC01NjIsNiArNTY3LDcgQEAgc3RhdGljIHZvaWQg
cmVsZWFzZUdsb2JhbENvbnRyb2xsZXJzKCkKICAgICByZWxlYXNlQW5kWmVybygmcmVzb3VyY2VM
b2FkRGVsZWdhdGUpOwogICAgIHJlbGVhc2VBbmRaZXJvKCZ1aURlbGVnYXRlKTsKICAgICByZWxl
YXNlQW5kWmVybygmcG9saWN5RGVsZWdhdGUpOworICAgIHJlbGVhc2VBbmRaZXJvKCZzdG9yYWdl
RGVsZWdhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5k
TGluZU9wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCShyZXZpc2lvbiA4MDc5NikK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiBAY2xhc3MgRHVtcFJlbmRlclRyZWVEcmFnZ2luZ0lu
Zm87CiBAY2xhc3MgTmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBAY2xhc3MgUG9saWN5RGVsZWdhdGU7
CitAY2xhc3MgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZTsKIEBjbGFzcyBXZWJGcmFtZTsKIEBjbGFz
cyBXZWJTY3JpcHRXb3JsZDsKIEBjbGFzcyBXZWJWaWV3OwpAQCAtNDIsNiArNDMsNyBAQAogY2xh
c3MgRHVtcFJlbmRlclRyZWVEcmFnZ2luZ0luZm87CiBjbGFzcyBOYXZpZ2F0aW9uQ29udHJvbGxl
cjsKIGNsYXNzIFBvbGljeURlbGVnYXRlOworY2xhc3MgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZTsK
IGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViU2NyaXB0V29ybGQ7CiBjbGFzcyBXZWJWaWV3OwpA
QCAtNTQsNiArNTYsNyBAQCBleHRlcm4gV2ViRnJhbWUqIHRvcExvYWRpbmdGcmFtZTsKIGV4dGVy
biBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mbyAqZHJhZ2dpbmdJbmZvOwogZXh0ZXJuIE5hdmln
YXRpb25Db250cm9sbGVyKiBnTmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBleHRlcm4gUG9saWN5RGVs
ZWdhdGUqIHBvbGljeURlbGVnYXRlOworZXh0ZXJuIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUqIHN0
b3JhZ2VEZWxlZ2F0ZTsKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdIZWlnaHQ7CiBl
eHRlcm4gY29uc3QgdW5zaWduZWQgbWF4Vmlld1dpZHRoOwpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24g
ODA3OTYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkVkaXRpbmdE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCIKICNpbXBvcnQg
IlBvbGljeURlbGVnYXRlLmgiCisjaW1wb3J0ICJTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgiCiAj
aW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWUuaCIKICNpbXBvcnQgIldv
cmtRdWV1ZUl0ZW0uaCIKQEAgLTY2LDYgKzY3LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XZWJRdW90
YU1hbmFnZXIuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJTY3JpcHRXb3JsZC5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1By
aXZhdGUuaD4KQEAgLTEzMywxMSArMTM1LDUzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQWxsQXBwbGkKICAgICBbV2ViQXBwbGljYXRpb25DYWNoZSBkZWxldGVBbGxBcHBsaWNh
dGlvbkNhY2hlc107CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0
b3JhZ2UoKQoreworICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFn
ZXJdIHN5bmNMb2NhbFN0b3JhZ2VdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpv
YnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAg
ICBbc3RvcmFnZURlbGVnYXRlIGxvZ05vdGlmaWNhdGlvbnM6bnVtYmVyIGNvbnRyb2xsZXI6dGhp
c107Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkK
IHsKICAgICBbW1dlYkRhdGFiYXNlTWFuYWdlciBzaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXJdIGRl
bGV0ZUFsbERhdGFiYXNlc107CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0
ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJT
dG9yYWdlTWFuYWdlcl0gZGVsZXRlQWxsT3JpZ2luc107Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250
ZXh0KQoreworICAgIFdlYlN0b3JhZ2VNYW5hZ2VyICpzdG9yYWdlID0gW1dlYlN0b3JhZ2VNYW5h
Z2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXTsKKworICAgIE5TQXJyYXkgKm9yaWdpbnMgPSBb
c3RvcmFnZSBvcmlnaW5zXTsKKyAgICBOU0ludGVnZXIgY291bnQgPSBbb3JpZ2lucyBjb3VudF07
CisKKyAgICBKU1ZhbHVlUmVmIGpzT3JpZ2luc0FycmF5W2NvdW50XTsKKyAgICBmb3IgKE5TSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKm9yaWdpbiA9
IFtbb3JpZ2lucyBvYmplY3RBdEluZGV4OmldIGRhdGFiYXNlSWRlbnRpZmllcl07CisgICAgICAg
IEpTU3RyaW5nUmVmIHN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1Jl
ZilvcmlnaW4pOworICAgICAgICBqc09yaWdpbnNBcnJheVtpXSA9IEpTVmFsdWVNYWtlU3RyaW5n
KGNvbnRleHQsIHN0cik7CisgICAgfQorCisgICAgSlNPYmplY3RSZWYganNBcnJheU9iamVjdCA9
IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIGNvdW50LCBqc09yaWdpbnNBcnJheSwgTlVMTCk7
CisgICAgcmV0dXJuIGpzQXJyYXlPYmplY3Q7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCit7CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmlu
ZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVUkwpKTsKKyAgICAKKyAgICBXZWJTZWN1cml0eU9yaWdp
biAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJM
IFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKKworICAgIFtbV2ViU3Rv
cmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZU9yaWdpbjpvcmlnaW5d
OworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgp
CiB7CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0ICpiYWNrRm9yd2FyZExpc3QgPSBbW21haW5GcmFt
ZSB3ZWJWaWV3XSBiYWNrRm9yd2FyZExpc3RdOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHJldmlzaW9uIDgwNzk2KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg0Miw1ICs4NDIsMzAgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TWluaW11bVRpbQogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbChtX2RydC0+d2ViUGFnZSgpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3Jh
Z2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKIGNvbnN0IHVuc2lnbmVkIExh
eW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGggPSA4MDA7CiBjb25zdCB1bnNpZ25lZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9u
IDgwNzk2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDEyIEBAIHB1YmxpYyBzbG90czoKICAg
ICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOwogCiAg
ICAgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUpOworICAgIAorICAgIHZvaWQg
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSgpOworICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwog
CiBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgcHJvY2Vzc1dvcmsoKTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAko
cmV2aXNpb24gODA3OTYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENv
bnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI4LDYgKzE0MjgsMzEgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSAogICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVy
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9y
T3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3Vi
bGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3
OwpAQCAtMTQ0MCwzICsxNDY1LDUgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWlu
aW11bVRpbQogCiAgICAgdmlld1ByaXZhdGUtPnNldE1pbmltdW1UaW1lckludGVydmFsKG1pbmlt
dW1UaW1lckludGVydmFsKTsKIH0KKworCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9M
YXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gODA3OTYpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTU4LDQgKzU1OCwzMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTZXJpYWxpemVICiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJ
bnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIHsKIAogfQotICAgIAorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oSlNTdHJpbmdSZWYgVVJMKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA4MDc5NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTAzLTEwICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJp
YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIFdlYktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAg
ICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXI6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNr
ZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTEtcHJlcGFyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIv
c3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tl
ci00LWNyZWF0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRl
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uv
c3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFn
ZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS5odG1sOiBBZGRlZC4KKwogMjAx
MS0wMy0xMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gODA3OTYpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMTAgQEAgV09OVEZJWCBTS0lQIDogZmFzdC93bWwg
PSBGQUlMCiAvLyBtb3N0IGxpa2VseSB0aGVzZSB0ZXN0cyB3aWxsIGFsd2F5cyBiZSBKU0Mgc3Bl
Y2lmaWMuCiBXT05URklYIFNLSVAgOiBmYXN0L3Byb2ZpbGVyID0gRkFJTCBUSU1FT1VUCiAKKy8v
IFN0b3JhZ2VUcmFja2VyIGlzbid0IHVzZWQgYnkgQ2hyb21pdW0gYW5kIG5vdCBhbGwgcmVxdWlz
aXRlIHBsYXRmb3JtIGNvZGUKKy8vIGlzIGltcGxlbWVudGVkLgorV09OVEZJWCBTS0lQIDogc3Rv
cmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlciA9IFBBU1MgVElNRU9V
VCBGQUlMCisKIC8vIFdlIHVzZSB3b3JrZXJfdWl0ZXN0cyB0byBydW4gd29ya2VycyB0ZXN0cy4g
RG9uJ3QgcnVuIHRoZW0gaW4gdGVzdF9zaGVsbC4KIFdPTlRGSVggU0tJUCA6IGZhc3Qvd29ya2Vy
cyA9IFBBU1MgVElNRU9VVCBGQUlMCiBXT05URklYIFNLSVAgOiBmYXN0L2ZpbGVzL3dvcmtlcnMg
PSBQQVNTIFRJTUVPVVQgRkFJTApJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorUHJlcGFyZSBmb3IgU3Rv
cmFnZVRyYWNrZXIgdGVzdHMgYnkgZW5zdXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBsb2Nh
bCBzdG9yYWdlIGlzIGRlbGV0ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitU
aGlzIHRlc3Qgc2hvdWxkIGhhdmUgbm8gdmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0
b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci0xLXByZXBhcmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEt
cHJlcGFyZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlByZXBhcmUgZm9yIFN0b3Jh
Z2VUcmFja2VyIHRlc3RzIGJ5IGVuc3VyaW5nIHRoYXQgZXZlcnkgb3JpZ2luIHdpdGggbG9jYWwg
c3RvcmFnZSBpcyBkZWxldGVkLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0
aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgZGVidWcoIlRoaXMgdGVzdCBzaG91bGQgaGF2ZSBubyB2aXNpYmxl
IG91dHB1dCBvbiBzdWNjZXNzLiIpOworCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgfQorfQorCit0ZXN0KCk7CQorCit3aW5k
b3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3Jl
YXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK09yaWdpbiBpZGVu
dGlmaWVyOiAnZmlsZV9fMCcKK1N0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9y
YWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBvcmlnaW5zLXByZXBh
cmUuaHRtbC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci0yLWNyZWF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3Jl
YXRlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBs
b2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBvcmln
aW5zLXByZXBhcmUuaHRtbC4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgCitmdW5jdGlv
biBmaW5pc2hUZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgIHRlc3RG
YWlsZWQoImxvY2FsU3RvcmFnZSBET0VTIE5PVCBleGlzdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgLy8gQW4gb3JpZ2luIGFscmVhZHkgZXhp
c3RzIHNvIHdlIGNhbiBleGl0LgorICAgICAgICB0ZXN0RmFpbGVkKCJBbiBvcmlnaW4gYWxyZWFk
eSBleGlzdGVkIHdpdGggbG9jYWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGxvY2FsU3RvcmFn
ZS5zb21lRGF0YSA9ICd3cml0ZW1lJzsKKyAgICAgICAgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXIn
cyBub3RpZnlEb25lIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBvcmlnaW4gY2hhbmdlIG5vdGlm
aWNhdGlvbiBjb21lcyBpbi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0
b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dp
bmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9k
b21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1k
ZWxldGUtYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0z
LWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Rv
cmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNr
ZXItMy1kZWxldGUtYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBA
QAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFuZCB0
byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9fMCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0
ZS1hbGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0
IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2lu
LiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBp
ZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9y
YWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAw
KSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygibGF5b3V0VGVzdENvbnRyb2xsZXIu
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIiwgImZpbGVfXzAiKTsKKyAgICAg
ICAgLy8gV2UncmUganVzdCBnb2luZyB0byBkZWxldGUgdGhlIGV4aXN0aW5nIG9yaWdpbiwgc28g
d2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBvcmlnaW5zIHdpdGggbG9jYWwgc3RvcmFnZSIp
OworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2
ZSBvbmUgb3JpZ2luIHdpdGggbG9jYWwgc3RvcmFnZS4KK30KKwordGVzdCgpOwkKKword2luZG93
LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVhdGUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitPcmlnaW4gaWRlbnRp
ZmllcjogJ2ZpbGVfXzAnCitTdG9yYWdlVHJhY2tlciB0ZXN0IC0gd3JpdGUgbG9jYWwgc3RvcmFn
ZSBmb3IgdGhpcyBvcmlnaW4uIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RvcmFnZS10cmFja2Vy
LTMtZGVsZXRlLWFsbC5odG1sLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGhp
cyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9y
YWdlLXRyYWNrZXItNC1jcmVhdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tl
ci00LWNyZWF0ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21z
dG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNC1jcmVh
dGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJTdG9yYWdlVHJhY2tlciB0ZXN0IC0g
d3JpdGUgbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBvcmlnaW4uIFNob3VsZCBiZSBjYWxsZWQgYWZ0
ZXIgc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sLiIpOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3Jh
Z2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGVidWcoIlRoaXMgdGVzdCBzaG91
bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLiIpOworCisgICAgaWYgKGxheW91
dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgewor
ICAgICAgICAvLyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28gd2UgY2FuIGV4aXQuCisgICAg
ICAgIHRlc3RGYWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0ZWQgd2l0aCBsb2NhbCBzdG9y
YWdlLiIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc3luY0xvY2FsU3RvcmFnZSgp
OworICAgICAgICBsb2NhbFN0b3JhZ2Uuc29tZU90aGVyRGF0YSA9ICd3cml0ZW1lTW9yZSc7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnMoMSk7CisgICAgfQorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgQVBJIHRvIHZpZXcg
b3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0b3Jh
Z2UgYnkgb3JpZ2luLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBsYXlv
dXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLnRvU3RyaW5nKCkgaXMg
ImZpbGVfXzAiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdl
dHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFj
a2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2Ny
aXB0aW9uKCJUZXN0IEFQSSB0byB2aWV3IG9yaWdpbnMgdGhhdCBoYXZlIGxvY2FsIHN0b3JhZ2Ug
YW5kIHRvIGRlbGV0ZSBsb2NhbCBzdG9yYWdlIGJ5IG9yaWdpbi4iKTsKKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cubG9jYWxTdG9y
YWdlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImxvY2FsU3RvcmFnZSBET0VTIE5PVCBleGlzdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVy
Lm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkgeworICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoImxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKCkudG9TdHJpbmcoKSIsICJmaWxlX18wIik7CisgICAgICAgIC8vIFdlJ3JlIGp1c3QgZ29p
bmcgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBvcmlnaW4sIHNvIHdlJ2xsIGdldCBvbmUgb3JpZ2lu
IGNoYW5nZSBub3RpZmljYXRpb24uCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQsIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZSBvbmUgb3JpZ2luIHdpdGggbG9jYWwgc3RvcmFn
ZS4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKCJmaWxlOi8vIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiUmFuIHdp
dGggbm8gb3JpZ2lucyB3aXRoIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKK30KKwordGVzdCgpOwkKKword2luZG93
LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85421</attachid>
            <date>2011-03-10 19:06:16 -0800</date>
            <delta_ts>2011-03-10 20:01:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110310190615.patch</filename>
            <type>text/plain</type>
            <size>132429</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3Vwcyk6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERpcmVjdG9yeSk6CisgICAg
ICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYyk6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjppbml0aWFsaXplVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRy
YWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0lt
cG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2Vy
OjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRl
QWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJD
bGllbnQ6On5TdG9yYWdlVHJhY2tlckNsaWVudCk6CisKIDIwMTEtMDMtMTAgIEFsaWNlIEJveGhh
bGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRy
aSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDgwODAzKQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMDMsNiAr
MzIwMyw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDgwODAz
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTk3
MCw2ICs5NzAsNyBAQCBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMjZzZXRTaG91bGRUcmFja1ZpCiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwMjlyZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZEVQTlNf
MTVET01XcmFwcGVyV29ybGRFUktOU180S1VSTEUKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAzMHJl
bW92ZVVzZXJTdHlsZVNoZWV0c0Zyb21Xb3JsZEVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pO
N1dlYkNvcmU5UGFnZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29y
ZTlQYWdlR3JvdXAxOG51bWJlck9mUGFnZUdyb3Vwc0V2CiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFy
MjJtYXhPdmVybGFwQmV0d2VlblBhZ2VzRXYKIF9fWk43V2ViQ29yZTlUaW1lckJhc2U0c3RvcEV2
CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNXN0YXJ0RWRkCkBAIC0xMDkzLDYgKzEwOTQsMTYgQEAg
X19aTks3V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIxMWZyYW1lTG9hZAogX19aTks3V2ViQ29yZTE0
U2VjdXJpdHlPcmlnaW4xMGNhbkRpc3BsYXlFUktOU180S1VSTEUKIF9fWk5LN1dlYkNvcmUxNFNl
Y3VyaXR5T3JpZ2luMThkYXRhYmFzZUlkZW50aWZpZXJFdgogX19aTks3V2ViQ29yZTE0U2VjdXJp
dHlPcmlnaW41ZXF1YWxFUEtTMF8KKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCitfX1pON1dlYkNv
cmUxNFN0b3JhZ2VUcmFja2VyMTdpbml0aWFsaXplVHJhY2tlckVSS04zV1RGNlN0cmluZ0UKK19f
Wk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxNmRlbGV0ZUFsbE9yaWdpbnNFdgorX19aTjdXZWJD
b3JlMTRTdG9yYWdlVHJhY2tlcjEyZGVsZXRlT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQor
X19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjd0cmFja2VyRXYKK19fWk43V2ViQ29yZTE0U3Rv
cmFnZVRyYWNrZXI3b3JpZ2luc0VSTjNXVEY2VmVjdG9ySU5TMV82UmVmUHRySU5TXzE0U2VjdXJp
dHlPcmlnaW5FRUVMbTBFRUUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI5c2V0Q2xpZW50
RVBOU18yMFN0b3JhZ2VUcmFja2VyQ2xpZW50RQorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tl
cjE2c3luY0xvY2FsU3RvcmFnZUV2CitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMzJzeW5j
RmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZUV2CisjZW5kaWYKIF9fWk5LN1dlYkNvcmUxNUZv
Y3VzQ29udHJvbGxlcjE4Zm9jdXNlZE9yTWFpbkZyYW1lRXYKIF9fWk5LN1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDE1cGxhdGZvcm1Db250ZXh0RXYKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE2cGFpbnRpbmdEaXNhYmxlZEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4
MDgwMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
NDYyMCw2ICs0NjIwLDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCcsCisgICAgICAgICAgICAn
c3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFn
ZVRyYWNrZXIuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2Vy
dmVyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL0lEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gODA4MDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjczNyw3ICsy
NzM3LDkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAg
ICBzdG9yYWdlL1N0b3JhZ2VNYXAuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZS5oIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIFwKLSAgICAgICAg
c3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5oIFwKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKKyAgICAgICAg
c3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCiAKICAgICAhdjggewogICAgICAgICBTT1VS
Q0VTICs9IFwKQEAgLTI3NTQsNyArMjc1Niw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9E
T01fU1RPUkFHRT0xKSAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBcCiAgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAgXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgXAorICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRklM
RV9TWVNURU09MSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDgwODAzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY1NjEzLDYgKzY1NjEzLDE0
IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXFN0b3JhZ2VUcmFja2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9InN0cmluZ3MiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA4MDgwMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODUxLDYgKzg1MSw5IEBACiAJCTM3RjgxOEZE
MEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAv
KiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsK
IAkJMzdGRDQyOTgxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZENDI5NzExODM2ODQ2MDA5
M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCAqLzsgfTsKKwkJM0FCMDJEMkExMkQ0RjkxNjAwRkJC
Njk0IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzQUIw
MkQyQjEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0
IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLzsgfTsKKwkJM0FDMzY4MDAxMkVGN0EwOTAwNkEzRDZG
IC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzQUM2NDhCMjEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUM2NDhCMTEyOUUxNDY1
MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlw
dEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICov
OyB9OwogCQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0ND
MEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OwpAQCAtNzIz
OSw2ICs3MjQyLDkgQEAKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxS
ZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REEx
MTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8q
IFRyZWVEZXB0aExpbWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyZWVE
ZXB0aExpbWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI4MTJENEY5
MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
QUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRy
YWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRy
YWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FDNjQ4QjExMjlF
MTQ2NTAwQzNFQjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFZGl0aW5nQm91bmRhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlw
dEZ1bmN0aW9uQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5
ODUsNiArMTI5OTEsOSBAQAogCQkJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdl
TmFtZXNwYWNlSW1wbC5oICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9y
YWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJCUM1MTAyRDkyMEZEOUFBMkQwMEZBRkYwNCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuaCAqLywKKwkJCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyog
U3RvcmFnZVRyYWNrZXIuaCAqLywKKwkJCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3Rv
cmFnZVRyYWNrZXIuY3BwICovLAorCQkJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9y
YWdlVHJhY2tlckNsaWVudC5oICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBh
dGggPSBzdG9yYWdlOwpAQCAtMjIwNzEsNiArMjIwODAsNyBAQAogCQkJCUM1MEQwRTgzMEZGNDI3
MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTVF
MzhCRjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUM1MTAyRDk0MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdl
VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU0ODhENkIwREQ1QTgzRDAwOUQ4M0IyIC8q
IFN0cmluZ1NvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBEMDA3
ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlG
Nzc3NjBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTIyNTY1LDYgKzIyNTc1LDcgQEAKIAkJCQlFMUYxRTgzMDBDM0MyQkI5MDA2REIzOTEg
LyogWFNMVEV4dGVuc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUVEMDgyNDVFNTkw
MDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkz
QUMzNjgwMDEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0OUJEOUZBMTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NQcmltaXRpdmVW
YWx1ZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODgg
LyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4NDIsNiArMjQ4NTMsNyBAQAog
CQkJCUM1MEQwRTgyMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQg
LyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTNBQjAyRDJCMTJE
NEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkMzREEzMDBEMDA2QzFEMDBFRjZGMjYgLyogU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQjI2NDVDMEQwMEE3N0UwMDBBQ0MxRCAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMkIyNjQ1RDBEMDBBNzdFMDAwQUNDMUQgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gODA4MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJHcm91cFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VOYW1lc3BhY2UuaCIKIApAQCAtMTEwLDYgKzExMSw1NCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xv
c2VMb2NhbFN0b3JhZ2UoKQogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisK
K3ZvaWQgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKQoreworICAg
IGlmICghcGFnZUdyb3VwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjpp
dGVyYXRvciBlbmQgPSBwYWdlR3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6
aXRlcmF0b3IgaXQgPSBwYWdlR3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQt
PnNlY29uZC0+bG9jYWxTdG9yYWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7Cisg
ICAgfQorfQorCit2b2lkIFBhZ2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBpZiAoIXBhZ2VHcm91cHMpCisgICAgICAgIHJl
dHVybjsKKworICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5k
KCk7CisgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2Nh
bFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVh
ck9yaWdpbkZvckRlbGV0aW9uKG9yaWdpbik7CisgICAgfSAgICAKK30KKyAgICAKK3ZvaWQgUGFn
ZUdyb3VwOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBpZiAoIXBhZ2VHcm91cHMpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vw
cy0+ZW5kKCk7CisgICAgZm9yIChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vw
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5o
YXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgp
LT5zeW5jKCk7CisgICAgfQorfQorCit1bnNpZ25lZCBQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdy
b3VwcygpCit7CisgICAgaWYgKCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBwYWdlR3JvdXBzLT5zaXplKCk7Cit9CisKKyNlbmRpZgorCiB2b2lkIFBhZ2VHcm91
cDo6YWRkUGFnZShQYWdlKiBwYWdlKQogewogICAgIEFTU0VSVChwYWdlKTsKQEAgLTIwOSw2ICsy
NTgsNyBAQCBTdG9yYWdlTmFtZXNwYWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnCiAKICAgICBy
ZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9uIDgw
ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JvdXBTZXR0
aW5nczsKICAgICBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKICAgICBjbGFzcyBQ
YWdlOworICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3Bh
Y2U7CiAKICAgICBjbGFzcyBQYWdlR3JvdXAgewpAQCAtNDksNyArNTAsMTUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB+UGFnZUdyb3VwKCk7CiAKICAgICAgICAgc3RhdGljIFBhZ2VH
cm91cCogcGFnZUdyb3VwKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKTsKKworI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKICAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgY2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCk7CisgICAg
ICAgIHN0YXRpYyB2b2lkIGNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
Kik7CisgICAgICAgIC8vIER1bXBSZW5kZXJUcmVlIGhlbHBlciB0aGF0IHRyaWdnZXJzIGEgU3Rv
cmFnZUFyZWEgc3luYy4KKyAgICAgICAgc3RhdGljIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwor
I2VuZGlmCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlBhZ2VHcm91cHMoKTsKICAg
ICAgICAgCiAgICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZXM7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MDgwMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw0ICsxMTIsMTEgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbAogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0Zp
bGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJKHJldmlzaW9uIDgwODAzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPGVycm5vLmg+
CiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CiAjaW5jbHVkZSA8bGli
Z2VuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAg
LTIyNywxMCArMjI5LDI4IEBAIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICByZXR1cm4gZGlybmFtZShmc1JlcC5tdXRhYmxlRGF0YSgpKTsKIH0KIAotLy8gT0sg
dG8gbm90IGltcGxlbWVudCBsaXN0RGlyZWN0b3J5IGF0IHRoZSBtb21lbnQsIGJlY2F1c2UgaXQn
cyBvbmx5IHVzZWQgZm9yIHBsdWctaW5zLCBhbmQKLS8vIGFsbCBwbGF0Zm9ybXMgdGhhdCB1c2Ug
dGhlIHNoYXJlZCBwbHVnLWluIGltcGxlbWVudGF0aW9uIGhhdmUgaW1wbGVtZW50YXRpb25zLiBX
ZSdkIG5lZWQKLS8vIHRvIGltcGxlbWVudCBpdCBpZiB3ZSB3YW50ZWQgdG8gdXNlIFBsdWdpbkRh
dGFiYXNlLmNwcCBvbiB0aGUgTWFjLiBCZXR0ZXIgdG8gbm90IGltcGxlbWVudAotLy8gYXQgYWxs
IGFuZCBnZXQgYSBsaW5rIGVycm9yIGluIGNhc2UgdGhpcyBhcmlzZXMsIHJhdGhlciB0aGFuIGhh
dmluZyBhIHN0dWIgaGVyZSwgYmVjYXVzZQotLy8gd2l0aCBhIHN0dWIgeW91IGxlYXJuIGFib3V0
IHRoZSBwcm9ibGVtIGF0IHJ1bnRpbWUgaW5zdGVhZCBvZiBsaW5rIHRpbWUuCitWZWN0b3I8U3Ry
aW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0
ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKyAgICBDU3RyaW5nIGNwYXRoID0g
cGF0aC51dGY4KCk7CisgICAgQ1N0cmluZyBjZmlsdGVyID0gZmlsdGVyLnV0ZjgoKTsKKyAgICBE
SVIqIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgpKTsKKyAgICBpZiAoZGlyKSB7CisgICAgICAg
IHN0cnVjdCBkaXJlbnQqIGRwOworICAgICAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkg
eworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7CisgICAgICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZm5tYXRjaChjZmlsdGVyLmRhdGEo
KSwgbmFtZSwgMCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjaGFy
IGZpbGVQYXRoWzEwMjRdOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KGZpbGVQYXRoKSAtIDEpIDwgc25wcmludGYoZmlsZVBhdGgsIHNpemVvZihmaWxlUGF0aCksICIl
cy8lcyIsIGNwYXRoLmRhdGEoKSwgbmFtZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7IC8v
IGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZVBhdGgpOwor
ICAgICAgICB9CisgICAgICAgIGNsb3NlZGlyKGRpcik7CisgICAgfQorICAgIHJldHVybiBlbnRy
aWVzOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJKHJldmlzaW9uIDgwODAzKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw2ICs1MSwyNyBAQCBMb2NhbFN0b3JhZ2VUYXNrOjpM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUgCiAgICAgQVNTRVJUKG1fdGhyZWFkKTsKICAgICBBU1NFUlQo
bV90eXBlID09IFRlcm1pbmF0ZVRocmVhZCk7CiB9CisgICAgCitMb2NhbFN0b3JhZ2VUYXNrOjpM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworICAgIEFT
U0VSVChtX3R5cGUgPT0gSW1wb3J0T3JpZ2lucyB8fCBtX3R5cGUgPT0gRGVsZXRlQWxsT3JpZ2lu
cyk7Cit9CisgICAgCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorICAgIDogbV90eXBlKHR5cGUpCisg
ICAgLCBtX29yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IERlbGV0ZU9yaWdpbik7Cit9CisKK0xvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3Rv
cmFnZVRhc2soVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VGaWxlbmFtZSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9v
cmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpCisgICAgLCBtX2RhdGFiYXNlRmlsZW5h
bWUoZGF0YWJhc2VGaWxlbmFtZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFNldE9yaWdpbkRl
dGFpbHMpOworfQogCiBMb2NhbFN0b3JhZ2VUYXNrOjp+TG9jYWxTdG9yYWdlVGFzaygpCiB7CkBA
IC02NCw2ICs4NiwxOCBAQCB2b2lkIExvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKCkKICAg
ICAgICAgY2FzZSBBcmVhU3luYzoKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybVN5bmMoKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldE9yaWdpbkRldGFpbHM6CisgICAg
ICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNTZXRPcmlnaW5EZXRhaWxzKG1f
b3JpZ2luSWRlbnRpZmllciwgbV9kYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEltcG9ydE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRGVsZXRlQWxsT3JpZ2luczoKKyAgICAgICAgICAgIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERlbGV0ZU9yaWdpbjoKKyAgICAgICAgICAgIFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuc3luY0RlbGV0ZU9yaWdpbihtX29yaWdpbklkZW50aWZpZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGVsZXRlRW1wdHlEYXRhYmFzZToKICAg
ICAgICAgICAgIG1fYXJlYS0+ZGVsZXRlRW1wdHlEYXRhYmFzZSgpOwogICAgICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkocmV2
aXNpb24gODA4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNDAsMTMgKzQxLDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrIHsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxTdG9yYWdlVGFzayk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgQXJlYUltcG9ydCwg
QXJlYVN5bmMsIERlbGV0ZUVtcHR5RGF0YWJhc2UsIFRlcm1pbmF0ZVRocmVhZCB9OworICAgICAg
ICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwg
U2V0T3JpZ2luRGV0YWlscywgSW1wb3J0T3JpZ2lucywgRGVsZXRlQWxsT3JpZ2lucywgRGVsZXRl
T3JpZ2luLCBUZXJtaW5hdGVUaHJlYWQgfTsKIAogICAgICAgICB+TG9jYWxTdG9yYWdlVGFzaygp
OwogCiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZUlt
cG9ydChTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0
b3JhZ2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsgfQog
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVF
bXB0eURhdGFiYXNlKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlRW1wdHlEYXRhYmFzZSwgYXJlYSkpOyB9CisgICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZU9yaWdpbklkZW50aWZp
ZXJzSW1wb3J0KCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soSW1wb3J0
T3JpZ2lucykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZVNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZW5hbWUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKFNldE9yaWdpbkRldGFpbHMsIG9yaWdpbklkZW50aWZpZXIsIGRhdGFiYXNl
RmlsZW5hbWUpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNr
PiBjcmVhdGVEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhEZWxldGVPcmlnaW4sIG9yaWdpbklk
ZW50aWZpZXIpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNr
PiBjcmVhdGVEZWxldGVBbGxPcmlnaW5zKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3Rv
cmFnZVRhc2soRGVsZXRlQWxsT3JpZ2lucykpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRy
PExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVRlcm1pbmF0ZShMb2NhbFN0b3JhZ2VUaHJlYWQqIHRo
cmVhZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhy
ZWFkLCB0aHJlYWQpKTsgfQogCiAgICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKQEAgLTU0LDEw
ICs1OSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgTG9j
YWxTdG9yYWdlVGFzayhUeXBlLCBTdG9yYWdlQXJlYVN5bmMqKTsKICAgICAgICAgTG9jYWxTdG9y
YWdlVGFzayhUeXBlLCBMb2NhbFN0b3JhZ2VUaHJlYWQqKTsKKyAgICAgICAgTG9jYWxTdG9yYWdl
VGFzayhUeXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICBMb2Nh
bFN0b3JhZ2VUYXNrKFR5cGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBl
KTsKIAogICAgICAgICBUeXBlIG1fdHlwZTsKICAgICAgICAgU3RvcmFnZUFyZWFTeW5jKiBtX2Fy
ZWE7CiAgICAgICAgIExvY2FsU3RvcmFnZVRocmVhZCogbV90aHJlYWQ7CisgICAgICAgIFN0cmlu
ZyBtX29yaWdpbklkZW50aWZpZXI7CisgICAgICAgIFN0cmluZyBtX2RhdGFiYXNlRmlsZW5hbWU7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkocmV2aXNpb24gODA4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
Nyw2ICsyMjcsMzEgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKICNlbmRpZgogfQog
Cit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpCit7CisgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwor
ICAgIAorICAgIGlmIChtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKSB7CisgICAgICAgIHVuc2lnbmVk
IHF1b3RhID0gbV9zdG9yYWdlTWFwLT5xdW90YSgpOworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBT
dG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOworICAgIH0KKworICAgIGlmIChtX3N0b3JhZ2VBcmVh
U3luYykgeworICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOworICAg
ICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7CisgICAgfQor
fQorICAgIAordm9pZCBTdG9yYWdlQXJlYUltcGw6OnN5bmMoKQoreworICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBp
ZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVs
ZVN5bmMoKTsKK30KKwogdm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCShyZXZpc2lvbiA4MDgwMykKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gT25seSBjYWxs
ZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgICAgICB2b2lkIGltcG9ydEl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCisgICAgICAgIC8vIFVzZWQg
dG8gY2xlYXIgYSBTdG9yYWdlQXJlYSBhbmQgY2xvc2UgZGIgYmVmb3JlIGJhY2tpbmcgZGIgZmls
ZSBpcyBkZWxldGVkLgorICAgICAgICB2b2lkIGNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKwor
ICAgICAgICB2b2lkIHN5bmMoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVh
SW1wbChTdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8
U3RvcmFnZVN5bmNNYW5hZ2VyPiwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBTdG9yYWdlQXJl
YUltcGwoU3RvcmFnZUFyZWFJbXBsKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA4MDgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBs
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRy
YWNrZXIuaCIKICNpbmNsdWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTM4LDYgKzEzOSwyNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6c2NoZWR1bGVDbGVhcigpCiAgICAgfQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2No
ZWR1bGVDbG9zZURhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1
ZTsKKyAgICAKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9z
eW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVT
dWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rp
b24uCisgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwogdm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4q
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yMjIsNiArMjQyLDEwIEBAIHZv
aWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIC8vIEEgU3RvcmFnZVRyYWNrZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2No
ZWR1bGVkIHRvIGRlbGV0ZSB0aGUgZGIgd2UncmUKKyAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNl
bCBwb3NzaWJsZSBkZWxldGlvbi4KKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNl
bERlbGV0aW5nT3JpZ2luKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRh
YmFzZS5vcGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmls
ZW5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpAQCAtMjM1LDYg
KzI1OSw4IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAg
ICAgbV9kYXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQor
CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRPcmlnaW5EZXRhaWxzKG1fZGF0YWJh
c2VJZGVudGlmaWVyLCBkYXRhYmFzZUZpbGVuYW1lKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnBlcmZvcm1JbXBvcnQoKQpAQCAtMzE5LDYgKzM0NSwxNSBAQCB2b2lkIFN0b3JhZ2VBcmVh
U3luYzo6c3luYyhib29sIGNsZWFySXRlCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBpdCBpcyBh
Ym91dCB0byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBkZWxldGUg
d2lsbCBiZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3BlbiB0aGUg
ZGIKKyAgICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVxdWVzdCB0
byBkZWxldGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7CisgICAgICAg
IG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIElmIHRoZSBjbGVhciBmbGFn
IGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkg
bmV3IG9uZXMgaW4uCiAgICAgaWYgKGNsZWFySXRlbXMpIHsKICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKQEAgLTQyMSwx
MiArNDU2LDIxIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXMKICAg
ICBpZiAoIWNvdW50KSB7CiAgICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7CiAgICAgICAgIG1fZGF0
YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNN
YW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAg
ICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGRhdGFiYXNlRmls
ZW5hbWUpKQotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNl
IGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlm
IChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBTdG9y
YWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBt
X3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7
CisgICAgICAgICAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShk
YXRhYmFzZUZpbGVuYW1lKSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBk
ZWxldGUgZGF0YWJhc2UgZmlsZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxl
U3luYygpCit7CisgICAgc3luY1RpbWVyRmlyZWQoJm1fc3luY1RpbWVyKTsKK30KKyAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkocmV2aXNpb24gODA4
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
b2lkIHNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwogICAgICAgICB2b2lkIHNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgdm9pZCBzY2hl
ZHVsZUNsb3NlRGF0YWJhc2UoKTsKKworICAgICAgICB2b2lkIHNjaGVkdWxlU3luYygpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5
bmNNYW5hZ2VyPiwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWRlbnRpZmllcik7CkBAIC05Miw2ICs5NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBtX3N5bmNTY2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9zeW5jSW5Qcm9n
cmVzczsKICAgICAgICAgYm9vbCBtX2RhdGFiYXNlT3BlbkZhaWxlZDsKKyAgICAgICAgCisgICAg
ICAgIGJvb2wgbV9zeW5jQ2xvc2VEYXRhYmFzZTsKIAogICAgICAgICBtdXRhYmxlIE11dGV4IG1f
aW1wb3J0TG9jazsKICAgICAgICAgbXV0YWJsZSBUaHJlYWRDb25kaXRpb24gbV9pbXBvcnRDb25k
aXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAko
cmV2aXNpb24gODA4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJ
KHJldmlzaW9uIDgwODAzKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJT
dG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
CkBAIC0xNDQsNiArMTQ1LDMyIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnVubG9jaygp
CiAgICAgLy8gQmVjYXVzZSB0aGVyZSdzIGEgc2luZ2xlIGV2ZW50IGxvb3AgcGVyLXByb2Nlc3Ms
IHRoaXMgaXMgYSBuby1vcC4KIH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJP
cmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJl
YSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQor
ICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQorCit2b2lk
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKK30KKyAgICAK
K3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN5bmMoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFy
ZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0
b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29u
ZC0+c3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoRE9NX1NUT1JBR0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5oCShyZXZpc2lvbiA4MDgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCisgICAgICAgIC8vIE5vdCByZW1vdmluZyB0
aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0b3JhZ2VBcmVhTWFwIGJlY2F1c2UKKyAg
ICAgICAgLy8gd2UncmUganVzdCBkZWxldGluZyB0aGUgdW5kZXJseWluZyBkYiBmaWxlLiBJZiBh
biBpdGVtIGlzIGFkZGVkIGltbWVkaWF0ZWx5CisgICAgICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRp
b24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxseSB0cmlnZ2VyCisg
ICAgICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VBcmVhU3luYyB0byByZWNyZWF0ZSB0aGUg
YmFja2luZyBkYiBmaWxlLgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxl
dGlvbihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmln
aW5zRm9yRGVsZXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN5bmMoKTsKKyAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUs
IGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9y
YWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdl
R3JvdXAuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRl
U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9y
YWdlVHJhY2tlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0
b3JhZ2VUcmFja2VyKiBzdG9yYWdlVHJhY2tlciA9IDA7CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6
OmluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpCit7CisgICAgQVNT
RVJUKCFzdG9yYWdlVHJhY2tlcik7CisgICAgaWYgKHN0b3JhZ2VUcmFja2VyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzdG9yYWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcihzdG9yYWdl
UGF0aCk7CisgICAgc3RvcmFnZVRyYWNrZXItPnNldElzQWN0aXZlKHRydWUpOworICAgIHN0b3Jh
Z2VUcmFja2VyLT5pbXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworfQorCitTdG9yYWdlVHJhY2tl
ciYgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKQoreworICAgIGlmICghc3RvcmFnZVRyYWNrZXIp
IHsKKyAgICAgICAgc3RvcmFnZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoIiIpOworICAg
ICAgICBzdG9yYWdlVHJhY2tlci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuICpzdG9yYWdlVHJhY2tlcjsKK30KKworU3RvcmFnZVRyYWNrZXI6OlN0
b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpCisgICAgOiBtX2NsaWVudCgw
KQorICAgICwgbV90aHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKSkKKyAgICAsIG1f
aXNBY3RpdmUoZmFsc2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAg
CisgICAgc2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBhdGgpOworICAgIAorICAgIFNR
TGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7CisgICAgCisgICAgbV90aHJlYWQt
PnN0YXJ0KCk7ICAKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURpcmVjdG9y
eVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Cisg
ICAgCisgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2FmZUNvcHkoKTsK
K30KKworU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRv
UGF0aChtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCAiU3RvcmFnZVRyYWNrZXIuZGIiKTsKK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9l
c05vdEV4aXN0KQoreworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworCisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBT
dHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOworICAgIAorICAgIGlm
ICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0
aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKSB7CisgICAgICAgIGlmIChjcmVhdGVJZkRvZXNOb3RF
eGlzdCkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBm
aWxlICclcyciLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0
YWJhc2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKyAgICAKKyAgICBpZiAo
IW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIk9yaWdpbnMiKSkgeworICAgICAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4gVEVYVCBV
TklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKKyAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOworICAgIH0KK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoreyAgIAorICAg
IGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKworICAgIG1fdGhyZWFkLT5zY2hl
ZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQo
KSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVy
cygpCit7CisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAgIAorICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9k
YXRhYmFzZUd1YXJkKTsKKworICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAg
ICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHBy
ZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpbnQgcmVzdWx0OworCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAgICAgICAgd2hpbGUg
KChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpCisgICAgICAgICAg
ICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLnRocmVhZHNh
ZmVDb3B5KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ICE9IFNR
TFJlc3VsdERvbmUpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIGFs
bCBvcmlnaW5zIGZyb20gdGhlIGRhdGFiYXNlLiIpOworICAgIH0KKyAgICAKKyAgICBzeW5jRmls
ZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworICAgIAorICAgIGlmIChtX2NsaWVudCkgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAg
ICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsKKyAg
ICAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luKCppdCk7CisgICAgfQorfQorICAgIAordm9pZCBTdG9yYWdlVHJhY2tlcjo6
c3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKQoreworICAgIEFTU0VSVChtX2lzQWN0
aXZlKTsKKworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBmaWxlTWF0Y2hQ
YXR0ZXJuLCAoIioubG9jYWxzdG9yYWdlIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBmaWxlRXh0LCAoIi5sb2NhbHN0b3JhZ2UiKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCB1bnNpZ25lZCwgZmlsZUV4dExlbmd0aCwgKGZpbGVFeHQubGVuZ3RoKCkp
KTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3JhZ2VE
aXJlY3RvcnlQYXRoLCBmaWxlTWF0Y2hQYXR0ZXJuKTsKKyAgICAKKyAgICAvLyBBZGQgbWlzc2lu
ZyBTdG9yYWdlVHJhY2tlciByZWNvcmRzLgorICAgIE9yaWdpblNldCBmb3VuZE9yaWdpbnM7Cisg
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhdGhzLmVuZCgpOworICAg
IGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGF0aHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gKml0OworICAgICAgICBp
ZiAocGF0aC5lbmRzV2l0aChmaWxlRXh0LCB0cnVlKSAmJiBwYXRoLmxlbmd0aCgpID4gZmlsZUV4
dExlbmd0aCkgeworICAgICAgICAgICAgU3RyaW5nIGZpbGUgPSBwYXRoR2V0RmlsZU5hbWUocGF0
aCk7CisgICAgICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGZpbGUuc3Vic3RyaW5n
KDAsIGZpbGUubGVuZ3RoKCkgLSBmaWxlRXh0TGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghbV9v
cmlnaW5TZXQuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldE9yaWdpbkRldGFpbHMo
b3JpZ2luSWRlbnRpZmllciwgcGF0aCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzeW5jU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9yYWdl
VHJhY2tlciByZWNvcmRzLgorICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0g
bV9vcmlnaW5TZXQuZW5kKCk7CisgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9vcmlnaW5TZXQuYmVnaW4oKTsgaXQgIT0gc2V0RW5kOyArK2l0KSB7CisgICAgICAgIGlm
ICghZm91bmRPcmlnaW5zLmNvbnRhaW5zKCppdCkpIHsKKyAgICAgICAgICAgIGlmIChpc01haW5U
aHJlYWQoKSkKKyAgICAgICAgICAgICAgICBkZWxldGVPcmlnaW4oKml0KTsKKyAgICAgICAgICAg
IGVsc2UgCisgICAgICAgICAgICAgICAgc3luY0RlbGV0ZU9yaWdpbigqaXQpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRPcmlnaW5EZXRhaWxzKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpCit7
CisgICAgaWYgKCFtX2lzQWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworCisgICAgICAgIGlm
IChtX29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX29yaWdpblNldC5hZGQob3JpZ2luSWRlbnRpZmllcik7CisgICAg
fQorCisgICAgTG9jYWxTdG9yYWdlVGFzayogdGFzayA9IExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0
ZVNldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllci50aHJlYWRzYWZlQ29weSgpLCBkYXRh
YmFzZUZpbGUpLmxlYWtQdHIoKTsKKworICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAg
ICBBU1NFUlQobV90aHJlYWQpOworICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKHRhc2sp
OworICAgIH0gZWxzZSAKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChzY2hlZHVsZVRhc2ssICh2
b2lkKil0YXNrKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKHZvaWQq
IHRhc2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoU3RvcmFn
ZVRyYWNrZXI6OnRyYWNrZXIoKS5tX3RocmVhZCk7CisgICAgCisgICAgaWYgKFN0b3JhZ2VUcmFj
a2VyOjp0cmFja2VyKCkubV90aHJlYWQpCisgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkubV90aHJlYWQtPnNjaGVkdWxlVGFzaygoTG9jYWxTdG9yYWdlVGFzayopdGFzayk7Cit9CisK
K3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9k
YXRhYmFzZUd1YXJkKTsKKworICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CisgICAgCisg
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZB
TFVFUyAoPywgPykiKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycg
aW4gdGhlIHRyYWNrZXIiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0gCisgICAgCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUpOwor
ICAgIAorICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tl
ciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgaWYgKCFt
X29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIG1fb3Jp
Z2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlm
aWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCit7CisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAg
IAorICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJ
WE1FOiBTdG9yYWdlVHJhY2tlciBpcyBjdXJyZW50bHkgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBi
ZSBhc3N1bWVkCisgICAgLy8gdG8gaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2l0aCBtb3JlIHRo
YW4gb25lIFBhZ2VHcm91cC4KKyAgICBBU1NFUlQoUGFnZUdyb3VwOjpudW1iZXJPZlBhZ2VHcm91
cHMoKSA9PSAxKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3Vh
cmQpOworCisgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5l
bmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoKml0KSk7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVChtX2lzQWN0
aXZlKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7
CisgICAgCisgICAgaWYgKCFtX2lzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gRklYTUU6IFN0b3JhZ2VUcmFja2VyIGlzIGN1cnJlbnRseSBhIHNpbmdsZXRvbiBhbmQgc2hv
dWxkIGJlIGFzc3VtZWQKKyAgICAvLyB0byBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciB3aXRoIG1v
cmUgdGhhbiBvbmUgUGFnZUdyb3VwLgorICAgIEFTU0VSVChQYWdlR3JvdXA6Om51bWJlck9mUGFn
ZUdyb3VwcygpID09IDEpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lu
cyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAg
ICAgICAgbV9vcmlnaW5TZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICBQYWdlR3JvdXA6OmNsZWFy
TG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lucygpOworICAgIAorICAgIG1fdGhyZWFkLT5zY2hlZHVs
ZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlQWxsT3JpZ2lucygpKTsKK30KKyAg
ICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNl
KTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2lu
LCBwYXRoIEZST00gT3JpZ2lucyIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVt
ZW50LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXN1bHQ7Cisg
ICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsK
KyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZURhdGFiYXNlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9y
aWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgfQorICAgIAorICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVh
ZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAKKyAgICBpZiAobV9k
YXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIAorICAg
IFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRo
KCkpOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnko
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0
ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgZGVsZXRlT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklk
ZW50aWZpZXIpLmdldCgpKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2lu
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7ICAgIAorICAgIEFTU0VSVChtX2lzQWN0aXZlKTsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAg
CisgICAgaWYgKCFtX2lzQWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
U3RvcmFnZVRyYWNrZXIgaXMgY3VycmVudGx5IGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgYXNz
dW1lZAorICAgIC8vIHRvIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIHdpdGggbW9yZSB0aGFuIG9u
ZSBQYWdlR3JvdXAuCisgICAgQVNTRVJUKFBhZ2VHcm91cDo6bnVtYmVyT2ZQYWdlR3JvdXBzKCkg
PT0gMSk7CisgICAgCisgICAgLy8gQmVmb3JlIGRlbGV0aW5nIGRhdGFiYXNlLCB3ZSBuZWVkIHRv
IGNsZWFyIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlIGRhdGEKKyAgICAvLyBpbiBTdG9yYWdlQXJl
YSwgYW5kIHRvIGNsb3NlIHRoZSBTdG9yYWdlQXJlYSBkYi4gSXQncyBwb3NzaWJsZSBmb3IgYW4K
KyAgICAvLyBpdGVtIHRvIGJlIGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NpbmcgdGhlIGRi
IGFuZCBjYXVzZSBTdG9yYWdlQXJlYVN5bmMKKyAgICAvLyB0byByZW9wZW4gdGhlIGRiIGJlZm9y
ZSB0aGUgZGIgaXMgZGVsZXRlZCBieSBhIFN0b3JhZ2VUcmFja2VyIHRocmVhZC4KKyAgICAvLyBJ
biB0aGlzIGNhc2UsIHJlb3BlbmluZyB0aGUgZGIgaW4gU3RvcmFnZUFyZWFTeW5jIHdpbGwgY2Fu
Y2VsIGEgcGVuZGluZworICAgIC8vIFN0b3JhZ2VUcmFja2VyIGRiIGRlbGV0aW9uLgorICAgIFBh
Z2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKKworICAgIFN0cmlu
ZyBvcmlnaW5JZCA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgCisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAg
ICAgd2lsbERlbGV0ZU9yaWdpbihvcmlnaW5JZCk7CisgICAgICAgIG1fb3JpZ2luU2V0LnJlbW92
ZShvcmlnaW5JZCk7CisgICAgfQorICAgIAorICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9j
YWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlT3JpZ2luKG9yaWdpbklkKSk7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgCisgICAgaWYgKCFjYW5EZWxl
dGVPcmlnaW4ob3JpZ2luSWRlbnRpZmllcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0
ZWQgdG8gZGVsZXRlIG9yaWdpbiAnJXMnIHdoaWxlIGl0IHdhcyBiZWluZyBjcmVhdGVkXG4iLCBv
cmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBHZXQgb3JpZ2luJ3Mg
ZGIgZmlsZSBwYXRoLCBkZWxldGUgZW50cnkgaW4gdHJhY2tlcidzIGRiLCB0aGVuIGRlbGV0ZSBk
YiBmaWxlLgorICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVtZW50KG1fZGF0YWJhc2UsICJT
RUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKKyAgICBpZiAocGF0aFN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2luICclcyciLCBvcmln
aW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGludCBy
ZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3Vs
dFJvdykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBmaW5kIG9yaWdpbiAnJXMnIGlu
IE9yaWdpbnMgdGFibGUiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTdHJpbmcgcGF0aCA9IHBhdGhTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKTsKKworICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkpOworICAgIAor
ICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iKTsKKyAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlU3RhdGVtZW50LmJp
bmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBk
ZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RGF0YWJhc2VGaWxlKHBhdGgpOworICAgIAorICAgIGJvb2wgc2hvdWxkRGVsZXRlVHJhY2tlckZp
bGVzID0gZmFsc2U7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBvcmlnaW5Mb2NrKG1fb3Jp
Z2luU2V0R3VhcmQpOworICAgICAgICBtX29yaWdpblNldC5yZW1vdmUob3JpZ2luSWRlbnRpZmll
cik7CisgICAgICAgIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IG1fb3JpZ2luU2V0LmlzRW1w
dHkoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkRGVsZXRlVHJhY2tlckZpbGVzKSB7CisgICAg
ICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgICAgIFNRTGl0ZUZpbGVT
eXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0
aCk7CisgICAgfQorICAgIAorICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRp
c3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAordm9pZCBT
dG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVCghbV9v
cmlnaW5TZXRHdWFyZC50cnlMb2NrKCkpOworCisgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQoKCppdCkudGhyZWFkc2FmZUNvcHkoKSk7Cit9CisK
K3ZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KCFtX29yaWdpblNldEd1YXJkLnRyeUxvY2soKSk7CisKKyAgICBtX29yaWdpbnNCZWluZ0RlbGV0
ZWQuYWRkKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAorYm9vbCBTdG9yYWdlVHJhY2tlcjo6
Y2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2tP
cmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgIHJldHVybiBtX29yaWdpbnNCZWluZ0RlbGV0
ZWQuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6
OmNhbmNlbERlbGV0aW5nT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sK
KyAgICBpZiAoIW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2Vy
IGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRh
YmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW5JZGVu
dGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFj
a2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQg
U3RvcmFnZVRyYWNrZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIFBhZ2VHcm91cDo6c3lu
Y0xvY2FsU3RvcmFnZSgpOworfQorICAgIAorYm9vbCBTdG9yYWdlVHJhY2tlcjo6aXNBY3RpdmUo
KQoreworICAgIHJldHVybiBtX2lzQWN0aXZlOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpz
ZXRJc0FjdGl2ZShib29sIGZsYWcpCit7CisgICAgbV9pc0FjdGl2ZSA9IGZsYWc7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VU
cmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VU
cmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTdG9yYWdlVHJhY2tlcl9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyX2gKKworI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKyAgICAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMb2Nh
bFN0b3JhZ2VUYXNrOworY2xhc3MgTG9jYWxTdG9yYWdlVGhyZWFkOworY2xhc3MgU2VjdXJpdHlP
cmlnaW47CitjbGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudDsgICAgCisKK2NsYXNzIFN0b3JhZ2VU
cmFja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIFN0b3Jh
Z2VUcmFja2VyJiB0cmFja2VyKCk7CisgICAgc3RhdGljIHZvaWQgc2NoZWR1bGVUYXNrKHZvaWQq
KTsKKworICAgIHZvaWQgaW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB2b2lkIHNldE9y
aWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgdm9pZCBkZWxldGVBbGxPcmlnaW5zKCk7CisgICAg
dm9pZCBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdp
bihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgb3JpZ2lucyhWZWN0
b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpOworCisgICAgdm9pZCBjYW5jZWxE
ZWxldGluZ09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAg
IHZvaWQgc2V0Q2xpZW50KFN0b3JhZ2VUcmFja2VyQ2xpZW50Kik7CisgICAgCisgICAgYm9vbCBp
c0FjdGl2ZSgpOworCisgICAgLy8gU3luYyB0byBkaXNrIG9uIGJhY2tncm91bmQgdGhyZWFkLgor
ICAgIHZvaWQgc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICB2b2lkIHN5bmNEZWxldGVPcmln
aW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHN5bmNTZXRPcmln
aW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZUZpbGUpOworICAgIHZvaWQgc3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Cisg
ICAgdm9pZCBzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworCisgICAgdm9pZCBz
eW5jTG9jYWxTdG9yYWdlKCk7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZVRyYWNrZXIoY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCk7CisKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgp
IGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KTsKKworICAgIHZvaWQgc2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5n
Jik7CisKKyAgICB2b2lkIGRlbGV0ZVRyYWNrZXJGaWxlcygpOworCisgICAgYm9vbCBjYW5EZWxl
dGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHdpbGxE
ZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHdp
bGxEZWxldGVBbGxPcmlnaW5zKCk7CisKKyAgICB2b2lkIG9yaWdpbkZpbGVQYXRocyhWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpOworICAgIAorICAgIHZvaWQgc2V0SXNBY3RpdmUoYm9vbCk7CisKKyAg
ICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CisgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsK
KworICAgIFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOworCisgICAgU3RvcmFnZVRyYWNr
ZXJDbGllbnQqIG1fY2xpZW50OworCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2lu
U2V0OworCisgICAgTXV0ZXggbV9vcmlnaW5TZXRHdWFyZDsKKyAgICBPcmlnaW5TZXQgbV9vcmln
aW5TZXQ7CisgICAgT3JpZ2luU2V0IG1fb3JpZ2luc0JlaW5nRGVsZXRlZDsKKworICAgIE93blB0
cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOworICAgIAorICAgIGJvb2wgbV9pc0FjdGl2
ZTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBTdG9yYWdlVHJhY2tlcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgU3RvcmFnZVRyYWNr
ZXJDbGllbnRfaAorI2RlZmluZSBTdG9yYWdlVHJhY2tlckNsaWVudF9oCisKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVudCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA4MDgwMykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
V2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgKiBX
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMS0wMy0wMiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nv
bi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gODA4MDMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxMSBAQAogCQkzN0I2
RkI0RjEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0I2RkI0RDEwNjM1MzBDMDAw
RkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gKi87IH07CiAJCTM3RDFEQ0E4MTA2NTky
OEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzdEMURDQTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9j
LmggKi87IH07CiAJCTM3RDFEQ0E5MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E3MTA2
NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSAqLzsgfTsKKwkJM0FCMDJBRjYxMkMxMzE5
QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0
b3JhZ2VNYW5hZ2VyLm1tICovOyB9OworCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyogV2Vi
U3RvcmFnZU1hbmFnZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJM0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJCM0M3
ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsKKwkJ
M0FCQjNDN0IxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzkxMzA5
QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovOyB9OworCQkzQUUx
NUQ1MDEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FFMTVENEYxMkRCREVE
NDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLzsgfTsKIAkJNDFGNDQ4
NEYxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUg
LyogV2ViV29ya2Vyc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk0MUY0NDg1MDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1By
aXZhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MUY0NDg0RTEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi87IH07CiAJ
CTQ0QkI4QjE0MTI0MUEwMjIwMDFFM0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QkI4QjEzMTI0MUEwMjIw
MDFFM0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTQ4Myw2ICs0ODgsMTEg
QEAKIAkJMzk0NDYwN0UwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkJhY2tGb3J3YXJkTGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDdGMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJI
aXN0b3J5SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJIaXN0b3J5SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdl
Ykhpc3RvcnlJdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViSGlzdG9yeUl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQkzQUIwMkFGNTEyQzEzMTlCMDBG
QkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJM0FCMDJBRkYxMkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdl
clByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCQjNDNzgxMzA5QzNC
NTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTNBQkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJh
Y2tlckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
QUUxNUQ0RjEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlckludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjQ0ODREMTAzMzhFOEMwMDMwRTU1
RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJXb3JrZXJzUHJpdmF0ZS5oOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vyc1ByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEUxMDMzOEU4QzAwMzBF
NTVFIC8qIFdlYldvcmtlcnNQcml2YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV2ViV29ya2Vyc1ByaXZhdGUubW07IHBhdGggPSBtYWMvV29ya2Vycy9XZWJX
b3JrZXJzUHJpdmF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk4Qjkw
RjhGODJERjAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTA1Niw2ICsxMDY2LDExIEBACiAJCQkJQTVERUZDMEUxMUQ1MzQz
RTAwODg1MjczIC8qIFdlYkRhdGFiYXNlUXVvdGFNYW5hZ2VyLm1tICovLAogCQkJCTUxMUYzRkQz
MENFQ0M4OEYwMDg1MjU2NSAvKiBXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKIAkJCQk1
MTFGM0ZENDBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICov
LAorCQkJCTNBQjAyQUY1MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAq
LywKKwkJCQkzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2
YXRlLmggKi8sCisJCQkJM0FFMTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5h
Z2VySW50ZXJuYWwuaCAqLywKKwkJCQkzQUJCM0M3ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQuaCAqLywKKwkJCQkzQUJCM0M3OTEzMDlDM0I1MDBFOTNEOTQgLyog
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFN0b3JhZ2U7
CiAJCQlwYXRoID0gbWFjL1N0b3JhZ2U7CkBAIC0xNjI1LDcgKzE2NDAsMTAgQEAKIAkJCQk1OThB
RDkyQTEyMDFDRjNCMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2tJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk4QURBNDYxMjAyMjc1MDAwQUJBRTRFIC8q
IFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTJB
MUE0MTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTNBQjAyQjAwMTJDMTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJG
dWxsU2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FFMTVENTAxMkRCREVE
NDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTNBQkIzQzdBMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MkQzMjQxMzFFRDFFMDAwNzVGQTRCIC8qIFdlYkxvY2Fs
aXphYmxlU3RyaW5nc0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTE5OTMsNyArMjAxMSw5IEBACiAJ
CQkJNTk4QUQ5MjIxMjAxQ0YxMDAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTk4QUQ5MjgxMjAxQ0YzMjAwQUJBRTRFIC8qIFdlYkRldmljZU9y
aWVudGF0aW9uUHJvdmlkZXJNb2NrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMkExQTUxMjNC
MEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTNBQjAyQUY2MTJDMTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQTYyQUUzMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNBQkIzQzdCMTMwOUMzQjUwMEU5M0Q5NCAv
KiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDJEMzRE
MTMxRUQzODgwMDc1RkE0QiAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODAzKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJL
aXQxIEFQSSB0byB2aWV3IGFuZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAgICAqIHNyYy9T
dG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVz
cGFjZVByb3h5OjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpzeW5jKToKKyAgICAgICAgKiBzcmMv
U3RvcmFnZU5hbWVzcGFjZVByb3h5Lmg6CisKIDIwMTEtMDMtMTAgIE5hdCBEdWNhICA8bmR1Y2FA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNl
UHJveHkuY3BwCShyZXZpc2lvbiA4MDgwMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDIx
IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp1bmxvY2soKQogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCiB9CiAKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhck9yaWdpbkZv
ckRlbGV0aW9uKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNG
b3JEZWxldGlvbigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU3Rv
cmFnZU5hbWVzcGFjZVByb3h5OjpzeW5jKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9S
QUdFKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5h
bWVzcGFjZVByb3h5LmgJKHJldmlzaW9uIDgwODAzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4g
Y29weSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bmxv
Y2soKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1
cml0eU9yaWdpbiopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlv
bigpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzeW5jKCk7CiAKIHByaXZhdGU6CiAgICAgT3du
UHRyPFdlYktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZT4gbV9zdG9yYWdlTmFtZXNwYWNlOwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gODA4MDMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0wMy0xMCAgQW50
b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRl
IGxvY2FsIHN0b3JhZ2UKKworICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06
IEFkZGVkLgorICAgICAgICAoK1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFu
YWdlcl0pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciBvcmlnaW5zXSk6CisgICAgICAg
ICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIGRlbGV0ZUFsbE9yaWdpbnNdKToKKyAgICAgICAgKC1bV2Vi
U3RvcmFnZU1hbmFnZXIgZGVsZXRlT3JpZ2luOl0pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFu
YWdlciBzeW5jTG9jYWxTdG9yYWdlXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIHN5
bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlXSk6CisgICAgICAgIChzdG9yYWdlRGlyZWN0
b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaDogQWRkZWQuCisg
ICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAg
KiBTdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6Cisg
ICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQp
OgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNs
aWVudCk6CisgICAgICAgIChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW5Pbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6
OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJT
ZWN1cml0eU9yaWdpbi5tbToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gcHJvdG9jb2xd
KToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gaG9zdF0pOgorICAgICAgICAoLVtXZWJT
ZWN1cml0eU9yaWdpbiBkYXRhYmFzZUlkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV2ViU2VjdXJp
dHlPcmlnaW4gZG9tYWluXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIF9pbml0V2l0
aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJT
ZWN1cml0eU9yaWdpblByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJLaXQuZXhwOgorICAgICAgICAq
IFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6
YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTp1c2VzRG9jdW1lbnRWaWV3czpdKToKKwogMjAx
MS0wMy0xMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQu
ZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHJldmlzaW9u
IDgwODAzKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViS2l0LmV4cAkod29ya2luZyBjb3B5KQpA
QCAtNiw2ICs2LDcgQEAKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVN0YXRpc3RpY3MKIC5vYmpj
X2NsYXNzX25hbWVfV2ViRGF0YVNvdXJjZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEYXRhYmFzZU1h
bmFnZXIKKy5vYmpjX2NsYXNzX25hbWVfV2ViU3RvcmFnZU1hbmFnZXIKIC5vYmpjX2NsYXNzX25h
bWVfV2ViRGVmYXVsdFBvbGljeURlbGVnYXRlCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9y
aWVudGF0aW9uCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJN
b2NrCkBAIC0xMTQsNiArMTE1LDggQEAgX1dlYlJlcG9ydEVycm9yCiBfV2ViU2NyaXB0RXJyb3JE
ZXNjcmlwdGlvbktleQogX1dlYlNjcmlwdEVycm9yRG9tYWluCiBfV2ViU2NyaXB0RXJyb3JMaW5l
TnVtYmVyS2V5CitfV2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5CitfV2ViU3RvcmFnZURp
ZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbgogX1dlYlVSTE5hbWVQYm9hcmRUeXBlCiBfV2ViVVJM
UGJvYXJkVHlwZQogX1dlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKworI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgorI2lt
cG9ydCAiV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFu
YWdlckludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorCisj
aW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3Jh
Z2VUcmFja2VyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitOU1N0cmluZyAqIGNv
bnN0IFdlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleSA9IEAiV2ViS2l0TG9jYWxTdG9yYWdl
RGF0YWJhc2VQYXRoUHJlZmVyZW5jZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VE
aWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gPSBAIldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5O
b3RpZmljYXRpb24iOworCitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCk7
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTdG9yYWdlTWFuYWdlcgorCisrIChXZWJTdG9yYWdlTWFu
YWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyCit7CisgICAgc3RhdGljIFdlYlN0b3JhZ2VN
YW5hZ2VyICpzaGFyZWRNYW5hZ2VyID0gW1tXZWJTdG9yYWdlTWFuYWdlciBhbGxvY10gaW5pdF07
CisgICAgcmV0dXJuIHNoYXJlZE1hbmFnZXI7Cit9CisKKy0gKE5TQXJyYXkgKilvcmlnaW5zCit7
CisgICAgVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBjb3JlT3JpZ2luczsKKworICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7CisKKyAgICBO
U011dGFibGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29yZU9yaWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViU2VjdXJpdHlPcmln
aW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNv
cmVTZWN1cml0eU9yaWdpbjpjb3JlT3JpZ2luc1tpXS5nZXQoKV07CisgICAgICAgIFt3ZWJPcmln
aW5zIGFkZE9iamVjdDp3ZWJPcmlnaW5dOworICAgICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOwor
ICAgIH0KKworICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07Cit9CisKKy0gKHZv
aWQpZGVsZXRlQWxsT3JpZ2lucworeworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVs
ZXRlQWxsT3JpZ2lucygpOworfQorCistICh2b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlP
cmlnaW4gKilvcmlnaW4KK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9y
aWdpbihbb3JpZ2luIF9jb3JlXSk7Cit9CisKKy0gKHZvaWQpc3luY0xvY2FsU3RvcmFnZQorewor
ICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0xvY2FsU3RvcmFnZSgpOworfQorCist
ICh2b2lkKXN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlCit7CisgICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKS5zeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworfQor
CitzdGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OworICAgIE5TU3RyaW5nICpzdG9yYWdlRGlyZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktl
eTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVj
dG9yeSB8fCAhW3N0b3JhZ2VEaXJlY3RvcnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkKKyAgICAgICAgc3RvcmFnZURpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0
b3JhZ2UiOworICAgIAorICAgIHJldHVybiBbc3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5k
YXJkaXppbmdQYXRoXTsKK30KKwordm9pZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNz
YXJ5KCkKK3sKKyAgICBzdGF0aWMgQk9PTCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0
aWFsaXplVHJhY2tlcihzdG9yYWdlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICAKKyAgICBTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hh
cmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKSk7CisgICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZ
RVM7Cit9CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOwor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdl
RGlyZWN0b3J5RGVmYXVsdHNLZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdl
RGlkTW9kaWZ5T3JpZ2luTm90aWZpY2F0aW9uOworCitAY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47
CisKK0BpbnRlcmZhY2UgV2ViU3RvcmFnZU1hbmFnZXIgOiBOU09iamVjdAorCisrIChXZWJTdG9y
YWdlTWFuYWdlciAqKXNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyOworCisvLyBSZXR1cm5zIGFuIGFy
cmF5IG9mIFdlYlNlY3VyaXR5T3JpZ2luIG9iamVjdHMgdGhhdCBoYXZlIExvY2FsU3RvcmFnZS4K
Ky0gKE5TQXJyYXkgKilvcmlnaW5zOworCistICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnM7CistICh2
b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CisKKy0gKHZvaWQp
c3luY0xvY2FsU3RvcmFnZTsKKy0gKHZvaWQpc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJh
c2U7CisKK0BlbmQKKwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdl
VHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2Uv
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW1w
b3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBXZWJT
dG9yYWdlVHJhY2tlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFyZWRX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpOworICAgIAorICAgIHZpcnR1YWwg
fldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
KTsKK3ByaXZhdGU6CisgICAgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKK307CisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVu
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VU
cmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3RvcmFn
ZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5o
PgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKQor
eworICAgIHN0YXRpYyBXZWJTdG9yYWdlVHJhY2tlckNsaWVudCogc2hhcmVkQ2xpZW50ID0gbmV3
IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCk7CisgICAgcmV0dXJuIHNoYXJlZENsaWVudDsKK30K
KworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkKK3sK
K30KKworV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVudCgp
Cit7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luT25NYWluVGhyZWFkKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRy
YWNrZXJDbGllbnQoKS0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGljX2Nhc3Q8U2VjdXJp
dHlPcmlnaW4qPihjb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6
OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdp
bikKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHdlYlNlY3VyaXR5T3JpZ2lu
KEFkb3B0TlMsIFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1
cml0eU9yaWdpbjpvcmlnaW4uZ2V0KCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViU3RvcmFnZURpZE1vZGlmeU9y
aWdpbk5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0OndlYlNlY3VyaXR5T3JpZ2luLmdldCgpXTsKK30KKwor
dm9pZCBXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlm
aWVyKG9yaWdpbklkZW50aWZpZXIpOworCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFk
LCBzdGF0aWNfY2FzdDx2b2lkKj4ob3JpZ2luLmxlYWtSZWYoKSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9y
aWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJTZWN1cml0eU9yaWdpbi5tbQkocmV2aXNpb24gODA4MDMpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDYsMjMgKzQ2LDI4IEBAIC0gKGlkKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybAogCiAgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwo
W3VybCBhYnNvbHV0ZVVSTF0pKTsKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRlID0g
cmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4uZ2V0KCkp
OworICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZh
dGUgKj4ob3JpZ2luLmdldCgpKTsKIAogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1N0cmlu
ZyopcHJvdG9jb2wKKy0gKE5TU3RyaW5nICopcHJvdG9jb2wKIHsKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKS0+cHJvdG9jb2woKTsKIH0KIAot
LSAoTlNTdHJpbmcqKWhvc3QKKy0gKE5TU3RyaW5nICopaG9zdAogewogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFNlY3VyaXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAKKy0g
KE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSktPmRhdGFiYXNlSWRlbnRpZmllcigpOwor
fQorCiAvLyBEZXByZWNhdGVkLiBVc2UgaG9zdCBpbnN0ZWFkLiBUaGlzIG5lZWRzIHRvIHN0YXkg
aGVyZSB1bnRpbCB3ZSBzaGlwIGEgbmV3IFNhZmFyaS4KLS0gKE5TU3RyaW5nKilkb21haW4KKy0g
KE5TU3RyaW5nICopZG9tYWluCiB7CiAgICAgcmV0dXJuIFtzZWxmIGhvc3RdOwogfQpAQCAtMTEx
LDcgKzExNiw3IEBAIC0gKGlkKV9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjooU2UKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAogICAgIG9yaWdpbi0+cmVmKCk7Ci0gICAgX3ByaXZhdGUgPSBy
ZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSo+KG9yaWdpbik7CisgICAg
X3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSAqPihv
cmlnaW4pOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUu
aAkocmV2aXNpb24gODA4MDMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTAg
QEAgQGludGVyZmFjZSBXZWJTZWN1cml0eU9yaWdpbiA6IE5TT2JqZWN0IAogCiAtIChpZClpbml0
V2l0aFVSTDooTlNVUkwgKil1cmw7CiAKLS0gKE5TU3RyaW5nKilwcm90b2NvbDsKLS0gKE5TU3Ry
aW5nKilob3N0OworLSAoTlNTdHJpbmcgKilwcm90b2NvbDsKKy0gKE5TU3RyaW5nICopaG9zdDsK
KworLSAoTlNTdHJpbmcgKilkYXRhYmFzZUlkZW50aWZpZXI7CiAKIC8vIFJldHVybnMgemVybyBp
ZiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJv
IG90aGVyd2lzZS4KIC0gKHVuc2lnbmVkIHNob3J0KXBvcnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA4MDgwMykKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2lt
cG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCisjaW1wb3J0ICJX
ZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2Uu
aCIKICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2Vi
VGV4dEl0ZXJhdG9yLmgiCkBAIC02ODcsNiArNjg4LDEwIEBAIC0gKHZvaWQpX2NvbW1vbkluaXRp
YWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIFdlYktp
dEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3Nhcnko
KTsKKyNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJ
Zk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVzTWV0aG9kKCk7
CiAgICAgICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gODA4MDMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw3NiBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFA
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAg
ICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAg
ICAgICBBZGRlZCB0ZXN0cyB0aGF0IHdyaXRlIHRvIExvY2FsU3RvcmFnZSwgZGVsZXRlIG9uZSBv
cmlnaW4sIGdldCBsaXN0IG9mIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlLCBkZWxldGUgYWxs
IG9yaWdpbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayk6Cisg
ICAgICAgIChvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2spOgorICAg
ICAgICAoZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2spOgorICAgICAgICAob3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVu
Y3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5o
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaDogQWRk
ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbTog
QWRkZWQuCisgICAgICAgICgtW1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgaW5pdF0pOgorICAgICAg
ICAoLVtTdG9yYWdlVHJhY2tlckRlbGVnYXRlIGxvZ05vdGlmaWNhdGlvbnM6Y29udHJvbGxlcjpd
KToKKyAgICAgICAgKC1bU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBvcmlnaW5Nb2RpZmllZDpdKToK
KyAgICAgICAgKC1bU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBkZWFsbG9jXSk6CisgICAgICAgICgt
W1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgc2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZTpdKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bik6CisgICAgICAgIChvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAg
ICAgKHN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xh
eW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKHJlc2V0RGVmYXVsdHNUb0Nv
bnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoYWxsb2NhdGVHbG9iYWxDb250cm9sbGVycyk6Cisg
ICAgICAgIChyZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZU1hYy5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpv
YnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5j
cHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFz
ZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbik6CisKIDIwMTEtMDMtMTAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIElnbm9yZSBlcnJvcnMgZnJvbSBmaWxlcyBiZWluZyBoZWxkIG9wZW4gd2hlbiBj
cmVhdGluZyBhIHRlc3QgcmVzdWx0IGFyY2hpdmUKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgwODAzKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTQsNiArMzk0LDYwIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQWxsRGF0YWJhc2VzQ2Fs
bGIKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRp
YyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jTG9jYWxTdG9yYWdlKCk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVm
IG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIHVuc2lnbmVkIG51bU5vdGlm
aWNhdGlvbnMgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pOworCisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPm9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMobnVtTm90aWZpY2F0aW9ucyk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBjb250cm9sbGVyLT5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbih1cmwuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvcmlnaW5z
V2l0aExvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBy
ZXR1cm4gY29udHJvbGxlci0+b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29udGV4dCk7Cit9CisK
IHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVu
dGF0aW9uCkBAIC0yMTYzLDYgKzIyMTcsMTMgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVz
dENvbnRyb2xsZXI6OgogICAgICAgICB7ICJhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIs
IGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAic2V0U2Nyb2xsYmFyUG9saWN5Iiwgc2V0U2Nyb2xsYmFyUG9saWN5Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiYXV0aGVudGljYXRlU2Vzc2lvbiIsIGF1dGhlbnRpY2F0ZVNlc3Npb25D
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCBkZWxl
dGVBbGxMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzeW5jTG9jYWxT
dG9yYWdlIiwgc3luY0xvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sICAgICAgICAgICAgICAg
IAorICAgICAgICB7ICJvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zIiwgb2JzZXJ2
ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sICAgICAgICAKKyAg
ICAgICAgeyAiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwgZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAib3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UiLCBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCBvYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3luY0xvY2Fs
U3RvcmFnZSIsIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJz
ZXRTaG91bGRQYWludEJyb2tlbkltYWdlIiwgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODA4MDMpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDgsNiArMzA4LDEyIEBAIHB1YmxpYzoKIAogICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgbm9kZU9iamVjdCkgY29uc3Q7CiAKKyAgICBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlKEpTQ29udGV4dFJlZik7CisgICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2Uo
KTsKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmln
aW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlv
bnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKwogICAg
IHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sKTsKICAgICBib29sIHNob3VsZFBh
aW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7
IH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdh
dGUuaAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2Vy
RGVsZWdhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitjbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxl
cjsKKworQGludGVyZmFjZSBTdG9yYWdlVHJhY2tlckRlbGVnYXRlIDogTlNPYmplY3QgeworICAg
IHVuc2lnbmVkIG51bWJlck9mTm90aWZpY2F0aW9uc1RvTG9nOworICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyVG9Ob3RpZnlEb25lOworfQorCistICh2b2lkKWxvZ05vdGlmaWNh
dGlvbnM6KHVuc2lnbmVkKW51bWJlciBjb250cm9sbGVyOihMYXlvdXRUZXN0Q29udHJvbGxlciop
Y29udHJvbGxlcjsKKy0gKHZvaWQpb3JpZ2luTW9kaWZpZWQ6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uOworLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRUZXN0
Q29udHJvbGxlciopY29udHJvbGxlcjsKKworQGVuZApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
aCIKKworI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgPFdlYktpdC9X
ZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFu
YWdlclByaXZhdGUuaD4KKworQGltcGxlbWVudGF0aW9uIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUK
KworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihvcmlnaW5Nb2Rp
ZmllZDopIG5hbWU6V2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiBvYmplY3Q6
bmlsXTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWxvZ05vdGlmaWNhdGlvbnM6
KHVuc2lnbmVkKW51bWJlciBjb250cm9sbGVyOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJv
bGxlcgoreworICAgIGNvbnRyb2xsZXJUb05vdGlmeURvbmUgPSBjb250cm9sbGVyOworCisgICAg
bnVtYmVyT2ZOb3RpZmljYXRpb25zVG9Mb2cgPSBudW1iZXI7Cit9CisKKy0gKHZvaWQpb3JpZ2lu
TW9kaWZpZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFudW1i
ZXJPZk5vdGlmaWNhdGlvbnNUb0xvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbnVtYmVyT2ZO
b3RpZmljYXRpb25zVG9Mb2ctLTsKKyAgICAKKyAgICBpZiAobnVtYmVyT2ZOb3RpZmljYXRpb25z
VG9Mb2cgPT0gMCAmJiBjb250cm9sbGVyVG9Ob3RpZnlEb25lKSB7CisgICAgICAgIE5TQXJyYXkg
Km9yaWdpbnMgPSBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBv
cmlnaW5zXTsKKyAgICAgICAgZm9yIChXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luIGluIG9yaWdp
bnMpCisgICAgICAgICAgICBwcmludGYoIk9yaWdpbiBpZGVudGlmaWVyOiAnJXMnXG4iLCBbW29y
aWdpbiBkYXRhYmFzZUlkZW50aWZpZXJdIFVURjhTdHJpbmddKTsKKyAgICAgICAgCisgICAgICAg
IGNvbnRyb2xsZXJUb05vdGlmeURvbmUtPm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmlj
YXRpb24gb2JqZWN0Om5pbF07CisgICAgCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2
b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6KExheW91dFRlc3RDb250cm9sbGVyKiljb250
cm9sbGVyCit7CisgICAgY29udHJvbGxlclRvTm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7Cit9CisK
KworQGVuZApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDgwMykK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKIAkJMjlDRkJBMkUxMjI3
M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlDRkJBMkQxMjI3M0ExMDAwQkMz
MEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tICovOyB9OwogCQkzNzEzRURFMjEx
NUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nIGluIENvcHkgRm9udCBGaWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEzRURERjExNUJFMTZGMDA3MDU3MjAg
LyogQ29sb3JCaXRzLUEucG5nICovOyB9OwogCQkzNzEzRURFMzExNUJFMTkzMDA3MDU3MjAgLyog
Q29sb3JCaXRzLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzcxM0VERTAxMTVCRTE2RjAwNzA1NzIwIC8qIENvbG9yQml0cy50dGYgKi87
IH07CisJCTNBNTYyNkNCMTMxQ0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRl
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0E1NjI2
QzExMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi87IH07CisJ
CTNBNTYyNkNDMTMxQ0EwMzYwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQTU2MjZDMDEzMUM4
QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oICovOyB9OwogCQk0NDA1OTA3
MTEyNjg0NTM4MDBDRkQ0OEQgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQwNTkwNzAxMjY4NDUzODAw
Q0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSAqLzsgfTsKIAkJNDQzNzczMEUx
MjVDQkMzNjAwQUFFMDJDIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEE5OTc4MzBGQ0RFODY0MDA1ODBG
MTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJNDQzNzczMEYxMjVDQkM0
RDAwQUFFMDJDIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODIwRkNERTg2NDAwNTgwRjEwIC8qIFdl
YkFyY2hpdmVEdW1wU3VwcG9ydC5oICovOyB9OwpAQCAtMjMwLDYgKzIzMiw4IEBACiAJCTM3NUYw
OTc3MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBX
ZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNo
ZXI3MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3ODBEQUMzQ0I2
MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0
V2F0Y2hlcjgwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0Zjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzkwREFDM0NCNjAwQzhCNEU1IC8q
IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI5MDAu
dHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTNBNTYyNkMwMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJh
Y2tlckRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VU
cmFja2VyRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0E1NjI2QzEx
MzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDA1OTA3MDEyNjg0NTM4MDBDRkQ0OEQgLyog
V2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tOyBwYXRoID0gbWFjL1dlYkFy
Y2hpdmVEdW1wU3VwcG9ydE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRB
OTk3ODIwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaDsgcGF0aCA9
IGNmL1dlYkFyY2hpdmVEdW1wU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NEE5OTc4MzBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFyY2hpdmVEdW1wU3VwcG9y
dC5jcHA7IHBhdGggPSBjZi9XZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDYwLDYgKzQ2NCw4IEBACiAJCQkJQkNBMThCNUUwQzlCMDhDMjAw
MTE0MzY5IC8qIFJlc291cmNlTG9hZERlbGVnYXRlLm1tICovLAogCQkJCUJDQTE4QjVGMEM5QjA4
QzIwMDExNDM2OSAvKiBVSURlbGVnYXRlLmggKi8sCiAJCQkJQkNBMThCNjAwQzlCMDhDMjAwMTE0
MzY5IC8qIFVJRGVsZWdhdGUubW0gKi8sCisJCQkJM0E1NjI2QzAxMzFDOEIxNzAwMkJFNkQ5IC8q
IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCAqLywKKwkJCQkzQTU2MjZDMTEzMUM4QjE3MDAyQkU2
RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gRGVs
ZWdhdGVzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYyMCw2ICs2MjYsNyBAQAog
CQkJCTUxODVGNkIzMTA3MTRFMTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxQjc4MTY3MTFBRjMxQzMwMDdFMUJDMiAvKiBNb2NrR2VvbG9jYXRpb25Q
cm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlDRkJBMTAxMjI3MzZFNjAwQkMzMEMwIC8q
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQTU2MjZDQzEz
MUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC04MDksNiArODE2LDcgQEAKIAkJCQlFMUI3ODE2NTExQUYzMUI3MDA3RTFCQzIgLyogTW9j
a0dlb2xvY2F0aW9uUHJvdmlkZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkExMTEyMjcz
NkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJFNkQ5IC8qIFN0
b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDgwODAzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDEyIEBAIExh
eW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGwKICAgICBiaW5kTWV0aG9kKCJz
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRVc2VEYXNoYm9hcmRDb21w
YXRpYmlsaXR5TW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29t
cGF0aWJpbGl0eU1vZGUpOwogICAgIGJpbmRNZXRob2QoInN0b3JlV2ViU2NyaXB0T2JqZWN0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzdG9yZVdlYlNjcmlwdE9iamVjdCk7Ci0KKyAgICBiaW5k
TWV0aG9kKCJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgib3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKTsK
KyAgICBiaW5kTWV0aG9kKCJkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik7CisgICAgYmluZE1ldGhv
ZCgib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk7CisgICAgYmluZE1ldGhv
ZCgic3luY0xvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3Rv
cmFnZSk7CisgICAgCiAgICAgLy8gVGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBh
biB1bmtub3duIG1ldGhvZCBpcyBpbnZva2VkLgogICAgIGJpbmRGYWxsYmFja01ldGhvZCgmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmZhbGxiYWNrTWV0aG9kKTsKIApAQCAtMTYwMiwzICsxNjA3LDMw
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KICAgICAgICAgcmV0
dXJuOwogICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0TWluaW11bVRpbWVy
SW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOwogfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IElt
cGxlbWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKKwpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCShyZXZpc2lvbiA4MDgwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw2ICsz
MzcsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKKyAgICAvLyBMb2NhbFN0b3JhZ2Ug
b3JpZ2luLXJlbGF0ZWQKKyAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwogcHVibGljOgogICAgIC8v
IFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgbm90IGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KICAg
ICB2b2lkIHNldFdvcmtRdWV1ZUZyb3plbihib29sIGZyb3plbikgeyBtX3dvcmtRdWV1ZS5zZXRG
cm96ZW4oZnJvemVuKTsgfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRl
c3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiA4MDgwMykKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1MSw2ICs2NTEsMzEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
RGF0YWJhc2VRdQogICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9x
dW90YShvcmlnaW4sIHF1b3RhKTsKIH0KIAorSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmKQoreworICAgICAgICAvLyBG
SVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZSgpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3Ry
aW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90
aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5n
UmVmKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDgwODAzKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw3IEBACiAjaW1wb3J0ICJQaXhlbER1bXBTdXBwb3J0LmgiCiAjaW1wb3J0ICJQb2xpY3lE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN0
b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKICNpbXBvcnQg
IldlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCkBAIC03Nyw2
ICs3OCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFu
YWdlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJUeXBlc0ludGVybmFsLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPGdldG9wdC5oPgpAQCAtMTM0
LDYgKzEzNiw3IEBAIHN0YXRpYyBFZGl0aW5nRGVsZWdhdGUgKmVkaXRpbmdEZWxlZ2F0ZTsKIHN0
YXRpYyBSZXNvdXJjZUxvYWREZWxlZ2F0ZSAqcmVzb3VyY2VMb2FkRGVsZWdhdGU7CiBzdGF0aWMg
SGlzdG9yeURlbGVnYXRlICpoaXN0b3J5RGVsZWdhdGU7CiBQb2xpY3lEZWxlZ2F0ZSAqcG9saWN5
RGVsZWdhdGU7CitTdG9yYWdlVHJhY2tlckRlbGVnYXRlICpzdG9yYWdlRGVsZWdhdGU7CiAKIHN0
YXRpYyBpbnQgZHVtcFBpeGVsczsKIHN0YXRpYyBpbnQgdGhyZWFkZWQ7CkBAIC00MTQsNiArNDE3
LDcgQEAgc3RhdGljIHZvaWQgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbAogCiAgICAgTlNT
dHJpbmcgKnBhdGggPSBsaWJyYXJ5UGF0aEZvckR1bXBSZW5kZXJUcmVlKCk7CiAgICAgW2RlZmF1
bHRzIHNldE9iamVjdDpbcGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJEYXRh
YmFzZXMiXSBmb3JLZXk6V2ViRGF0YWJhc2VEaXJlY3RvcnlEZWZhdWx0c0tleV07CisgICAgW2Rl
ZmF1bHRzIHNldE9iamVjdDpbcGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJM
b2NhbFN0b3JhZ2UiXSBmb3JLZXk6V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKICAg
ICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAIkxvY2FsQ2FjaGUiXSBmb3JLZXk6V2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5XTsKIAog
ICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFy
ZFByZWZlcmVuY2VzXTsKQEAgLTU0NSw2ICs1NDksNyBAQCBzdGF0aWMgdm9pZCBhbGxvY2F0ZUds
b2JhbENvbnRyb2xsZXJzKCkKICAgICByZXNvdXJjZUxvYWREZWxlZ2F0ZSA9IFtbUmVzb3VyY2VM
b2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdOwogICAgIHBvbGljeURlbGVnYXRlID0gW1tQb2xpY3lE
ZWxlZ2F0ZSBhbGxvY10gaW5pdF07CiAgICAgaGlzdG9yeURlbGVnYXRlID0gW1tIaXN0b3J5RGVs
ZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHN0b3JhZ2VEZWxlZ2F0ZSA9IFtbU3RvcmFnZVRyYWNr
ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CiB9CiAKIC8vIE9iakMrKyBkb2Vucyd0IHNlZW0gdG8g
bGV0IG1lIHBhc3MgTlNPYmplY3QqJiBzYWRseS4KQEAgLTU2Miw2ICs1NjcsNyBAQCBzdGF0aWMg
dm9pZCByZWxlYXNlR2xvYmFsQ29udHJvbGxlcnMoKQogICAgIHJlbGVhc2VBbmRaZXJvKCZyZXNv
dXJjZUxvYWREZWxlZ2F0ZSk7CiAgICAgcmVsZWFzZUFuZFplcm8oJnVpRGVsZWdhdGUpOwogICAg
IHJlbGVhc2VBbmRaZXJvKCZwb2xpY3lEZWxlZ2F0ZSk7CisgICAgcmVsZWFzZUFuZFplcm8oJnN0
b3JhZ2VEZWxlZ2F0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxzRnJvbUNv
bW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlTWFjLmgJKHJldmlzaW9uIDgw
ODAzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIEBjbGFzcyBEdW1wUmVuZGVyVHJlZURyYWdn
aW5nSW5mbzsKIEBjbGFzcyBOYXZpZ2F0aW9uQ29udHJvbGxlcjsKIEBjbGFzcyBQb2xpY3lEZWxl
Z2F0ZTsKK0BjbGFzcyBTdG9yYWdlVHJhY2tlckRlbGVnYXRlOwogQGNsYXNzIFdlYkZyYW1lOwog
QGNsYXNzIFdlYlNjcmlwdFdvcmxkOwogQGNsYXNzIFdlYlZpZXc7CkBAIC00Miw2ICs0Myw3IEBA
CiBjbGFzcyBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mbzsKIGNsYXNzIE5hdmlnYXRpb25Db250
cm9sbGVyOwogY2xhc3MgUG9saWN5RGVsZWdhdGU7CitjbGFzcyBTdG9yYWdlVHJhY2tlckRlbGVn
YXRlOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJTY3JpcHRXb3JsZDsKIGNsYXNzIFdlYlZp
ZXc7CkBAIC01NCw2ICs1Niw3IEBAIGV4dGVybiBXZWJGcmFtZSogdG9wTG9hZGluZ0ZyYW1lOwog
ZXh0ZXJuIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvICpkcmFnZ2luZ0luZm87CiBleHRlcm4g
TmF2aWdhdGlvbkNvbnRyb2xsZXIqIGdOYXZpZ2F0aW9uQ29udHJvbGxlcjsKIGV4dGVybiBQb2xp
Y3lEZWxlZ2F0ZSogcG9saWN5RGVsZWdhdGU7CitleHRlcm4gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZSogc3RvcmFnZURlbGVnYXRlOwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgbWF4Vmlld0hlaWdo
dDsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBtYXhWaWV3V2lkdGg7CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZp
c2lvbiA4MDgwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJv
bGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRWRp
dGluZ0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIgogI2lt
cG9ydCAiUG9saWN5RGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
aCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldvcmtRdWV1ZS5oIgogI2ltcG9y
dCAiV29ya1F1ZXVlSXRlbS5oIgpAQCAtNjYsNiArNjcsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dl
YlF1b3RhTWFuYWdlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlNjcmlwdFdvcmxkLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVHlwZXNJbnRl
cm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJW
aWV3UHJpdmF0ZS5oPgpAQCAtMTMzLDExICsxMzUsNTMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2xlYXJBbGxBcHBsaQogICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIGRlbGV0ZUFsbEFw
cGxpY2F0aW9uQ2FjaGVzXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xv
Y2FsU3RvcmFnZSgpCit7CisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdl
TWFuYWdlcl0gc3luY0xvY2FsU3RvcmFnZV07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQor
eworICAgIFtzdG9yYWdlRGVsZWdhdGUgbG9nTm90aWZpY2F0aW9uczpudW1iZXIgY29udHJvbGxl
cjp0aGlzXTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFz
ZXMoKQogewogICAgIFtbV2ViRGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNlTWFuYWdl
cl0gZGVsZXRlQWxsRGF0YWJhc2VzXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJl
ZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkZWxldGVBbGxPcmlnaW5zXTsKK30KKworSlNWYWx1ZVJlZiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVm
IGNvbnRleHQpCit7CisgICAgV2ViU3RvcmFnZU1hbmFnZXIgKnN0b3JhZ2UgPSBbV2ViU3RvcmFn
ZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdOworCisgICAgTlNBcnJheSAqb3JpZ2lu
cyA9IFtzdG9yYWdlIG9yaWdpbnNdOworICAgIE5TSW50ZWdlciBjb3VudCA9IFtvcmlnaW5zIGNv
dW50XTsKKworICAgIEpTVmFsdWVSZWYganNPcmlnaW5zQXJyYXlbY291bnRdOworICAgIGZvciAo
TlNJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBOU1N0cmluZyAqb3Jp
Z2luID0gW1tvcmlnaW5zIG9iamVjdEF0SW5kZXg6aV0gZGF0YWJhc2VJZGVudGlmaWVyXTsKKyAg
ICAgICAgSlNTdHJpbmdSZWYgc3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKW9yaWdpbik7CisgICAgICAgIGpzT3JpZ2luc0FycmF5W2ldID0gSlNWYWx1ZU1ha2VT
dHJpbmcoY29udGV4dCwgc3RyKTsKKyAgICB9CisKKyAgICBKU09iamVjdFJlZiBqc0FycmF5T2Jq
ZWN0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291bnQsIGpzT3JpZ2luc0FycmF5LCBO
VUxMKTsKKyAgICByZXR1cm4ganNBcnJheU9iamVjdDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3sK
KyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVSTCkpOworICAgIAorICAgIFdlYlNlY3VyaXR5
T3JpZ2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKil1cmxDRi5nZXQoKV1dOworCisgICAgW1tX
ZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gZGVsZXRlT3JpZ2luOm9y
aWdpbl07Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRM
aXN0KCkKIHsKICAgICBXZWJCYWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YXJkTGlzdCA9IFtbbWFp
bkZyYW1lIHdlYlZpZXddIGJhY2tGb3J3YXJkTGlzdF07CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gODA4
MDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQyLDUgKzg0MiwzMCBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNaW5pbXVtVGltCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1p
bmltdW1UaW1lckludGVydmFsKG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFs
KTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0
b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2Fs
U3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogY29uc3QgdW5zaWdu
ZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdXaWR0aCA9IDgwMDsKIGNvbnN0IHVuc2ln
bmVkIExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0ID0gNjAwOwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2
aXNpb24gODA4MDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJv
bGxlclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw2ICsyNTMsMTIgQEAgcHVibGljIHNsb3Rz
OgogICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSk7
CiAKICAgICB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7CisgICAgCisgICAg
dm9pZCBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxT
dG9yYWdlKCk7CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcik7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdl
KCk7CiAKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBwcm9jZXNzV29yaygpOwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCShyZXZpc2lvbiA4MDgwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgsNiArMTQyOCwzMiBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVICiAgICAgLy8gRklYTUU6
IEltcGxlbWVudC4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3Rv
cmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBu
dW1iZXIpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3Ry
aW5nUmVmIFVSTCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRp
bWVySW50ZXJ2YWwpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwpAQCAtMTQ0MCwz
ICsxNDY2LDUgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbQogCiAg
ICAgdmlld1ByaXZhdGUtPnNldE1pbmltdW1UaW1lckludGVydmFsKG1pbmltdW1UaW1lckludGVy
dmFsKTsKIH0KKworCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29u
dHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gODA4MDMpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTU4LDQgKzU1OCwzMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVI
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3Vi
bGUgaW50ZXJ2YWwpIHsKIAogfQotICAgIAorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
eW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxs
TG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitKU1ZhbHVl
UmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRl
eHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdS
ZWYgVVJMKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA4MDgwMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDExLTAzLTEwICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdl
YktpdDEgQVBJIHRvIHZpZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIHN0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXI6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10
cmFja2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEt
cHJlcGFyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFn
ZS10cmFja2VyLTMtZGVsZXRlLWFsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTMtZGVsZXRlLWFsbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNr
ZXIvc3RvcmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3Rv
cmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xMCAgQWxp
Y2UgQm94aGFsbCAgPGFib3hoYWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA4MDgwMykKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTUxLDYgKzE1MSwxMCBAQCBXT05URklYIFNLSVAgOiBmYXN0L3dtbCA9IEZBSUwK
IC8vIG1vc3QgbGlrZWx5IHRoZXNlIHRlc3RzIHdpbGwgYWx3YXlzIGJlIEpTQyBzcGVjaWZpYy4K
IFdPTlRGSVggU0tJUCA6IGZhc3QvcHJvZmlsZXIgPSBGQUlMIFRJTUVPVVQKIAorLy8gU3RvcmFn
ZVRyYWNrZXIgaXNuJ3QgdXNlZCBieSBDaHJvbWl1bSBhbmQgbm90IGFsbCByZXF1aXNpdGUgcGxh
dGZvcm0gY29kZQorLy8gaXMgaW1wbGVtZW50ZWQuCitXT05URklYIFNLSVAgOiBzdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyID0gUEFTUyBUSU1FT1VUIEZBSUwK
KwogLy8gV2UgdXNlIHdvcmtlcl91aXRlc3RzIHRvIHJ1biB3b3JrZXJzIHRlc3RzLiBEb24ndCBy
dW4gdGhlbSBpbiB0ZXN0X3NoZWxsLgogV09OVEZJWCBTS0lQIDogZmFzdC93b3JrZXJzID0gUEFT
UyBUSU1FT1VUIEZBSUwKIFdPTlRGSVggU0tJUCA6IGZhc3QvZmlsZXMvd29ya2VycyA9IFBBU1Mg
VElNRU9VVCBGQUlMCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitQcmVwYXJlIGZvciBTdG9yYWdlVHJh
Y2tlciB0ZXN0cyBieSBlbnN1cmluZyB0aGF0IGV2ZXJ5IG9yaWdpbiB3aXRoIGxvY2FsIHN0b3Jh
Z2UgaXMgZGVsZXRlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMgdGVz
dCBzaG91bGQgaGF2ZSBubyB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10
cmFja2VyLTEtcHJlcGFyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEt
cHJlcGFyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJl
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiUHJlcGFyZSBmb3IgU3RvcmFnZVRyYWNr
ZXIgdGVzdHMgYnkgZW5zdXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdl
IGlzIGRlbGV0ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmlu
aXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVk
KCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0
IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dp
dGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorT3JpZ2luIGlkZW50aWZpZXI6
ICdmaWxlX18wJworU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9y
IHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1s
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTIt
Y3JlYXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0
b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJl
cGFyZS5odG1sLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlz
aFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkK
K3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgi
bG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KCkubGVuZ3RoID4gMCkgeworICAgICAgICAvLyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28g
d2UgY2FuIGV4aXQuCisgICAgICAgIHRlc3RGYWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0
ZWQgd2l0aCBsb2NhbCBzdG9yYWdlLiIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNvbWVE
YXRhID0gJ3dyaXRlbWUnOworICAgICAgICAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcidzIG5vdGlm
eURvbmUgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9u
IGNvbWVzIGluLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgIH0KK30KKwordGVzdCgpOwkKKword2luZG93LnN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1h
bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRl
LWFsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRl
bGV0ZS1hbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0
IEFQSSB0byB2aWV3IG9yaWdpbnMgdGhhdCBoYXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRlbGV0
ZSBsb2NhbCBzdG9yYWdlIGJ5IG9yaWdpbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgbGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50
b1N0cmluZygpIGlzICJmaWxlX18wIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBs
b2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uIik7CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2lu
ZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9F
UyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRU
ZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5z
V2l0aExvY2FsU3RvcmFnZSgpLnRvU3RyaW5nKCkiLCAiZmlsZV9fMCIpOworICAgICAgICAvLyBX
ZSdyZSBqdXN0IGdvaW5nIHRvIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb3JpZ2luLCBzbyB3ZSdsbCBn
ZXQgb25lIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9uLgorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHRl
c3RGYWlsZWQoIlJhbiB3aXRoIG5vIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlIik7CisgICAg
fQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBv
cmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK09yaWdpbiBpZGVudGlmaWVyOiAn
ZmlsZV9fMCcKK1N0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0
aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1kZWxl
dGUtYWxsLmh0bWwuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUaGlzIHRlc3Qg
c2hvdWxkIGhhdmUgbm8gdmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9z
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3Jl
YXRlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBs
b2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9y
YWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgewor
ICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZl
IG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENv
bnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAg
IC8vIEFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0cyBzbyB3ZSBjYW4gZXhpdC4KKyAgICAgICAgdGVz
dEZhaWxlZCgiQW4gb3JpZ2luIGFscmVhZHkgZXhpc3RlZCB3aXRoIGxvY2FsIHN0b3JhZ2UuIik7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zeW5jTG9jYWxTdG9yYWdlKCk7CisgICAg
ICAgIGxvY2FsU3RvcmFnZS5zb21lT3RoZXJEYXRhID0gJ3dyaXRlbWVNb3JlJzsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygx
KTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9y
YWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5z
IHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBv
cmlnaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGxheW91dFRlc3RD
b250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9f
MCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2Vy
L3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3Rv
cmFnZS10cmFja2VyLTUtZGVsZXRlLW9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1m
dW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlRlc3QgQVBJIHRvIHZpZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8g
ZGVsZXRlIGxvY2FsIHN0b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
fQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2lu
c1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygibGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50
b1N0cmluZygpIiwgImZpbGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0byBk
ZWxldGUgdGhlIGV4aXN0aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdl
IG5vdGlmaWNhdGlvbi4KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2Un
cmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oImZp
bGU6Ly8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBv
cmlnaW5zIHdpdGggbG9jYWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85431</attachid>
            <date>2011-03-10 20:02:03 -0800</date>
            <delta_ts>2011-03-11 16:01:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110310200202.patch</filename>
            <type>text/plain</type>
            <size>132528</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDMtMTAgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxv
Y2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUxODc4CisKKyAgICAgICAgQ3JlYXRlZCBTdG9yYWdlVHJhY2tlciBhcyBhIGNlbnRyYWwg
cG9pbnQgZm9yIHRyYWNraW5nIGFuZCBkZWxldGluZyBMb2NhbFN0b3JhZ2UgcGVyIG9yaWdpbi4K
KyAgICAgICAgU3RvcmFnZVRyYWNrZXIgbWFpbnRhaW5zIGl0cyBvd24gZGF0YWJhc2Ugb2Ygb3Jp
Z2luIGlkZW50aWZpZXJzIGFuZCBiYWNraW5nIGRiIHBhdGhzLAorICAgICAgICBhbmQgdGhpcyBh
bGxvd3MgaXQgdG8gY29udGFpbiBtb3JlIHJlbGF0aW9uYWwgZGF0YSBpbiB0aGUgZnV0dXJlLCBs
aWtlIHZhcmlhYmxlIHF1b3RhcyBwZXIgb3JpZ2luLgorCisgICAgICAgIE9uIGluaXRpYWxpemF0
aW9uLCBTdG9yYWdlVHJhY2tlciBzeW5jcyBpdHMgZGF0YWJhc2Ugd2l0aCBMb2NhbFN0b3JhZ2Ug
ZmlsZXMgb24gZGlzay4gSXQgYWRkcworICAgICAgICBhbiBvcmlnaW4gZW50cnkgd2hlbiBTdG9y
YWdlQXJlYVN5bmMgcGVyZm9ybXMgYSBmaXJzdCBzeW5jIGZvciBhbiBvcmlnaW4uCisKKyAgICAg
ICAgQWxsIFN0b3JhZ2VUcmFja2VyIGZpbGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIG9u
ZSBiYWNrZ3JvdW5kIHRocmVhZCB3aXRoIGEgdGFzayBxdWV1ZS4KKworICAgICAgICBUZXN0czog
c3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRy
YWNrZXItMS1wcmVwYXJlLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCisgICAgICAgICAgICAgICBz
dG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJh
Y2tlci00LWNyZWF0ZS5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9j
YWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUuaHRt
bAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxsT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3Vwcyk6CisgICAgICAg
ICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdERpcmVjdG9yeSk6CisgICAg
ICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlRGVsZXRlT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZURlbGV0ZUFsbE9yaWdpbnMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYyk6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjppbml0aWFsaXplVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRy
YWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpvcGVuVHJhY2tl
ckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbXBvcnRPcmln
aW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0lt
cG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2Vy
OjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJh
Y2tlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRl
QWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0
ZUFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZU9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
cmFja2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJD
bGllbnQ6On5TdG9yYWdlVHJhY2tlckNsaWVudCk6CisKIDIwMTEtMDMtMTAgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI4MDgwMC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4MDgw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjAzLDYgKzMyMDMsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlU3luY01hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWUuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lv
biA4MDgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkp
CkBAIC05NzAsNiArOTcwLDcgQEAgX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI2c2V0U2hvdWxkVHJh
Y2tWaQogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI5cmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9tV29y
bGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmU5UGFnZUdy
b3VwMzByZW1vdmVVc2VyU3R5bGVTaGVldHNGcm9tV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxk
RQogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDlwYWdlR3JvdXBFUktOM1dURjZTdHJpbmdFCitfX1pO
N1dlYkNvcmU5UGFnZUdyb3VwMThudW1iZXJPZlBhZ2VHcm91cHNFdgogX19aTjdXZWJDb3JlOVNj
cm9sbGJhcjIybWF4T3ZlcmxhcEJldHdlZW5QYWdlc0V2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNl
NHN0b3BFdgogX19aTjdXZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZApAQCAtMTA5Myw2ICsxMDk0
LDE2IEBAIF9fWk5LN1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMTFmcmFtZUxvYWQKIF9fWk5LN1dl
YkNvcmUxNFNlY3VyaXR5T3JpZ2luMTBjYW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJD
b3JlMTRTZWN1cml0eU9yaWdpbjE4ZGF0YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUx
NFNlY3VyaXR5T3JpZ2luNWVxdWFsRVBLUzBfCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorX19a
TjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJp
bmdFCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMTZkZWxldGVBbGxPcmlnaW5zRXYKK19f
Wk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9y
aWdpbkUKK19fWk43V2ViQ29yZTE0U3RvcmFnZVRyYWNrZXI3dHJhY2tlckV2CitfX1pON1dlYkNv
cmUxNFN0b3JhZ2VUcmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18x
NFNlY3VyaXR5T3JpZ2luRUVFTG0wRUVFCitfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyOXNl
dENsaWVudEVQTlNfMjBTdG9yYWdlVHJhY2tlckNsaWVudEUKK19fWk43V2ViQ29yZTE0U3RvcmFn
ZVRyYWNrZXIxNnN5bmNMb2NhbFN0b3JhZ2VFdgorX19aTjdXZWJDb3JlMTRTdG9yYWdlVHJhY2tl
cjMyc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2VFdgorI2VuZGlmCiBfX1pOSzdXZWJD
b3JlMTVGb2N1c0NvbnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQxNXBsYXRmb3JtQ29udGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxNnBhaW50aW5nRGlzYWJsZWRFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gODA4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2MjAsNiArNDYyMCw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5j
cHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgnLAorICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJh
c2VPYnNlcnZlci5oJywKICAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJh
Y2tlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDgw
ODA0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3
MzcsNyArMjczNyw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAK
ICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBcCi0g
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKKyAgICAgICAgc3RvcmFnZS9TdG9y
YWdlU3luY01hbmFnZXIuaCBcCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCisg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaAogCiAgICAgIXY4IHsKICAgICAg
ICAgU09VUkNFUyArPSBcCkBAIC0yNzU0LDcgKzI3NTYsOCBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfRE9NX1NUT1JBR0U9MSkgCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAog
ICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKICAgICAgICAgc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgXAotICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKKyAgICAg
ICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX0ZJTEVfU1lTVEVNPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTYxMCw5ICs2
NTYxMCwxOCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTdG9yYWdlVHJhY2tlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxWZXJz
aW9uQ2hhbmdlQ2FsbGJhY2suaCIKKwkJCSAgICA+CisJCQk8L0ZpbGU+CisKIAkJPC9GaWx0ZXI+
CiAJCTxGaWx0ZXIKIAkJCU5hbWU9InN0cmluZ3MiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDgwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODUxLDYgKzg1MSw5IEBACiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYwNSAv
KiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9u
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkz
N0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYwNjAw
NUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKIAkJMzdGRDQyOTgxMTgzNjg0
NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0ZENDI5NzExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRo
TGltaXQuaCAqLzsgfTsKKwkJM0FCMDJEMkExMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFj
a2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIw
MkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzQUIwMkQyQjEyRDRGOTE2MDBGQkI2
OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0FCMDJEMjkxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2Vy
LmNwcCAqLzsgfTsKKwkJM0FDMzY4MDAxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
QUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzQUM2NDhCMjEyOUUx
NDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGlu
Z0JvdW5kYXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0IwRjY2
RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9OwogCQk0MTAwMkNDRTBG
NjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAv
KiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OwpAQCAtNzIzOSw2ICs3MjQyLDkgQEAKIAkJ
MzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8q
IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyZWVEZXB0aExpbWl0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9y
YWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHJh
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUIwMkQyOTEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0FDNjQ4QjExMjlFMTQ2NTAwQzNFQjI1IC8qIEVk
aXRpbmdCb3VuZGFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5n
Qm91bmRhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwMDJDQ0IwRjY2RURF
RjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5ODUsNiArMTI5OTEsOSBAQAog
CQkJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICov
LAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3Bw
ICovLAogCQkJCUM1MTAyRDkyMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIu
aCAqLywKKwkJCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAq
LywKKwkJCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICov
LAorCQkJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5o
ICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9yYWdlOwpAQCAt
MjIwNzEsNiArMjIwODAsNyBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTVFMzhCRjEwMDQwRDVEMDBBNTZC
REIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTAyRDk0
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjU0ODhENkIwREQ1QTgzRDAwOUQ4M0IyIC8qIFN0cmluZ1NvdXJjZVByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyogU3Ry
aW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlGNzc3NjBFRkVDNjIwMDA5MDg0
OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNTY1LDYgKzIy
NTc1LDcgQEAKIAkJCQlFMUYxRTgzMDBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVuc2lvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJv
Y2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyog
WFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzQUMzNjgwMDEyRUY3QTA5MDA2
QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0Uy
RTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
OUJEOUZBMTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBp
biBIZWFkZXJzICovLApAQCAtMjQ4NDIsNiArMjQ4NTMsNyBAQAogCQkJCUM1MEQwRTgyMEZGNDI3
MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1
NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBT
dG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzMDBEMDA2QzFEMDBF
RjZGMjYgLyogU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQjI2NDVDMEQwMEE3N0Uw
MDBBQ0MxRCAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIyNjQ1RDBEMDBB
NzdFMDAwQUNDMUQgLyogU3RyaW5nSW1wbENGLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gODA4MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJHcm91cFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKIApA
QCAtMTEwLDYgKzExMSw1NCBAQCB2b2lkIFBhZ2VHcm91cDo6Y2xvc2VMb2NhbFN0b3JhZ2UoKQog
I2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKK3ZvaWQgUGFnZUdyb3VwOjpj
bGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKQoreworICAgIGlmICghcGFnZUdyb3VwcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdl
R3JvdXBzLT5lbmQoKTsKKyAgICBmb3IgKFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBwYWdl
R3JvdXBzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmhhc0xvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgaXQtPnNlY29uZC0+bG9jYWxTdG9y
YWdlKCktPmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCk7CisgICAgfQorfQorCit2b2lkIFBh
Z2VHcm91cDo6Y2xlYXJMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKK3sKKyAgICBpZiAoIXBhZ2VHcm91cHMpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2VH
cm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CisgICAgZm9yIChQYWdl
R3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkKKyAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5jbGVhck9yaWdpbkZvckRlbGV0aW9u
KG9yaWdpbik7CisgICAgfSAgICAKK30KKyAgICAKK3ZvaWQgUGFnZUdyb3VwOjpzeW5jTG9jYWxT
dG9yYWdlKCkKK3sKKyAgICBpZiAoIXBhZ2VHcm91cHMpCisgICAgICAgIHJldHVybjsKKworICAg
IFBhZ2VHcm91cE1hcDo6aXRlcmF0b3IgZW5kID0gcGFnZUdyb3Vwcy0+ZW5kKCk7CisgICAgZm9y
IChQYWdlR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gcGFnZUdyb3Vwcy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5oYXNMb2NhbFN0b3JhZ2UoKSkK
KyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmxvY2FsU3RvcmFnZSgpLT5zeW5jKCk7CisgICAgfQor
fQorCit1bnNpZ25lZCBQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3VwcygpCit7CisgICAgaWYg
KCFwYWdlR3JvdXBzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwYWdlR3JvdXBz
LT5zaXplKCk7Cit9CisKKyNlbmRpZgorCiB2b2lkIFBhZ2VHcm91cDo6YWRkUGFnZShQYWdlKiBw
YWdlKQogewogICAgIEFTU0VSVChwYWdlKTsKQEAgLTIwOSw2ICsyNTgsNyBAQCBTdG9yYWdlTmFt
ZXNwYWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnCiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3Jh
Z2UuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHJldmlzaW9uIDgwODA0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JvdXBTZXR0aW5nczsKICAgICBjbGFzcyBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFNl
Y3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2U7CiAKICAgICBjbGFzcyBQ
YWdlR3JvdXAgewpAQCAtNDksNyArNTAsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB+UGFnZUdyb3VwKCk7CiAKICAgICAgICAgc3RhdGljIFBhZ2VHcm91cCogcGFnZUdyb3VwKGNv
bnN0IFN0cmluZyYgZ3JvdXBOYW1lKTsKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICAg
ICAgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgc3RhdGljIHZvaWQg
Y2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIGNs
ZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgICAgIC8vIER1
bXBSZW5kZXJUcmVlIGhlbHBlciB0aGF0IHRyaWdnZXJzIGEgU3RvcmFnZUFyZWEgc3luYy4KKyAg
ICAgICAgc3RhdGljIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworI2VuZGlmCisgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBudW1iZXJPZlBhZ2VHcm91cHMoKTsKICAgICAgICAgCiAgICAgICAgIGNv
bnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZXM7IH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiw0ICsxMTIsMTEgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bAogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBs
ZW5ndGgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKwor
ICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1Q
T1NJWC5jcHAJKHJldmlzaW9uIDgwODA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9z
aXgvRmlsZVN5c3RlbVBPU0lYLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTAgQEAK
ICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwu
aD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CiAjaW5jbHVkZSA8bGliZ2VuLmg+CiAjaW5jbHVkZSA8
c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTIyNywxMCArMjI5LDI4IEBA
IFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gZGly
bmFtZShmc1JlcC5tdXRhYmxlRGF0YSgpKTsKIH0KIAotLy8gT0sgdG8gbm90IGltcGxlbWVudCBs
aXN0RGlyZWN0b3J5IGF0IHRoZSBtb21lbnQsIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgZm9yIHBs
dWctaW5zLCBhbmQKLS8vIGFsbCBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIHNoYXJlZCBwbHVnLWlu
IGltcGxlbWVudGF0aW9uIGhhdmUgaW1wbGVtZW50YXRpb25zLiBXZSdkIG5lZWQKLS8vIHRvIGlt
cGxlbWVudCBpdCBpZiB3ZSB3YW50ZWQgdG8gdXNlIFBsdWdpbkRhdGFiYXNlLmNwcCBvbiB0aGUg
TWFjLiBCZXR0ZXIgdG8gbm90IGltcGxlbWVudAotLy8gYXQgYWxsIGFuZCBnZXQgYSBsaW5rIGVy
cm9yIGluIGNhc2UgdGhpcyBhcmlzZXMsIHJhdGhlciB0aGFuIGhhdmluZyBhIHN0dWIgaGVyZSwg
YmVjYXVzZQotLy8gd2l0aCBhIHN0dWIgeW91IGxlYXJuIGFib3V0IHRoZSBwcm9ibGVtIGF0IHJ1
bnRpbWUgaW5zdGVhZCBvZiBsaW5rIHRpbWUuCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gZW50cmllczsKKyAgICBDU3RyaW5nIGNwYXRoID0gcGF0aC51dGY4KCk7CisgICAg
Q1N0cmluZyBjZmlsdGVyID0gZmlsdGVyLnV0ZjgoKTsKKyAgICBESVIqIGRpciA9IG9wZW5kaXIo
Y3BhdGguZGF0YSgpKTsKKyAgICBpZiAoZGlyKSB7CisgICAgICAgIHN0cnVjdCBkaXJlbnQqIGRw
OworICAgICAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICAgICAgY29u
c3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1l
LCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBpZiAoZm5tYXRjaChjZmlsdGVyLmRhdGEoKSwgbmFtZSwgMCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjaGFyIGZpbGVQYXRoWzEwMjRdOwor
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKGZpbGVQYXRoKSAtIDEpIDwg
c25wcmludGYoZmlsZVBhdGgsIHNpemVvZihmaWxlUGF0aCksICIlcy8lcyIsIGNwYXRoLmRhdGEo
KSwgbmFtZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGJ1ZmZlciBvdmVyZmxvdwor
ICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZVBhdGgpOworICAgICAgICB9CisgICAgICAg
IGNsb3NlZGlyKGRpcik7CisgICAgfQorICAgIHJldHVybiBlbnRyaWVzOworfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGFzay5jcHAJKHJldmlzaW9uIDgwODA0KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9M
b2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5j
LmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01MCw2ICs1MSwyNyBAQCBMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5
cGUgCiAgICAgQVNTRVJUKG1fdGhyZWFkKTsKICAgICBBU1NFUlQobV90eXBlID09IFRlcm1pbmF0
ZVRocmVhZCk7CiB9CisgICAgCitMb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5
cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSW1w
b3J0T3JpZ2lucyB8fCBtX3R5cGUgPT0gRGVsZXRlQWxsT3JpZ2lucyk7Cit9CisgICAgCitMb2Nh
bFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX29yaWdpbklkZW50
aWZpZXIob3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV90eXBlID09IERlbGV0ZU9y
aWdpbik7Cit9CisKK0xvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSB0eXBl
LCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VG
aWxlbmFtZSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9vcmlnaW5JZGVudGlmaWVyKG9y
aWdpbklkZW50aWZpZXIpCisgICAgLCBtX2RhdGFiYXNlRmlsZW5hbWUoZGF0YWJhc2VGaWxlbmFt
ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFNldE9yaWdpbkRldGFpbHMpOworfQogCiBMb2Nh
bFN0b3JhZ2VUYXNrOjp+TG9jYWxTdG9yYWdlVGFzaygpCiB7CkBAIC02NCw2ICs4NiwxOCBAQCB2
b2lkIExvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKCkKICAgICAgICAgY2FzZSBBcmVhU3lu
YzoKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybVN5bmMoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNldE9yaWdpbkRldGFpbHM6CisgICAgICAgICAgICBTdG9yYWdlVHJh
Y2tlcjo6dHJhY2tlcigpLnN5bmNTZXRPcmlnaW5EZXRhaWxzKG1fb3JpZ2luSWRlbnRpZmllciwg
bV9kYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElt
cG9ydE9yaWdpbnM6CisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNJ
bXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRGVsZXRlQWxsT3JpZ2luczoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkuc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERlbGV0ZU9yaWdpbjoKKyAgICAgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCku
c3luY0RlbGV0ZU9yaWdpbihtX29yaWdpbklkZW50aWZpZXIpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRGVsZXRlRW1wdHlEYXRhYmFzZToKICAgICAgICAgICAgIG1fYXJlYS0+
ZGVsZXRlRW1wdHlEYXRhYmFzZSgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkocmV2aXNpb24gODA4MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNDAsMTMgKzQxLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTG9jYWxTdG9yYWdlVGFzayk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1
YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgQXJlYUltcG9ydCwgQXJlYVN5bmMsIERlbGV0ZUVt
cHR5RGF0YWJhc2UsIFRlcm1pbmF0ZVRocmVhZCB9OworICAgICAgICBlbnVtIFR5cGUgeyBBcmVh
SW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwgU2V0T3JpZ2luRGV0YWlscywg
SW1wb3J0T3JpZ2lucywgRGVsZXRlQWxsT3JpZ2lucywgRGVsZXRlT3JpZ2luLCBUZXJtaW5hdGVU
aHJlYWQgfTsKIAogICAgICAgICB+TG9jYWxTdG9yYWdlVGFzaygpOwogCiAgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZUltcG9ydChTdG9yYWdlQXJlYVN5
bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFJbXBv
cnQsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNr
PiBjcmVhdGVTeW5jKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFz
c093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVFbXB0eURhdGFiYXNlKFN0b3Jh
Z2VBcmVhU3luYyogYXJlYSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2so
RGVsZXRlRW1wdHlEYXRhYmFzZSwgYXJlYSkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRy
PExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZU9yaWdpbklkZW50aWZpZXJzSW1wb3J0KCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soSW1wb3J0T3JpZ2lucykpOyB9CisgICAg
ICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVNldE9yaWdpbkRl
dGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRmlsZW5hbWUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFNldE9y
aWdpbkRldGFpbHMsIG9yaWdpbklkZW50aWZpZXIsIGRhdGFiYXNlRmlsZW5hbWUpKTsgfQorICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVPcmln
aW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
TG9jYWxTdG9yYWdlVGFzayhEZWxldGVPcmlnaW4sIG9yaWdpbklkZW50aWZpZXIpKTsgfQorICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVEZWxldGVBbGxP
cmlnaW5zKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlQWxs
T3JpZ2lucykpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZVRlcm1pbmF0ZShMb2NhbFN0b3JhZ2VUaHJlYWQqIHRocmVhZCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhyZWFkLCB0aHJlYWQpKTsgfQog
CiAgICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKQEAgLTU0LDEwICs1OSwxNSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBl
LCBTdG9yYWdlQXJlYVN5bmMqKTsKICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBMb2Nh
bFN0b3JhZ2VUaHJlYWQqKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUs
IGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZp
bGVuYW1lKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlKTsKIAogICAgICAgICBUeXBl
IG1fdHlwZTsKICAgICAgICAgU3RvcmFnZUFyZWFTeW5jKiBtX2FyZWE7CiAgICAgICAgIExvY2Fs
U3RvcmFnZVRocmVhZCogbV90aHJlYWQ7CisgICAgICAgIFN0cmluZyBtX29yaWdpbklkZW50aWZp
ZXI7CisgICAgICAgIFN0cmluZyBtX2RhdGFiYXNlRmlsZW5hbWU7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFJbXBsLmNwcAkocmV2aXNpb24gODA4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMzEgQEAgdm9p
ZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKICNlbmRpZgogfQogCit2b2lkIFN0b3JhZ2VBcmVh
SW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAorICAgIGlmIChtX3N0
b3JhZ2VNYXAtPmxlbmd0aCgpKSB7CisgICAgICAgIHVuc2lnbmVkIHF1b3RhID0gbV9zdG9yYWdl
TWFwLT5xdW90YSgpOworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUo
cXVvdGEpOworICAgIH0KKworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykgeworICAgICAgICBt
X3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOworICAgICAgICBtX3N0b3JhZ2VBcmVh
U3luYy0+c2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7CisgICAgfQorfQorICAgIAordm9pZCBTdG9y
YWdlQXJlYUltcGw6OnN5bmMoKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBi
bG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZVN5bmMoKTsKK30KKwogdm9p
ZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5oCShyZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gT25seSBjYWxsZWQgZnJvbSBhIGJhY2tncm91
bmQgdGhyZWFkLgogICAgICAgICB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwogCisgICAgICAgIC8vIFVzZWQgdG8gY2xlYXIgYSBTdG9yYWdl
QXJlYSBhbmQgY2xvc2UgZGIgYmVmb3JlIGJhY2tpbmcgZGIgZmlsZSBpcyBkZWxldGVkLgorICAg
ICAgICB2b2lkIGNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKworICAgICAgICB2b2lkIHN5bmMo
KTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2Vy
PiwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBTdG9yYWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJ
bXBsKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
CShyZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRl
ICJTdWRkZW5UZXJtaW5hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApA
QCAtMTM4LDYgKzEzOSwyNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbGVhcigp
CiAgICAgfQogfQogCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNl
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9maW5hbFN5
bmNTY2hlZHVsZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAo
IW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVT
aG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBp
biB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRpc2Fi
bGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwogdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CkBAIC0yMjIsNiArMjQyLDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5j
OjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIEEg
U3RvcmFnZVRyYWNrZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIHRvIGRlbGV0ZSB0
aGUgZGIgd2UncmUKKyAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNlbCBwb3NzaWJsZSBkZWxldGlv
bi4KKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNlbERlbGV0aW5nT3JpZ2luKG1f
ZGF0YWJhc2VJZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNl
RmlsZW5hbWUpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2Ug
ZmlsZSAlcyBmb3IgbG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEo
KSk7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpAQCAtMjM1LDYgKzI1OSw4IEBAIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkQKICAgICAgICAgbV9kYXRhYmFzZU9wZW5G
YWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgU3RvcmFnZVRyYWNr
ZXI6OnRyYWNrZXIoKS5zZXRPcmlnaW5EZXRhaWxzKG1fZGF0YWJhc2VJZGVudGlmaWVyLCBkYXRh
YmFzZUZpbGVuYW1lKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQo
KQpAQCAtMzE5LDYgKzM0NSwxNSBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNs
ZWFySXRlCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CiAK
KyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBpdCBpcyBhYm91dCB0byBiZSBkZWxldGVk
IGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBkZWxldGUgd2lsbCBiZSBjYW5jZWxsZWQg
aWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3BlbiB0aGUgZGIKKyAgICAvLyB0byB3cml0
ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVxdWVzdCB0byBkZWxldGUgdGhlIGRiLgor
ICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7CisgICAgICAgIG1fc3luY0Nsb3NlRGF0YWJh
c2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAogICAgIC8vIElmIHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBj
bGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCiAgICAg
aWYgKGNsZWFySXRlbXMpIHsKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKQEAgLTQyMSwxMiArNDU2LDIxIEBAIHZvaWQg
U3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURhdGFiYXMKICAgICBpZiAoIWNvdW50KSB7CiAg
ICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7CiAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAg
ICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJh
c2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghU1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFi
YXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6
dHJhY2tlcigpLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLmRlbGV0ZU9yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxs
RGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgICAgICBpZiAo
IVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShkYXRhYmFzZUZpbGVuYW1lKSkK
KyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UgZmls
ZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgfQogICAg
IH0KIH0KIAordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYygpCit7CisgICAgc3lu
Y1RpbWVyRmlyZWQoJm1fc3luY1RpbWVyKTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkocmV2aXNpb24gODA4MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNjaGVkdWxlSXRlbUZv
clN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICB2
b2lkIHNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZUNsb3NlRGF0YWJhc2Uo
KTsKKworICAgICAgICB2b2lkIHNjaGVkdWxlU3luYygpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgU3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7
CkBAIC05Miw2ICs5NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3N5
bmNTY2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9zeW5jSW5Qcm9ncmVzczsKICAgICAgICAgYm9v
bCBtX2RhdGFiYXNlT3BlbkZhaWxlZDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9zeW5jQ2xv
c2VEYXRhYmFzZTsKIAogICAgICAgICBtdXRhYmxlIE11dGV4IG1faW1wb3J0TG9jazsKICAgICAg
ICAgbXV0YWJsZSBUaHJlYWRDb25kaXRpb24gbV9pbXBvcnRDb25kaXRpb247CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkocmV2aXNpb24gODA4MDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3Jp
Z2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jKCkg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHJldmlzaW9uIDgwODA0KQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIK
ICNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0xNDQsNiArMTQ1LDMy
IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OnVubG9jaygpCiAgICAgLy8gQmVjYXVzZSB0
aGVyZSdzIGEgc2luZ2xlIGV2ZW50IGxvb3AgcGVyLXByb2Nlc3MsIHRoaXMgaXMgYSBuby1vcC4K
IH0KIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFN
YXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgICAgICBzdG9yYWdlQXJl
YS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
dG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNv
bmQtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZU5hbWVz
cGFjZUltcGw6OnN5bmMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAg
Zm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c3luYygpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCShy
ZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHVubG9jaygpOwogCisgICAgICAgIC8vIE5vdCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFn
ZUFyZWEgZnJvbSBtX3N0b3JhZ2VBcmVhTWFwIGJlY2F1c2UKKyAgICAgICAgLy8gd2UncmUganVz
dCBkZWxldGluZyB0aGUgdW5kZXJseWluZyBkYiBmaWxlLiBJZiBhbiBpdGVtIGlzIGFkZGVkIGlt
bWVkaWF0ZWx5CisgICAgICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQgdGhlIHNh
bWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxseSB0cmlnZ2VyCisgICAgICAgIC8vIGEgc3luYyBh
bmQgZm9yIFN0b3JhZ2VBcmVhU3luYyB0byByZWNyZWF0ZSB0aGUgYmFja2luZyBkYiBmaWxlLgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdp
biopOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHN5bmMoKTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0
aCwgdW5zaWduZWQgcXVvdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VUcmFja2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisj
aW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVudC5o
IgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0b3JhZ2VUcmFja2VyKiBzdG9y
YWdlVHJhY2tlciA9IDA7CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2Vy
KGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFzdG9yYWdlVHJhY2tl
cik7CisgICAgaWYgKHN0b3JhZ2VUcmFja2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9y
YWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcihzdG9yYWdlUGF0aCk7CisgICAgc3RvcmFn
ZVRyYWNrZXItPnNldElzQWN0aXZlKHRydWUpOworICAgIHN0b3JhZ2VUcmFja2VyLT5pbXBvcnRP
cmlnaW5JZGVudGlmaWVycygpOworfQorCitTdG9yYWdlVHJhY2tlciYgU3RvcmFnZVRyYWNrZXI6
OnRyYWNrZXIoKQoreworICAgIGlmICghc3RvcmFnZVRyYWNrZXIpIHsKKyAgICAgICAgc3RvcmFn
ZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoIiIpOworICAgICAgICBzdG9yYWdlVHJhY2tl
ci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICpz
dG9yYWdlVHJhY2tlcjsKK30KKworU3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKGNvbnN0
IFN0cmluZyYgc3RvcmFnZVBhdGgpCisgICAgOiBtX2NsaWVudCgwKQorICAgICwgbV90aHJlYWQo
TG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKSkKKyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgCisgICAgc2V0U3RvcmFnZURp
cmVjdG9yeVBhdGgoc3RvcmFnZVBhdGgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06OnJl
Z2lzdGVyU1FMaXRlVkZTKCk7CisgICAgCisgICAgbV90aHJlYWQtPnN0YXJ0KCk7ICAKK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQp
OworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CisgICAgCisgICAgbV9zdG9yYWdl
RGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2FmZUNvcHkoKTsKK30KKworU3RyaW5nIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU1FM
aXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VEaXJl
Y3RvcnlQYXRoLCAiU3RvcmFnZVRyYWNrZXIuZGIiKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tl
cjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQoreworICAg
IEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworCisgICAgaWYgKG1fZGF0YWJhc2Uu
aXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRo
ID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOworICAgIAorICAgIGlmICghU1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90
RXhpc3QpKSB7CisgICAgICAgIGlmIChjcmVhdGVJZkRvZXNOb3RFeGlzdCkKKyAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBmaWxlICclcyciLCBkYXRhYmFz
ZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0YWJhc2VQYXRoLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2RhdGFiYXNlLmRp
c2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVF
eGlzdHMoIk9yaWdpbnMiKSkgeworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4gVEVYVCBVTklRVUUgT04gQ09ORkxJQ1Qg
UkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tl
cjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoreyAgIAorICAgIGlmICghbV9pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKG1fdGhyZWFkKTsKKworICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9y
YWdlVGFzazo6Y3JlYXRlT3JpZ2luSWRlbnRpZmllcnNJbXBvcnQoKSk7Cit9CisKK3ZvaWQgU3Rv
cmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpCit7CisgICAgQVNTRVJU
KG1faXNBY3RpdmUpOworICAgIAorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKwor
ICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiBGUk9NIE9y
aWdpbnMiKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQg
cmVzdWx0OworCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5z
KG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpCisgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQu
YWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLnRocmVhZHNhZmVDb3B5KCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCisgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20gdGhl
IGRhdGFiYXNlLiIpOworICAgIH0KKyAgICAKKyAgICBzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJE
YXRhYmFzZSgpOworICAgIAorICAgIGlmIChtX2NsaWVudCkgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgT3JpZ2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsKKyAgICAgICAgZm9yIChPcmlnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKCppdCk7
CisgICAgfQorfQorICAgIAordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRU
cmFja2VyRGF0YWJhc2UoKQoreworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBmaWxlTWF0Y2hQYXR0ZXJuLCAoIioubG9jYWxz
dG9yYWdlIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBmaWxlRXh0
LCAoIi5sb2NhbHN0b3JhZ2UiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCB1bnNp
Z25lZCwgZmlsZUV4dExlbmd0aCwgKGZpbGVFeHQubGVuZ3RoKCkpKTsKKworICAgIFZlY3RvcjxT
dHJpbmc+IHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCBmaWxl
TWF0Y2hQYXR0ZXJuKTsKKyAgICAKKyAgICAvLyBBZGQgbWlzc2luZyBTdG9yYWdlVHJhY2tlciBy
ZWNvcmRzLgorICAgIE9yaWdpblNldCBmb3VuZE9yaWdpbnM7CisgICAgVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIFN0cmluZyBwYXRoID0gKml0OworICAgICAgICBpZiAocGF0aC5lbmRzV2l0aChm
aWxlRXh0LCB0cnVlKSAmJiBwYXRoLmxlbmd0aCgpID4gZmlsZUV4dExlbmd0aCkgeworICAgICAg
ICAgICAgU3RyaW5nIGZpbGUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisgICAgICAgICAgICBT
dHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUubGVuZ3RoKCkg
LSBmaWxlRXh0TGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghbV9vcmlnaW5TZXQuY29udGFpbnMo
b3JpZ2luSWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkp
CisgICAgICAgICAgICAgICAgICAgIHNldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllciwg
cGF0aCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzeW5jU2V0
T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9yYWdlVHJhY2tlciByZWNvcmRzLgor
ICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7
CisgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQuYmVn
aW4oKTsgaXQgIT0gc2V0RW5kOyArK2l0KSB7CisgICAgICAgIGlmICghZm91bmRPcmlnaW5zLmNv
bnRhaW5zKCppdCkpIHsKKyAgICAgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAg
ICAgICAgICBkZWxldGVPcmlnaW4oKml0KTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICAgICAgc3luY0RlbGV0ZU9yaWdpbigqaXQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpCit7CisgICAgaWYgKCFtX2lzQWN0
aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tP
cmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworCisgICAgICAgIGlmIChtX29yaWdpblNldC5jb250
YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X29yaWdpblNldC5hZGQob3JpZ2luSWRlbnRpZmllcik7CisgICAgfQorCisgICAgTG9jYWxTdG9y
YWdlVGFzayogdGFzayA9IExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdpbkRldGFpbHMo
b3JpZ2luSWRlbnRpZmllci50aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFzZUZpbGUpLmxlYWtQdHIo
KTsKKworICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAgICBBU1NFUlQobV90aHJlYWQp
OworICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKHRhc2spOworICAgIH0gZWxzZSAKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChzY2hlZHVsZVRhc2ssICh2b2lkKil0YXNrKTsKK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKHZvaWQqIHRhc2spCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIo
KS5tX3RocmVhZCk7CisgICAgCisgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkubV90
aHJlYWQpCisgICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQtPnNjaGVk
dWxlVGFzaygoTG9jYWxTdG9yYWdlVGFzayopdGFzayk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNr
ZXI6OnN5bmNTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKwor
ICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywgPykiKTsKKyAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggb3JpZ2luICclcycgaW4gdGhlIHRyYWNrZXIiLCBv
cmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0g
CisgICAgCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUZpbGUpOworICAgIAorICAgIGlmIChzdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZp
ZXIuYXNjaWkoKS5kYXRhKCkpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrT3Jp
Z2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgaWYgKCFtX29yaWdpblNldC5jb250YWlu
cyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5J
ZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9pZCBT
dG9yYWdlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiBy
ZXN1bHQpCit7CisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAgIAorICAgIGlmICghbV9pc0Fj
dGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJWE1FOiBTdG9yYWdlVHJhY2tl
ciBpcyBjdXJyZW50bHkgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBiZSBhc3N1bWVkCisgICAgLy8g
dG8gaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Igd2l0aCBtb3JlIHRoYW4gb25lIFBhZ2VHcm91cC4K
KyAgICBBU1NFUlQoUGFnZUdyb3VwOjpudW1iZXJPZlBhZ2VHcm91cHMoKSA9PSAxKTsKKworICAg
IE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworCisgICAgT3JpZ2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsKKyAgICBmb3IgKE9y
aWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZy
b21EYXRhYmFzZUlkZW50aWZpZXIoKml0KSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRl
bGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgCisgICAgaWYgKCFt
X2lzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IFN0b3JhZ2VU
cmFja2VyIGlzIGN1cnJlbnRseSBhIHNpbmdsZXRvbiBhbmQgc2hvdWxkIGJlIGFzc3VtZWQKKyAg
ICAvLyB0byBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciB3aXRoIG1vcmUgdGhhbiBvbmUgUGFnZUdy
b3VwLgorICAgIEFTU0VSVChQYWdlR3JvdXA6Om51bWJlck9mUGFnZUdyb3VwcygpID09IDEpOwor
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJk
KTsKKyAgICAgICAgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKyAgICAgICAgbV9vcmlnaW5TZXQu
Y2xlYXIoKTsKKyAgICB9CisKKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yQWxs
T3JpZ2lucygpOworICAgIAorICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdl
VGFzazo6Y3JlYXRlRGVsZXRlQWxsT3JpZ2lucygpKTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRy
YWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJk
KTsKKyAgICAKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0
YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luLCBwYXRoIEZST00gT3JpZ2lu
cyIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXN1bHQ7CisgICAgd2hpbGUgKChyZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaWYgKCFjYW5E
ZWxldGVPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmls
ZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKSk7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBm
cm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkK
KyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgIAorICAgIFNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZURhdGFiYXNlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgIFNRTGl0ZUZp
bGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5
UGF0aCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpLmdldCgpKTsK
K30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pCit7ICAgIAorICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgCisgICAgaWYgKCFtX2lzQWN0
aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogU3RvcmFnZVRyYWNrZXIgaXMg
Y3VycmVudGx5IGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgYXNzdW1lZAorICAgIC8vIHRvIGhh
dmUgdW5kZWZpbmVkIGJlaGF2aW9yIHdpdGggbW9yZSB0aGFuIG9uZSBQYWdlR3JvdXAuCisgICAg
QVNTRVJUKFBhZ2VHcm91cDo6bnVtYmVyT2ZQYWdlR3JvdXBzKCkgPT0gMSk7CisgICAgCisgICAg
Ly8gQmVmb3JlIGRlbGV0aW5nIGRhdGFiYXNlLCB3ZSBuZWVkIHRvIGNsZWFyIGluLW1lbW9yeSBs
b2NhbCBzdG9yYWdlIGRhdGEKKyAgICAvLyBpbiBTdG9yYWdlQXJlYSwgYW5kIHRvIGNsb3NlIHRo
ZSBTdG9yYWdlQXJlYSBkYi4gSXQncyBwb3NzaWJsZSBmb3IgYW4KKyAgICAvLyBpdGVtIHRvIGJl
IGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NpbmcgdGhlIGRiIGFuZCBjYXVzZSBTdG9yYWdl
QXJlYVN5bmMKKyAgICAvLyB0byByZW9wZW4gdGhlIGRiIGJlZm9yZSB0aGUgZGIgaXMgZGVsZXRl
ZCBieSBhIFN0b3JhZ2VUcmFja2VyIHRocmVhZC4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHJlb3Bl
bmluZyB0aGUgZGIgaW4gU3RvcmFnZUFyZWFTeW5jIHdpbGwgY2FuY2VsIGEgcGVuZGluZworICAg
IC8vIFN0b3JhZ2VUcmFja2VyIGRiIGRlbGV0aW9uLgorICAgIFBhZ2VHcm91cDo6Y2xlYXJMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKKworICAgIFN0cmluZyBvcmlnaW5JZCA9IG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgCisgICAgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKKyAgICAgICAgd2lsbERlbGV0ZU9yaWdp
bihvcmlnaW5JZCk7CisgICAgICAgIG1fb3JpZ2luU2V0LnJlbW92ZShvcmlnaW5JZCk7CisgICAg
fQorICAgIAorICAgIG1fdGhyZWFkLT5zY2hlZHVsZVRhc2soTG9jYWxTdG9yYWdlVGFzazo6Y3Jl
YXRlRGVsZXRlT3JpZ2luKG9yaWdpbklkKSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5
bmNEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisgICAgCisgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4ob3JpZ2luSWRl
bnRpZmllcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0ZWQgdG8gZGVsZXRlIG9yaWdp
biAnJXMnIHdoaWxlIGl0IHdhcyBiZWluZyBjcmVhdGVkXG4iLCBvcmlnaW5JZGVudGlmaWVyLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBHZXQgb3JpZ2luJ3MgZGIgZmlsZSBwYXRoLCBkZWxl
dGUgZW50cnkgaW4gdHJhY2tlcidzIGRiLCB0aGVuIGRlbGV0ZSBkYiBmaWxlLgorICAgIFNRTGl0
ZVN0YXRlbWVudCBwYXRoU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9y
aWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKKyAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBz
ZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXRoU3RhdGVtZW50LmJp
bmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVt
ZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykgeworICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBmaW5kIG9yaWdpbiAnJXMnIGluIE9yaWdpbnMgdGFibGUiLCBv
cmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBTdHJpbmcgcGF0aCA9IHBhdGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsK
KworICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkpOworICAgIAorICAgIFNRTGl0ZVN0YXRlbWVu
dCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUg
b3JpZ2luPT8iKTsKKyAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9m
IG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklk
ZW50aWZpZXIpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4g
JyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgp
OworICAgIAorICAgIGJvb2wgc2hvdWxkRGVsZXRlVHJhY2tlckZpbGVzID0gZmFsc2U7CisgICAg
eworICAgICAgICBNdXRleExvY2tlciBvcmlnaW5Mb2NrKG1fb3JpZ2luU2V0R3VhcmQpOworICAg
ICAgICBtX29yaWdpblNldC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHNob3Vs
ZERlbGV0ZVRyYWNrZXJGaWxlcyA9IG1fb3JpZ2luU2V0LmlzRW1wdHkoKTsKKyAgICB9CisKKyAg
ICBpZiAoc2hvdWxkRGVsZXRlVHJhY2tlckZpbGVzKSB7CisgICAgICAgIG1fZGF0YWJhc2UuY2xv
c2UoKTsKKyAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNr
ZXJEYXRhYmFzZVBhdGgoKSk7CisgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5
RGF0YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisgICAgfQorICAgIAor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luKG9yaWdpbklkZW50aWZpZXIpOworfQorICAgIAordm9pZCBTdG9yYWdlVHJhY2tlcjo6d2ls
bERlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVCghbV9vcmlnaW5TZXRHdWFyZC50cnlM
b2NrKCkpOworCisgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNl
dC5lbmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdp
blNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVs
ZXRlZC5hZGQoKCppdCkudGhyZWFkc2FmZUNvcHkoKSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNr
ZXI6OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX29yaWdpblNldEd1YXJk
LnRyeUxvY2soKSk7CisKKyAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbklkZW50
aWZpZXIpOworfQorICAgIAorYm9vbCBTdG9yYWdlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VH
dWFyZC50cnlMb2NrKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0
R3VhcmQpOworICAgIHJldHVybiBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuY29udGFpbnMob3JpZ2lu
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmNhbmNlbERlbGV0aW5nT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1faXNBY3Rp
dmUpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3Jp
Z2luU2V0R3VhcmQpOworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlzRW1wdHkoKSkKKyAgICAgICAg
bV9vcmlnaW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFja2VyQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5
bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIFBhZ2VHcm91cDo6c3luY0xvY2FsU3RvcmFnZSgpOwor
fQorICAgIAorYm9vbCBTdG9yYWdlVHJhY2tlcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBt
X2lzQWN0aXZlOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRJc0FjdGl2ZShib29sIGZs
YWcpCit7CisgICAgbV9pc0FjdGl2ZSA9IGZsYWc7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlVHJhY2tl
cl9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyAgICAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFi
YXNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrOworY2xh
c3MgTG9jYWxTdG9yYWdlVGhyZWFkOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9y
YWdlVHJhY2tlckNsaWVudDsgICAgCisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYWNrZXIoY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2Vy
KCk7CisgICAgc3RhdGljIHZvaWQgc2NoZWR1bGVUYXNrKHZvaWQqKTsKKworICAgIHZvaWQgaW1w
b3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7Cisg
ICAgCisgICAgdm9pZCBkZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBkZWxldGVPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiA+JiByZXN1bHQpOworCisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KFN0
b3JhZ2VUcmFja2VyQ2xpZW50Kik7CisgICAgCisgICAgYm9vbCBpc0FjdGl2ZSgpOworCisgICAg
Ly8gU3luYyB0byBkaXNrIG9uIGJhY2tncm91bmQgdGhyZWFkLgorICAgIHZvaWQgc3luY0RlbGV0
ZUFsbE9yaWdpbnMoKTsKKyAgICB2b2lkIHN5bmNEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHN5bmNTZXRPcmlnaW5EZXRhaWxzKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUZpbGUpOworICAg
IHZvaWQgc3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBzeW5jRmlsZVN5
c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworCisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7
CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0
aCk7CisKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQg
b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKworICAgIHZv
aWQgc2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGRl
bGV0ZVRyYWNrZXJGaWxlcygpOworCisgICAgYm9vbCBjYW5EZWxldGVPcmlnaW4oY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHdpbGxEZWxldGVPcmlnaW4oY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIHdpbGxEZWxldGVBbGxPcmlnaW5z
KCk7CisKKyAgICB2b2lkIG9yaWdpbkZpbGVQYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOwor
ICAgIAorICAgIHZvaWQgc2V0SXNBY3RpdmUoYm9vbCk7CisKKyAgICBNdXRleCBtX2RhdGFiYXNl
R3VhcmQ7CisgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKworICAgIFN0cmluZyBtX3N0
b3JhZ2VEaXJlY3RvcnlQYXRoOworCisgICAgU3RvcmFnZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50
OworCisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2luU2V0OworCisgICAgTXV0ZXgg
bV9vcmlnaW5TZXRHdWFyZDsKKyAgICBPcmlnaW5TZXQgbV9vcmlnaW5TZXQ7CisgICAgT3JpZ2lu
U2V0IG1fb3JpZ2luc0JlaW5nRGVsZXRlZDsKKworICAgIE93blB0cjxMb2NhbFN0b3JhZ2VUaHJl
YWQ+IG1fdGhyZWFkOworICAgIAorICAgIGJvb2wgbV9pc0FjdGl2ZTsKK307CisgICAgCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNl
bmRpZiAvLyBTdG9yYWdlVHJhY2tlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUcmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAorI2RlZmlu
ZSBTdG9yYWdlVHJhY2tlckNsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0b3JhZ2VUcmFja2VyQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0b3Jh
Z2VUcmFja2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEt
MDMtMTAgIEFudG9uIEQnQXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmll
dyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUxODc4CisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKwogMjAxMS0wMy0wMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODA4
MDQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxMSBAQAogCQkzN0I2RkI0RjEwNjM1MzBDMDAwRkRC
M0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0I2RkI0RDEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9j
dW1lbnRFeHRyYXMubW0gKi87IH07CiAJCTM3RDFEQ0E4MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJK
U1BERkRvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzdEMURDQTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggKi87IH07CiAJCTM3RDFE
Q0E5MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E3MTA2NTkyOEMwMDY4RjdFRiAvKiBX
ZWJKU1BERkRvYy5tbSAqLzsgfTsKKwkJM0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0
b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tICov
OyB9OworCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIw
MkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0FCQjNDN0ExMzA5
QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJCM0M3ODEzMDlDM0I1MDBFOTNEOTQg
LyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsKKwkJM0FCQjNDN0IxMzA5QzNCNTAw
RTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCQjNDNzkxMzA5QzNCNTAwRTkzRDk0IC8qIFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tICovOyB9OworCQkzQUUxNUQ1MDEyREJERUQ0MDA5MzIz
QzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FFMTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0
b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLzsgfTsKIAkJNDFGNDQ4NEYxMDMzOEU4QzAwMzBFNTVF
IC8qIFdlYldvcmtlcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUY0NDg0RDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
MUY0NDg1MDEwMzM4RThDMDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUY0NDg0RTEwMzM4RThDMDAz
MEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUubW0gKi87IH07CiAJCTQ0QkI4QjE0MTI0MUEwMjIw
MDFFM0EyMiAvKiBXZWJBcmNoaXZlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QkI4QjEzMTI0MUEwMjIwMDFFM0EyMiAvKiBXZWJBcmNo
aXZlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTQ4Myw2ICs0ODgsMTEgQEAKIAkJMzk0NDYwN0UwMjBG
NTBFRDBFQ0ExNzY3IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkJhY2tGb3J3YXJkTGlz
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTM5NDQ2MDdGMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0b3J5SXRlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIaXN0b3J5
SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJMzk0NDYwODAwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3RvcnlJdGVtLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViSGlzdG9yeUl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OworCQkzQUIwMkFGNTEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFn
ZU1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJT
dG9yYWdlTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCMDJBRkYx
MkMxMzJCMjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0FCQjNDNzgxMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0
b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNB
QkIzQzc5MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN0b3JhZ2VUcmFja2VyQ2xp
ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzQUUxNUQ0RjEyREJERUQ0MDA5
MzIzQzggLyogV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxRjQ0ODREMTAzMzhFOEMwMDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJXb3JrZXJzUHJpdmF0
ZS5oOyBwYXRoID0gbWFjL1dvcmtlcnMvV2ViV29ya2Vyc1ByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNDQ4NEUxMDMzOEU4QzAwMzBFNTVFIC8qIFdlYldvcmtlcnNQ
cml2YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViV29y
a2Vyc1ByaXZhdGUubW07IHBhdGggPSBtYWMvV29ya2Vycy9XZWJXb3JrZXJzUHJpdmF0ZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk4QjkwRjhGODJERjAwNzZBMzI3IC8q
IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTA1Niw2ICsxMDY2LDExIEBACiAJCQkJQTVERUZDMEUxMUQ1MzQzRTAwODg1MjczIC8qIFdlYkRh
dGFiYXNlUXVvdGFNYW5hZ2VyLm1tICovLAogCQkJCTUxMUYzRkQzMENFQ0M4OEYwMDg1MjU2NSAv
KiBXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKIAkJCQk1MTFGM0ZENDBDRUNDODhGMDA4
NTI1NjUgLyogV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovLAorCQkJCTNBQjAyQUY1MTJD
MTMxOUIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSAqLywKKwkJCQkzQUIwMkFGRjEy
QzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmggKi8sCisJCQkJM0FF
MTVENEYxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCAqLywK
KwkJCQkzQUJCM0M3ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQu
aCAqLywKKwkJCQkzQUJCM0M3OTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFN0b3JhZ2U7CiAJCQlwYXRoID0gbWFjL1N0
b3JhZ2U7CkBAIC0xNjI1LDcgKzE2NDAsMTAgQEAKIAkJCQk1OThBRDkyQTEyMDFDRjNCMDBBQkFF
NEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2tJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTk4QURBNDYxMjAyMjc1MDAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0
aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTJBMUE0MTIzQjBCM0MwMDlGRTEy
QSAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTNBQjAyQjAwMTJD
MTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJM0FFMTVENTAxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0
b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTNBQkIzQzdBMTMwOUMz
QjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM0MkQzMjQxMzFFRDFFMDAwNzVGQTRCIC8qIFdlYkxvY2FsaXphYmxlU3RyaW5nc0ludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKQEAgLTE5OTMsNyArMjAxMSw5IEBACiAJCQkJNTk4QUQ5MjIxMjAxQ0Yx
MDAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTk4QUQ5MjgxMjAxQ0YzMjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJN
b2NrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMkExQTUxMjNCMEIzQzAwOUZFMTJBIC8qIFdl
YkRhc2hib2FyZFJlZ2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTNBQjAyQUY2MTJDMTMxOUIw
MEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQTYy
QUUzMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTNBQkIzQzdCMTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDJEMzREMTMxRUQzODgwMDc1RkE0QiAv
KiBXZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODA0KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMy0x
MCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQxIEFQSSB0byB2aWV3IGFu
ZCBkZWxldGUgbG9jYWwgc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAgICAqIHNyYy9TdG9yYWdlTmFtZXNwYWNlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhck9y
aWdpbkZvckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94
eTo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZU5hbWVzcGFjZVByb3h5OjpzeW5jKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZU5hbWVzcGFjZVBy
b3h5Lmg6CisKIDIwMTEtMDMtMTAgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCShyZXZpc2lv
biA4MDgwNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDIxIEBAIHZvaWQgU3RvcmFnZU5h
bWVzcGFjZVByb3h5Ojp1bmxvY2soKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKK3Zv
aWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5
OjpzeW5jKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmgJKHJl
dmlzaW9uIDgwODA0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVz
cGFjZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpOwogICAgIHZpcnR1
YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bmxvY2soKTsKKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiopOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigpOworICAgIAorICAgIHZp
cnR1YWwgdm9pZCBzeW5jKCk7CiAKIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYktpdDo6V2ViU3Rv
cmFnZU5hbWVzcGFjZT4gbV9zdG9yYWdlTmFtZXNwYWNlOwpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gODA4MDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVy
aWFAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAg
ICAgICBBZGQgV2ViS2l0MSBBUEkgdG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKwor
ICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06IEFkZGVkLgorICAgICAgICAo
K1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0pOgorICAgICAgICAo
LVtXZWJTdG9yYWdlTWFuYWdlciBvcmlnaW5zXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5h
Z2VyIGRlbGV0ZUFsbE9yaWdpbnNdKToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgZGVs
ZXRlT3JpZ2luOl0pOgorICAgICAgICAoLVtXZWJTdG9yYWdlTWFuYWdlciBzeW5jTG9jYWxTdG9y
YWdlXSk6CisgICAgICAgICgtW1dlYlN0b3JhZ2VNYW5hZ2VyIHN5bmNGaWxlU3lzdGVtQW5kVHJh
Y2tlckRhdGFiYXNlXSk6CisgICAgICAgIChzdG9yYWdlRGlyZWN0b3J5UGF0aCk6CisgICAgICAg
IChXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBTdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9X
ZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJT
dG9yYWdlVHJhY2tlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3Jh
Z2VUcmFja2VyQ2xpZW50Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYlN0b3JhZ2VUcmFja2VyQ2xp
ZW50OjpzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChXZWJTdG9yYWdl
VHJhY2tlckNsaWVudDo6V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVudCk6CisgICAgICAgIChX
ZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbToK
KyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gcHJvdG9jb2xdKToKKyAgICAgICAgKC1bV2Vi
U2VjdXJpdHlPcmlnaW4gaG9zdF0pOgorICAgICAgICAoLVtXZWJTZWN1cml0eU9yaWdpbiBkYXRh
YmFzZUlkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV2ViU2VjdXJpdHlPcmlnaW4gZG9tYWluXSk6
CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9y
aWdpbjpdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZh
dGUuaDoKKyAgICAgICAgKiBXZWJLaXQuZXhwOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5t
bToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1l
Omdyb3VwTmFtZTp1c2VzRG9jdW1lbnRWaWV3czpdKToKKwogMjAxMS0wMy0xMCAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBX
ZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQuZXhwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5leHAJKHJldmlzaW9uIDgwODA0KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViS2l0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKIC5v
YmpjX2NsYXNzX25hbWVfV2ViQ29yZVN0YXRpc3RpY3MKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGF0
YVNvdXJjZQogLm9iamNfY2xhc3NfbmFtZV9XZWJEYXRhYmFzZU1hbmFnZXIKKy5vYmpjX2NsYXNz
X25hbWVfV2ViU3RvcmFnZU1hbmFnZXIKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGVmYXVsdFBvbGlj
eURlbGVnYXRlCiAub2JqY19jbGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uCiAub2JqY19j
bGFzc19uYW1lX1dlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrCkBAIC0xMTQsNiArMTE1
LDggQEAgX1dlYlJlcG9ydEVycm9yCiBfV2ViU2NyaXB0RXJyb3JEZXNjcmlwdGlvbktleQogX1dl
YlNjcmlwdEVycm9yRG9tYWluCiBfV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmVyS2V5CitfV2ViU3Rv
cmFnZURpcmVjdG9yeURlZmF1bHRzS2V5CitfV2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlm
aWNhdGlvbgogX1dlYlVSTE5hbWVQYm9hcmRUeXBlCiBfV2ViVVJMUGJvYXJkVHlwZQogX1dlYlZp
ZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2lt
cG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZU1h
bmFnZXJQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCisj
aW1wb3J0ICJXZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgorCisjaW1wb3J0IDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaXJl
Y3RvcnlEZWZhdWx0c0tleSA9IEAiV2ViS2l0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoUHJlZmVy
ZW5jZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3Rp
ZmljYXRpb24gPSBAIldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24iOworCitz
dGF0aWMgTlNTdHJpbmcgKnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCk7CisKK0BpbXBsZW1lbnRhdGlv
biBXZWJTdG9yYWdlTWFuYWdlcgorCisrIChXZWJTdG9yYWdlTWFuYWdlciAqKXNoYXJlZFdlYlN0
b3JhZ2VNYW5hZ2VyCit7CisgICAgc3RhdGljIFdlYlN0b3JhZ2VNYW5hZ2VyICpzaGFyZWRNYW5h
Z2VyID0gW1tXZWJTdG9yYWdlTWFuYWdlciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHNoYXJl
ZE1hbmFnZXI7Cit9CisKKy0gKE5TQXJyYXkgKilvcmlnaW5zCit7CisgICAgVmVjdG9yPFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gPiBjb3JlT3JpZ2luczsKKworICAgIFN0b3JhZ2VUcmFja2VyOjp0
cmFja2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7CisKKyAgICBOU011dGFibGVBcnJheSAqd2Vi
T3JpZ2lucyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9y
aWdpbnMuc2l6ZSgpXTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29yZU9yaWdpbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViU2VjdXJpdHlPcmlnaW4gKndlYk9yaWdpbiA9IFtb
V2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpj
b3JlT3JpZ2luc1tpXS5nZXQoKV07CisgICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJP
cmlnaW5dOworICAgICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOworICAgIH0KKworICAgIHJldHVy
biBbd2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpZGVsZXRlQWxsT3JpZ2lu
cworeworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsT3JpZ2lucygpOwor
fQorCistICh2b2lkKWRlbGV0ZU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KK3sK
KyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbihbb3JpZ2luIF9jb3Jl
XSk7Cit9CisKKy0gKHZvaWQpc3luY0xvY2FsU3RvcmFnZQoreworICAgIFN0b3JhZ2VUcmFja2Vy
Ojp0cmFja2VyKCkuc3luY0xvY2FsU3RvcmFnZSgpOworfQorCistICh2b2lkKXN5bmNGaWxlU3lz
dGVtQW5kVHJhY2tlckRhdGFiYXNlCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5z
eW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSgpOworfQorCitzdGF0aWMgTlNTdHJpbmcg
KnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMg
PSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIE5TU3RyaW5nICpz
dG9yYWdlRGlyZWN0b3J5ID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpXZWJTdG9yYWdlRGlyZWN0
b3J5RGVmYXVsdHNLZXldOworICAgIGlmICghc3RvcmFnZURpcmVjdG9yeSB8fCAhW3N0b3JhZ2VE
aXJlY3RvcnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgc3RvcmFn
ZURpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9Mb2NhbFN0b3JhZ2UiOworICAgIAorICAg
IHJldHVybiBbc3RvcmFnZURpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKK30K
Kwordm9pZCBXZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0
aWMgQk9PTCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihzdG9y
YWdlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICAKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
LnNldENsaWVudChXZWJTdG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQoKSk7CisgICAgCisgICAgaW5pdGlhbGl6ZWQgPSBZRVM7Cit9CisKK0BlbmQKKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2Vy
SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0
b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKK3ZvaWQg
V2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgpOworCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZh
dGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFn
ZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNL
ZXk7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJTdG9yYWdlRGlkTW9kaWZ5T3JpZ2luTm90
aWZpY2F0aW9uOworCitAY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CisKK0BpbnRlcmZhY2UgV2Vi
U3RvcmFnZU1hbmFnZXIgOiBOU09iamVjdAorCisrIChXZWJTdG9yYWdlTWFuYWdlciAqKXNoYXJl
ZFdlYlN0b3JhZ2VNYW5hZ2VyOworCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIFdlYlNlY3VyaXR5
T3JpZ2luIG9iamVjdHMgdGhhdCBoYXZlIExvY2FsU3RvcmFnZS4KKy0gKE5TQXJyYXkgKilvcmln
aW5zOworCistICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnM7CistICh2b2lkKWRlbGV0ZU9yaWdpbjoo
V2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CisKKy0gKHZvaWQpc3luY0xvY2FsU3RvcmFnZTsK
Ky0gKHZvaWQpc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2U7CisKK0BlbmQKKwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3Rv
cmFnZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisgCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW1wb3J0IDxXZWJDb3JlL1NlY3Vy
aXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBXZWJTdG9yYWdlVHJhY2tlckNsaWVu
dCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBzaGFyZWRXZWJTdG9yYWdlVHJhY2tlckNs
aWVudCgpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhy
ZWFkKHZvaWQqIGNvbnRleHQpOworICAgIAorICAgIHZpcnR1YWwgfldlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKK3ByaXZhdGU6CisgICAg
V2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKTsKK307CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50
LmgiCisKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmlu
Zy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KiBXZWJTdG9yYWdlVHJhY2tlckNs
aWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKQoreworICAgIHN0YXRpYyBXZWJT
dG9yYWdlVHJhY2tlckNsaWVudCogc2hhcmVkQ2xpZW50ID0gbmV3IFdlYlN0b3JhZ2VUcmFja2Vy
Q2xpZW50KCk7CisgICAgcmV0dXJuIHNoYXJlZENsaWVudDsKK30KKworV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQ6OldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50KCkKK3sKK30KKworV2ViU3RvcmFnZVRy
YWNrZXJDbGllbnQ6On5XZWJTdG9yYWdlVHJhY2tlckNsaWVudCgpCit7Cit9CisKK3ZvaWQgV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFk
KHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXZWJT
dG9yYWdlVHJhY2tlckNsaWVudDo6c2hhcmVkV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQoKS0+ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGljX2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihjb250ZXh0
KSk7Cit9CisKK3ZvaWQgV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQ6OmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikKK3sKKyAgICBSZXRhaW5Q
dHI8V2ViU2VjdXJpdHlPcmlnaW4+IHdlYlNlY3VyaXR5T3JpZ2luKEFkb3B0TlMsIFtbV2ViU2Vj
dXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4u
Z2V0KCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9z
dE5vdGlmaWNhdGlvbk5hbWU6V2ViU3RvcmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0OndlYlNlY3VyaXR5T3JpZ2luLmdldCgpXTsKK30KKwordm9pZCBXZWJTdG9yYWdlVHJh
Y2tlckNsaWVudDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyKQoreworICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZp
ZXIpOworCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luT25NYWluVGhyZWFkLCBzdGF0aWNfY2FzdDx2b2lk
Kj4ob3JpZ2luLmxlYWtSZWYoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpbi5t
bQkocmV2aXNpb24gODA4MDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJTZWN1cml0eU9yaWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsMjMgKzQ2LDI4IEBAIC0g
KGlkKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybAogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoW3VybCBhYnNvbHV0ZVVSTF0p
KTsKICAgICBvcmlnaW4tPnJlZigpOwotICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4uZ2V0KCkpOworICAgIF9wcml2YXRlID0g
cmVpbnRlcnByZXRfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgKj4ob3JpZ2luLmdldCgp
KTsKIAogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1N0cmluZyopcHJvdG9jb2wKKy0gKE5T
U3RyaW5nICopcHJvdG9jb2wKIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZWN1cml0
eU9yaWdpbio+KF9wcml2YXRlKS0+cHJvdG9jb2woKTsKIH0KIAotLSAoTlNTdHJpbmcqKWhvc3QK
Ky0gKE5TU3RyaW5nICopaG9zdAogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlY3Vy
aXR5T3JpZ2luKj4oX3ByaXZhdGUpLT5ob3N0KCk7CiB9CiAKKy0gKE5TU3RyaW5nICopZGF0YWJh
c2VJZGVudGlmaWVyCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmln
aW4qPihfcHJpdmF0ZSktPmRhdGFiYXNlSWRlbnRpZmllcigpOworfQorCiAvLyBEZXByZWNhdGVk
LiBVc2UgaG9zdCBpbnN0ZWFkLiBUaGlzIG5lZWRzIHRvIHN0YXkgaGVyZSB1bnRpbCB3ZSBzaGlw
IGEgbmV3IFNhZmFyaS4KLS0gKE5TU3RyaW5nKilkb21haW4KKy0gKE5TU3RyaW5nICopZG9tYWlu
CiB7CiAgICAgcmV0dXJuIFtzZWxmIGhvc3RdOwogfQpAQCAtMTExLDcgKzExNiw3IEBAIC0gKGlk
KV9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjooU2UKICAgICAgICAgcmV0dXJuIG5pbDsK
IAogICAgIG9yaWdpbi0+cmVmKCk7Ci0gICAgX3ByaXZhdGUgPSByZWludGVycHJldF9jYXN0PFdl
YlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSo+KG9yaWdpbik7CisgICAgX3ByaXZhdGUgPSByZWludGVy
cHJldF9jYXN0PFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSAqPihvcmlnaW4pOwogCiAgICAgcmV0
dXJuIHNlbGY7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
ZWN1cml0eU9yaWdpblByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaAkocmV2aXNpb24gODA4MDQp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTAgQEAgQGludGVyZmFjZSBXZWJT
ZWN1cml0eU9yaWdpbiA6IE5TT2JqZWN0IAogCiAtIChpZClpbml0V2l0aFVSTDooTlNVUkwgKil1
cmw7CiAKLS0gKE5TU3RyaW5nKilwcm90b2NvbDsKLS0gKE5TU3RyaW5nKilob3N0OworLSAoTlNT
dHJpbmcgKilwcm90b2NvbDsKKy0gKE5TU3RyaW5nICopaG9zdDsKKworLSAoTlNTdHJpbmcgKilk
YXRhYmFzZUlkZW50aWZpZXI7CiAKIC8vIFJldHVybnMgemVybyBpZiB0aGUgcG9ydCBpcyB0aGUg
ZGVmYXVsdCBwb3J0IGZvciB0aGUgcHJvdG9jb2wsIG5vbi16ZXJvIG90aGVyd2lzZS4KIC0gKHVu
c2lnbmVkIHNob3J0KXBvcnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CShyZXZpc2lvbiA4MDgwNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCiAjaW1wb3J0
ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlcklu
dGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVGV4dEl0ZXJhdG9yLmgiCkBA
IC02ODcsNiArNjg4LDEwIEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1l
TmEKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIFdlYktpdEluaXRpYWxpemVEYXRhYmFz
ZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAg
ICAgIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgICAg
ICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpOwogICAg
ICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVzTWV0aG9kKCk7CiAgICAgICAgIApJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
ODA4MDQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3NiBA
QAorMjAxMS0wMy0xMCAgQW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorICAgICAgICBBZGQgV2ViS2l0MSBBUEkg
dG8gdmlldyBhbmQgZGVsZXRlIGxvY2FsIHN0b3JhZ2UKKworICAgICAgICBBZGRlZCB0ZXN0cyB0
aGF0IHdyaXRlIHRvIExvY2FsU3RvcmFnZSwgZGVsZXRlIG9uZSBvcmlnaW4sIGdldCBsaXN0IG9m
IG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlLCBkZWxldGUgYWxsIG9yaWdpbnMuCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayk6CisgICAgICAgIChvYnNlcnZlU3Rv
cmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlQWxsTG9j
YWxTdG9yYWdlQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lu
Q2FsbGJhY2spOgorICAgICAgICAob3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjayk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbTogQWRkZWQuCisgICAgICAgICgt
W1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAoLVtTdG9yYWdlVHJhY2tl
ckRlbGVnYXRlIGxvZ05vdGlmaWNhdGlvbnM6Y29udHJvbGxlcjpdKToKKyAgICAgICAgKC1bU3Rv
cmFnZVRyYWNrZXJEZWxlZ2F0ZSBvcmlnaW5Nb2RpZmllZDpdKToKKyAgICAgICAgKC1bU3RvcmFn
ZVRyYWNrZXJEZWxlZ2F0ZSBkZWFsbG9jXSk6CisgICAgICAgICgtW1N0b3JhZ2VUcmFja2VyRGVs
ZWdhdGUgc2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZTpdKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChvYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKHN5bmNMb2NhbFN0b3Jh
Z2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVy
R3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxT
dG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3Jh
Z2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbToKKyAgICAgICAgKHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMpOgor
ICAgICAgICAoYWxsb2NhdGVHbG9iYWxDb250cm9sbGVycyk6CisgICAgICAgIChyZWxlYXNlR2xv
YmFsQ29udHJvbGxlcnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZU1hYy5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJv
bGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9y
YWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNr
ZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVM
b2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisKIDIwMTEt
MDMtMTAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIElnbm9yZSBl
cnJvcnMgZnJvbSBmaWxlcyBiZWluZyBoZWxkIG9wZW4gd2hlbiBjcmVhdGluZyBhIHRlc3QgcmVz
dWx0IGFyY2hpdmUKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDgwODA0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDYwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQWxsRGF0YWJhc2VzQ2FsbGIKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHN5bmNM
b2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBjb250
cm9sbGVyLT5zeW5jTG9jYWxTdG9yYWdlKCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG9ic2VydmVTdG9yYWdlVHJh
Y2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIHVuc2lnbmVkIG51bU5vdGlmaWNhdGlvbnMgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworCisgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPm9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnMobnVtTm90aWZpY2F0aW9ucyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRlbGV0ZUFsbExvY2Fs
U3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbih1cmwuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZUNh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gY29udHJvbGxlci0+
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVm
IGNsZWFyQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCkBAIC0yMTYzLDYg
KzIyMTcsMTMgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAg
ICAgICB7ICJhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsIGFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0U2Nyb2xsYmFyUG9s
aWN5Iiwgc2V0U2Nyb2xsYmFyUG9saWN5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYXV0
aGVudGljYXRlU2Vzc2lvbiIsIGF1dGhlbnRpY2F0ZVNlc3Npb25DYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCBkZWxldGVBbGxMb2NhbFN0b3JhZ2VD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzeW5jTG9jYWxTdG9yYWdlIiwgc3luY0xvY2Fs
U3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sICAgICAgICAgICAgICAgIAorICAgICAgICB7ICJvYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zIiwgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90
aWZpY2F0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sICAgICAgICAKKyAgICAgICAgeyAiZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luIiwgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICAgICAgeyAib3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UiLCBvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnMiLCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3luY0xvY2FsU3RvcmFnZSIsIHN5bmNMb2Nh
bFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRTaG91bGRQYWludEJyb2tl
bkltYWdlIiwgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODA4MDQpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4
LDEyIEBAIHB1YmxpYzoKIAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0
Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkg
Y29uc3Q7CiAKKyAgICBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4
dFJlZik7CisgICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKKyAg
ICB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVy
KTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKwogICAgIHZvaWQgc2V0U2hvdWxkUGFp
bnRCcm9rZW5JbWFnZShib29sKTsKICAgICBib29sIHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7IH0KIApJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaAkocmV2aXNpb24gMCkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCitjbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKKworQGludGVyZmFjZSBT
dG9yYWdlVHJhY2tlckRlbGVnYXRlIDogTlNPYmplY3QgeworICAgIHVuc2lnbmVkIG51bWJlck9m
Tm90aWZpY2F0aW9uc1RvTG9nOworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
VG9Ob3RpZnlEb25lOworfQorCistICh2b2lkKWxvZ05vdGlmaWNhdGlvbnM6KHVuc2lnbmVkKW51
bWJlciBjb250cm9sbGVyOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcjsKKy0gKHZv
aWQpb3JpZ2luTW9kaWZpZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOworLSAodm9p
ZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJv
bGxlcjsKKworQGVuZApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJE
ZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJh
Y2tlckRlbGVnYXRlLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvU3Rv
cmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKKworI2ltcG9ydCAiTGF5
b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgPFdlYktpdC9XZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaD4KKwor
QGltcGxlbWVudGF0aW9uIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUKKworLSAoaWQpaW5pdAorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihvcmlnaW5Nb2RpZmllZDopIG5hbWU6V2ViU3Rv
cmFnZURpZE1vZGlmeU9yaWdpbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWxvZ05vdGlmaWNhdGlvbnM6KHVuc2lnbmVkKW51bWJlciBj
b250cm9sbGVyOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIGNvbnRy
b2xsZXJUb05vdGlmeURvbmUgPSBjb250cm9sbGVyOworCisgICAgbnVtYmVyT2ZOb3RpZmljYXRp
b25zVG9Mb2cgPSBudW1iZXI7Cit9CisKKy0gKHZvaWQpb3JpZ2luTW9kaWZpZWQ6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFudW1iZXJPZk5vdGlmaWNhdGlvbnNU
b0xvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbnVtYmVyT2ZOb3RpZmljYXRpb25zVG9Mb2ct
LTsKKyAgICAKKyAgICBpZiAobnVtYmVyT2ZOb3RpZmljYXRpb25zVG9Mb2cgPT0gMCAmJiBjb250
cm9sbGVyVG9Ob3RpZnlEb25lKSB7CisgICAgICAgIE5TQXJyYXkgKm9yaWdpbnMgPSBbW1dlYlN0
b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmlnaW5zXTsKKyAgICAgICAg
Zm9yIChXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luIGluIG9yaWdpbnMpCisgICAgICAgICAgICBw
cmludGYoIk9yaWdpbiBpZGVudGlmaWVyOiAnJXMnXG4iLCBbW29yaWdpbiBkYXRhYmFzZUlkZW50
aWZpZXJdIFVURjhTdHJpbmddKTsKKyAgICAgICAgCisgICAgICAgIGNvbnRyb2xsZXJUb05vdGlm
eURvbmUtPm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2Vs
ZiBuYW1lOldlYlN0b3JhZ2VEaWRNb2RpZnlPcmlnaW5Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07
CisgICAgCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldENvbnRyb2xsZXJU
b05vdGlmeURvbmU6KExheW91dFRlc3RDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgY29u
dHJvbGxlclRvTm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7Cit9CisKKworQGVuZApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDgwNCkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDggQEAKIAkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyTWFjLm1tICovOyB9OwogCQkzNzEzRURFMjExNUJFMTkzMDA3MDU3MjAgLyog
Q29sb3JCaXRzLUEucG5nIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzEzRURERjExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5n
ICovOyB9OwogCQkzNzEzRURFMzExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiBpbiBD
b3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VE
RTAxMTVCRTE2RjAwNzA1NzIwIC8qIENvbG9yQml0cy50dGYgKi87IH07CisJCTNBNTYyNkNCMTMx
Q0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0E1NjI2QzExMzFDOEIxNzAwMkJFNkQ5
IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi87IH07CisJCTNBNTYyNkNDMTMxQ0EwMzYw
MDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQTU2MjZDMDEzMUM4QjE3MDAyQkU2RDkgLyogU3Rv
cmFnZVRyYWNrZXJEZWxlZ2F0ZS5oICovOyB9OwogCQk0NDA1OTA3MTEyNjg0NTM4MDBDRkQ0OEQg
LyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQwNTkwNzAxMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hp
dmVEdW1wU3VwcG9ydE1hYy5tbSAqLzsgfTsKIAkJNDQzNzczMEUxMjVDQkMzNjAwQUFFMDJDIC8q
IFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NEE5OTc4MzBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJNDQzNzczMEYxMjVDQkM0RDAwQUFFMDJDIC8qIFdlYkFy
Y2hpdmVEdW1wU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRBOTk3ODIwRkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9y
dC5oICovOyB9OwpAQCAtMjMwLDYgKzIzMiw4IEBACiAJCTM3NUYwOTc3MERBQzNDQjYwMEM4QjRF
NSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVy
NzAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI3MDAudHRmOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3ODBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGY7IHBh
dGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzc1RjA5NzkwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNo
ZXI5MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBwYXRoID0gZm9udHMv
V2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTNBNTYyNkMwMTMxQzhCMTcwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0E1NjI2QzExMzFDOEIxNzAwMkJFNkQ5IC8q
IFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NDA1OTA3MDEyNjg0NTM4MDBDRkQ0OEQgLyogV2ViQXJjaGl2ZUR1bXBTdXBw
b3J0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViQXJj
aGl2ZUR1bXBTdXBwb3J0TWFjLm1tOyBwYXRoID0gbWFjL1dlYkFyY2hpdmVEdW1wU3VwcG9ydE1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRBOTk3ODIwRkNERTg2NDAwNTgw
RjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaDsgcGF0aCA9IGNmL1dlYkFyY2hpdmVEdW1w
U3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEE5OTc4MzBGQ0RFODY0
MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHA7IHBhdGggPSBjZi9X
ZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDYwLDYgKzQ2NCw4IEBACiAJCQkJQkNBMThCNUUwQzlCMDhDMjAwMTE0MzY5IC8qIFJlc291cmNl
TG9hZERlbGVnYXRlLm1tICovLAogCQkJCUJDQTE4QjVGMEM5QjA4QzIwMDExNDM2OSAvKiBVSURl
bGVnYXRlLmggKi8sCiAJCQkJQkNBMThCNjAwQzlCMDhDMjAwMTE0MzY5IC8qIFVJRGVsZWdhdGUu
bW0gKi8sCisJCQkJM0E1NjI2QzAxMzFDOEIxNzAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVs
ZWdhdGUuaCAqLywKKwkJCQkzQTU2MjZDMTEzMUM4QjE3MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNr
ZXJEZWxlZ2F0ZS5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gRGVsZWdhdGVzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYyMCw2ICs2MjYsNyBAQAogCQkJCTUxODVGNkIzMTA3MTRF
MTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjc4
MTY3MTFBRjMxQzMwMDdFMUJDMiAvKiBNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjlDRkJBMTAxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQTU2MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyog
U3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC04MDksNiArODE2LDcg
QEAKIAkJCQlFMUI3ODE2NTExQUYzMUI3MDA3RTFCQzIgLyogTW9ja0dlb2xvY2F0aW9uUHJvdmlk
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMkUxMjI3
M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdh
dGUubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgwODA0KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDEyIEBAIExheW91dFRlc3RDb250cm9sbGVy
OjpMYXlvdXRUZXN0Q29udHJvbGwKICAgICBiaW5kTWV0aG9kKCJzZXRQcml2YXRlQnJvd3NpbmdF
bmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
KTsKICAgICBiaW5kTWV0aG9kKCJzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwog
ICAgIGJpbmRNZXRob2QoInN0b3JlV2ViU2NyaXB0T2JqZWN0IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzdG9yZVdlYlNjcmlwdE9iamVjdCk7Ci0KKyAgICBiaW5kTWV0aG9kKCJkZWxldGVBbGxM
b2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSk7CisgICAgYmluZE1ldGhvZCgib3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKTsKKyAgICBiaW5kTWV0aG9kKCJk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik7CisgICAgYmluZE1ldGhvZCgib2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucyk7CisgICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFn
ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk7CisgICAgCiAgICAg
Ly8gVGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3duIG1ldGhvZCBp
cyBpbnZva2VkLgogICAgIGJpbmRGYWxsYmFja01ldGhvZCgmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmZhbGxiYWNrTWV0aG9kKTsKIApAQCAtMTYwMiwzICsxNjA3LDMwIEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hlbGwt
PndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRz
WzBdLnRvRG91YmxlKCkpOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90
IEltcGxlbWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKKwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZp
c2lvbiA4MDgwNCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw2ICszMzcsMTMgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAKKyAgICAvLyBMb2NhbFN0b3JhZ2Ugb3JpZ2luLXJlbGF0ZWQKKyAg
ICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JP
cmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgb2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKwogcHVibGljOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgbWV0
aG9kcyBhcmUgbm90IGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KICAgICB2b2lkIHNldFdvcmtRdWV1
ZUZyb3plbihib29sIGZyb3plbikgeyBtX3dvcmtRdWV1ZS5zZXRGcm96ZW4oZnJvemVuKTsgfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwCShyZXZpc2lvbiA4MDgwNCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MSw2ICs2
NTEsMzEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdQogICAgIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9xdW90YShvcmlnaW4sIHF1b3Rh
KTsKIH0KIAorSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoSlNDb250ZXh0UmVmKQoreworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7
CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50
aWZpZXIpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25l
ZCBudW1iZXIpCit7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0
aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVmKQogewogICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0JKHJldmlzaW9uIDgwODA0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0
ICJQaXhlbER1bXBTdXBwb3J0LmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgogI2ltcG9y
dCAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdh
dGUuaCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkFyY2hpdmVEdW1wU3Vw
cG9ydC5oIgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCkBAIC03Nyw2ICs3OCw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJl
ZmVyZW5jZUtleXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUmVzb3VyY2VMb2FkRGVs
ZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XZWJUeXBlc0ludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmll
d1ByaXZhdGUuaD4KICNpbXBvcnQgPGdldG9wdC5oPgpAQCAtMTM0LDYgKzEzNiw3IEBAIHN0YXRp
YyBFZGl0aW5nRGVsZWdhdGUgKmVkaXRpbmdEZWxlZ2F0ZTsKIHN0YXRpYyBSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZSAqcmVzb3VyY2VMb2FkRGVsZWdhdGU7CiBzdGF0aWMgSGlzdG9yeURlbGVnYXRlICpo
aXN0b3J5RGVsZWdhdGU7CiBQb2xpY3lEZWxlZ2F0ZSAqcG9saWN5RGVsZWdhdGU7CitTdG9yYWdl
VHJhY2tlckRlbGVnYXRlICpzdG9yYWdlRGVsZWdhdGU7CiAKIHN0YXRpYyBpbnQgZHVtcFBpeGVs
czsKIHN0YXRpYyBpbnQgdGhyZWFkZWQ7CkBAIC00MTQsNiArNDE3LDcgQEAgc3RhdGljIHZvaWQg
cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbAogCiAgICAgTlNTdHJpbmcgKnBhdGggPSBsaWJy
YXJ5UGF0aEZvckR1bXBSZW5kZXJUcmVlKCk7CiAgICAgW2RlZmF1bHRzIHNldE9iamVjdDpbcGF0
aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJEYXRhYmFzZXMiXSBmb3JLZXk6V2Vi
RGF0YWJhc2VEaXJlY3RvcnlEZWZhdWx0c0tleV07CisgICAgW2RlZmF1bHRzIHNldE9iamVjdDpb
cGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJMb2NhbFN0b3JhZ2UiXSBmb3JL
ZXk6V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKICAgICBbZGVmYXVsdHMgc2V0T2Jq
ZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxvY2FsQ2FjaGUiXSBm
b3JLZXk6V2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5XTsKIAogICAgIFdlYlByZWZlcmVuY2Vz
ICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKQEAg
LTU0NSw2ICs1NDksNyBAQCBzdGF0aWMgdm9pZCBhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKCkK
ICAgICByZXNvdXJjZUxvYWREZWxlZ2F0ZSA9IFtbUmVzb3VyY2VMb2FkRGVsZWdhdGUgYWxsb2Nd
IGluaXRdOwogICAgIHBvbGljeURlbGVnYXRlID0gW1tQb2xpY3lEZWxlZ2F0ZSBhbGxvY10gaW5p
dF07CiAgICAgaGlzdG9yeURlbGVnYXRlID0gW1tIaXN0b3J5RGVsZWdhdGUgYWxsb2NdIGluaXRd
OworICAgIHN0b3JhZ2VEZWxlZ2F0ZSA9IFtbU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdF07CiB9CiAKIC8vIE9iakMrKyBkb2Vucyd0IHNlZW0gdG8gbGV0IG1lIHBhc3MgTlNPYmpl
Y3QqJiBzYWRseS4KQEAgLTU2Miw2ICs1NjcsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlR2xvYmFs
Q29udHJvbGxlcnMoKQogICAgIHJlbGVhc2VBbmRaZXJvKCZyZXNvdXJjZUxvYWREZWxlZ2F0ZSk7
CiAgICAgcmVsZWFzZUFuZFplcm8oJnVpRGVsZWdhdGUpOwogICAgIHJlbGVhc2VBbmRaZXJvKCZw
b2xpY3lEZWxlZ2F0ZSk7CisgICAgcmVsZWFzZUFuZFplcm8oJnN0b3JhZ2VEZWxlZ2F0ZSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhp
bnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlTWFjLmgJKHJldmlzaW9uIDgwODA0KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKIEBjbGFzcyBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mbzsKIEBjbGFzcyBO
YXZpZ2F0aW9uQ29udHJvbGxlcjsKIEBjbGFzcyBQb2xpY3lEZWxlZ2F0ZTsKK0BjbGFzcyBTdG9y
YWdlVHJhY2tlckRlbGVnYXRlOwogQGNsYXNzIFdlYkZyYW1lOwogQGNsYXNzIFdlYlNjcmlwdFdv
cmxkOwogQGNsYXNzIFdlYlZpZXc7CkBAIC00Miw2ICs0Myw3IEBACiBjbGFzcyBEdW1wUmVuZGVy
VHJlZURyYWdnaW5nSW5mbzsKIGNsYXNzIE5hdmlnYXRpb25Db250cm9sbGVyOwogY2xhc3MgUG9s
aWN5RGVsZWdhdGU7CitjbGFzcyBTdG9yYWdlVHJhY2tlckRlbGVnYXRlOwogY2xhc3MgV2ViRnJh
bWU7CiBjbGFzcyBXZWJTY3JpcHRXb3JsZDsKIGNsYXNzIFdlYlZpZXc7CkBAIC01NCw2ICs1Niw3
IEBAIGV4dGVybiBXZWJGcmFtZSogdG9wTG9hZGluZ0ZyYW1lOwogZXh0ZXJuIER1bXBSZW5kZXJU
cmVlRHJhZ2dpbmdJbmZvICpkcmFnZ2luZ0luZm87CiBleHRlcm4gTmF2aWdhdGlvbkNvbnRyb2xs
ZXIqIGdOYXZpZ2F0aW9uQ29udHJvbGxlcjsKIGV4dGVybiBQb2xpY3lEZWxlZ2F0ZSogcG9saWN5
RGVsZWdhdGU7CitleHRlcm4gU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSogc3RvcmFnZURlbGVnYXRl
OwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgbWF4Vmlld0hlaWdodDsKIGV4dGVybiBjb25zdCB1
bnNpZ25lZCBtYXhWaWV3V2lkdGg7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5
b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA4MDgwNCkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRWRpdGluZ0RlbGVnYXRlLmgiCiAj
aW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIgogI2ltcG9ydCAiUG9saWN5RGVsZWdh
dGUuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKICNpbXBvcnQgIlVJRGVs
ZWdhdGUuaCIKICNpbXBvcnQgIldvcmtRdWV1ZS5oIgogI2ltcG9ydCAiV29ya1F1ZXVlSXRlbS5o
IgpAQCAtNjYsNiArNjcsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYlF1b3RhTWFuYWdlci5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYlNjcmlwdFdvcmxkLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2Vj
dXJpdHlPcmlnaW5Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVHlwZXNJbnRlcm5hbC5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgpAQCAt
MTMzLDExICsxMzUsNTMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBs
aQogICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIGRlbGV0ZUFsbEFwcGxpY2F0aW9uQ2FjaGVzXTsK
IH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7Cisg
ICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gc3luY0xvY2Fs
U3RvcmFnZV07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgIFtzdG9yYWdlRGVs
ZWdhdGUgbG9nTm90aWZpY2F0aW9uczpudW1iZXIgY29udHJvbGxlcjp0aGlzXTsKK30KKwogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewogICAgIFtbV2Vi
RGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcl0gZGVsZXRlQWxsRGF0YWJh
c2VzXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9y
YWdlKCkKK3sKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2Vy
XSBkZWxldGVBbGxPcmlnaW5zXTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAg
V2ViU3RvcmFnZU1hbmFnZXIgKnN0b3JhZ2UgPSBbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2Vi
U3RvcmFnZU1hbmFnZXJdOworCisgICAgTlNBcnJheSAqb3JpZ2lucyA9IFtzdG9yYWdlIG9yaWdp
bnNdOworICAgIE5TSW50ZWdlciBjb3VudCA9IFtvcmlnaW5zIGNvdW50XTsKKworICAgIEpTVmFs
dWVSZWYganNPcmlnaW5zQXJyYXlbY291bnRdOworICAgIGZvciAoTlNJbnRlZ2VyIGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICBOU1N0cmluZyAqb3JpZ2luID0gW1tvcmlnaW5zIG9i
amVjdEF0SW5kZXg6aV0gZGF0YWJhc2VJZGVudGlmaWVyXTsKKyAgICAgICAgSlNTdHJpbmdSZWYg
c3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW9yaWdpbik7Cisg
ICAgICAgIGpzT3JpZ2luc0FycmF5W2ldID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgc3Ry
KTsKKyAgICB9CisKKyAgICBKU09iamVjdFJlZiBqc0FycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtl
QXJyYXkoY29udGV4dCwgY291bnQsIGpzT3JpZ2luc0FycmF5LCBOVUxMKTsKKyAgICByZXR1cm4g
anNBcnJheU9iamVjdDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIFVSTCkpOworICAgIAorICAgIFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBb
W1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzooTlNTdHJpbmcgKil1cmxDRi5nZXQoKV1dOworCisgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBz
aGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gZGVsZXRlT3JpZ2luOm9yaWdpbl07Cit9CisKIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKIHsKICAgICBXZWJC
YWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YXJkTGlzdCA9IFtbbWFpbkZyYW1lIHdlYlZpZXddIGJh
Y2tGb3J3YXJkTGlzdF07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9M
YXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gODA4MDQpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQyLDUgKzg0MiwzMCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVt
VGltCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1UaW1lckludGVydmFs
KG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KK30KKwogY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om1heFZpZXdXaWR0aCA9IDgwMDsKIGNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250
cm9sbGVyOjptYXhWaWV3SGVpZ2h0ID0gNjAwOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gODA4MDQpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1Myw2ICsyNTMsMTIgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgYWRkVXNl
clN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSk7CiAKICAgICB2b2lkIHNldE1p
bmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7CisgICAgCisgICAgdm9pZCBvcmlnaW5zV2l0aExv
Y2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7CisgICAgdm9p
ZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRp
Zmllcik7CisgICAgdm9pZCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2ln
bmVkIG51bWJlcik7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CiAKIHByaXZhdGUgc2xv
dHM6CiAgICAgdm9pZCBwcm9jZXNzV29yaygpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiA4MDgw
NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgsNiArMTQyOCwzMiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTZXJpYWxpemVICiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2
ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRl
QWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitKU1Zh
bHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0Nv
bnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCiB7
CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwpAQCAtMTQ0MCwzICsxNDY2LDUgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbQogCiAgICAgdmlld1ByaXZhdGUt
PnNldE1pbmltdW1UaW1lckludGVydmFsKG1pbmltdW1UaW1lckludGVydmFsKTsKIH0KKworCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxl
cld4LmNwcAkocmV2aXNpb24gODA4MDQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU4LDQgKzU1OCwzMyBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVICiB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIHsK
IAogfQotICAgIAorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdl
KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJl
cikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RD
b250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDgwNCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEx
LTAzLTEwICBBbnRvbiBEJ0F1cmlhICA8YWRhdXJpYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktpdDEgQVBJIHRvIHZp
ZXcgYW5kIGRlbGV0ZSBsb2NhbCBzdG9yYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXI6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFy
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0yLWNyZWF0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3Rv
cmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVs
ZXRlLWFsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFs
bC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFj
a2VyLTUtZGVsZXRlLW9uZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUt
ZGVsZXRlLW9uZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xMCAgQWxpY2UgQm94aGFsbCAgPGFi
b3hoYWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXpr
b3YuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA4MDgwNCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYg
KzE1MSwxMCBAQCBXT05URklYIFNLSVAgOiBmYXN0L3dtbCA9IEZBSUwKIC8vIG1vc3QgbGlrZWx5
IHRoZXNlIHRlc3RzIHdpbGwgYWx3YXlzIGJlIEpTQyBzcGVjaWZpYy4KIFdPTlRGSVggU0tJUCA6
IGZhc3QvcHJvZmlsZXIgPSBGQUlMIFRJTUVPVVQKIAorLy8gU3RvcmFnZVRyYWNrZXIgaXNuJ3Qg
dXNlZCBieSBDaHJvbWl1bSBhbmQgbm90IGFsbCByZXF1aXNpdGUgcGxhdGZvcm0gY29kZQorLy8g
aXMgaW1wbGVtZW50ZWQuCitXT05URklYIFNLSVAgOiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyID0gUEFTUyBUSU1FT1VUIEZBSUwKKwogLy8gV2UgdXNlIHdv
cmtlcl91aXRlc3RzIHRvIHJ1biB3b3JrZXJzIHRlc3RzLiBEb24ndCBydW4gdGhlbSBpbiB0ZXN0
X3NoZWxsLgogV09OVEZJWCBTS0lQIDogZmFzdC93b3JrZXJzID0gUEFTUyBUSU1FT1VUIEZBSUwK
IFdPTlRGSVggU0tJUCA6IGZhc3QvZmlsZXMvd29ya2VycyA9IFBBU1MgVElNRU9VVCBGQUlMCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0xLXByZXBhcmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitQcmVwYXJlIGZvciBTdG9yYWdlVHJhY2tlciB0ZXN0cyBieSBl
bnN1cmluZyB0aGF0IGV2ZXJ5IG9yaWdpbiB3aXRoIGxvY2FsIHN0b3JhZ2UgaXMgZGVsZXRlZC4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1RoaXMgdGVzdCBzaG91bGQgaGF2ZSBu
byB2aXNpYmxlIG91dHB1dCBvbiBzdWNjZXNzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFy
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTEtcHJlcGFyZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMS1wcmVwYXJlLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiUHJlcGFyZSBmb3IgU3RvcmFnZVRyYWNrZXIgdGVzdHMgYnkgZW5z
dXJpbmcgdGhhdCBldmVyeSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlIGlzIGRlbGV0ZWQuIik7
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICgh
d2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2Ug
RE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBkZWJ1
ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0cHV0IG9uIHN1Y2Nlc3MuIik7
CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2Uo
KS5sZW5ndGggPiAwKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoMSk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmlzaFRl
c3QoKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMCBAQAorT3JpZ2luIGlkZW50aWZpZXI6ICdmaWxlX18wJworU3Rv
cmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgb3JpZ2luLiBT
aG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1sLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2Nh
bHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9z
dG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItMi1jcmVhdGUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTItY3JlYXRlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiU3RvcmFnZVRyYWNrZXIgdGVzdCAtIHdyaXRlIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMg
b3JpZ2luLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIG9yaWdpbnMtcHJlcGFyZS5odG1sLiIpOwor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAoIXdp
bmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgibG9jYWxTdG9yYWdlIERP
RVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGxh
eW91dFRlc3RDb250cm9sbGVyLm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkubGVuZ3RoID4gMCkg
eworICAgICAgICAvLyBBbiBvcmlnaW4gYWxyZWFkeSBleGlzdHMgc28gd2UgY2FuIGV4aXQuCisg
ICAgICAgIHRlc3RGYWlsZWQoIkFuIG9yaWdpbiBhbHJlYWR5IGV4aXN0ZWQgd2l0aCBsb2NhbCBz
dG9yYWdlLiIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc3luY0xvY2FsU3RvcmFn
ZSgpOworICAgICAgICAKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNvbWVEYXRhID0gJ3dyaXRlbWUn
OworICAgICAgICAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcidzIG5vdGlmeURvbmUgd2lsbCBiZSBj
YWxsZWQgYWZ0ZXIgdGhlIG9yaWdpbiBjaGFuZ2Ugbm90aWZpY2F0aW9uIGNvbWVzIGluLgorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRp
b25zKDEpOworICAgIH0KK30KKwordGVzdCgpOwkKKword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci0zLWRlbGV0ZS1hbGwtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IEFQSSB0byB2aWV3IG9y
aWdpbnMgdGhhdCBoYXZlIGxvY2FsIHN0b3JhZ2UgYW5kIHRvIGRlbGV0ZSBsb2NhbCBzdG9yYWdl
IGJ5IG9yaWdpbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgbGF5b3V0
VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIGlzICJm
aWxlX18wIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRy
YWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVsZXRlLWFsbC5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2NhbCBzdG9yYWdlIGFu
ZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uIik7CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgIAorZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFn
ZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5v
cmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJsYXlvdXRUZXN0Q29udHJvbGxlci5vcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZSgpLnRvU3RyaW5nKCkiLCAiZmlsZV9fMCIpOworICAgICAgICAvLyBXZSdyZSBqdXN0IGdvaW5n
IHRvIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb3JpZ2luLCBzbyB3ZSdsbCBnZXQgb25lIG9yaWdpbiBj
aGFuZ2Ugbm90aWZpY2F0aW9uLgorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vYnNlcnZl
U3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKDEpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHRlc3RGYWlsZWQoIlJhbiB3
aXRoIG5vIG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlIik7CisgICAgfQorCisgICAgLy8gQXQg
dGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2Nh
bCBzdG9yYWdlLgorfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3Jh
Z2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3Jh
Z2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTEgQEAKK09yaWdpbiBpZGVudGlmaWVyOiAnZmlsZV9fMCcKK1N0b3Jh
Z2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIG9yaWdpbi4gU2hv
dWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1kZWxldGUtYWxsLmh0bWwuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUaGlzIHRlc3Qgc2hvdWxkIGhhdmUgbm8g
dmlzaWJsZSBvdXRwdXQgb24gc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3Jh
Z2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTQtY3JlYXRlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci00LWNyZWF0ZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlN0b3JhZ2VUcmFja2VyIHRlc3QgLSB3cml0ZSBsb2NhbCBzdG9yYWdlIGZv
ciB0aGlzIG9yaWdpbi4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdG9yYWdlLXRyYWNrZXItMy1k
ZWxldGUtYWxsLmh0bWwuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorZnVuY3Rpb24g
ZmluaXNoVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3QoKQoreworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICB0ZXN0RmFp
bGVkKCJsb2NhbFN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBkZWJ1ZygiVGhpcyB0ZXN0IHNob3VsZCBoYXZlIG5vIHZpc2libGUgb3V0
cHV0IG9uIHN1Y2Nlc3MuIik7CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2lu
c1dpdGhMb2NhbFN0b3JhZ2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIC8vIEFuIG9yaWdpbiBh
bHJlYWR5IGV4aXN0cyBzbyB3ZSBjYW4gZXhpdC4KKyAgICAgICAgdGVzdEZhaWxlZCgiQW4gb3Jp
Z2luIGFscmVhZHkgZXhpc3RlZCB3aXRoIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgICAgIGxvY2FsU3RvcmFn
ZS5zb21lT3RoZXJEYXRhID0gJ3dyaXRlbWVNb3JlJzsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygxKTsKKyAgICB9Cit9CisK
K3Rlc3QoKTsJCisKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9y
YWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0
b3JhZ2UtdHJhY2tlci01LWRlbGV0ZS1vbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tl
ci9zdG9yYWdlLXRyYWNrZXItNS1kZWxldGUtb25lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMCBAQAorVGVzdCBBUEkgdG8gdmlldyBvcmlnaW5zIHRoYXQgaGF2ZSBsb2Nh
bCBzdG9yYWdlIGFuZCB0byBkZWxldGUgbG9jYWwgc3RvcmFnZSBieSBvcmlnaW4uCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGxheW91dFRlc3RDb250cm9sbGVyLm9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKCkudG9TdHJpbmcoKSBpcyAiZmlsZV9fMCIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2Ut
dHJhY2tlci01LWRlbGV0ZS1vbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tl
ci01LWRlbGV0ZS1vbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTUt
ZGVsZXRlLW9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQVBJIHRvIHZp
ZXcgb3JpZ2lucyB0aGF0IGhhdmUgbG9jYWwgc3RvcmFnZSBhbmQgdG8gZGVsZXRlIGxvY2FsIHN0
b3JhZ2UgYnkgb3JpZ2luLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9u
IGZpbmlzaFRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgibG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2UoKS5sZW5ndGggPiAwKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygibGF5b3V0
VGVzdENvbnRyb2xsZXIub3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKS50b1N0cmluZygpIiwgImZp
bGVfXzAiKTsKKyAgICAgICAgLy8gV2UncmUganVzdCBnb2luZyB0byBkZWxldGUgdGhlIGV4aXN0
aW5nIG9yaWdpbiwgc28gd2UnbGwgZ2V0IG9uZSBvcmlnaW4gY2hhbmdlIG5vdGlmaWNhdGlvbi4K
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucygxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UncmUgZ3VhcmFudGVlZCB0
byBoYXZlIG9uZSBvcmlnaW4gd2l0aCBsb2NhbCBzdG9yYWdlLgorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oImZpbGU6Ly8iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSYW4gd2l0aCBubyBvcmlnaW5zIHdpdGggbG9j
YWwgc3RvcmFnZS4iKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0KKworfQorCit0ZXN0KCk7CQorCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKK2lzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85548</attachid>
            <date>2011-03-11 15:47:41 -0800</date>
            <delta_ts>2011-03-11 21:38:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110311154740.patch</filename>
            <type>text/plain</type>
            <size>2083</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDgwODk2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDMtMTEgIEFudG9uIEQnQXVyaWEgIDxh
ZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRpbmcgU3RvcmFnZVRyYWNrZXIgdGVzdHMgdG8gc2tpcCBsaXN0cyBvZiBw
bGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4NzgKKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1NraXBwZWQ6CisKIDIwMTAtMy0xMSAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDgwODkzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw2ICsyNjEsOSBAQCBmYXN0L2V2
ZW50cy90b3VjaAogIyBJbmRleGVkREIgaXMgbm90IHlldCBlbmFibGVkLgogc3RvcmFnZS9pbmRl
eGVkZGIKIAorIyBTdG9yYWdlVHJhY2tlciBpcyBub3QgZW5hYmxlZC4KK3N0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIKKwogIyBTcGVlY2ggaW5wdXQgaXMgbm90
IHlldCBlbmFibGVkLgogZmFzdC9zcGVlY2gKIApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CShyZXZpc2lvbiA4MDg5MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDkgQEAgcGx1Z2lucy9jbGlja2luZy1taXNzaW5nLXBs
dWdpbi1maXJlcy1kZQogIyBJbmRleGVkREIgaXMgbm90IHlldCBlbmFibGVkLgogc3RvcmFnZS9p
bmRleGVkZGIKIAorIyBTdG9yYWdlVHJhY2tlciBpcyBub3QgZW5hYmxlZC4KK3N0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIKKwogIyAtLS0tLSBObyBVc2VyIFNj
cmlwdHMKIHVzZXJzY3JpcHRzCiBwbHVnaW5zL3BsdWdpbi1kb2N1bWVudC1sb2FkLXByZXZlbnRl
ZC11c2Vyc2NyaXB0Lmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lv
biA4MDg5MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNv
cHkpCkBAIC05NzksNiArOTc5LDkgQEAgZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3Rl
Lmh0bWwKICMgSW5kZXhlZERCIGlzIG5vdCB5ZXQgZW5hYmxlZC4KIHN0b3JhZ2UvaW5kZXhlZGRi
CiAKKyMgU3RvcmFnZVRyYWNrZXIgaXMgbm90IGVuYWJsZWQuCitzdG9yYWdlL2RvbXN0b3JhZ2Uv
bG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyCisKICMgVGhpcyBwb3J0IGRvZXNuJ3Qgc3VwcG9y
dCBEZXZpY2VNb3Rpb24gb3IgRGV2aWNlT3JpZW50YXRpb24uCiBmYXN0L2RvbS9EZXZpY2VNb3Rp
b24KIGZhc3QvZG9tL0RldmljZU9yaWVudGF0aW9uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85564</attachid>
            <date>2011-03-11 20:16:31 -0800</date>
            <delta_ts>2011-03-11 20:44:24 -0800</delta_ts>
            <desc>[PATCH] protect m_client, always open tracker db on initialization, reorder lock taking</desc>
            <filename>locks_opendb.patch</filename>
            <type>text/plain</type>
            <size>8511</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwOTE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDMtMTEgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXhlZCBsb2NrLXRha2luZyBvcmRlciB0byBwcmV2ZW50IGRl
YWRsb2NrLCBhZGRlZCBsb2NrIGZvciBtX2NsaWVudCwKKyAgICAgICAgYWxsb3cgZm9yIGNyZWF0
aW9uIG9mIGVtcHR5IFN0b3JhZ2VUcmFja2VyIGRiIG9uIGluaXRpYWxpemF0aW9uLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbmNlbERlbGV0aW5nT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzZXRDbGllbnQpOgorICAgICAgICAqIHN0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuaDoKKwogMjAxMS0wMy0xMSAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29t
PgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEVyaWMgQ2FybHNzb24uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gODA5MTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsOCArODgsOSBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0
b3J5CiAgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2FmZUNvcHkoKTsK
IH0KIAotU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QK
K1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpCiB7CisgICAgQVNT
RVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKICAgICByZXR1cm4gU1FMaXRlRmlsZVN5
c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VEaXJlY3RvcnlQYXRo
LCAiU3RvcmFnZVRyYWNrZXIuZGIiKTsKIH0KIApAQCAtMTQzLDEwICsxNDQsMTAgQEAgdm9pZCBT
dG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZQogICAgIHsKICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CiAKLSAgICAgICAgb3BlblRyYWNr
ZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CiAg
ICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCisKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHByZXBhcmUgc3RhdGVtZW50LiIpOwpAQCAtMTU0LDcgKzE1NSw3IEBAIHZvaWQgU3RvcmFnZVRy
YWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGUKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aW50IHJlc3VsdDsKLQorICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CiAgICAgICAgICAgICB3aGlsZSAoKHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKQEAgLTE2OSw5ICsxNzAs
MTEgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZQogICAgIAogICAg
IGlmIChtX2NsaWVudCkgewogICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdp
blNldEd1YXJkKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0NsaWVudChtX2NsaWVudEd1YXJk
KTsKICAgICAgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5l
bmQoKTsKLSAgICAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmln
aW5TZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBmb3IgKE9yaWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbigqaXQpOwor
ICAgICAgICB9CiAgICAgfQogfQogICAgIApAQCAtMTgzLDggKzE4NiwyMCBAQCB2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIGZpbGVFeHQsICgiLmxvY2Fsc3RvcmFnZSIpKTsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IHVuc2lnbmVkLCBmaWxlRXh0TGVuZ3RoLCAoZmlsZUV4dC5sZW5ndGgo
KSkpOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHMgPSBsaXN0RGlyZWN0b3J5KG1fc3RvcmFn
ZURpcmVjdG9yeVBhdGgsIGZpbGVNYXRjaFBhdHRlcm4pOwotICAgIAorICAgIFZlY3RvcjxTdHJp
bmc+IHBhdGhzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0
YWJhc2VHdWFyZCk7CisgICAgICAgIHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3JhZ2VEaXJl
Y3RvcnlQYXRoLCBmaWxlTWF0Y2hQYXR0ZXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgYSBjb3B5
IG9mIG1fb3JpZ2luU2V0IHRvIGZpbmQgZXhwaXJlZCBlbnRyaWVzIGFuZCB0byBzY2hlZHVsZSB0
aGVpcgorICAgIC8vIGRlbGV0aW9ucyBmcm9tIGRpc2sgYW5kIGluIG1fb3JpZ2luU2V0LgorICAg
IE9yaWdpblNldCBvcmlnaW5TZXRDb3B5OworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CisgICAgICAgIG9yaWdpblNldENvcHkgPSBtX29y
aWdpblNldDsKKyAgICB9CisKICAgICAvLyBBZGQgbWlzc2luZyBTdG9yYWdlVHJhY2tlciByZWNv
cmRzLgogICAgIE9yaWdpblNldCBmb3VuZE9yaWdpbnM7CiAgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHBhdGhzLmVuZCgpOwpAQCAtMTkzLDcgKzIwOCw3IEBAIHZvaWQg
U3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHIKICAgICAgICAgaWYgKHBhdGguZW5k
c1dpdGgoZmlsZUV4dCwgdHJ1ZSkgJiYgcGF0aC5sZW5ndGgoKSA+IGZpbGVFeHRMZW5ndGgpIHsK
ICAgICAgICAgICAgIFN0cmluZyBmaWxlID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogICAgICAg
ICAgICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlLnN1YnN0cmluZygwLCBmaWxlLmxl
bmd0aCgpIC0gZmlsZUV4dExlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIW1fb3JpZ2luU2V0LmNv
bnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICBpZiAoIW9yaWdpblNldENv
cHkuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNN
YWluVGhyZWFkKCkpCiAgICAgICAgICAgICAgICAgICAgIHNldE9yaWdpbkRldGFpbHMob3JpZ2lu
SWRlbnRpZmllciwgcGF0aCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjA1LDggKzIyMCw4
IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHIKICAgICB9CiAKICAg
ICAvLyBEZWxldGUgc3RhbGUgU3RvcmFnZVRyYWNrZXIgcmVjb3Jkcy4KLSAgICBPcmlnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIHNldEVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOwotICAgIGZvciAoT3Jp
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCk7IGl0ICE9IHNl
dEVuZDsgKytpdCkgeworICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0gb3Jp
Z2luU2V0Q29weS5lbmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBvcmlnaW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9IHNldEVuZDsgKytpdCkgewogICAgICAgICBp
ZiAoIWZvdW5kT3JpZ2lucy5jb250YWlucygqaXQpKSB7CiAgICAgICAgICAgICBpZiAoaXNNYWlu
VGhyZWFkKCkpCiAgICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luKCppdCk7CkBAIC0yMzYsNyAr
MjUxLDcgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjbwogICAgICAg
ICBBU1NFUlQobV90aHJlYWQpOwogICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKHRhc2sp
OwogICAgIH0gZWxzZSAKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChzY2hlZHVsZVRhc2ssICh2
b2lkKil0YXNrKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChzY2hlZHVsZVRhc2ssIHN0YXRp
Y19jYXN0PHZvaWQqPih0YXNrKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnNjaGVkdWxl
VGFzayh2b2lkKiB0YXNrKQpAQCAtMjQ1LDcgKzI2MCw3IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6
OnNjaGVkdWxlVGFzayh2b2lkKiAKICAgICBBU1NFUlQoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIo
KS5tX3RocmVhZCk7CiAgICAgCiAgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkubV90
aHJlYWQpCi0gICAgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkubV90aHJlYWQtPnNjaGVk
dWxlVGFzaygoTG9jYWxTdG9yYWdlVGFzayopdGFzayk7CisgICAgICAgIFN0b3JhZ2VUcmFja2Vy
Ojp0cmFja2VyKCkubV90aHJlYWQtPnNjaGVkdWxlVGFzayhzdGF0aWNfY2FzdDxMb2NhbFN0b3Jh
Z2VUYXNrKj4odGFzaykpOwogfQogCiB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2lu
RGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VGaWxlKQpAQCAtMjc3LDggKzI5MiwxMCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5j
U2V0T3JpZ2luRGV0YWlsCiAgICAgICAgICAgICBtX29yaWdpblNldC5hZGQob3JpZ2luSWRlbnRp
Zmllcik7CiAgICAgfQogCi0gICAgaWYgKG1fY2xpZW50KQorICAgIGlmIChtX2NsaWVudCkgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrQ2xpZW50KG1fY2xpZW50R3VhcmQpOwogICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CisgICAg
fQogfQogCiB2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+ID4mIHJlc3VsdCkKQEAgLTM0MiwxMSArMzU5LDEzIEBAIHZvaWQgU3RvcmFnZVRy
YWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW4KICAgICBpbnQgcmVzdWx0OwogICAgIHdoaWxlICgo
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7CiAgICAgICAgIGlm
ICghY2FuRGVsZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KSk7Ci0gICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgaWYgKG1fY2xpZW50KSB7CisgICAg
ICAgICAgICBNdXRleExvY2tlciBsb2NrQ2xpZW50KG1fY2xpZW50R3VhcmQpOwogICAgICAgICAg
ICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAocmVzdWx0ICE9IFNRTFJl
c3VsdERvbmUpCkBAIC00NTQsOCArNDczLDEwIEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNE
ZWxldGVPcmlnaW4oY28KICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRh
YmFzZURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKICAgICB9CiAgICAgCi0gICAg
aWYgKG1fY2xpZW50KQorICAgIGlmIChtX2NsaWVudCkgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrQ2xpZW50KG1fY2xpZW50R3VhcmQpOwogICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRN
b2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CisgICAgfQogfQogICAgIAogdm9pZCBTdG9y
YWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdpbnMoKQpAQCAtNDg3LDE0ICs1MDgsMTUgQEAg
dm9pZCBTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaQogICAgIGlmICghbV9pc0Fj
dGl2ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9v
cmlnaW5TZXRHdWFyZCk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VH
dWFyZCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CiAg
ICAgaWYgKCFtX29yaWdpbnNCZWluZ0RlbGV0ZWQuaXNFbXB0eSgpKQogICAgICAgICBtX29yaWdp
bnNCZWluZ0RlbGV0ZWQucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOwogfQogCiB2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzZXRDbGllbnQoU3RvcmFnZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKIHsKKyAg
ICBNdXRleExvY2tlciBsb2NrQ2xpZW50KG1fY2xpZW50R3VhcmQpOwogICAgIG1fY2xpZW50ID0g
Y2xpZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5o
CShyZXZpc2lvbiA4MDkxNikKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOwogCi0gICAgU3Ry
aW5nIHRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdDsKKyAgICBTdHJpbmcgdHJhY2tlckRhdGFi
YXNlUGF0aCgpOwogICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9l
c05vdEV4aXN0KTsKIAogICAgIHZvaWQgc2V0U3RvcmFnZURpcmVjdG9yeVBhdGgoY29uc3QgU3Ry
aW5nJik7CkBAIC05MSwxNiArOTEsMTcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHNldElz
QWN0aXZlKGJvb2wpOwogCisgICAgLy8gR3VhcmQgZm9yIG1fZGF0YWJhc2UgYW5kIG1fc3RvcmFn
ZURpcmVjdG9yeVBhdGguCiAgICAgTXV0ZXggbV9kYXRhYmFzZUd1YXJkOwogICAgIFNRTGl0ZURh
dGFiYXNlIG1fZGF0YWJhc2U7Ci0KICAgICBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsK
IAorICAgIE11dGV4IG1fY2xpZW50R3VhcmQ7CiAgICAgU3RvcmFnZVRyYWNrZXJDbGllbnQqIG1f
Y2xpZW50OwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2luU2V0OwotCisgICAg
Ly8gR3VhcmQgZm9yIG1fb3JpZ2luU2V0IGFuZCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuCiAgICAg
TXV0ZXggbV9vcmlnaW5TZXRHdWFyZDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nPiBPcmln
aW5TZXQ7CiAgICAgT3JpZ2luU2V0IG1fb3JpZ2luU2V0OwogICAgIE9yaWdpblNldCBtX29yaWdp
bnNCZWluZ0RlbGV0ZWQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85568</attachid>
            <date>2011-03-11 21:08:52 -0800</date>
            <delta_ts>2011-03-13 03:40:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51878-20110311210851.patch</filename>
            <type>text/plain</type>
            <size>8398</size>
            <attacher name="Anton D&apos;Auria">adauria</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwOTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDMtMTEgIEFudG9uIEQn
QXVyaWEgIDxhZGF1cmlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXhlZCBsb2NrLXRha2luZyBvcmRlciB0byBwcmV2ZW50IGRl
YWRsb2NrLCBhZGRlZCBsb2NrIGZvciBtX2NsaWVudCwKKyAgICAgICAgYWxsb3cgZm9yIGNyZWF0
aW9uIG9mIGVtcHR5IFN0b3JhZ2VUcmFja2VyIGRiIG9uIGluaXRpYWxpemF0aW9uLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg3OAorCisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jU2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0RlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVPcmlnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OmNhbmNlbERlbGV0aW5nT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzZXRDbGllbnQpOgorICAgICAgICAqIHN0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuaDoKKwogMjAxMS0wMy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gODA5MjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsOCArODgsOSBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRTdG9yYWdlRGlyZWN0
b3J5CiAgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgudGhyZWFkc2FmZUNvcHkoKTsK
IH0KIAotU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QK
K1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpCiB7CisgICAgQVNT
RVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKICAgICByZXR1cm4gU1FMaXRlRmlsZVN5
c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX3N0b3JhZ2VEaXJlY3RvcnlQYXRo
LCAiU3RvcmFnZVRyYWNrZXIuZGIiKTsKIH0KIApAQCAtMTQzLDEwICsxNDQsMTAgQEAgdm9pZCBT
dG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZQogICAgIHsKICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CiAKLSAgICAgICAgb3BlblRyYWNr
ZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CiAg
ICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCisKICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHByZXBhcmUgc3RhdGVtZW50LiIpOwpAQCAtMTU0LDcgKzE1NSw3IEBAIHZvaWQgU3RvcmFnZVRy
YWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGUKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aW50IHJlc3VsdDsKLQorICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7CiAgICAgICAgICAgICB3aGlsZSAoKHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKQEAgLTE2OSw2ICsxNzAs
NyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlCiAgICAgCiAgICAg
aWYgKG1fY2xpZW50KSB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2lu
U2V0R3VhcmQpOworICAgICAgICBNdXRleExvY2tlciBsb2NrQ2xpZW50KG1fY2xpZW50R3VhcmQp
OwogICAgICAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fb3JpZ2luU2V0LmVu
ZCgpOwogICAgICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdp
blNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4oKml0KTsKQEAgLTE4Myw4ICsxODUsMjAgQEAgdm9pZCBTdG9y
YWdlVHJhY2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRUcgogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBmaWxlRXh0LCAoIi5sb2NhbHN0b3JhZ2UiKSk7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCB1bnNpZ25lZCwgZmlsZUV4dExlbmd0aCwgKGZpbGVFeHQubGVuZ3Ro
KCkpKTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoLCBmaWxlTWF0Y2hQYXR0ZXJuKTsKLSAgICAKKyAgICBWZWN0b3I8U3Ry
aW5nPiBwYXRoczsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOworICAgICAgICBwYXRocyA9IGxpc3REaXJlY3RvcnkobV9zdG9yYWdlRGly
ZWN0b3J5UGF0aCwgZmlsZU1hdGNoUGF0dGVybik7CisgICAgfQorCisgICAgLy8gVXNlIGEgY29w
eSBvZiBtX29yaWdpblNldCB0byBmaW5kIGV4cGlyZWQgZW50cmllcyBhbmQgdG8gc2NoZWR1bGUg
dGhlaXIKKyAgICAvLyBkZWxldGlvbnMgZnJvbSBkaXNrIGFuZCBpbiBtX29yaWdpblNldC4KKyAg
ICBPcmlnaW5TZXQgb3JpZ2luU2V0Q29weTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOworICAgICAgICBvcmlnaW5TZXRDb3B5ID0gbV9v
cmlnaW5TZXQ7CisgICAgfQorCiAgICAgLy8gQWRkIG1pc3NpbmcgU3RvcmFnZVRyYWNrZXIgcmVj
b3Jkcy4KICAgICBPcmlnaW5TZXQgZm91bmRPcmlnaW5zOwogICAgIFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwYXRocy5lbmQoKTsKQEAgLTE5Myw3ICsyMDcsNyBAQCB2b2lk
IFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyCiAgICAgICAgIGlmIChwYXRoLmVu
ZHNXaXRoKGZpbGVFeHQsIHRydWUpICYmIHBhdGgubGVuZ3RoKCkgPiBmaWxlRXh0TGVuZ3RoKSB7
CiAgICAgICAgICAgICBTdHJpbmcgZmlsZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKICAgICAg
ICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZmlsZS5zdWJzdHJpbmcoMCwgZmlsZS5s
ZW5ndGgoKSAtIGZpbGVFeHRMZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFtX29yaWdpblNldC5j
b250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkgeworICAgICAgICAgICAgaWYgKCFvcmlnaW5TZXRD
b3B5LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlz
TWFpblRocmVhZCgpKQogICAgICAgICAgICAgICAgICAgICBzZXRPcmlnaW5EZXRhaWxzKG9yaWdp
bklkZW50aWZpZXIsIHBhdGgpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTIwNSw4ICsyMTks
OCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyCiAgICAgfQogCiAg
ICAgLy8gRGVsZXRlIHN0YWxlIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCi0gICAgT3JpZ2luU2V0
Ojpjb25zdF9pdGVyYXRvciBzZXRFbmQgPSBtX29yaWdpblNldC5lbmQoKTsKLSAgICBmb3IgKE9y
aWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBz
ZXRFbmQ7ICsraXQpIHsKKyAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIHNldEVuZCA9IG9y
aWdpblNldENvcHkuZW5kKCk7CisgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gb3JpZ2luU2V0Q29weS5iZWdpbigpOyBpdCAhPSBzZXRFbmQ7ICsraXQpIHsKICAgICAgICAg
aWYgKCFmb3VuZE9yaWdpbnMuY29udGFpbnMoKml0KSkgewogICAgICAgICAgICAgaWYgKGlzTWFp
blRocmVhZCgpKQogICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbigqaXQpOwpAQCAtMjM2LDcg
KzI1MCw3IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY28KICAgICAg
ICAgQVNTRVJUKG1fdGhyZWFkKTsKICAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlVGFzayh0YXNr
KTsKICAgICB9IGVsc2UgCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCAo
dm9pZCopdGFzayk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoc2NoZWR1bGVUYXNrLCBzdGF0
aWNfY2FzdDx2b2lkKj4odGFzaykpOwogfQogCiB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzY2hlZHVs
ZVRhc2sodm9pZCogdGFzaykKQEAgLTI0NSw3ICsyNTksNyBAQCB2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpzY2hlZHVsZVRhc2sodm9pZCogCiAgICAgQVNTRVJUKFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkubV90aHJlYWQpOwogICAgIAogICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1f
dGhyZWFkKQotICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm1fdGhyZWFkLT5zY2hl
ZHVsZVRhc2soKExvY2FsU3RvcmFnZVRhc2sqKXRhc2spOworICAgICAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLm1fdGhyZWFkLT5zY2hlZHVsZVRhc2soc3RhdGljX2Nhc3Q8TG9jYWxTdG9y
YWdlVGFzayo+KHRhc2spKTsKIH0KIAogdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdp
bkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlRmlsZSkKQEAgLTI3Nyw4ICsyOTEsMTAgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3lu
Y1NldE9yaWdpbkRldGFpbAogICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKG9yaWdpbklkZW50
aWZpZXIpOwogICAgIH0KIAotICAgIGlmIChtX2NsaWVudCkKKyAgICBpZiAobV9jbGllbnQpIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0NsaWVudChtX2NsaWVudEd1YXJkKTsKICAgICAgICAg
bV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworICAg
IH0KIH0KIAogdm9pZCBTdG9yYWdlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiA+JiByZXN1bHQpCkBAIC0zNDIsMTEgKzM1OCwxMyBAQCB2b2lkIFN0b3JhZ2VU
cmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2luCiAgICAgaW50IHJlc3VsdDsKICAgICB3aGlsZSAo
KHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgewogICAgICAgICBp
ZiAoIWNhbkRlbGV0ZU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRleHQo
MSkpOwotICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgIGlmIChtX2NsaWVudCkgeworICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0NsaWVudChtX2NsaWVudEd1YXJkKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdpbihzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgwKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHREb25lKQpAQCAtNDU0LDggKzQ3MiwxMCBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5j
RGVsZXRlT3JpZ2luKGNvCiAgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CiAgICAgfQogICAgIAotICAg
IGlmIChtX2NsaWVudCkKKyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja0NsaWVudChtX2NsaWVudEd1YXJkKTsKICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworICAgIH0KIH0KICAgICAKIHZvaWQgU3Rv
cmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKCkKQEAgLTQ4NywxNCArNTA3LDE1IEBA
IHZvaWQgU3RvcmFnZVRyYWNrZXI6OmNhbmNlbERlbGV0aW5nT3JpZ2kKICAgICBpZiAoIW1faXNB
Y3RpdmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1f
b3JpZ2luU2V0R3VhcmQpOwogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNl
R3VhcmQpOworICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOwog
ICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlzRW1wdHkoKSkKICAgICAgICAgbV9vcmln
aW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKIH0KIAogdm9pZCBTdG9y
YWdlVHJhY2tlcjo6c2V0Q2xpZW50KFN0b3JhZ2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCiB7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9ja0NsaWVudChtX2NsaWVudEd1YXJkKTsKICAgICBtX2NsaWVudCA9
IGNsaWVudDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
aAkocmV2aXNpb24gODA5MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKIAotICAgIFN0
cmluZyB0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3Q7CisgICAgU3RyaW5nIHRyYWNrZXJEYXRh
YmFzZVBhdGgoKTsKICAgICB2b2lkIG9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRv
ZXNOb3RFeGlzdCk7CiAKICAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0
cmluZyYpOwpAQCAtOTEsMTYgKzkxLDE3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzZXRJ
c0FjdGl2ZShib29sKTsKIAorICAgIC8vIEd1YXJkIGZvciBtX2RhdGFiYXNlIGFuZCBtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoLgogICAgIE11dGV4IG1fZGF0YWJhc2VHdWFyZDsKICAgICBTUUxpdGVE
YXRhYmFzZSBtX2RhdGFiYXNlOwotCiAgICAgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7
CiAKKyAgICBNdXRleCBtX2NsaWVudEd1YXJkOwogICAgIFN0b3JhZ2VUcmFja2VyQ2xpZW50KiBt
X2NsaWVudDsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IE9yaWdpblNldDsKLQorICAg
IC8vIEd1YXJkIGZvciBtX29yaWdpblNldCBhbmQgbV9vcmlnaW5zQmVpbmdEZWxldGVkLgogICAg
IE11dGV4IG1fb3JpZ2luU2V0R3VhcmQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3Jp
Z2luU2V0OwogICAgIE9yaWdpblNldCBtX29yaWdpblNldDsKICAgICBPcmlnaW5TZXQgbV9vcmln
aW5zQmVpbmdEZWxldGVkOwogCg==
</data>
<flag name="review"
          id="77716"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>