<?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>80393</bug_id>
          
          <creation_ts>2012-03-06 00:31:16 -0800</creation_ts>
          <short_desc>Move SQLDatabase code into Modules/webdatabase</short_desc>
          <delta_ts>2012-03-06 01:49:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79327</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571582</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-06 00:31:16 -0800</bug_when>
    <thetext>Move SQLDatabase code into Modules/sqldatabase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571584</commentid>
    <comment_count>1</comment_count>
      <attachid>130315</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-06 00:34:29 -0800</bug_when>
    <thetext>Created attachment 130315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571588</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 00:39:45 -0800</bug_when>
    <thetext>Attachment 130315 did not pass style-queue:

Source/WebCore/Modules/sqldatabase/DatabaseThread.cpp:55:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/SQLResultSetRowList.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/DatabaseThread.h:59:  The parameter name &quot;taskSynchronizer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/Database.cpp:163:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/SQLResultSetRowList.cpp:38:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/sqldatabase/SQLResultSetRowList.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/sqldatabase/DatabaseAuthorizer.h:97:  The parameter name &quot;permissions&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/chromium/QuotaTracker.cpp:32:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/OriginUsageRecord.h:43:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/sqldatabase/OriginQuotaManager.h:45:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:60:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:64:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:65:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:77:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:114:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:116:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:117:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:118:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:159:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:160:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:161:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:162:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:163:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:164:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:165:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:166:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:167:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:168:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:169:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:170:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.h:184:  The parameter name &quot;database&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/AbstractDatabase.h:54:  The parameter name &quot;available&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/AbstractDatabase.h:80:  The parameter name &quot;permissions&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTask.h:74:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.cpp:473:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.cpp:673:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.cpp:910:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/sqldatabase/DatabaseTracker.cpp:1001:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/chromium/DatabaseTrackerChromium.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/chromium/DatabaseTrackerChromium.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/chromium/DatabaseTrackerChromium.cpp:214:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/chromium/DatabaseTrackerChromium.cpp:217:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/Modules/sqldatabase/SQLStatement.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/SQLStatement.cpp:89:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:123:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:185:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:186:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:187:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/ModuFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
les/sqldatabase/SQLTransaction.cpp:188:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:189:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:205:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:206:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:207:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:208:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:363:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:375:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:388:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:584:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/sqldatabase/SQLTransaction.cpp:622:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/sqldatabase/SQLTransactionClient.h:46:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/sqldatabase/DatabaseAuthorizer.cpp:416:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/Modules/sqldatabase/SQLTransactionCoordinator.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/sqldatabase/SQLTransactionCoordinator.h:47:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/sqldatabase/SQLTransactionCoordinator.h:64:  The parameter name &quot;info&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 67 in 89 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>571601</commentid>
    <comment_count>3</comment_count>
      <attachid>130324</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-06 00:50:20 -0800</bug_when>
    <thetext>Created attachment 130324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571606</commentid>
    <comment_count>4</comment_count>
      <attachid>130324</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-06 00:53:40 -0800</bug_when>
    <thetext>Comment on attachment 130324
Patch

Thanks for the modularization! Please rename DOMWindowSQLDatabase.* and WorkerContextSQLDatabase.* in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571609</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 00:55:39 -0800</bug_when>
    <thetext>Attachment 130324 did not pass style-queue:

Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:473:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:673:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:910:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1001:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLResultSetRowList.cpp:38:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/webdatabase/SQLResultSetRowList.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/webdatabase/SQLResultSetRowList.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/OriginQuotaManager.h:45:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/webdatabase/OriginUsageRecord.h:43:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/webdatabase/AbstractDatabase.h:54:  The parameter name &quot;available&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/AbstractDatabase.h:80:  The parameter name &quot;permissions&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:214:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:217:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLStatement.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/SQLStatement.cpp:89:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/chromium/QuotaTracker.cpp:32:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.h:47:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.h:64:  The parameter name &quot;info&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:123:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:185:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:186:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:187:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:188:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:189:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:205:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:206:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:207:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:208:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:363:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:375:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:388:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:584:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:622:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/DatabaseAuthorizer.cpp:416:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/Modules/webdatabase/DatabaseTask.h:74:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/webdatabase/DatabaseAuthorizer.h:97:  The parameter name &quot;permissions&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionClient.h:46:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/webdatabase/DatabaseThread.h:59:  The parameter name &quot;taskSynchronizer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/Database.cpp:163:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/DatabaseThread.cpp:55:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:60:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:64:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:65:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:77:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:114:  The parameter name &quot;origin&quot; adds no information, so it should beFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
 removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:116:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:117:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:118:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:159:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:160:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:161:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:162:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:163:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:164:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:165:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:166:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:167:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:168:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:169:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:170:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webdatabase/DatabaseTracker.h:184:  The parameter name &quot;database&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 67 in 89 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>571625</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-06 01:22:35 -0800</bug_when>
    <thetext>Committed r109877: &lt;http://trac.webkit.org/changeset/109877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571641</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-06 01:37:28 -0800</bug_when>
    <thetext>Reopen, because it broke --minimal build:
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x72): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowFunction(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0xd0): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropVTable(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x140): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createVTable(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x182): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowAnalyze(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x1ba): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowReindex(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x21a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropTrigger(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x25a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowAttach(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x2c0): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowUpdate(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x2ff): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createView(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x35a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createTrigger(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x3c8): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowAlterTable(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x40a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowDetach(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x46a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropTempIndex(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x4d8): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowRead(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x548): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowPragma(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x587): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createTempTable(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x5e2): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createTempIndex(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x60c): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowTransaction()&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x66a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropTempTrigger(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x6a7): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropTempTable(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x6d7): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowInsert(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x707): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createTempView(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x737): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropView(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x792): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropIndex(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x7cf): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createTable(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x82a): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createIndex(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x867): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropTempView(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x8c2): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::createTempTrigger(WTF::String const&amp;, WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x8ff): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::dropTable(WTF::String const&amp;)&apos;
/usr/bin/gold: /ramdisk/qt-linux-release-minimal/build/WebKitBuild/Release/Source/WebCore/release/libWebCore.a(SQLiteDatabase.o): in function WebCore::SQLiteDatabase::authorizerFunction(void*, int, char const*, char const*, char const*, char const*):SQLiteDatabase.cpp(.text._ZN7WebCore14SQLiteDatabase18authorizerFunctionEPviPKcS3_S3_S3_+0x92f): error: undefined reference to &apos;WebCore::DatabaseAuthorizer::allowDelete(WTF::String const&amp;)&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571647</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-06 01:48:53 -0800</bug_when>
    <thetext>Fixenated in http://trac.webkit.org/changeset/109885</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130315</attachid>
            <date>2012-03-06 00:34:29 -0800</date>
            <delta_ts>2012-03-06 00:49:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80393-20120306003428.patch</filename>
            <type>text/plain</type>
            <size>963522</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTg3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBAQAorMjAxMi0wMy0wNiAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgU1FMRGF0YWJhc2UgY29k
ZSBpbnRvIE1vZHVsZXMvc3FsZGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgwMzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHN0aWxsIGEgY291cGxlIChtaW5vcikgU1FMRGF0
YWJhc2UgcmVmZXJlbmNlcyBmcm9tIFdlYkNvcmUKKyAgICAgICAgcHJvcGVyLCBidXQgd2UndmUg
Z290dGVuIHRoaXMgY29kZSB0byB0aGUgcG9pbnQgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8KKyAg
ICAgICAgbW92ZSBpdCBpbnRvIHRoZSBNb2R1bGVzIGRpcmVjdG9yeS4gIChUaGlzIHBhdGNoIGp1
c3QgbW92ZXMgY29kZS0tLW5vCisgICAgICAgIGJlaGF2aW9yIGNoYW5nZS4pCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2U6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oLgorICAg
ICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcC4K
KyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5j
cHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RPTVdpbmRvd1NRTERhdGFiYXNl
LmguCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5p
ZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJh
c2UuaWRsLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwu
CisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAu
CisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaC4KKyAg
ICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmguCisgICAgICAgICog
TW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3Nx
bGRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQ29udGV4dC5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2Uv
RGF0YWJhc2VEZXRhaWxzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VEZXRhaWxzLmguCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVN5
bmMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5j
cHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaC4KKyAgICAgICAgKiBN
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRh
dGFiYXNlL0RhdGFiYXNlVGFzay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUYXNrLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlVGFzay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFz
ay5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcC4KKyAg
ICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaC4KKyAgICAgICAgKiBNb2R1
bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3Nx
bGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2Uv
RGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmguCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFz
ZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFz
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9Pcmln
aW5Vc2FnZVJlY29yZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdp
blVzYWdlUmVjb3JkLmguCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxDYWxsYmFj
a1dyYXBwZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxDYWxsYmFj
a1dyYXBwZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEVycm9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaC4KKyAgICAgICAgKiBN
b2R1bGVzL3NxbGRhdGFiYXNlL1NRTEVycm9yLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxFcnJvci5pZGwuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9T
UUxFeGNlcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEV4
Y2VwdGlvbi5jcHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24u
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaC4KKyAg
ICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5pZGw6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFi
YXNlL1NRTFJlc3VsdFNldC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFJlc3VsdFNldC5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0
LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRs
LgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5j
cHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5o
LgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGw6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5p
ZGwuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwuCisgICAgICAgICogTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oLgorICAgICAgICAq
IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGw6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5p
ZGwuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcC4K
KyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmguCisgICAgICAg
ICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwLgorICAgICAgICAqIE1vZHVs
ZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmguCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAuCisgICAgICAgICogTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmguCisgICAgICAgICogTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcC4KKyAgICAg
ICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmguCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2suaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3Nx
bGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3Nx
bGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oLgorICAgICAgICAqIE1v
ZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlk
bC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFz
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL1dvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dvcmtl
ckNvbnRleHRTUUxEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2UvV29y
a2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsLgorICAgICAgICAqIE1vZHVsZXMvc3Fs
ZGF0YWJhc2UvY2hyb21pdW06IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvc3FsZGF0YWJhc2Uv
Y2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3Nx
bGRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1
bS5jcHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNr
ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3Rh
VHJhY2tlci5jcHAuCisgICAgICAgICogTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1bS9RdW90
YVRyYWNrZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3NxbGRhdGFiYXNlL2Nocm9taXVtL1NR
TFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwLgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmVDb21tb24udnNwcm9wczoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9jb3B5Rm9y
d2FyZGluZ0hlYWRlcnMuY21kOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L0RPTVdpbmRvd1NRTERhdGFiYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9ET01X
aW5kb3dTUUxEYXRhYmFzZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlQXV0aG9yaXplci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VD
YWxsYmFjay5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5p
ZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9EYXRhYmFzZURldGFpbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlU3luYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVN5bmMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZVRocmVhZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMQ2FsbGJh
Y2tXcmFwcGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxFcnJvci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXJyb3IuaWRsOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NR
TEV4Y2VwdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFJlc3VsdFNldC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL1NRTFJlc3VsdFNldC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXRSb3dMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFJlc3Vs
dFNldFJvd0xpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFJlc3VsdFNldFJv
d0xpc3QuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRTeW5jLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcDogUmVtb3Zl
ZC4KKwogMjAxMi0wMy0wNSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBzdG9wIHVzaW5nIFJhd1NvdXJjZUNvZGUgaW4g
QnJlYWtwb2ludE1hbmFnZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTA5
ODU4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIsNiArMiw3IEBAIFNFVChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJD
T1JFX0RJUn0iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kZXhlZGRiIgorICAgICIke1dFQkNPUkVfRElSfS9N
b2R1bGVzL3NxbGRhdGFiYXNlIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dlYnNvY2tl
dHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzIgpAQCAtOTMsNiArOTQsNyBAQCBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiBTRVQoV2ViQ29yZV9JRExfSU5DTFVERVMKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlCiAgICAgTW9k
dWxlcy93ZWJzb2NrZXRzCiAgICAgYmluZGluZ3MvZ2VuZXJpYwogICAgIGNzcwpAQCAtNDM0LDYg
KzQzNiwyOSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvUGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuY3BwCiAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNw
cAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy9zcWxk
YXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9E
YXRhYmFzZUNvbnRleHQuY3BwCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVN5bmMu
Y3BwCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCisgICAgTW9kdWxl
cy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblF1b3Rh
TWFuYWdlci5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNw
cAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmNwcAorICAgIE1vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FM
UmVzdWx0U2V0Um93TGlzdC5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVu
dC5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwCisgICAg
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKKyAgICBNb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHAKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL1dvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZS5jcHAKKwogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCkBAIC0xNDAzLDI5ICsxNDI4LDgg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVRyYW5zZm9y
bURhdGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlzdWFsRGF0YS5jcHAKIAotICAg
IHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKLSAgICBzdG9yYWdlL0NoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcAotICAgIHN0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwCi0gICAgc3Rv
cmFnZS9EYXRhYmFzZS5jcHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKLSAg
ICBzdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5jcHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlU3luYy5j
cHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlVGhy
ZWFkLmNwcAotICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAogICAgIHN0b3JhZ2UvU3Rv
cmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAotICAgIHN0b3JhZ2Uv
T3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAotICAgIHN0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
Ci0gICAgc3RvcmFnZS9TUUxFeGNlcHRpb24uY3BwCi0gICAgc3RvcmFnZS9TUUxSZXN1bHRTZXQu
Y3BwCi0gICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcAotICAgIHN0b3JhZ2UvU1FM
U3RhdGVtZW50LmNwcAotICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKLSAgICBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcAotICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQu
Y3BwCi0gICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAotICAgIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZS5jcHAKICAgICBz
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5j
cHAKQEAgLTE0MzcsNyArMTQ0MSw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCi0gICAgc3RvcmFnZS9Xb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuY3BwCiAKICAgICB4bWwvRE9NUGFyc2VyLmNwcAogICAgIHhtbC9O
YXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwCkBAIC0xNTEwLDIyICsxNTEzLDIyIEBAIEVORElGICgp
CiAKIElGIChFTkFCTEVfU1FMX0RBVEFCQVNFKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSURM
X0ZJTEVTCi0gICAgICAgIHN0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsCi0gICAgICAg
IHN0b3JhZ2UvRGF0YWJhc2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5p
ZGwKLSAgICAgICAgc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FM
RXJyb3IuaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbAotICAgICAgICBzdG9y
YWdlL1NRTFJlc3VsdFNldC5pZGwKLSAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbAotICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbAotICAgICAgICBz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5p
ZGwKLSAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsCi0gICAg
ICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAotICAgICAgICBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbAotICAgICAgICBzdG9yYWdlL1dvcmtlckNvbnRleHRT
UUxEYXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxE
YXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5pZGwKKyAg
ICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbAorICAgICAgICBN
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGwKKyAgICAgICAgTW9kdWxlcy9zcWxk
YXRhYmFzZS9TUUxFcnJvci5pZGwKKyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNl
cHRpb24uaWRsCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbAor
ICAgICAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCisgICAg
ICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsCisgICAgICAg
IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwKKyAgICAg
ICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbAorICAgICAgICBNb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwKKyAgICAgICAgTW9k
dWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCisgICAgICAgIE1vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCisgICAgICAgIE1vZHVs
ZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAogICAgICkKIEVORElG
ICgpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTA5ODU4
KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpIFwKICAgICAkKFdlYkNv
cmUpL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVk
ZGIgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZSBcCiAgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJpYyBc
CiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCkBAIC03Niw2ICs3NywyMiBAQCBCSU5ESU5H
X0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmlk
bCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwg
XAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWRE
YXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5k
b3dTUUxEYXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9E
YXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFz
ZUNhbGxiYWNrLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlU3luYy5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFcnJv
ci5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24u
aWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0Lmlk
bCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xp
c3QuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50
Q2FsbGJhY2suaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAorICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKKyAgICAk
KFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VF
dmVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzL0RPTVdpbmRvd1dl
YlNvY2tldC5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5pZGwgXApAQCAtMzY1LDI4ICszODIsMTIgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9wbHVn
aW5zL0RPTVBsdWdpbi5pZGwgXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwg
XAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFzZS5pZGwgXAotICAgICQoV2ViQ29yZSkv
c3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0Rh
dGFiYXNlU3luYy5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxFcnJvci5pZGwgXAot
ICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwKLSAgICAkKFdlYkNvcmUp
L3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL1NRTFJl
c3VsdFNldFJvd0xpc3QuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVtZW50
Q2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwg
XAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAot
ICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsIFwKICAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TdG9y
YWdlRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU3RvcmFnZUluZm8uaWRsIFwK
ICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU3RvcmFnZUluZm9FcnJvckNhbGxiYWNrLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9zdG9yYWdlL1N0b3JhZ2VJbmZvUXVvdGFDYWxsYmFjay5pZGwgXAogICAg
ICQoV2ViQ29yZSkvc3RvcmFnZS9TdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2suaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9zdmcvRWxlbWVudFRpbWVDb250cm9sLmlkbCBcCiAgICAgJChXZWJDb3JlKS9zdmcv
U1ZHQUVsZW1lbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N2Zy9TVkdBbHRHbHlwaERlZkVsZW1l
bnQuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHJldmlzaW9uIDEwOTg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDYgKzEwNiwyMiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3NxbGRhdGFiYXNl
L0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9zcWxkYXRhYmFz
ZS9EYXRhYmFzZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VD
YWxsYmFjay5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VTeW5j
LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFcnJvci5pZGwgXAorICAg
ICQkUFdEL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbCBcCisgICAgJCRQV0QvTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwgXAorICAgICQkUFdEL01vZHVs
ZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwgXAorICAgICQkUFdEL01v
ZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbCBcCisgICAg
JCRQV0QvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKKyAgICAk
JFBXRC9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy9zcWxkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2Uu
aWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5pZGwgXAogICAg
ICQkUFdEL01vZHVsZXMvd2Vic29ja2V0cy9ET01XaW5kb3dXZWJTb2NrZXQuaWRsIFwKICAgICAk
JFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCBcCkBAIC0zODcsMjggKzQwMywx
MiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL3BsdWdpbnMvRE9NTWltZVR5cGUuaWRs
IFwKICAgICAkJFBXRC9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmlkbCBcCiAgICAgJCRQV0QvcGx1
Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9ET01XaW5kb3dT
UUxEYXRhYmFzZS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKLSAgICAk
JFBXRC9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0Rh
dGFiYXNlU3luYy5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQk
UFdEL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdl
SW5mby5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZUluZm9FcnJvckNhbGxiYWNrLmlk
bCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5mb1F1b3RhQ2FsbGJhY2suaWRsIFwKICAg
ICAkJFBXRC9zdG9yYWdlL1N0b3JhZ2VJbmZvVXNhZ2VDYWxsYmFjay5pZGwgXAotICAgICQkUFdE
L3N0b3JhZ2UvU1FMRXJyb3IuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5p
ZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCi0gICAgJCRQV0Qvc3Rv
cmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9TUUxTdGF0
ZW1lbnRDYWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsIFwKLSAg
ICAkJFBXRC9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsIFwKLSAgICAkJFBXRC9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmlkbCBcCiAgICAgJCRQV0QvdGVzdGluZy9JbnRlcm5hbHMuaWRsIFwKICAgICAk
JFBXRC90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsIFwKICAgICAkJFBXRC93ZWJhdWRpby9B
dWRpb0J1ZmZlci5pZGwgXApAQCAtNjkzLDYgKzY5Myw3IEBAIGdlbmVyYXRlQmluZGluZ3MuY29t
bWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWdlbmVy
YXRvciAkJGdlbmVyYXRvciBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRl
ICQkUFdEL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYiBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMvc3FsZGF0YWJhc2UgXAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMgXAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9kb20gXAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9maWxlYXBpIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCB3ZWJjb3JlX2NwcGZs
YWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbSBcCisJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZSBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cyBcCkBAIC03ODAsNiArNzgxLDcgQEAgSURMX1BBVEggOj0gXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtIFwKKyAgICAkKFdlYkNvcmUpL01vZHVs
ZXMvc3FsZGF0YWJhc2UgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzIFwKICAg
ICAkKFdlYkNvcmUpL2JpbmRpbmdzL2pzIFwKICAgICAkKFdlYkNvcmUpL2NzcyBcCkBAIC05MjIs
NiArOTI0LDcgQEAgRVhUUkFfRElTVCArPSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiLyouaWRsKSBcCiAJJChzaGVsbCBs
cyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS8qLmlkbCkgXAor
CSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2Uv
Ki5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9j
c3MvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9kb20vKi5p
ZGwpIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTA5ODYx
KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTA1OCw2ICsxMDU4LDYwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVy
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9DaGFuZ2VWZXJzaW9u
V3JhcHBlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RPTVdpbmRv
d1NRTERhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9E
T01XaW5kb3dTUUxEYXRhYmFzZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL0RhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9E
YXRhYmFzZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNl
QXV0aG9yaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0
YWJhc2VBdXRob3JpemVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2Uv
RGF0YWJhc2VDYWxsYmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvRGF0YWJhc2VDb250ZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvRGF0YWJhc2VEZXRhaWxzLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvRGF0YWJhc2VTeW5jLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFz
ZS9EYXRhYmFzZVN5bmMuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9E
YXRhYmFzZVRhc2suY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0Rh
dGFiYXNlVGFzay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlVGhyZWFkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlckNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvRGF0YWJhc2VUcmFja2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxk
YXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cWxkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3FsZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcWxkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFcnJvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Fs
ZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxk
YXRhYmFzZS9TUUxSZXN1bHRTZXQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggXAorCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25T
eW5jLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9X
b3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL0Nsb3NlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXIuaCBcCkBAIC0zOTIyLDYyICszOTc2LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9D
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdl
VmVyc2lvbldyYXBwZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxE
YXRhYmFzZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJh
c2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZUF1dGhvcml6ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaCBc
Ci0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlRGV0YWlscy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
U3luYy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmggXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRhc2suaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCBc
Ci0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUYXNrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGFzay5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9P
cmlnaW5RdW90YU1hbmFnZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1
b3RhTWFuYWdlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTEVycm9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhj
ZXB0aW9uLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaCBcCi0J
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJl
c3VsdFNldFJvd0xpc3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNl
dFJvd0xpc3QuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudFN5bmMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudFN5bmMuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmggXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25TeW5jLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmMuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmggXApAQCAtNDAwNSw4ICs0MDA3LDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmggXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZS5jcHAgXApAQCAtNDczNSwyMiArNDczNSwyMiBAQCB3ZWJjb3JlX2J1aWx0
X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjay5oCiAKIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAotCSQoV2ViQ29yZSkvc3RvcmFn
ZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFz
ZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCi0JJChX
ZWJDb3JlKS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9T
UUxFcnJvci5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwKLQkk
KFdlYkNvcmUpL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdl
L1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwgXAot
CSQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCBcCi0JJChXZWJD
b3JlKS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAotCSQoV2ViQ29y
ZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvV29y
a2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFz
ZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRh
YmFzZS9EYXRhYmFzZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRh
YmFzZUNhbGxiYWNrLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlU3luYy5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFcnJvci5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24uaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvblN5bmMuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvc3FsZGF0
YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAogZW5kaWYgIyBFTkQgRU5BQkxFX1NR
TF9EQVRBQkFTRQogCiAjIC0tLS0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA5ODU4KQor
KysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTMwMCwxMiAr
MTMwMCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVN1cnJvdW5k
RGF0YS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVRyYW5zZm9ybURhdGEuY3BwIFwK
ICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmNwcCBcCi0gICAgc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmNwcCBcCi0gICAgc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5j
cHAgXAotICAgIHN0b3JhZ2UvRGF0YWJhc2UuY3BwIFwKLSAgICBzdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5jcHAgXAotICAgIHN0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmNwcCBcCi0gICAgc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuY3BwIFwKICAgICBzdG9yYWdlL1N0b3JhZ2VUYXNrLmNwcCBcCiAg
ICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlLmNwcCBc
CkBAIC0xMzE4LDcgKzEzMTIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwK
ICAgICBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBcCi0gICAgc3RvcmFnZS9Xb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UuY3BwIFwKICAgICB0ZXN0aW5nL0ludGVybmFscy5jcHAgXAogICAgIHRl
c3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAgXAogICAgIHhtbC9ET01QYXJzZXIuY3BwIFwKQEAg
LTE1MzIsNiArMTUyNSwzMCBAQCBIRUFERVJTICs9IFwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oIFwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0
aW9uT3B0aW9ucy5oIFwKICAgICBcCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIu
aCBcCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oIFwKKyAg
ICBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5oIFwKKyAgICBNb2R1bGVz
L3NxbGRhdGFiYXNlL0RhdGFiYXNlLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJh
c2VDYWxsYmFjay5oIFwKKyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlU3luYy5oIFwK
KyAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVGFzay5oIFwKKyAgICBNb2R1bGVzL3Nx
bGRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5h
Z2VyLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCBcCisg
ICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaCBcCisgICAgTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaCBcCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9T
UUxSZXN1bHRTZXRSb3dMaXN0LmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oIFwKKyAg
ICBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmggXAorICAgIE1vZHVsZXMvc3Fs
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBcCisgICAgTW9kdWxlcy9zcWxkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25TeW5jLmggXAorICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suaCBcCisgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9Xb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UuaCBcCisgICAgXAogICAgIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmgg
XAogICAgIGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBcCiAgICAgY3NzL0NTU0JvcmRl
ckltYWdlLmggXApAQCAtMjUxMyw0MyArMjUzMCwyMCBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmggXAotICAgIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oIFwKLSAgICBzdG9yYWdlL0No
YW5nZVZlcnNpb25XcmFwcGVyLmggXAotICAgIHN0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2Uu
aCBcCi0gICAgc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaCBcCi0gICAgc3RvcmFnZS9EYXRh
YmFzZS5oIFwKLSAgICBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaCBcCi0gICAgc3RvcmFnZS9E
YXRhYmFzZVN5bmMuaCBcCi0gICAgc3RvcmFnZS9EYXRhYmFzZVRhc2suaCBcCi0gICAgc3RvcmFn
ZS9EYXRhYmFzZVRocmVhZC5oIFwKLSAgICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oIFwKLSAg
ICBzdG9yYWdlL1N0b3JhZ2VUYXNrLmggXAotICAgIHN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oIFwK
LSAgICBzdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5oIFwKLSAgICBzdG9yYWdlL09yaWdpblVz
YWdlUmVjb3JkLmggXAotICAgIHN0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmggXAotICAgIHN0
b3JhZ2UvU1FMUmVzdWx0U2V0LmggXAotICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5o
IFwKLSAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKLSAgICBzdG9yYWdlL1NRTFN0YXRlbWVu
dFN5bmMuaCBcCi0gICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKLSAgICBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ2xpZW50LmggXAotICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIFwKLSAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oIFwKLSAgICBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggXAorICAgIHN0b3JhZ2UvU3RvcmFnZS5oIFwK
ICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhLmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXAogICAgIHN0b3JhZ2UvU3RvcmFn
ZUV2ZW50LmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIFwKLSAgICBz
dG9yYWdlL1N0b3JhZ2UuaCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgIHN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZS5oIFwKICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmggXAorICAgIHN0b3JhZ2UvU3Rv
cmFnZVRhc2suaCBcCisgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggXAogICAgIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuaCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oIFwK
LSAgICBzdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oIFwKICAgICBzdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaCBc
CiAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oIFwKQEAgLTI5NTAsMjEgKzI5NDQs
MjggQEAgcGx1Z2luX2JhY2tlbmRfeGxpYiB7CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9T
UUxfREFUQUJBU0U9MSkgewogICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBzdG9yYWdlL0NoYW5n
ZVZlcnNpb25XcmFwcGVyLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcCBc
Ci0gICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9E
YXRhYmFzZVRyYWNrZXIuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
Y3BwIFwKLSAgICAgICAgc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgXAotICAgICAgICBz
dG9yYWdlL1NRTEV4Y2VwdGlvbi5jcHAgXAotICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5j
cHAgXAotICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIFwKLSAgICAgICAg
c3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnRT
eW5jLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKLSAgICAgICAg
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgXAotICAgICAgICBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmMuY3BwCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAgXAorICAgICAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuY3BwIFwKKyAgICAgICAg
TW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwIFwKKyAgICAgICAgTW9k
dWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9z
cWxkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFz
ZS9EYXRhYmFzZVRhc2suY3BwIFwKKyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5jcHAgXAorICAgICAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5jcHAgXAorICAgICAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNl
LmNwcCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNw
cCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIFwK
KyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24uY3BwIFwKKyAgICAgICAg
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCisgICAgICAgIE1vZHVsZXMvc3Fs
ZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2Uv
U1FMU3RhdGVtZW50U3luYy5jcHAgXAorICAgICAgICBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uLmNwcCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25DbGllbnQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmNwcCBcCisgICAgICAgIE1vZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlLmNwcAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc2Myw2ICs3NjMsMjIgQEAKICAgICAgICAgICAg
ICdNb2R1bGVzL21lZGlhc3RyZWFtL05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5p
ZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaWRs
JywKICAgICAgICAgICAgICdNb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGwnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMRXJyb3IuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwnLAorICAgICAgICAgICAg
J01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaWRsJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2Uv
V29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJz
b2NrZXRzL0Nsb3NlRXZlbnQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYnNvY2tldHMv
RE9NV2luZG93V2ViU29ja2V0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldC5pZGwnLApAQCAtMTA1OCwyOCArMTA3NCwxMiBAQAogICAgICAgICAgICAgJ3Bs
dWdpbnMvRE9NTWltZVR5cGVBcnJheS5pZGwnLAogICAgICAgICAgICAgJ3BsdWdpbnMvRE9NUGx1
Z2luLmlkbCcsCiAgICAgICAgICAgICAncGx1Z2lucy9ET01QbHVnaW5BcnJheS5pZGwnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0RhdGFiYXNlLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZUNh
bGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL1NRTEVycm9yLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9T
UUxFeGNlcHRpb24uaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwn
LAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICdz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICdzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3lu
Yy5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2UuaWRsJywKICAgICAgICAgICAgICdz
dG9yYWdlL1N0b3JhZ2VFdmVudC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUlu
Zm8uaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VJbmZvRXJyb3JDYWxsYmFjay5p
ZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUluZm9RdW90YUNhbGxiYWNrLmlkbCcs
CiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2suaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9CdWZmZXJDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyU291cmNlTm9kZS5pZGwnLApAQCAtMTQwMiw2ICsxNDAyLDUxIEBACiAgICAgICAgICAgICAn
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvc3FsZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvc3FsZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuY3BwJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9z
cWxkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRh
YmFzZS9EYXRhYmFzZVRhc2suY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNl
L0RhdGFiYXNlVGFzay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlVGhyZWFkLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvRE9NV2luZG93U1FM
RGF0YWJhc2UuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RPTVdpbmRv
d1NRTERhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9Pcmln
aW5RdW90YU1hbmFnZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9Pcmln
aW5Vc2FnZVJlY29yZC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxD
YWxsYmFja1dyYXBwZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxF
eGNlcHRpb24uY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEV4Y2Vw
dGlvbi5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldC5j
cHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmgn
LAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVu
dC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvblN5bmMuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uU3luYy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3Fs
ZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9zcWxkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3NxbGRhdGFiYXNlL2Nocm9taXVtL1F1
b3RhVHJhY2tlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvY2hyb21p
dW0vUXVvdGFUcmFja2VyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvc3FsZGF0YWJhc2UvY2hy
b21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvd2Vic29ja2V0cy9DbG9zZUV2ZW50LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oJywKQEAgLTQ3MDYs
NDggKzQ3NTEsNiBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
RE9NV2luZG93U1FMRGF0YWJhc2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0RPTVdpbmRv
d1NRTERhdGFiYXNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2UuY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAnLAotICAgICAgICAgICAg
J3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0
YWJhc2VDYWxsYmFjay5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5j
cHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmgnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRh
YmFzZVN5bmMuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVGFzay5oJywKLSAgICAgICAgICAgICdzdG9yYWdl
L0RhdGFiYXNlVGhyZWFkLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRocmVh
ZC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL1N0
b3JhZ2VUYXNrLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oJywKLSAgICAgICAgICAgICdzdG9y
YWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmgnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvU1FMRXhjZXB0aW9uLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24u
aCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdl
L1NRTFN0YXRlbWVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50U3lu
Yy5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oJywKLSAgICAg
ICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DbGllbnQuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaCcsCi0gICAgICAgICAg
ICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL1N0b3JhZ2UuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2UuaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlQXJlYS5oJywKQEAgLTQ3NzIsMTYgKzQ3NzUsMTMg
QEAKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdl
VGFzay5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suaCcsCisgICAgICAg
ICAgICAnc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9T
dG9yYWdlVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3Bw
JywKLSAgICAgICAgICAgICdzdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHAnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwJywKLSAgICAg
ICAgICAgICdzdG9yYWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwJywKICAgICAgICAg
ICAgICdzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS93aW5jZS9TdG9yYWdlVGhyZWFkV2luQ0UuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
CShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0Vf
RElSIFwKICAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgJCRTT1VS
Q0VfRElSL01vZHVsZXMvaW5kZXhlZGRiIFwKKyAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy9zcWxk
YXRhYmFzZSBcCiAgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvd2Vic29ja2V0cyBcCiAgICAgJCRT
T1VSQ0VfRElSL2FjY2Vzc2liaWxpdHkgXAogICAgICQkU09VUkNFX0RJUi9iaW5kaW5ncyBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFic3RyYWN0
RGF0YWJhc2UuaCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJEYXRh
YmFzZUF1dGhvcml6ZXIuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRl
ICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNR
TGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIiAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lv
bktleVtdID0gIldlYktpdERhdGFiYXNlVmVyc2lvbktleSI7CitzdGF0aWMgY29uc3QgY2hhciBp
bmZvVGFibGVOYW1lW10gPSAiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIjsKKworc3RhdGlj
IFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0
ZUVycm9yQ29kZSwgY29uc3QgY2hhciogc3FsaXRlRXJyb3JNZXNzYWdlKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiJXMgKCVkICVzKSIsIG1lc3NhZ2UsIHNxbGl0ZUVycm9yQ29kZSwg
c3FsaXRlRXJyb3JNZXNzYWdlKTsKK30KKworc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0
RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3Ry
aW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwg
cXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAgaWYg
KHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkg
cHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVz
KSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChyZXN1
bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkp
IHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzZXRU
ZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVy
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KGRiLCBxdWVyeSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAg
ICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVl
cnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
c3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAo
JXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZJWE1FOiBtb3ZlIGFsbCBndWlkLXJlbGF0
ZWQgZnVuY3Rpb25zIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcy4KK3N0YXRpYyBN
dXRleCYgZ3VpZE11dGV4KCkKK3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0
ZXgmLCBtdXRleCA9ICpuZXcgTXV0ZXgpOworICAgIHJldHVybiBtdXRleDsKK30KKwordHlwZWRl
ZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVyc2lv
bk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCit7CisgICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXgg
aXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFw
OworfQorCisvLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgpLgorc3RhdGljIGlu
bGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lv
bikKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCisgICAgQVNTRVJU
KCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworCisgICAgLy8gTm90ZTogSXQgaXMgbm90IHNhZmUg
dG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFwLgor
ICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1wdHkg
c3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KKyAgICAvLyBUaGUgY29weSgpIGZ1bmN0aW9uIG1ha2Vz
IGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBjdXJyZW50CisgICAg
Ly8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3NzLXRo
cmVhZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dh
cmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCisKKyAgICAvLyBNYXAgbnVs
bCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCisgICAgZ3VpZFRv
VmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
bmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSk7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIEhh
c2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOworc3RhdGljIEd1aWRE
YXRhYmFzZU1hcCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQoreworICAgIC8vIEVuc3VyZSB0aGUgdGhl
IG11dGV4IGlzIGxvY2tlZC4KKyAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOworICAgIHJl
dHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRo
ZSBtdXRleCBpcyBsb2NrZWQuCisgICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOwor
CisgICAgU3RyaW5nIHN0cmluZ0lEID0gb3JpZ2luICsgIi8iICsgbmFtZTsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gSURHdWlkTWFwOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSURHdWlkTWFwLCBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLCAoKSk7CisgICAgaW50IGd1
aWQgPSBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLmdldChzdHJpbmdJRCk7CisgICAgaWYgKCFn
dWlkKSB7CisgICAgICAgIHN0YXRpYyBpbnQgY3VycmVudE5ld0dVSUQgPSAxOworICAgICAgICBn
dWlkID0gY3VycmVudE5ld0dVSUQrKzsKKyAgICAgICAgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1h
cC5zZXQoc3RyaW5nSUQsIGd1aWQpOworICAgIH0KKworICAgIHJldHVybiBndWlkOworfQorCitz
dGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKKworYm9vbCBBYnN0cmFjdERh
dGFiYXNlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGlzRGF0YWJhc2VBdmFpbGFibGU7
Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFi
bGUpCit7CisgICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKK30KKworLy8gc3Rh
dGljCitjb25zdCBjaGFyKiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUo
KQoreworICAgIHJldHVybiBpbmZvVGFibGVOYW1lOworfQorCitBYnN0cmFjdERhdGFiYXNlOjpB
YnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlIGRhdGFiYXNlVHlwZSkKKyAgICA6IG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9kYXRhYmFzZUNvbnRleHQo
RGF0YWJhc2VDb250ZXh0Ojpmcm9tKGNvbnRleHQpKQorICAgICwgbV9uYW1lKG5hbWUuaXNvbGF0
ZWRDb3B5KCkpCisgICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uaXNvbGF0
ZWRDb3B5KCkpCisgICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgp
KQorICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCisgICAgLCBtX2d1aWQoMCkK
KyAgICAsIG1fb3BlbmVkKGZhbHNlKQorICAgICwgbV9uZXcoZmFsc2UpCisgICAgLCBtX2lzU3lu
Y0RhdGFiYXNlKGRhdGFiYXNlVHlwZSA9PSBTeW5jRGF0YWJhc2UpCit7CisgICAgQVNTRVJUKGNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9y
aWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKKworICAg
IG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoaW5mb1Rh
YmxlTmFtZSk7CisKKyAgICBpZiAobV9uYW1lLmlzTnVsbCgpKQorICAgICAgICBtX25hbWUgPSAi
IjsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAg
ICAgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9T
dHJpbmcoKSwgbmFtZSk7CisgICAgICAgIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNo
U2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgaWYgKCFoYXNo
U2V0KSB7CisgICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFz
ZSo+OworICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0
KTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc2hTZXQtPmFkZCh0aGlzKTsKKyAgICB9CisKKyAg
ICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRh
YmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKK30KKworQWJzdHJhY3REYXRhYmFzZTo6fkFi
c3RyYWN0RGF0YWJhc2UoKQoreworICAgIEFTU0VSVCghbV9vcGVuZWQpOworfQorCit2b2lkIEFi
c3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQoreworICAgIGlmICghbV9vcGVuZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICBtX29w
ZW5lZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRl
eCgpKTsKKworICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1
aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAgIEFTU0VSVChoYXNoU2V0KTsK
KyAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKKyAgICAgICAgaGFzaFNl
dC0+cmVtb3ZlKHRoaXMpOworICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOworICAgICAgICAgICAg
ZGVsZXRlIGhhc2hTZXQ7CisgICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1f
Z3VpZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjp2
ZXJzaW9uKCkgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJz
IHRoZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGFjY3VyYXRlLCBidXQgd2UgY2Fubm90IHJlYWQgdGhl
CisgICAgLy8gYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZGF0YWJhc2Ugd2l0aG91dCBwb3RlbnRp
YWxseSBpbmR1Y2luZyBhIGRlYWRsb2NrLgorICAgIC8vIEZJWE1FOiBBZGQgYW4gYXN5bmMgdmVy
c2lvbiBnZXR0ZXIgdG8gdGhlIERhdGFiYXNlQVBJLgorICAgIHJldHVybiBnZXRDYWNoZWRWZXJz
aW9uKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZWMsIFN0
cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIEFTU0VSVChlcnJvck1lc3NhZ2UuaXNFbXB0eSgp
KTsKKworICAgIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKKworICAg
IGlmICghbV9zcWxpdGVEYXRhYmFzZS5vcGVuKG1fZmlsZW5hbWUsIHRydWUpKSB7CisgICAgICAg
IHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgxLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVE
YXRhYmFzZS5sYXN0RXJyb3IoKSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9y
TWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
IW1fc3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gKCVk
ICVzKSIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworCisgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhT
cWxpdGVCdXN5V2FpdFRpbWUpOworCisgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBHdWlk
VmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1
aWQpOworICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7Cisg
ICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRl
R3VpZFZlcnNpb25NYXAoKSkuCisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5z
ZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZC5pc29sYXRlZENvcHko
KTsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBm
b3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkp
OworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgICAgICAvLyBOb3RlOiBJbiBtdWx0
aS1wcm9jZXNzIGJyb3dzZXJzIHRoZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUsIGJ1
dAorICAgICAgICAgICAgLy8gd2UgY2Fubm90IHJlYWQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20g
dGhlIGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkKKyAgICAgICAgICAgIC8vIGluZHVjaW5n
IGEgZm9ybSBvZiBkZWFkbG9jaywgYSBidXN5dGltZW91dCBlcnJvciB3aGVuIHRyeWluZyB0bwor
ICAgICAgICAgICAgLy8gYWNjZXNzIHRoZSBkYXRhYmFzZS4gU28gd2UnbGwgdXNlIHRoZSBjYWNo
ZWQgdmFsdWUgaWYgd2UncmUgdW5hYmxlIHRvIHJlYWQKKyAgICAgICAgICAgIC8vIHRoZSB2YWx1
ZSBmcm9tIHRoZSBkYXRhYmFzZSBmaWxlIHdpdGhvdXQgd2FpdGluZy4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBBZGQgYW4gYXN5bmMgb3BlbkRhdGFiYXNlIG1ldGhvZCB0byB0aGUgRGF0YWJhc2VB
UEkuCisgICAgICAgICAgICBjb25zdCBpbnQgbm9TcWxpdGVCdXN5V2FpdFRpbWUgPSAwOworICAg
ICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChub1NxbGl0ZUJ1c3lXYWl0
VGltZSk7CisgICAgICAgICAgICBTdHJpbmcgdmVyc2lvbkZyb21EYXRhYmFzZTsKKyAgICAgICAg
ICAgIGlmIChnZXRWZXJzaW9uRnJvbURhdGFiYXNlKHZlcnNpb25Gcm9tRGF0YWJhc2UsIGZhbHNl
KSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbkZyb21EYXRhYmFz
ZTsKKyAgICAgICAgICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRW
ZXJzaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0
QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKyNlbmRpZgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3Ig
Z3VpZCAlaSIsIG1fZ3VpZCk7CisKKyAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fc3FsaXRlRGF0YWJhc2UpOworICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKyAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKSB7CisgICAgICAg
ICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDIsIElOVkFMSURfU1RBVEVfRVJSLCBt
X3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQg
dG8gc3RhcnQgdHJhbnNhY3Rpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFN0cmluZyB0YWJsZU5hbWUoaW5mb1RhYmxlTmFtZSk7CisgICAgICAgICAgICBpZiAoIW1f
c3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHModGFibGVOYW1lKSkgeworICAgICAgICAgICAgICAg
IG1fbmV3ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5l
eGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFICIgKyB0YWJsZU5hbWUgKyAiIChrZXkgVEVYVCBO
T1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZhbHVl
IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDMsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRv
IGNyZWF0ZSAnaW5mbycgdGFibGUiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJh
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbiwg
ZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDQsIElO
VkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAg
ICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVu
IGRhdGFiYXNlLCBmYWlsZWQgdG8gcmVhZCBjdXJyZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgIHRyYW5z
YWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9z
ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
TE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQgY3VycmVudCB2ZXJzaW9uICVzIGZyb20gZGF0YWJh
c2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUo
KS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX25ldyB8fCBzaG91
bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2V0dGluZyB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3Jl
YXRlZCIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFt
ZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRh
dGFiYXNlKG1fZXhwZWN0ZWRWZXJzaW9uLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDUsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
Zm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHdy
aXRlIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFj
aygpOworICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNp
b24pOworICAgICAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoY3VycmVudFZlcnNpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJEYXRhYmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFi
YXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBjdXJyZW50VmVyc2lvbiA9
ICIiOworICAgIH0KKworICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBl
bXB0eSBzdHJpbmcsIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24gd2Ug
aGF2ZSBtYXRjaGVzIHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgor
ICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4g
d2UgYWx3YXlzIHJldHVybiB3aXRoIHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHdl
IGhhdmUuCisgICAgaWYgKCghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2Up
ICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1
cnJlbnRWZXJzaW9uKSB7CisgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg2LCBJTlZB
TElEX1NUQVRFX0VSUiwgMCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9ICJ1bmFibGUgdG8gb3Bl
biBkYXRhYmFzZSwgdmVyc2lvbiBtaXNtYXRjaCwgJyIgKyBtX2V4cGVjdGVkVmVyc2lvbiArICIn
IGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50VmVyc2lvbiBvZiAnIiArIGN1cnJlbnRWZXJzaW9u
ICsgIiciOworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICBtX3NxbGl0
ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBB
U1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0
aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7CisKKyAgICBtX29wZW5lZCA9IHRydWU7CisK
KyAgICBpZiAobV9uZXcgJiYgIXNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQorICAgICAg
ICBtX2V4cGVjdGVkVmVyc2lvbiA9ICIiOyAvLyBUaGUgY2FsbGVyIHByb3ZpZGVkIGEgY3JlYXRp
b25DYWxsYmFjayB3aGljaCB3aWxsIHNldCB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KKworICAgIHJl
cG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFic3RyYWN0RGF0YWJhc2U6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuZ2V0KCk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBBYnN0cmFjdERhdGFiYXNlOjpzZWN1
cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5
T3JpZ2luLmdldCgpOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6c3RyaW5nSWRlbnRp
ZmllcigpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRp
bmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX25hbWUuaXNvbGF0ZWRDb3B5KCk7Cit9CisK
K1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0Cit7CisgICAgLy8g
UmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJl
dHVybiBtX2Rpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpOworfQorCit1bnNpZ25lZCBsb25nIEFi
c3RyYWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2Vz
dGltYXRlZFNpemU7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSgpIGNv
bnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFk
IHNhZmV0eQorICAgIHJldHVybiBtX2ZpbGVuYW1lLmlzb2xhdGVkQ29weSgpOworfQorCitib29s
IEFic3RyYWN0RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9u
LCBib29sIHNob3VsZENhY2hlVmVyc2lvbikKK3sKKyAgICBTdHJpbmcgcXVlcnkoU3RyaW5nKCJT
RUxFQ1QgdmFsdWUgRlJPTSAiKSArIGluZm9UYWJsZU5hbWUgKyAgIiBXSEVSRSBrZXkgPSAnIiAr
IHZlcnNpb25LZXkgKyAiJzsiKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxl
KCk7CisKKyAgICBib29sIHJlc3VsdCA9IHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSht
X3NxbGl0ZURhdGFiYXNlLCBxdWVyeSwgdmVyc2lvbik7CisgICAgaWYgKHJlc3VsdCkgeworICAg
ICAgICBpZiAoc2hvdWxkQ2FjaGVWZXJzaW9uKQorICAgICAgICAgICAgc2V0Q2FjaGVkVmVyc2lv
bih2ZXJzaW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnNldFZlcnNpb25J
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24p
Cit7CisgICAgLy8gVGhlIElOU0VSVCB3aWxsIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgZm9y
IHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0byB0aGUgVU5J
UVVFIE9OIENPTkZMSUNUIFJFUExBQ0UKKyAgICAvLyBjbGF1c2UgaW4gdGhlIENSRUFURSBzdGF0
ZW1lbnQgKHNlZSBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCisgICAgU3RyaW5n
IHF1ZXJ5KFN0cmluZygiSU5TRVJUIElOVE8gIikgKyBpbmZvVGFibGVOYW1lICsgICIgKGtleSwg
dmFsdWUpIFZBTFVFUyAoJyIgKyB2ZXJzaW9uS2V5ICsgIicsID8pOyIpOworCisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZh
bHVlSW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBxdWVyeSwgdmVyc2lvbik7CisgICAgaWYg
KHJlc3VsdCkgeworICAgICAgICBpZiAoc2hvdWxkQ2FjaGVWZXJzaW9uKQorICAgICAgICAgICAg
c2V0Q2FjaGVkVmVyc2lvbih2ZXJzaW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgKCVzKSIsIHZlcnNpb24uYXNj
aWkoKS5kYXRhKCksIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5lbmFibGUoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQWJzdHJh
Y3REYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sK
KyAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24uaXNvbGF0ZWRDb3B5KCk7Cit9CisKK1N0
cmluZyBBYnN0cmFjdERhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHJldHVybiBndWlkVG9WZXJzaW9u
TWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRDb3B5KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIGFjdHVhbFZlcnNpb24pCit7Cisg
ICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcCht
X2d1aWQsIGFjdHVhbFZlcnNpb24pOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OmdldEFj
dHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcgJmFjdHVhbFZlcnNpb24pCit7CisgICAg
QVNTRVJUKG1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJvd3NlcnMg
dGhlIGNhY2hlZCB2YWx1ZSBtYXkgYmUgaW5hY2N1cmF0ZS4KKyAgICAvLyBTbyB3ZSByZXRyaWV2
ZSB0aGUgdmFsdWUgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHVwZGF0ZSB0aGUgY2FjaGVkIHZhbHVl
IGhlcmUuCisgICAgcmV0dXJuIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbiwg
dHJ1ZSk7CisjZWxzZQorICAgIGFjdHVhbFZlcnNpb24gPSBnZXRDYWNoZWRWZXJzaW9uKCk7Cisg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpkaXNh
YmxlQXV0aG9yaXplcigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0
YWJhc2U6OmVuYWJsZUF1dGhvcml6ZXIoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9y
aXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworfQorCit2b2lkIEFi
c3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9u
bHkoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRBdXRob3JpemVyUGVybWlzc2lv
bnMoaW50IHBlcm1pc3Npb25zKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7
CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFBlcm1pc3Npb25zKHBlcm1pc3Npb25zKTsK
K30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkK
K3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFi
YXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOworfQorCitib29sIEFi
c3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQoKQoreworICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0
QWN0aW9uV2FzSW5zZXJ0KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxl
dGVzKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5yZXNldERlbGV0ZXMoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNl
OjpoYWREZWxldGVzKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAg
IHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+aGFkRGVsZXRlcygpOworfQorCit2b2lkIEFi
c3RyYWN0RGF0YWJhc2U6OnJlc2V0QXV0aG9yaXplcigpCit7CisgICAgaWYgKG1fZGF0YWJhc2VB
dXRob3JpemVyKQorICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKK30KKwor
dW5zaWduZWQgbG9uZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRh
dGFiYXNlKHRoaXMpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmluY3JlbWVudGFsVmFj
dXVtSWZOZWVkZWQoKQoreworICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0
YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIGludDY0X3QgdG90YWxTaXplID0gbV9zcWxpdGVE
YXRhYmFzZS50b3RhbFNpemUoKTsKKyAgICBpZiAodG90YWxTaXplIDw9IDEwICogZnJlZVNwYWNl
U2l6ZSkgeworICAgICAgICBpbnQgcmVzdWx0ID0gbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1l
bnRhbFZhY3V1bUNvbW1hbmQoKTsKKyAgICAgICAgcmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQo
cmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgICAg
IGxvZ0Vycm9yTWVzc2FnZShmb3JtYXRFcnJvck1lc3NhZ2UoImVycm9yIHZhY3V1bWluZyBkYXRh
YmFzZSIsIHJlc3VsdCwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSkpOworICAgIH0K
K30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbnRlcnJ1cHQoKQoreworICAgIG1fc3FsaXRl
RGF0YWJhc2UuaW50ZXJydXB0KCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNJbnRl
cnJ1cHRlZCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3FsaXRlRGF0YWJhc2UuZGF0
YWJhc2VNdXRleCgpKTsKKyAgICByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZS5pc0ludGVycnVwdGVk
KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6bG9nRXJyb3JNZXNzYWdlKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNv
bGVNZXNzYWdlKE90aGVyTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlKTsKK30KKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorLy8gVGhlc2Ug
YXJlIHVzZWQgdG8gZ2VuZXJhdGUgaGlzdG9ncmFtcyBvZiBlcnJvcnMgc2VlbiB3aXRoIHdlYnNx
bC4KKy8vIFNlZSBhYm91dDpoaXN0b2dyYW1zIGluIGNocm9taXVtLgordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpyZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNx
bEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVy
OjpyZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNv
ZGUsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0
Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENoYW5n
ZVZlcnNpb25SZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVy
cm9yQ29kZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0U3RhcnRUcmFuc2Fj
dGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRl
RXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rp
b25SZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29k
ZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25S
ZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9y
Q29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJl
c3VsdCh0aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsK
K30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0
KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUp
Cit7CisgICAgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCh0
aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKK30KKwor
dm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3Fs
aXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFi
YXNlUmVzdWx0KHRoaXMsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisKKyNlbHNlCit2b2lkIEFic3Ry
YWN0RGF0YWJhc2U6OnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChpbnQsIGludCwgaW50KSB7IH0K
K3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQsIGlu
dCwgaW50KSB7IH0KK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0
Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Cit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9
Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KGludCkg
eyB9CisjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2
aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuaDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QWJzdHJhY3REYXRhYmFzZV9oCisjZGVmaW5lIEFic3RyYWN0RGF0YWJhc2VfaAorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2lmICFMT0dfRElTQUJMRUQgfHwgIUVSUk9S
X0RJU0FCTEVECisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKK2NsYXNzIERhdGFiYXNl
Q29udGV4dDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9y
aWdpbjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgQWJzdHJhY3REYXRh
YmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBYnN0cmFjdERhdGFiYXNlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSk7CisKKyAgICB2aXJ0dWFsIH5BYnN0cmFjdERh
dGFiYXNlKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CisKKyAgICBi
b29sIG9wZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9CisgICAgYm9vbCBpc05ldygp
IGNvbnN0IHsgcmV0dXJuIG1fbmV3OyB9CisgICAgYm9vbCBpc1N5bmNEYXRhYmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNTeW5jRGF0YWJhc2U7IH0KKworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJp
bmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlO
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworICAgIFNRTGl0ZURh
dGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KKwor
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgaW5j
cmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOworICAgIHZvaWQgaW50ZXJydXB0KCk7CisgICAgYm9v
bCBpc0ludGVycnVwdGVkKCk7CisKKyAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7CisgICAg
dm9pZCBlbmFibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHko
KTsKKyAgICB2b2lkIHNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpOwor
ICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOworICAgIGJvb2wgbGFzdEFjdGlv
bldhc0luc2VydCgpOworICAgIHZvaWQgcmVzZXREZWxldGVzKCk7CisgICAgYm9vbCBoYWREZWxl
dGVzKCk7CisgICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBt
YXJrQXNEZWxldGVkQW5kQ2xvc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRp
YXRlbHkoKSA9IDA7CisKKyAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0OyB9CisKK3Byb3RlY3RlZDoKKyAgICBmcmll
bmQgY2xhc3MgQ2hhbmdlVmVyc2lvbldyYXBwZXI7CisgICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRl
bWVudDsKKyAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50U3luYzsKKyAgICBmcmllbmQgY2xh
c3MgU1FMVHJhbnNhY3Rpb25TeW5jOworICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsK
KworICAgIGVudW0gRGF0YWJhc2VUeXBlIHsKKyAgICAgICAgQXN5bmNEYXRhYmFzZSwKKyAgICAg
ICAgU3luY0RhdGFiYXNlCisgICAgfTsKKworICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSk7CisKKyAgICB2b2lk
IGNsb3NlRGF0YWJhc2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0
cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKKyAgICBib29s
IHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRD
YWNoZVZlcnNpb24gPSB0cnVlKTsKKyAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBT
dHJpbmcmKTsKKyAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwZWN0ZWRWZXJzaW9uOyB9CisgICAgU3RyaW5nIGdldENhY2hlZFZlcnNpb24oKWNv
bnN0OworICAgIHZvaWQgc2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICBib29s
IGdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcmIHZlcnNpb24pOworCisgICAg
dm9pZCBsb2dFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIHZvaWQg
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNv
ZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHZvaWQgcmVwb3J0Q2hhbmdlVmVyc2lvblJl
c3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JD
b2RlKTsKKyAgICB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0
ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CisgICAgdm9pZCBy
ZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJy
b3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICB2b2lkIHJlcG9ydEV4ZWN1dGVTdGF0
ZW1lbnRSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0
ZUVycm9yQ29kZSk7CisgICAgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3Fs
aXRlRXJyb3JDb2RlKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUoKTsKKworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW47CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKKyAgICBEYXRhYmFzZUNvbnRleHQqIG1fZGF0YWJhc2VDb250ZXh0
OyAvLyBPd25lZCBieSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisKKyAgICBTdHJpbmcgbV9u
YW1lOworICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5
TmFtZTsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKKyAgICBTdHJpbmcgbV9m
aWxlbmFtZTsKKworI2lmICFMT0dfRElTQUJMRUQgfHwgIUVSUk9SX0RJU0FCTEVECisgICAgU3Ry
aW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBpbnQgbV9ndWlkOworICAgIGJvb2wgbV9vcGVuZWQ7CisgICAgYm9vbCBtX25l
dzsKKyAgICBjb25zdCBib29sIG1faXNTeW5jRGF0YWJhc2U7CisKKyAgICBTUUxpdGVEYXRhYmFz
ZSBtX3NxbGl0ZURhdGFiYXNlOworCisgICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9k
YXRhYmFzZUF1dGhvcml6ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gQWJzdHJhY3REYXRhYmFzZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0NoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcDoxMDk4NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxFcnJvci5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0NoYW5nZVZlcnNpb25XcmFwcGVyOjpDaGFuZ2VWZXJzaW9uV3JhcHBl
cihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikKKyAg
ICA6IG1fb2xkVmVyc2lvbihvbGRWZXJzaW9uLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9uZXdW
ZXJzaW9uKG5ld1ZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCit7Cit9CisKK2Jvb2wgQ2hhbmdlVmVy
c2lvbldyYXBwZXI6OnBlcmZvcm1QcmVmbGlnaHQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQoreworICAgIEFTU0VSVCh0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7
CisKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKwor
ICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAgIGlmICghZGF0YWJhc2UtPmdldFZlcnNpb25G
cm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbikpIHsKKyAgICAgICAgaW50IHNxbGl0ZUVycm9yID0g
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCk7CisgICAgICAgIGRhdGFiYXNl
LT5yZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDEsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgc3Fs
aXRlRXJyb3IpOworICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJv
cjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gcmVhZCB0aGUgY3VycmVudCB2ZXJzaW9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlRXJyb3IsIGRhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG1fb2xkVmVyc2lvbikgeworICAg
ICAgICBkYXRhYmFzZS0+cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCgyLCBTUUxFcnJvcjo6VkVS
U0lPTl9FUlIsIDApOworICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxF
cnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBg
b2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1hdGNoIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDaGFuZ2VWZXJzaW9uV3Jh
cHBlcjo6cGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorewor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7CisKKyAg
ICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKworICAgIGlm
ICghZGF0YWJhc2UtPnNldFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKKyAgICAg
ICAgaW50IHNxbGl0ZUVycm9yID0gZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9y
KCk7CisgICAgICAgIGRhdGFiYXNlLT5yZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDMsIFNRTEVy
cm9yOjpVTktOT1dOX0VSUiwgc3FsaXRlRXJyb3IpOworICAgICAgICBtX3NxbEVycm9yID0gU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gc2V0IG5ldyB2
ZXJzaW9uIGluIGRhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3FsaXRlRXJyb3IsIGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRhdGFiYXNlLT5zZXRFeHBl
Y3RlZFZlcnNpb24obV9uZXdWZXJzaW9uKTsKKworICAgIGRhdGFiYXNlLT5yZXBvcnRDaGFuZ2VW
ZXJzaW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6aGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0
KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICB0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS0+c2V0Q2FjaGVkVmVyc2lvbihtX29sZFZlcnNpb24pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0NoYW5nZVZlcnNpb25XcmFwcGVyLmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIENoYW5nZVZlcnNpb25XcmFwcGVyX2gKKyNkZWZpbmUgQ2hhbmdl
VmVyc2lvbldyYXBwZXJfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNRTEVycm9y
OworCitjbGFzcyBDaGFuZ2VWZXJzaW9uV3JhcHBlciA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbldy
YXBwZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoYW5nZVZlcnNpb25XcmFw
cGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1Zl
cnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGFuZ2VWZXJzaW9uV3JhcHBlcihvbGRWZXJz
aW9uLCBuZXdWZXJzaW9uKSk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0
KFNRTFRyYW5zYWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Qb3N0ZmxpZ2h0KFNR
TFRyYW5zYWN0aW9uKik7CisgICAgdmlydHVhbCBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7
IHJldHVybiBtX3NxbEVycm9yLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNvbW1p
dEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiopOworCitwcml2YXRlOgorICAg
IENoYW5nZVZlcnNpb25XcmFwcGVyKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBuZXdWZXJzaW9uKTsKKworICAgIFN0cmluZyBtX29sZFZlcnNpb247CisgICAgU3RyaW5n
IG1fbmV3VmVyc2lvbjsKKyAgICBSZWZQdHI8U1FMRXJyb3I+IG1fc3FsRXJyb3I7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gQ2hhbmdlVmVyc2lv
bldyYXBwZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01X
aW5kb3dTUUxEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTg1OCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5jcHA6MTA5
ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxE
YXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJET01XaW5kb3dTUUxEYXRhYmFzZS5oIgor
CisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YWJhc2U+
IERPTVdpbmRvd1NRTERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoRE9NV2luZG93KiB3aW5kb3csIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKCF3aW5kb3ctPmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSAwOworICAgIGlmIChBYnN0
cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkKKyAgICAgICAgZGF0YWJhc2UgPSBEYXRh
YmFzZTo6b3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKSwgbmFtZSwgdmVyc2lvbiwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKKworICAgIGlm
ICghZGF0YWJhc2UgJiYgIWVjKQorICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKworICAgIHJl
dHVybiBkYXRhYmFzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0
YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmgJKHJldmlzaW9uIDEw
OTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5o
OjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRE9NV2luZG93
U1FMRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBET01XaW5kb3dTUUxEYXRhYmFz
ZV9oCisjZGVmaW5lIERPTVdpbmRvd1NRTERhdGFiYXNlX2gKKworI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBET01XaW5kb3c7CitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQ2FsbGJh
Y2s7CitjbGFzcyBGcmFtZTsKKworY2xhc3MgRE9NV2luZG93U1FMRGF0YWJhc2UgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoRE9NV2luZG93
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisKK3By
aXZhdGU6CisgICAgRE9NV2luZG93U1FMRGF0YWJhc2UoKSB7IH07CisgICAgfkRPTVdpbmRvd1NR
TERhdGFiYXNlKCkgeyB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERPTVdpbmRvd1NRTERhdGFiYXNl
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRE9NV2luZG93U1FM
RGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0
YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsOjEwOTg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2Uu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIFN1cHBsZW1lbnRhbD1ET01XaW5kb3cKKyAgICBd
IERPTVdpbmRvd1NRTERhdGFiYXNlIHsKKyAgICAgICAgW1Y4RW5hYmxlZEF0UnVudGltZV0gRGF0
YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lv
biwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIERhdGFiYXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxs
YmFjaykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworI2lmICFkZWZpbmVkKExB
TkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAorICAgICAgICBhdHRyaWJ1dGUgU1FMRXhjZXB0
aW9uQ29uc3RydWN0b3IgU1FMRXhjZXB0aW9uOworI2VuZGlmCisgICAgfTsKKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHA6
MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJl
YWRUYXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTUUxFcnJvci5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgorI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRl
ICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIFVTRShKU0MpCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0
aW9uQ2FsbGJhY2spCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNl
Q3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
CisgICAgeworICAgICAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJh
c2UuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2tUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+IGNhbGxiYWNrKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAg
ICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+
IG1fY3JlYXRpb25DYWxsYmFjazsKK307CisKK1Bhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNl
OjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2Fs
bGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUmIGUpCit7CisgICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5F
c3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVz
IG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBh
ZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAg
ICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywg
ZSwgZXJyb3JNZXNzYWdlKSkgeworICAgICAgICBkYXRhYmFzZS0+bG9nRXJyb3JNZXNzYWdlKGVy
cm9yTWVzc2FnZSk7CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9w
ZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0
LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisK
KyAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29udGV4dCktPnNldEhhc09wZW5EYXRhYmFzZXMo
KTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRl
eHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbik7CisKKyAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25D
YWxsYmFjay5nZXQoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0
YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdl
dCgpKTsKKyAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRh
c2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRhdGFiYXNlLCBjcmVhdGlv
bkNhbGxiYWNrKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGFiYXNlOworfQorCitEYXRhYmFz
ZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIDogQWJzdHJhY3REYXRh
YmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplLCBBc3luY0RhdGFiYXNlKQorICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFs
c2UpCisgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fZGVs
ZXRlZChmYWxzZSkKK3sKKyAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+aXNvbGF0ZWRDb3B5KCk7CisKKyAgICBTY3JpcHRD
b250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKTsKK30KKworY2xhc3MgRGVyZWZDb250ZXh0VGFzayA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxEZXJlZkNvbnRleHRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBEZXJlZkNvbnRleHRUYXNrKGNvbnRleHQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCA9PSBtX2NvbnRleHQpOworICAg
ICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDbGVh
bnVwVGFzaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworcHJpdmF0ZToKKyAgICBEZXJlZkNv
bnRleHRUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gY29udGV4dCkKKyAg
ICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFJlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7Cit9OworCitEYXRhYmFzZTo6fkRh
dGFiYXNlKCkKK3sKKyAgICAvLyBUaGUgcmVmZXJlbmNlIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IG5lZWRzIHRvIGJlIGNsZWFyZWQgb24gdGhlIEphdmFTY3JpcHQgdGhyZWFkLiAgSWYg
d2UncmUgb24gdGhhdCB0aHJlYWQgYWxyZWFkeSwgd2UgY2FuIGp1c3QgbGV0IHRoZSBSZWZQdHIn
cyBkZXN0cnVjdGlvbiBkbyB0aGUgZGVyZWZmaW5nLgorICAgIGlmICghbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICAvLyBHcmFiIGEgcG9pbnRl
ciB0byB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBoZXJlIGJlY2F1c2Ugd2UncmUgcmVsZWFzaW5nIGl0
IHdoZW4gd2UgcGFzcyBpdCB0bworICAgICAgICAvLyBEZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUu
CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
PSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7CisgICAgICAgIAorICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKSkpOworICAgIH0KK30KKworU3RyaW5nIERh
dGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24oKTsK
K30KKworYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7
CisgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKKyAgICBpZiAoIWRh
dGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpIHx8IGRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgmc3luY2hyb25pemVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgT3du
UHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUodGhp
cywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZzeW5jaHJvbml6ZXIsIGUsIGVycm9yTWVzc2Fn
ZSwgc3VjY2Vzcyk7CisgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNj
aGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CisgICAgc3luY2hyb25pemVyLndh
aXRGb3JUYXNrQ29tcGxldGlvbigpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3ZvaWQg
RGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCit7CisgICAgaWYgKG1fZGVsZXRlZCB8
fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIExPRyhTdG9yYWdlQVBJLCAiTWFya2luZyAlcyAoJXApIGFzIGRlbGV0ZWQiLCBzdHJp
bmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIHRoaXMpOworICAgIG1fZGVsZXRlZCA9IHRy
dWU7CisKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25pemVyOworICAgIGlm
IChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dGVybWluYXRpb25SZXF1ZXN0
ZWQoJnN5bmNocm9uaXplcikpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSBo
YW5kbGUgJXAgaXMgb24gYSB0ZXJtaW5hdGVkIERhdGFiYXNlVGhyZWFkLCBjYW5ub3QgYmUgbWFy
a2VkIGZvciBub3JtYWwgY2xvc3VyZVxuIiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IHRhc2sgPSBEYXRhYmFzZUNsb3NlVGFz
azo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIpOworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOwor
ICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKK30KKwordm9pZCBEYXRh
YmFzZTo6Y2xvc2UoKQoreworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZUNvbnRleHQo
KS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CisKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKyAgICAgICAg
bV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0gZmFsc2U7CisgICAgICAgIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1fdHJhbnNhY3Rpb25RdWV1ZS5jbGVhcigp
OworICAgIH0KKworICAgIGNsb3NlRGF0YWJhc2UoKTsKKworICAgIC8vIE11c3QgcmVmKCkgYmVm
b3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KKyAg
ICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOworICAgIGRhdGFiYXNlQ29udGV4dCgp
LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKKyAgICBkYXRh
YmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3Mo
dGhpcyk7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNl
KHRoaXMpOworfQorCit2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBB
U1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
RGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkID0gZGF0YWJhc2VDb250ZXh0KCktPmRhdGFi
YXNlVGhyZWFkKCk7CisgICAgaWYgKGRhdGFiYXNlVGhyZWFkICYmICFkYXRhYmFzZVRocmVhZC0+
dGVybWluYXRpb25SZXF1ZXN0ZWQoKSAmJiBvcGVuZWQoKSkgeworICAgICAgICBsb2dFcnJvck1l
c3NhZ2UoImZvcmNpYmx5IGNsb3NpbmcgZGF0YWJhc2UiKTsKKyAgICAgICAgZGF0YWJhc2VUaHJl
YWQtPnNjaGVkdWxlSW1tZWRpYXRlVGFzayhEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMs
IDApKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNp
emUoKSBjb25zdAoreworICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRN
YXhTaXplRm9yRGF0YWJhc2UodGhpcyk7Cit9CisKK2Jvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUs
IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIGlmIChBYnN0cmFjdERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZSwgZXJyb3JNZXNzYWdl
KSkgeworICAgICAgICBpZiAoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCisg
ICAgICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0
YWJhc2VPcGVuKHRoaXMpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJp
bmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2spCit7CisgICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OmNyZWF0ZShvbGRW
ZXJzaW9uLCBuZXdWZXJzaW9uKSwgZmFsc2UpOworfQorCit2b2lkIERhdGFiYXNlOjp0cmFuc2Fj
dGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBydW5UcmFuc2FjdGlvbihj
YWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCBmYWxzZSk7Cit9CisK
K3ZvaWQgRGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aykKK3sKKyAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vz
c0NhbGxiYWNrLCAwLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgY2FsbFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTEVycm9yPiBlcnJvcikK
K3sKKyAgICBjYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOworfQorCit2b2lkIERh
dGFiYXNlOjpydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+
IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVy
PiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Ry
YW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKyAgICBpZiAoIW1faXNUcmFuc2FjdGlvblF1ZXVl
RW5hYmxlZCkgeworICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykgeworICAgICAgICAgICAgUmVm
UHRyPFNRTEVycm9yPiBlcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05f
RVJSLCAiZGF0YWJhc2UgaGFzIGJlZW4gY2xvc2VkIik7CisgICAgICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY2FsbFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgZXJyb3IucmVsZWFzZSgpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJy
b3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyLCByZWFkT25seSk7CisgICAgbV90
cmFuc2FjdGlvblF1ZXVlLmFwcGVuZCh0cmFuc2FjdGlvbi5yZWxlYXNlKCkpOworICAgIGlmICgh
bV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MpCisgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsK
K30KKwordm9pZCBEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Cisg
ICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBzY2hlZHVsZVRyYW5zYWN0
aW9uKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKQoreworICAg
IEFTU0VSVCghbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleC50cnlMb2NrKCkpOyAvLyBMb2Nr
ZWQgYnkgY2FsbGVyLgorICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb247CisK
KyAgICBpZiAobV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkICYmICFtX3RyYW5zYWN0aW9uUXVl
dWUuaXNFbXB0eSgpKQorICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS50
YWtlRmlyc3QoKTsKKworICAgIGlmICh0cmFuc2FjdGlvbiAmJiBkYXRhYmFzZUNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKSkgeworICAgICAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsK
KyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFzay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rp
b24oKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJl
bGVhc2UoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0g
ZmFsc2U7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVseSkKK3sKKyAgICBpZiAoIWRh
dGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0
aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVk
dWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRoZSB0cmFuc2FjdGlvbiBzdGVw
XG4iLCB0YXNrLmdldCgpKTsKKyAgICBpZiAoaW1tZWRpYXRlbHkpCisgICAgICAgIGRhdGFiYXNl
Q29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5y
ZWxlYXNlKCkpOworICAgIGVsc2UKKyAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJlbGVhc2UoKSk7Cit9CisKK2NsYXNzIERlbGl2
ZXJQZW5kaW5nQ2FsbGJhY2tUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERlbGl2ZXJQZW5kaW5nQ2FsbGJh
Y2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGl2ZXJQZW5kaW5nQ2FsbGJhY2tU
YXNrKHRyYW5zYWN0aW9uKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+
cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZWxpdmVy
UGVuZGluZ0NhbGxiYWNrVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
bikKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Cit9OworCit2b2lkIERh
dGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGVsaXZl
clBlbmRpbmdDYWxsYmFja1Rhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbikpOworfQorCitWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQoreworICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVzIGZvciBkYXRh
YmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBl
bmFibGVBdXRob3JpemVyKCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAg
IH0KKworICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXM7CisgICAgaW50IHJlc3VsdDsKKyAg
ICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgewor
ICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBpZiAobmFtZSAhPSBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkKKyAgICAgICAgICAgIHRhYmxl
TmFtZXMuYXBwZW5kKG5hbWUpOworICAgIH0KKworICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKKwor
ICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJST1IoIkVy
cm9yIGdldHRpbmcgdGFibGVzIGZvciBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdGFibGVOYW1lczsKK30KKworU1FMVHJhbnNhY3Rpb25DbGllbnQqIERh
dGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGFiYXNl
Q29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNsaWVudCgpOworfQorCitT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IERhdGFi
YXNlOjp0YWJsZU5hbWVzKCkKK3sKKyAgICAvLyBGSVhNRTogTm90IHVzaW5nIGlzb2xhdGVkQ29w
eSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVy
bnMKKyAgICAvLyBpbiBkZWFsaW5nIHdpdGggdGhlbS4gSG93ZXZlciwgaWYgdGhlIGNvZGUgY2hh
bmdlcywgdGhpcyBtYXkgbm90IGJlIHRydWUgYW55bW9yZS4KKyAgICBWZWN0b3I8U3RyaW5nPiBy
ZXN1bHQ7CisgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKKyAgICBp
ZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpIHx8IGRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgmc3luY2hyb25pemVy
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIE93blB0cjxEYXRhYmFzZVRhYmxlTmFt
ZXNUYXNrPiB0YXNrID0gRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5j
aHJvbml6ZXIsIHJlc3VsdCk7CisgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CisgICAgc3luY2hyb25p
emVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
U2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAg
aWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCisgICAgICAg
IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKTsKKyAgICBpZiAoY3Vy
cmVudFRocmVhZCgpID09IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRU
aHJlYWRJRCgpKQorICAgICAgICByZXR1cm4gbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2lu
LmdldCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFiYXNlX2gKKyNkZWZpbmUgRGF0YWJhc2VfaAorCisj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBE
YXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNl
Y3VyaXR5T3JpZ2luOworY2xhc3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGllbnQ7CitjbGFzcyBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOworY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworY2xh
c3MgU1FMVHJhbnNhY3Rpb25XcmFwcGVyOworY2xhc3MgVm9pZENhbGxiYWNrOworCit0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERh
dGFiYXNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZSgpOworCisgICAgLy8gRGly
ZWN0IHN1cHBvcnQgZm9yIHRoZSBET00gQVBJCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKyAgICB2
b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcm
IG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sCisgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgdm9pZCB0cmFu
c2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2spOworICAgIHZvaWQgcmVhZFRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisKKyAgICAvLyBJ
bnRlcm5hbCBlbmdpbmUgc3VwcG9ydAorICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsK
KworICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CisgICAgYm9vbCBkZWxl
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CisKKyAgICB2b2lkIGNsb3NlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKKworICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11
bVNpemUoKSBjb25zdDsKKworICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNR
TFRyYW5zYWN0aW9uKik7CisgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFu
c2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxzZSk7CisKKyAgICBTUUxUcmFuc2FjdGlv
bkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsKKyAgICBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgY2xhc3MgRGF0YWJhc2VPcGVuVGFzazsKKyAgICBjbGFzcyBEYXRhYmFzZUNsb3NlVGFzazsK
KyAgICBjbGFzcyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazsKKyAgICBjbGFzcyBEYXRhYmFzZVRh
YmxlTmFtZXNUYXNrOworCisgICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKTsKKyAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CisK
KyAgICBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBi
b29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4
Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKKyAgICB2b2lkIGluUHJvZ3Jl
c3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbigp
OworCisgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybUdldFRhYmxlTmFtZXMoKTsKKworICAgIHN0
YXRpYyB2b2lkIGRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOworCisgICAgRGVxdWU8UmVm
UHRyPFNRTFRyYW5zYWN0aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKKyAgICBNdXRleCBtX3Ry
YW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4OworICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jl
c3M7CisgICAgYm9vbCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQ7CisKKyAgICBSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKKworICAgIGJv
b2wgbV9kZWxldGVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERhdGFiYXNlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuaWRsCShyZXZpc2lv
biAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsOjEwOTg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGlu
dGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKKyAgICAgICAgT21p
dENvbnN0cnVjdG9yLAorICAgICAgICBKU05vU3RhdGljVGFibGVzCisgICAgXSBEYXRhYmFzZSB7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKKyAgICAgICAg
dm9pZCBjaGFuZ2VWZXJzaW9uKGluIERPTVN0cmluZyBvbGRWZXJzaW9uLCBpbiBET01TdHJpbmcg
bmV3VmVyc2lvbiwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ayBjYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFZvaWRDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICB2b2lkIHRyYW5zYWN0aW9uKGluIFtDYWxsYmFj
a10gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25h
bF0gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFtDYWxsYmFj
aywgT3B0aW9uYWxdIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICB2b2lk
IHJlYWRUcmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayBlcnJvckNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBWb2lkQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrKTsKKyAgICB9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZp
c2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3Jp
emVyLmNwcDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0Rh
dGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gRGF0
YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5h
bWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUF1dGhvcml6ZXIoZGF0YWJh
c2VJbmZvVGFibGVOYW1lKSk7Cit9CisKK0RhdGFiYXNlQXV0aG9yaXplcjo6RGF0YWJhc2VBdXRo
b3JpemVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKQorICAgIDogbV9zZWN1
cml0eUVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZShkYXRhYmFz
ZUluZm9UYWJsZU5hbWUpCit7CisgICAgcmVzZXQoKTsKKyAgICBhZGRXaGl0ZWxpc3RlZEZ1bmN0
aW9ucygpOworfQorCit2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQoKQoreworICAgIG1f
bGFzdEFjdGlvbldhc0luc2VydCA9IGZhbHNlOworICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRh
YmFzZSA9IGZhbHNlOworICAgIG1fcGVybWlzc2lvbnMgPSBSZWFkV3JpdGVNYXNrOworfQorCit2
b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXREZWxldGVzKCkKK3sKKyAgICBtX2hhZERlbGV0
ZXMgPSBmYWxzZTsKK30KKwordm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFkZFdoaXRlbGlzdGVk
RnVuY3Rpb25zKCkKK3sKKyAgICAvLyBTUUxpdGUgZnVuY3Rpb25zIHVzZWQgdG8gaGVscCBpbXBs
ZW1lbnQgc29tZSBvcGVyYXRpb25zCisgICAgLy8gQUxURVIgVEFCTEUgaGVscGVycworICAgIG1f
d2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzcWxpdGVfcmVuYW1lX3RhYmxlIik7CisgICAgbV93
aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInNxbGl0ZV9yZW5hbWVfdHJpZ2dlciIpOworICAgIC8v
IEdMT0IgaGVscGVycworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJnbG9iIik7CisK
KyAgICAvLyBTUUxpdGUgY29yZSBmdW5jdGlvbnMKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25z
LmFkZCgiYWJzIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImNoYW5nZXMiKTsK
KyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiY29hbGVzY2UiKTsKKyAgICBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zLmFkZCgiZ2xvYiIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMu
YWRkKCJpZm51bGwiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiaGV4Iik7Cisg
ICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImxhc3RfaW5zZXJ0X3Jvd2lkIik7CisgICAg
bV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImxlbmd0aCIpOworICAgIG1fd2hpdGVsaXN0ZWRG
dW5jdGlvbnMuYWRkKCJsaWtlIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImxv
d2VyIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImx0cmltIik7CisgICAgbV93
aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoIm1heCIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlv
bnMuYWRkKCJtaW4iKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibnVsbGlmIik7
CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInF1b3RlIik7CisgICAgbV93aGl0ZWxp
c3RlZEZ1bmN0aW9ucy5hZGQoInJlcGxhY2UiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25z
LmFkZCgicm91bmQiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgicnRyaW0iKTsK
KyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic291bmRleCIpOworICAgIG1fd2hpdGVs
aXN0ZWRGdW5jdGlvbnMuYWRkKCJzcWxpdGVfc291cmNlX2lkIik7CisgICAgbV93aGl0ZWxpc3Rl
ZEZ1bmN0aW9ucy5hZGQoInNxbGl0ZV92ZXJzaW9uIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0
aW9ucy5hZGQoInN1YnN0ciIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJ0b3Rh
bF9jaGFuZ2VzIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInRyaW0iKTsKKyAg
ICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgidHlwZW9mIik7CisgICAgbV93aGl0ZWxpc3Rl
ZEZ1bmN0aW9ucy5hZGQoInVwcGVyIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQo
Inplcm9ibG9iIik7CisKKyAgICAvLyBTUUxpdGUgZGF0ZSBhbmQgdGltZSBmdW5jdGlvbnMKKyAg
ICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiZGF0ZSIpOworICAgIG1fd2hpdGVsaXN0ZWRG
dW5jdGlvbnMuYWRkKCJ0aW1lIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImRh
dGV0aW1lIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImp1bGlhbmRheSIpOwor
ICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzdHJmdGltZSIpOworCisgICAgLy8gU1FM
aXRlIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMKKyAgICAvLyBtYXgoKSBhbmQgbWluKCkgYXJlIGFscmVh
ZHkgaW4gdGhlIGxpc3QKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiYXZnIik7Cisg
ICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImNvdW50Iik7CisgICAgbV93aGl0ZWxpc3Rl
ZEZ1bmN0aW9ucy5hZGQoImdyb3VwX2NvbmNhdCIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlv
bnMuYWRkKCJzdW0iKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgidG90YWwiKTsK
KworICAgIC8vIFNRTGl0ZSBGVFMgZnVuY3Rpb25zCisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9u
cy5hZGQoIm1hdGNoIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInNuaXBwZXQi
KTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgib2Zmc2V0cyIpOworICAgIG1fd2hp
dGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJvcHRpbWl6ZSIpOworCisgICAgLy8gU1FMaXRlIElDVSBm
dW5jdGlvbnMKKyAgICAvLyBsaWtlKCksIGxvd2VyKCkgYW5kIHVwcGVyKCkgYXJlIGFscmVhZHkg
aW4gdGhlIGxpc3QKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgicmVnZXhwIik7Cit9
CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRhYmxlKGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7CisKKyAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOworICAgIHJl
dHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVUZW1wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7Cisg
ICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHJlc3VsdHMgaW4gYSBVUERBVEUgb3BlcmF0
aW9uLCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlv
bnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2Fs
bG93IFNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcworICAgIGlmICghYWxs
b3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICByZXR1cm4gZGVu
eUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6ZHJvcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGlmICghYWxsb3dX
cml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICByZXR1cm4gdXBkYXRl
RGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0
aG9yaXplcjo6ZHJvcFRlbXBUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICAv
LyBTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHJlc3VsdHMgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3
aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3Ig
cHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93IFNR
TElURV9EUk9QX1RFTVBfVEFCTEUgaW4gdGhlc2UgY2FzZXMKKyAgICBpZiAoIWFsbG93V3JpdGUo
KSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgcmV0dXJuIHVwZGF0ZURlbGV0
ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmFsbG93QWx0ZXJUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKK3sKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55
OworCisgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKKyAgICByZXR1cm4g
ZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
Cit7CisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
KworICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CisgICAgcmV0dXJuIGRl
bnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZVRlbXBJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKK3sKKyAgICAvLyBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBpbiBh
IFVQREFURSBvciBJTlNFUlQgb3BlcmF0aW9uLAorICAgIC8vIHdoaWNoIGlzIG5vdCBhbGxvd2Vk
IGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywKKyAgICAvLyBz
byB3ZSBtaWdodCBhcyB3ZWxsIGRpc2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBpbiB0
aGVzZSBjYXNlcworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7CisKKyAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30K
KworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcEluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICBy
ZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBJ
bmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICAvLyBT
UUxJVEVfRFJPUF9URU1QX0lOREVYIHNob3VsZCByZXN1bHQgaW4gYSBERUxFVEUgb3BlcmF0aW9u
LCB3aGljaCBpcworICAgIC8vIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQKKyAgICAvLyBhcyB3ZWxsIGRpc2FsbG93
IFNRTElURV9EUk9QX1RFTVBfSU5ERVggaW4gdGhlc2UgY2FzZXMKKyAgICBpZiAoIWFsbG93V3Jp
dGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgcmV0dXJuIHVwZGF0ZURl
bGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZVRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5h
bWUpCit7CisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVu
eTsKKworICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CisgICAgcmV0dXJu
IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZVRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQoreworICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHJlc3VsdHMgaW4g
YSBJTlNFUlQgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQt
b25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAg
ICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIGluIHRoZXNlIGNh
c2VzCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
KworICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVHJpZ2dlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSkKK3sKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OworCisgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dl
cihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICAvLyBTUUxJ
VEVfRFJPUF9URU1QX1RSSUdHRVIgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNo
IGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2
YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcworICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRF
X0RST1BfVEVNUF9UUklHR0VSIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKCFhbGxvd1dyaXRlKCkp
CisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIHJldHVybiB1cGRhdGVEZWxldGVz
QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVy
OjpjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuICghYWxsb3dXcml0ZSgp
ID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjpjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIFNRTElURV9DUkVB
VEVfVEVNUF9WSUVXIHJlc3VsdHMgaW4gYSBVUERBVEUgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QK
KyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93
c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9DUkVBVEVf
VEVNUF9WSUVXIGluIHRoZXNlIGNhc2VzCisgICAgcmV0dXJuICghYWxsb3dXcml0ZSgpID8gU1FM
QXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpk
cm9wVmlldyhjb25zdCBTdHJpbmcmKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOworICAgIHJl
dHVybiBTUUxBdXRoQWxsb3c7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1w
Vmlldyhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVklFVyByZXN1
bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBp
biByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0
IGFzCisgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgaW4gdGhlc2Ug
Y2FzZXMKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55
OworCisgICAgbV9oYWREZWxldGVzID0gdHJ1ZTsKKyAgICByZXR1cm4gU1FMQXV0aEFsbG93Owor
fQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKK3sKKyAgICBpZiAoIWFsbG93V3Jp
dGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgLy8gQWxsb3cgb25seSB0
aGUgRlRTMyBleHRlbnNpb24KKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG1vZHVsZU5hbWUs
ICJmdHMzIikpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIG1fbGFzdEFjdGlv
bkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CisgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKK3sKKyAgICBp
ZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgLy8g
QWxsb3cgb25seSB0aGUgRlRTMyBleHRlbnNpb24KKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNl
KG1vZHVsZU5hbWUsICJmdHMzIikpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAg
IHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQorCitp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0RlbGV0ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKK3sKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55
OworCisgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7
Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FM
QXV0aERlbnk7CisKKyAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOworICAg
IG1fbGFzdEFjdGlvbldhc0luc2VydCA9IHRydWU7CisgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFi
bGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93VXBk
YXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmKQoreworICAgIGlmICgh
YWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICBtX2xhc3RB
Y3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOworICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1RyYW5z
YWN0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6
IFNRTEF1dGhBbGxvdzsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWFkKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmKQoreworICAgIGlmIChtX3Blcm1p
c3Npb25zICYgTm9BY2Nlc3NNYXNrICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1
cm4gU1FMQXV0aERlbnk7CisgICAgCisgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93UmVpbmRleChjb25z
dCBTdHJpbmcmKQoreworICAgIHJldHVybiAoIWFsbG93V3JpdGUoKSA/IFNRTEF1dGhEZW55IDog
U1FMQXV0aEFsbG93KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBbmFseXpl
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1ByYWdt
YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBtX3NlY3VyaXR5
RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93OworfQorCitpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjphbGxvd0F0dGFjaChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBtX3Nl
Y3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93OworfQorCitpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjphbGxvd0RldGFjaChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVy
biBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93OworfQorCitp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25OYW1lKQoreworICAgIGlmIChtX3NlY3VyaXR5RW5hYmxlZCAmJiAhbV93aGl0ZWxpc3RlZEZ1
bmN0aW9ucy5jb250YWlucyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERl
bnk7CisKKyAgICByZXR1cm4gU1FMQXV0aEFsbG93OworfQorCit2b2lkIERhdGFiYXNlQXV0aG9y
aXplcjo6ZGlzYWJsZSgpCit7CisgICAgbV9zZWN1cml0eUVuYWJsZWQgPSBmYWxzZTsKK30KKwor
dm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OmVuYWJsZSgpCit7CisgICAgbV9zZWN1cml0eUVuYWJs
ZWQgPSB0cnVlOworfQorCitib29sIERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dXcml0ZSgpCit7
CisgICAgcmV0dXJuICEobV9zZWN1cml0eUVuYWJsZWQgJiYgKG1fcGVybWlzc2lvbnMgJiBSZWFk
T25seU1hc2sgfHwgbV9wZXJtaXNzaW9ucyAmIE5vQWNjZXNzTWFzaykpOworfQorCit2b2lkIERh
dGFiYXNlQXV0aG9yaXplcjo6c2V0UmVhZE9ubHkoKQoreworICAgIG1fcGVybWlzc2lvbnMgfD0g
UmVhZE9ubHlNYXNrOworfQorICAgCit2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6c2V0UGVybWlz
c2lvbnMoaW50IHBlcm1pc3Npb25zKQoreworICAgIG1fcGVybWlzc2lvbnMgPSBwZXJtaXNzaW9u
czsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5hbWUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NlY3VyaXR5RW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKKworICAgIC8vIFNhZGx5LCBub3JtYWwg
Y3JlYXRlcyBhbmQgZHJvcHMgZW5kIHVwIGFmZmVjdGluZyBzcWxpdGVfbWFzdGVyIGluIGFuIGF1
dGhvcml6ZXIgY2FsbGJhY2ssIHNvCisgICAgLy8gaXQgd2lsbCBiZSB0b3VnaCB0byBlbmZvcmNl
IGFsbCBvZiB0aGUgZm9sbG93aW5nIHBvbGljaWVzCisgICAgLy9pZiAoZXF1YWxJZ25vcmluZ0Nh
c2UodGFibGVOYW1lLCAic3FsaXRlX21hc3RlciIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHRhYmxl
TmFtZSwgInNxbGl0ZV90ZW1wX21hc3RlciIpIHx8CisgICAgLy8gICAgZXF1YWxJZ25vcmluZ0Nh
c2UodGFibGVOYW1lLCAic3FsaXRlX3NlcXVlbmNlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodGFi
bGVOYW1lLCBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQorICAgIC8vICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVO
YW1lLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZSkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVu
eTsKKworICAgIHJldHVybiBTUUxBdXRoQWxsb3c7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OnVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVOYW1l
KQoreworICAgIGludCBhbGxvdyA9IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cisg
ICAgaWYgKGFsbG93KQorICAgICAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOworICAgIHJldHVybiBh
bGxvdzsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5oCShy
ZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRo
b3JpemVyLmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9E
YXRhYmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
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
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5k
ZWYgRGF0YWJhc2VBdXRob3JpemVyX2gKKyNkZWZpbmUgRGF0YWJhc2VBdXRob3JpemVyX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitleHRlcm4gY29uc3QgaW50IFNRTEF1dGhBbGxvdzsKK2V4dGVybiBjb25zdCBpbnQg
U1FMQXV0aElnbm9yZTsKK2V4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7CisKK2NsYXNzIERh
dGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZUF1
dGhvcml6ZXI+IHsKK3B1YmxpYzoKKworICAgIGVudW0gUGVybWlzc2lvbnMgeworICAgICAgICBS
ZWFkV3JpdGVNYXNrID0gMCwKKyAgICAgICAgUmVhZE9ubHlNYXNrID0gMSA8PCAxLAorICAgICAg
ICBOb0FjY2Vzc01hc2sgPSAxIDw8IDIKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2VBdXRob3JpemVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUpOworCisgICAgaW50IGNyZWF0ZVRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsK
KyAgICBpbnQgY3JlYXRlVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKyAgICBp
bnQgZHJvcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKyAgICBpbnQgZHJvcFRlbXBU
YWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CisgICAgaW50IGFsbG93QWx0ZXJUYWJsZShj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOworCisg
ICAgaW50IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSk7CisgICAgaW50IGNyZWF0ZVRlbXBJbmRleChjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOworICAgIGludCBkcm9wSW5kZXgoY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKyAgICBpbnQgZHJv
cFRlbXBJbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5h
bWUpOworCisgICAgaW50IGNyZWF0ZVRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwg
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOworICAgIGludCBjcmVhdGVUZW1wVHJpZ2dlcihjb25z
dCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CisgICAgaW50
IGRyb3BUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKTsKKyAgICBpbnQgZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5h
bWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKworICAgIGludCBjcmVhdGVWaWV3KGNvbnN0
IFN0cmluZyYgdmlld05hbWUpOworICAgIGludCBjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcm
IHZpZXdOYW1lKTsKKyAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7Cisg
ICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKworICAgIGludCBj
cmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxl
TmFtZSk7CisgICAgaW50IGRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgbW9kdWxlTmFtZSk7CisKKyAgICBpbnQgYWxsb3dEZWxldGUoY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpOworICAgIGludCBhbGxvd0luc2VydChjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSk7CisgICAgaW50IGFsbG93VXBkYXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBT
dHJpbmcmIGNvbHVtbk5hbWUpOworICAgIGludCBhbGxvd1RyYW5zYWN0aW9uKCk7CisKKyAgICBp
bnQgYWxsb3dTZWxlY3QoKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KKyAgICBpbnQgYWxsb3dS
ZWFkKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbHVtbk5hbWUpOwor
CisgICAgaW50IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisgICAgaW50
IGFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CisgICAgaW50IGFsbG93RnVu
Y3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOworICAgIGludCBhbGxvd1ByYWdtYShj
b25zdCBTdHJpbmcmIHByYWdtYU5hbWUsIGNvbnN0IFN0cmluZyYgZmlyc3RBcmd1bWVudCk7CisK
KyAgICBpbnQgYWxsb3dBdHRhY2goY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAgaW50IGFs
bG93RGV0YWNoKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKKworICAgIHZvaWQgZGlzYWJs
ZSgpOworICAgIHZvaWQgZW5hYmxlKCk7CisgICAgdm9pZCBzZXRSZWFkT25seSgpOworICAgIHZv
aWQgc2V0UGVybWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKTsKKworICAgIHZvaWQgcmVzZXQoKTsK
KyAgICB2b2lkIHJlc2V0RGVsZXRlcygpOworCisgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uV2FzSW5zZXJ0OyB9CisgICAgYm9vbCBsYXN0
QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uQ2hhbmdl
ZERhdGFiYXNlOyB9CisgICAgYm9vbCBoYWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWRE
ZWxldGVzOyB9CisKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VBdXRob3JpemVyKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKKyAgICB2b2lkIGFkZFdoaXRlbGlzdGVkRnVuY3Rp
b25zKCk7CisgICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0
OworICAgIGludCB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKTsK
KyAgICBib29sIGFsbG93V3JpdGUoKTsKKworICAgIGludCBtX3Blcm1pc3Npb25zOworICAgIGJv
b2wgbV9zZWN1cml0eUVuYWJsZWQgOiAxOworICAgIGJvb2wgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0
IDogMTsKKyAgICBib29sIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA6IDE7CisgICAgYm9v
bCBtX2hhZERlbGV0ZXMgOiAxOworCisgICAgY29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJbmZvVGFi
bGVOYW1lOworCisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxp
c3RlZEZ1bmN0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IERhdGFiYXNlQXV0aG9yaXplcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRh
dGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaAkocmV2aXNpb24gMTA5ODU4KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoxMDk4NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRhYmFzZUNhbGxiYWNrX2gK
KyNkZWZpbmUgRGF0YWJhc2VDYWxsYmFja19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBEYXRhYmFzZVN5bmM7CisKK2NsYXNzIERh
dGFiYXNlQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VDYWxs
YmFjaz4geworcHVibGljOgorICAgIHZpcnR1YWwgfkRhdGFiYXNlQ2FsbGJhY2soKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoRGF0YWJhc2UqKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KERhdGFiYXNlU3luYyopID0gMDsKK307CisKK30KKworI2VuZGlmCisK
KyNlbmRpZiAvLyBEYXRhYmFzZUNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbAkocmV2aXNp
b24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2su
aWRsOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJh
c2VDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBz
dG9yYWdlIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJB
U0UsCisgICAgICAgIENhbGxiYWNrCisgICAgXSBEYXRhYmFzZUNhbGxiYWNrIHsKKyAgICAgICAg
Ym9vbGVhbiBoYW5kbGVFdmVudChpbiBEYXRhYmFzZSBkYXRhYmFzZSk7CisgICAgICAgIGJvb2xl
YW4gaGFuZGxlRXZlbnQoaW4gRGF0YWJhc2VTeW5jIGRhdGFiYXNlKTsKKyAgICB9OworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJh
c2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlQ29udGV4dC5jcHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlQ29udGV4dC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgRGF0YWJhc2VDb250ZXh0KiBleGlzdGluZ0RhdGFiYXNlQ29udGV4
dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250
ZXh0Pjo6ZnJvbShjb250ZXh0LCAiRGF0YWJhc2VDb250ZXh0IikpOworfQorCitEYXRhYmFzZUNv
bnRleHQ6OkRhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
ICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2hhc09wZW5E
YXRhYmFzZXMoZmFsc2UpCit7Cit9CisKK0RhdGFiYXNlQ29udGV4dDo6fkRhdGFiYXNlQ29udGV4
dCgpCit7CisgICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQpIHsKKyAgICAgICAgQVNTRVJUKG1fZGF0
YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpOworICAgICAgICBtX2RhdGFiYXNl
VGhyZWFkID0gMDsKKyAgICB9Cit9CisKK0RhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250ZXh0
Ojpmcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgRGF0YWJhc2VD
b250ZXh0KiBzdXBwbGVtZW50ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQp
OworICAgIGlmICghc3VwcGxlbWVudCkgeworICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERhdGFi
YXNlQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgcHJvdmlkZVRvKGNvbnRleHQsICJEYXRhYmFz
ZUNvbnRleHQiLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgICAgIEFTU0VSVChzdXBwbGVt
ZW50ID09IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KSk7CisgICAgfQorICAg
IHJldHVybiBzdXBwbGVtZW50OworfQorCitEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0
OjpkYXRhYmFzZVRocmVhZCgpCit7CisgICAgaWYgKCFtX2RhdGFiYXNlVGhyZWFkICYmICFtX2hh
c09wZW5EYXRhYmFzZXMpIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBkYXRhYmFzZSB0aHJlYWQg
b24gZmlyc3QgcmVxdWVzdCAtIGJ1dCBub3QgaWYgYXQgbGVhc3Qgb25lIGRhdGFiYXNlIHdhcyBh
bHJlYWR5IG9wZW5lZCwKKyAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGF0IGNhc2Ugd2UgYWxyZWFk
eSBoYWQgYSBkYXRhYmFzZSB0aHJlYWQgYW5kIHRlcm1pbmF0ZWQgaXQgYW5kIHNob3VsZCBub3Qg
Y3JlYXRlIGFub3RoZXIuCisgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSBEYXRhYmFzZVRocmVh
ZDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZVRocmVhZC0+c3RhcnQoKSkKKyAg
ICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSAwOworICAgIH0KKworICAgIHJldHVybiBtX2Rh
dGFiYXNlVGhyZWFkLmdldCgpOworfQorCitib29sIERhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRh
dGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIFdlIGRv
bid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNh
dXNlCisgICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBo
YXZlIG9uZSBhbHJlYWR5LgorICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0ID0g
ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQpOworICAgIGlmICghZGF0YWJhc2VD
b250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4
dC0+bV9oYXNPcGVuRGF0YWJhc2VzOworfQorCit2b2lkIERhdGFiYXNlQ29udGV4dDo6c3RvcERh
dGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIqIGNsZWFudXBTeW5jKQoreworICAgIC8vIFdlIGRvbid0IHVzZSBEYXRhYmFzZUNv
bnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgLy8gRGF0YWJh
c2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5Lgor
ICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNv
bnRleHRGcm9tKGNvbnRleHQpOworCisgICAgaWYgKGRhdGFiYXNlQ29udGV4dCAmJiBkYXRhYmFz
ZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQpCisgICAgICAgIGRhdGFiYXNlQ29udGV4dC0+bV9k
YXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9uKGNsZWFudXBTeW5jKTsKKyAgICBlbHNl
IGlmIChjbGVhbnVwU3luYykKKyAgICAgICAgY2xlYW51cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsK
K30KKworYm9vbCBEYXRhYmFzZUNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdAor
eworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIGlmICghZG9jdW1lbnQtPnBhZ2UoKSB8fCAoZG9j
dW1lbnQtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpICYmICFT
Y2hlbWVSZWdpc3RyeTo6YWxsb3dzRGF0YWJhc2VBY2Nlc3NJblByaXZhdGVCcm93c2luZyhkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIC8vIGFsbG93RGF0YWJh
c2VBY2Nlc3MgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3Igd29ya2Vycy4KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBEYXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YShj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpLT5leGNlZWRlZERhdGFiYXNlUXVvdGEoZG9jdW1lbnQtPmZyYW1lKCksIG5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgYSByZWFsIGltcGxlbWVudGF0aW9uOyB0aGlzIGlzIGEgdGVtcG9y
YXJ5IHNvbHV0aW9uIGZvciB0ZXN0aW5nLgorICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBk
ZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuc2V0UXVvdGEobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LCBkZWZhdWx0UXVvdGEpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgJKHJldmlzaW9uIDEw
OTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuaDoxMDk4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVm
IERhdGFiYXNlQ29udGV4dF9oCisjZGVmaW5lIERhdGFiYXNlQ29udGV4dF9oCisKKyNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplcjsKK2NsYXNzIERhdGFiYXNlVGhyZWFkOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKKworY2xhc3MgRGF0YWJhc2VDb250ZXh0IDogcHVibGljIFN1cHBsZW1lbnQ8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4geworcHVibGljOgorICAgIHZpcnR1YWwgfkRhdGFiYXNlQ29udGV4
dCgpOworICAgIHN0YXRpYyBEYXRhYmFzZUNvbnRleHQqIGZyb20oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOworCisgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CisKKyAgICB2
b2lkIHNldEhhc09wZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0K
KworICAgIHN0YXRpYyBib29sIGhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOworCisgICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCBjbGVhbnVw
U3luYyB3aWxsIGJlIHNpZ25hbGxlZC4KKyAgICBzdGF0aWMgdm9pZCBzdG9wRGF0YWJhc2VzKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKKworICAg
IGJvb2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0OworICAgIHZvaWQgZGF0YWJhc2VFeGNl
ZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
RGF0YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBSZWZQdHI8RGF0
YWJhc2VUaHJlYWQ+IG1fZGF0YWJhc2VUaHJlYWQ7CisgICAgYm9vbCBtX2hhc09wZW5EYXRhYmFz
ZXM7IC8vIFRoaXMgbmV2ZXIgY2hhbmdlcyBiYWNrIHRvIGZhbHNlLCBldmVuIGFmdGVyIHRoZSBk
YXRhYmFzZSB0aHJlYWQgaXMgY2xvc2VkLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERhdGFiYXNlQ29u
dGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNl
RGV0YWlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvRGF0YWJhc2VEZXRhaWxzLmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZURldGFpbHMuaDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlRGV0YWlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YWJhc2VEZXRhaWxzX2gKKyNkZWZpbmUgRGF0
YWJhc2VEZXRhaWxzX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZURldGFpbHMgeworcHVibGljOgorICAgIERhdGFi
YXNlRGV0YWlscygpCisgICAgICAgIDogbV9leHBlY3RlZFVzYWdlKDApCisgICAgICAgICwgbV9j
dXJyZW50VXNhZ2UoMCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtX3RocmVhZCA9
IGN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorICAgIH0KKworICAgIERhdGFiYXNlRGV0YWlscyhj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50
VXNhZ2UpCisgICAgICAgIDogbV9uYW1lKGRhdGFiYXNlTmFtZSkKKyAgICAgICAgLCBtX2Rpc3Bs
YXlOYW1lKGRpc3BsYXlOYW1lKQorICAgICAgICAsIG1fZXhwZWN0ZWRVc2FnZShleHBlY3RlZFVz
YWdlKQorICAgICAgICAsIG1fY3VycmVudFVzYWdlKGN1cnJlbnRVc2FnZSkKKyAgICB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICBtX3RocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlOYW1lOyB9CisgICAgdWludDY0X3QgZXhwZWN0ZWRVc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwZWN0ZWRVc2FnZTsgfQorICAgIHVpbnQ2NF90IGN1cnJlbnRVc2FnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudFVzYWdlOyB9CisjaWZuZGVmIE5ERUJVRworICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQ7IH0KKyNlbmRpZgorCitwcml2YXRl
OgorICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7CisgICAgdWlu
dDY0X3QgbV9leHBlY3RlZFVzYWdlOworICAgIHVpbnQ2NF90IG1fY3VycmVudFVzYWdlOworI2lm
bmRlZiBOREVCVUcKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkOworI2VuZGlmCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gRGF0YWJhc2VE
ZXRhaWxzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJh
c2VTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIK
KworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5o
IgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQ
dHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisKKyAgICBpZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVz
dGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMg
bm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2Ug
PSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKworICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2U7CisgICAgaWYgKCFkYXRhYmFzZS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkoIWNyZWF0aW9uQ2Fs
bGJhY2ssIGVjLCBlcnJvck1lc3NhZ2UpKSB7CisgICAgICAgIGRhdGFiYXNlLT5sb2dFcnJvck1l
c3NhZ2UoZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCku
cmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEZXRhaWxz
KGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRT
aXplKTsKKworICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdl
dCgpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNh
bGxiYWNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBjcmVh
dGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChkYXRhYmFzZS5nZXQoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIGRhdGFiYXNlOworfQorCitEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIDogQWJz
dHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBTeW5jRGF0YWJhc2UpCit7Cit9CisKK0RhdGFiYXNlU3luYzo6fkRh
dGFiYXNlU3luYygpCit7CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOworCisgICAgaWYgKG9wZW5lZCgpKSB7CisgICAgICAgIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKKyAgICAgICAgY2xv
c2VEYXRhYmFzZSgpOworICAgIH0KK30KKwordm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNp
b24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNoYW5nZVZlcnNpb25DYWxsYmFj
aywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworCisgICAgaWYgKHNxbGl0ZURhdGFiYXNlKCkudHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpIHsKKyAgICAgICAgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3Vs
dCgxLCBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiwgMCk7CisgICAgICAgIHNldExhc3RFcnJv
ck1lc3NhZ2UoInVuYWJsZSB0byBjaGFuZ2VWZXJzaW9uIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rp
b24iKTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0
aW9uID0gU1FMVHJhbnNhY3Rpb25TeW5jOjpjcmVhdGUodGhpcywgY2hhbmdlVmVyc2lvbkNhbGxi
YWNrLCBmYWxzZSk7CisgICAgaWYgKChlYyA9IHRyYW5zYWN0aW9uLT5iZWdpbigpKSkgeworICAg
ICAgICBBU1NFUlQoIWxhc3RFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgU3RyaW5nIGFjdHVhbFZlcnNpb247CisgICAgaWYgKCFnZXRWZXJz
aW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24pKSB7CisgICAgICAgIHJlcG9ydENoYW5nZVZl
cnNpb25SZXN1bHQoMiwgU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgc3FsaXRlRGF0YWJhc2Uo
KS5sYXN0RXJyb3IoKSk7CisgICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBy
ZWFkIHRoZSBjdXJyZW50IHZlcnNpb24iLCBzcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBz
cWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRp
b246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFjdHVh
bFZlcnNpb24gIT0gb2xkVmVyc2lvbikgeworICAgICAgICByZXBvcnRDaGFuZ2VWZXJzaW9uUmVz
dWx0KDMsIFNRTEV4Y2VwdGlvbjo6VkVSU0lPTl9FUlIsIDApOworICAgICAgICBzZXRMYXN0RXJy
b3JNZXNzYWdlKCJjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lv
bmAgYXJndW1lbnQgZG8gbm90IG1hdGNoIik7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpW
RVJTSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgoZWMgPSB0cmFu
c2FjdGlvbi0+ZXhlY3V0ZSgpKSkgeworICAgICAgICBBU1NFUlQoIWxhc3RFcnJvck1lc3NhZ2Uo
KS5pc0VtcHR5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzZXRWZXJz
aW9uSW5EYXRhYmFzZShuZXdWZXJzaW9uKSkgeworICAgICAgICByZXBvcnRDaGFuZ2VWZXJzaW9u
UmVzdWx0KDQsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIHNxbGl0ZURhdGFiYXNlKCkubGFz
dEVycm9yKCkpOworICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gc2V0IHRo
ZSBuZXcgdmVyc2lvbiIsIHNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIHNxbGl0ZURhdGFi
YXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoKGVjID0gdHJhbnNhY3Rp
b24tPmNvbW1pdCgpKSkgeworICAgICAgICBBU1NFUlQoIWxhc3RFcnJvck1lc3NhZ2UoKS5pc0Vt
cHR5KCkpOworICAgICAgICBzZXRDYWNoZWRWZXJzaW9uKG9sZFZlcnNpb24pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCgwLCAtMSwgMCk7
IC8vIE9LCisKKyAgICBzZXRFeHBlY3RlZFZlcnNpb24obmV3VmVyc2lvbik7CisgICAgc2V0TGFz
dEVycm9yTWVzc2FnZSgiIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJhY2ssIGZhbHNlLCBlYyk7Cit9
CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpyZWFkVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNrLCB0cnVlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YWJhc2VT
eW5jOjpydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
PiBjYWxsYmFjaywgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworCisgICAg
aWYgKHNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKKyAgICAgICAg
c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIHN0YXJ0IGEgdHJhbnNhY3Rpb24gZnJvbSB3
aXRoaW4gYSB0cmFuc2FjdGlvbiIpOworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJB
U0VfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luYz4gdHJhbnNhY3Rpb24gPSBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSh0aGlzLCBj
YWxsYmFjaywgcmVhZE9ubHkpOworICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+YmVnaW4oKSkg
fHwgKGVjID0gdHJhbnNhY3Rpb24tPmV4ZWN1dGUoKSkgfHwgKGVjID0gdHJhbnNhY3Rpb24tPmNv
bW1pdCgpKSkgeworICAgICAgICBBU1NFUlQoIWxhc3RFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkp
OworICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICB9CisKKyAgICBzZXRMYXN0
RXJyb3JNZXNzYWdlKCIiKTsKK30KKwordm9pZCBEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRB
bmRDbG9zZSgpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIg
dG8gY2xvc2VJbW1lZGlhdGVseSgpLCBidXQgaW4gYSBzeW5jIHdheQorfQorCitjbGFzcyBDbG9z
ZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VTeW5j
RGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZVN5
bmM+IGRhdGFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDbG9zZVN5
bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2soZGF0YWJhc2UpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgewor
ICAgICAgICBtX2RhdGFiYXNlLT5jbG9zZUltbWVkaWF0ZWx5KCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzayhQYXNzUmVmUHRyPERh
dGFiYXNlU3luYz4gZGF0YWJhc2UpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICB7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gbV9kYXRhYmFzZTsKK307CisK
K3ZvaWQgRGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBBU1NFUlQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisKKyAgICBpZiAoIW9w
ZW5lZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBsb2dFcnJvck1lc3NhZ2UoImZvcmNpYmx5
IGNsb3NpbmcgZGF0YWJhc2UiKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1v
dmVPcGVuRGF0YWJhc2UodGhpcyk7CisgICAgY2xvc2VEYXRhYmFzZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlU3luYy5o
CShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRh
YmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRhYmFz
ZVN5bmNfaAorI2RlZmluZSBEYXRhYmFzZVN5bmNfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaWZuZGVmIE5ERUJVRworI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOworY2xhc3Mg
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisK
Ky8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9u
bHkgb24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgorY2xhc3MgRGF0YWJhc2VTeW5jIDog
cHVibGljIEFic3RyYWN0RGF0YWJhc2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfkRhdGFiYXNl
U3luYygpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJh
c2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgcmVhZFRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFu
ZENsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKKworICAgIGNv
bnN0IFN0cmluZyYgbGFzdEVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVycm9y
TWVzc2FnZTsgfQorICAgIHZvaWQgc2V0TGFzdEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpIHsgbV9sYXN0RXJyb3JNZXNzYWdlID0gbWVzc2FnZTsgfQorICAgIHZvaWQgc2V0TGFz
dEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgc3FsaXRlQ29kZSkKKyAgICB7
CisgICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoU3RyaW5nOjpmb3JtYXQoIiVzICglZCkiLCBt
ZXNzYWdlLCBzcWxpdGVDb2RlKSk7CisgICAgfQorICAgIHZvaWQgc2V0TGFzdEVycm9yTWVzc2Fn
ZShjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgc3FsaXRlQ29kZSwgY29uc3QgY2hhciogc3FsaXRl
TWVzc2FnZSkKKyAgICB7CisgICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoU3RyaW5nOjpmb3Jt
YXQoIiVzICglZCwgJXMpIiwgbWVzc2FnZSwgc3FsaXRlQ29kZSwgc3FsaXRlTWVzc2FnZSkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSk7CisgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwor
CisgICAgU3RyaW5nIG1fbGFzdEVycm9yTWVzc2FnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VTeW5j
LmlkbAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlU3luYy5pZGw6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFz
ZS9EYXRhYmFzZVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
c3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1TUUxfREFU
QUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxl
cworICAgIF0gRGF0YWJhc2VTeW5jIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyB2ZXJzaW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RF
cnJvck1lc3NhZ2U7CisgICAgICAgIHZvaWQgY2hhbmdlVmVyc2lvbihpbiBET01TdHJpbmcgb2xk
VmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFtDYWxsYmFjaywgT3B0aW9uYWxd
IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrIGNhbGxiYWNrKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgdm9pZCB0cmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrIGNhbGxiYWNrKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9p
ZCByZWFkVHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
ayBjYWxsYmFjaykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNw
cAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VGFzay5jcHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9E
YXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorCisjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKCkKKyAgICA6IG1fdGFza0NvbXBsZXRlZChmYWxzZSkK
KyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2hhc0NoZWNrZWRGb3JUZXJtaW5hdGlvbihmYWxzZSkK
KyNlbmRpZgoreworfQorCit2b2lkIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6d2FpdEZvclRh
c2tDb21wbGV0aW9uKCkKK3sKKyAgICBtX3N5bmNocm9ub3VzTXV0ZXgubG9jaygpOworICAgIHdo
aWxlICghbV90YXNrQ29tcGxldGVkKQorICAgICAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLndh
aXQobV9zeW5jaHJvbm91c011dGV4KTsKKyAgICBtX3N5bmNocm9ub3VzTXV0ZXgudW5sb2NrKCk7
Cit9CisKK3ZvaWQgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOjp0YXNrQ29tcGxldGVkKCkKK3sK
KyAgICBtX3N5bmNocm9ub3VzTXV0ZXgubG9jaygpOworICAgIG1fdGFza0NvbXBsZXRlZCA9IHRy
dWU7CisgICAgbV9zeW5jaHJvbm91c0NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICBtX3N5bmNocm9u
b3VzTXV0ZXgudW5sb2NrKCk7Cit9CisKK0RhdGFiYXNlVGFzazo6RGF0YWJhc2VUYXNrKERhdGFi
YXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCisg
ICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICwgbV9zeW5jaHJvbml6ZXIoc3luY2hyb25p
emVyKQorI2lmICFMT0dfRElTQUJMRUQKKyAgICAsIG1fY29tcGxldGUoZmFsc2UpCisjZW5kaWYK
K3sKK30KKworRGF0YWJhc2VUYXNrOjp+RGF0YWJhc2VUYXNrKCkKK3sKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgQVNTRVJUKG1fY29tcGxldGUgfHwgIW1fc3luY2hyb25pemVyKTsKKyNlbmRpZgor
fQorCit2b2lkIERhdGFiYXNlVGFzazo6cGVyZm9ybVRhc2soKQoreworICAgIC8vIERhdGFiYXNl
IHRhc2tzIGFyZSBtZWFudCB0byBiZSB1c2VkIG9ubHkgb25jZSwgc28gbWFrZSBzdXJlIHRoaXMg
b25lIGhhc24ndCBiZWVuIHBlcmZvcm1lZCBiZWZvcmUuCisjaWYgIUxPR19ESVNBQkxFRAorICAg
IEFTU0VSVCghbV9jb21wbGV0ZSk7CisjZW5kaWYKKworICAgIExPRyhTdG9yYWdlQVBJLCAiUGVy
Zm9ybWluZyAlcyAlcFxuIiwgZGVidWdUYXNrTmFtZSgpLCB0aGlzKTsKKworICAgIG1fZGF0YWJh
c2UtPnJlc2V0QXV0aG9yaXplcigpOworICAgIGRvUGVyZm9ybVRhc2soKTsKKworICAgIGlmICht
X3N5bmNocm9uaXplcikKKyAgICAgICAgbV9zeW5jaHJvbml6ZXItPnRhc2tDb21wbGV0ZWQoKTsK
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICBtX2NvbXBsZXRlID0gdHJ1ZTsKKyNlbmRpZgorfQor
CisvLyAqKiogRGF0YWJhc2VPcGVuVGFzayAqKioKKy8vIE9wZW5zIHRoZSBkYXRhYmFzZSBmaWxl
IGFuZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBtYXRjaGVzIHRoZSBleHBlY3RlZCB2ZXJzaW9uLgor
CitEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSog
ZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgYm9vbCYgc3VjY2VzcykKKyAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3lu
Y2hyb25pemVyKQorICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSkKKyAgICAsIG1fY29kZShjb2RlKQorICAgICwgbV9lcnJvck1lc3NhZ2UoZXJy
b3JNZXNzYWdlKQorICAgICwgbV9zdWNjZXNzKHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKHN5bmNo
cm9uaXplcik7IC8vIEEgdGFzayB3aXRoIG91dHB1dCBwYXJhbWV0ZXJzIGlzIHN1cHBvc2VkIHRv
IGJlIHN5bmNocm9ub3VzLgorfQorCit2b2lkIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpk
b1BlcmZvcm1UYXNrKCkKK3sKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIG1fc3VjY2Vz
cyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KG1fc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIG1fY29kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAoIW1fc3VjY2VzcykKKyAgICAg
ICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCk7Cit9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECitjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6
ZGVidWdUYXNrTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJEYXRhYmFzZU9wZW5UYXNrIjsK
K30KKyNlbmRpZgorCisvLyAqKiogRGF0YWJhc2VDbG9zZVRhc2sgKioqCisvLyBDbG9zZXMgdGhl
IGRhdGFiYXNlLgorCitEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VU
YXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJv
bml6ZXIpCisgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikKK3sKK30K
Kwordm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmRvUGVyZm9ybVRhc2soKQorewor
ICAgIGRhdGFiYXNlKCktPmNsb3NlKCk7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitjb25zdCBj
aGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAor
eworICAgIHJldHVybiAiRGF0YWJhc2VDbG9zZVRhc2siOworfQorI2VuZGlmCisKKy8vICoqKiBE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzayAqKioKKy8vIFN0YXJ0cyBhIHRyYW5zYWN0aW9uIHRoYXQg
d2lsbCByZXBvcnQgaXRzIHJlc3VsdHMgdmlhIGEgY2FsbGJhY2suCisKK0RhdGFiYXNlOjpEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgOiBEYXRhYmFzZVRhc2sodHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCksIDApCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorewor
fQorCit2b2lkIERhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3JtVGFz
aygpCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1OZXh0U3RlcCgpKQorICAgICAg
ICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0
ZWQoKTsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK2NvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICJEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayI7Cit9CisjZW5kaWYKKworLy8gKioqIERhdGFiYXNl
VGFibGVOYW1lc1Rhc2sgKioqCisvLyBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCB0YWJsZXMgaW4g
dGhlIGRhdGFiYXNlIC0gZm9yIFdlYkluc3BlY3RvciBzdXBwb3J0LgorCitEYXRhYmFzZTo6RGF0
YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0
YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3Ry
aW5nPiYgbmFtZXMpCisgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikK
KyAgICAsIG1fdGFibGVOYW1lcyhuYW1lcykKK3sKKyAgICBBU1NFUlQoc3luY2hyb25pemVyKTsg
Ly8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3VwcG9zZWQgdG8gYmUgc3luY2hy
b25vdXMuCit9CisKK3ZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmRvUGVy
Zm9ybVRhc2soKQoreworICAgIG1fdGFibGVOYW1lcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1HZXRU
YWJsZU5hbWVzKCk7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitjb25zdCBjaGFyKiBEYXRhYmFz
ZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICJEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIjsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxk
YXRhYmFzZS9EYXRhYmFzZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVGFzay5oCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6MTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRGF0YWJhc2VUYXNrX2gKKyNkZWZpbmUgRGF0
YWJhc2VUYXNrX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworLy8gQ2FuIGJlIHVzZWQgdG8gd2FpdCB1bnRp
bCBEYXRhYmFzZVRhc2sgaXMgY29tcGxldGVkLgorLy8gSGFzIHRvIGJlIHBhc3NlZCBpbnRvIERh
dGFiYXNlVGFzazo6Y3JlYXRlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzay4KK2NsYXNz
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKTsKK3B1YmxpYzoKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXIoKTsKKworICAgIC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkIHRvIHdhaXQgdW50aWwg
dGFzayBpcyBjb21wbGV0ZWQuCisgICAgdm9pZCB3YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKKwor
ICAgIC8vIENhbGxlZCBieSB0aGUgdGFzay4KKyAgICB2b2lkIHRhc2tDb21wbGV0ZWQoKTsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICBib29sIGhhc0NoZWNrZWRGb3JUZXJtaW5hdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uOyB9CisgICAgdm9pZCBzZXRIYXND
aGVja2VkRm9yVGVybWluYXRpb24oKSB7IG1faGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uID0gdHJ1
ZTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgYm9vbCBtX3Rhc2tDb21wbGV0ZWQ7CisgICAg
TXV0ZXggbV9zeW5jaHJvbm91c011dGV4OworICAgIFRocmVhZENvbmRpdGlvbiBtX3N5bmNocm9u
b3VzQ29uZGl0aW9uOworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1faGFzQ2hlY2tlZEZvclRl
cm1pbmF0aW9uOworI2VuZGlmCit9OworCitjbGFzcyBEYXRhYmFzZVRhc2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERhdGFiYXNlVGFzayk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHZpcnR1YWwgfkRhdGFiYXNlVGFzaygpOworCisgICAgdm9pZCBwZXJmb3Jt
VGFzaygpOworCisgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
YmFzZTsgfQorI2lmbmRlZiBOREVCVUcKKyAgICBib29sIGhhc1N5bmNocm9uaXplcigpIGNvbnN0
IHsgcmV0dXJuIG1fc3luY2hyb25pemVyOyB9CisgICAgYm9vbCBoYXNDaGVja2VkRm9yVGVybWlu
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N5bmNocm9uaXplci0+aGFzQ2hlY2tlZEZvclRlcm1p
bmF0aW9uKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgRGF0YWJhc2VUYXNrKERhdGFi
YXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIGRvUGVyZm9ybVRhc2soKSA9IDA7CisKKyAgICBEYXRhYmFzZSogbV9kYXRhYmFzZTsK
KyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIG1fc3luY2hyb25pemVyOworCisjaWYgIUxP
R19ESVNBQkxFRAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0
ID0gMDsKKyAgICBib29sIG1fY29tcGxldGU7CisjZW5kaWYKK307CisKK2NsYXNzIERhdGFiYXNl
OjpEYXRhYmFzZU9wZW5UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwg
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBz
eW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBi
b29sJiBzdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFz
ZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgc3luY2hyb25pemVyLCBjb2Rl
LCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YWJh
c2VPcGVuVGFzayhEYXRhYmFzZSosIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgYm9vbCYgc3VjY2Vzcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUo
KSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlOwor
ICAgIEV4Y2VwdGlvbkNvZGUmIG1fY29kZTsKKyAgICBTdHJpbmcmIG1fZXJyb3JNZXNzYWdlOwor
ICAgIGJvb2wmIG1fc3VjY2VzczsKK307CisKK2NsYXNzIERhdGFiYXNlOjpEYXRhYmFzZUNsb3Nl
VGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPERhdGFiYXNlQ2xvc2VUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tT
eW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRGF0YWJhc2VDbG9zZVRhc2soZGIsIHN5bmNocm9uaXplcikpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciopOworCisgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7
CisjZW5kaWYKK307CisKK2NsYXNzIERhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayA6
IHB1YmxpYyBEYXRhYmFzZVRhc2sgeworcHVibGljOgorICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sg
aXMgbmV2ZXIgc3luY2hyb25vdXMsIHNvIG5vICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KKyAg
ICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayh0cmFuc2FjdGlvbikpOworICAg
IH0KKworICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNhY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBEYXRhYmFzZVRyYW5zYWN0aW9u
VGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZG9Q
ZXJmb3JtVGFzaygpOworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGRlYnVnVGFza05hbWUoKSBjb25zdDsKKyNlbmRpZgorCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiBtX3RyYW5zYWN0aW9uOworfTsKKworY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlVGFibGVO
YW1lc1Rhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgVmVjdG9yPFN0cmluZz4mIG5hbWVz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrKGRiLCBzeW5jaHJvbml6ZXIsIG5hbWVzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERh
dGFiYXNlVGFibGVOYW1lc1Rhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
LCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpOworCisgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRh
c2soKTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rh
c2tOYW1lKCkgY29uc3Q7CisjZW5kaWYKKworICAgIFZlY3RvcjxTdHJpbmc+JiBtX3RhYmxlTmFt
ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorCisjZW5kaWYgLy8gRGF0YWJhc2VUYXNrX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCShy
ZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJl
YWQuY3BwOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKKworI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBdXRvZHJhaW5lZFBvb2wuaCIKKyNpbmNs
dWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRhYmFzZVRocmVhZDo6RGF0YWJhc2VUaHJlYWQo
KQorICAgIDogbV90aHJlYWRJRCgwKQorICAgICwgbV90cmFuc2FjdGlvbkNsaWVudChhZG9wdFB0
cihuZXcgU1FMVHJhbnNhY3Rpb25DbGllbnQoKSkpCisgICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoYWRvcHRQdHIobmV3IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSkpCisgICAgLCBt
X2NsZWFudXBTeW5jKDApCit7CisgICAgbV9zZWxmUmVmID0gdGhpczsKK30KKworRGF0YWJhc2VU
aHJlYWQ6On5EYXRhYmFzZVRocmVhZCgpCit7CisgICAgLy8gRklYTUU6IEFueSBjbGVhbnVwIHJl
cXVpcmVkIGhlcmU/ICBTaW5jZSB0aGUgdGhyZWFkIGRlbGV0ZXMgaXRzZWxmIGFmdGVyIHJ1bm5p
bmcgaXRzIGRldGFjaGVkIGNvdXJzZSwgSSBkb24ndCB0aGluayBzby4gIExldHMgYmUgc3VyZS4K
KyAgICBBU1NFUlQodGVybWluYXRpb25SZXF1ZXN0ZWQoKSk7Cit9CisKK2Jvb2wgRGF0YWJhc2VU
aHJlYWQ6OnN0YXJ0KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25N
dXRleCk7CisKKyAgICBpZiAobV90aHJlYWRJRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVh
ZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKKworICAgIHJldHVybiBtX3RocmVh
ZElEOworfQorCit2b2lkIERhdGFiYXNlVGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyICpjbGVhbnVwU3luYykKK3sKKyAgICBBU1NFUlQoIW1fY2xlYW51
cFN5bmMpOworICAgIG1fY2xlYW51cFN5bmMgPSBjbGVhbnVwU3luYzsKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIkRhdGFiYXNlVGhyZWFkICVwIHdhcyBhc2tlZCB0byB0ZXJtaW5hdGVcbiIsIHRoaXMp
OworICAgIG1fcXVldWUua2lsbCgpOworfQorCitib29sIERhdGFiYXNlVGhyZWFkOjp0ZXJtaW5h
dGlvblJlcXVlc3RlZChEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHRhc2tTeW5jaHJvbml6ZXIp
IGNvbnN0Cit7CisjaWZuZGVmIE5ERUJVRworICAgIGlmICh0YXNrU3luY2hyb25pemVyKQorICAg
ICAgICB0YXNrU3luY2hyb25pemVyLT5zZXRIYXNDaGVja2VkRm9yVGVybWluYXRpb24oKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRhc2tTeW5jaHJvbml6ZXIpOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gbV9xdWV1ZS5raWxsZWQoKTsKK30KKwordm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJh
c2VUaHJlYWRTdGFydCh2b2lkKiB2RGF0YWJhc2VUaHJlYWQpCit7CisgICAgRGF0YWJhc2VUaHJl
YWQqIGRiVGhyZWFkID0gc3RhdGljX2Nhc3Q8RGF0YWJhc2VUaHJlYWQqPih2RGF0YWJhc2VUaHJl
YWQpOworICAgIGRiVGhyZWFkLT5kYXRhYmFzZVRocmVhZCgpOworfQorCit2b2lkIERhdGFiYXNl
VGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCit7CisgICAgeworICAgICAgICAvLyBXYWl0IGZvciBE
YXRhYmFzZVRocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZS4KKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlN0
YXJ0ZWQgRGF0YWJhc2VUaHJlYWQgJXAiLCB0aGlzKTsKKyAgICB9CisKKyAgICBBdXRvZHJhaW5l
ZFBvb2wgcG9vbDsKKyAgICB3aGlsZSAoT3duUHRyPERhdGFiYXNlVGFzaz4gdGFzayA9IG1fcXVl
dWUud2FpdEZvck1lc3NhZ2UoKSkgeworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAg
ICAgICBwb29sLmN5Y2xlKCk7CisgICAgfQorCisgICAgLy8gQ2xlYW4gdXAgdGhlIGxpc3Qgb2Yg
YWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG9uIHRoaXMgZGF0YWJhc2UgdGhyZWFkCisgICAgbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLT5zaHV0ZG93bigpOworCisgICAgTE9HKFN0b3JhZ2VBUEks
ICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNl
VGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRo
aXMsIHJlZkNvdW50KCkpOworCisgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJh
biB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMg
YXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0
aGUgZGF0YWJhc2UgaW4gYW4KKyAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRlLgor
ICAgIGlmIChtX29wZW5EYXRhYmFzZVNldC5zaXplKCkgPiAwKSB7CisgICAgICAgIC8vIEFzIHRo
ZSBjYWxsIHRvIGNsb3NlIHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBzZXQsIHdlIG11c3QgdGFr
ZSBhIGNvcHkgdG8gaXRlcmF0ZSBvdmVyLgorICAgICAgICBEYXRhYmFzZVNldCBvcGVuU2V0Q29w
eTsKKyAgICAgICAgb3BlblNldENvcHkuc3dhcChtX29wZW5EYXRhYmFzZVNldCk7CisgICAgICAg
IERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5lbmQoKTsKKyAgICAgICAg
Zm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29weS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICAoKml0KS0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICAv
LyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2YgYW55
IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKKyAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7CisK
KyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jID0gbV9jbGVhbnVwU3lu
YzsKKworICAgIC8vIENsZWFyIHRoZSBzZWxmIHJlZnB0ciwgcG9zc2libHkgcmVzdWx0aW5nIGlu
IGRlbGV0aW9uCisgICAgbV9zZWxmUmVmID0gMDsKKworICAgIGlmIChjbGVhbnVwU3luYykgLy8g
U29tZW9uZSB3YW50ZWQgdG8ga25vdyB3aGVuIHdlIHdlcmUgZG9uZSBjbGVhbmluZyB1cC4KKyAg
ICAgICAgY2xlYW51cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsKK30KKwordm9pZCBEYXRhYmFzZVRo
cmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChkYXRhYmFzZSk7
CisgICAgQVNTRVJUKCFtX29wZW5EYXRhYmFzZVNldC5jb250YWlucyhkYXRhYmFzZSkpOworICAg
IG1fb3BlbkRhdGFiYXNlU2V0LmFkZChkYXRhYmFzZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChkYXRhYmFzZSk7
CisgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkgfHwgbV9vcGVuRGF0YWJhc2VTZXQuY29udGFp
bnMoZGF0YWJhc2UpKTsKKyAgICBtX29wZW5EYXRhYmFzZVNldC5yZW1vdmUoZGF0YWJhc2UpOwor
fQorCit2b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hlZHVsZVRhc2soUGFzc093blB0cjxEYXRhYmFz
ZVRhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKCF0YXNrLT5oYXNTeW5jaHJvbml6ZXIoKSB8fCB0
YXNrLT5oYXNDaGVja2VkRm9yVGVybWluYXRpb24oKSk7CisgICAgbV9xdWV1ZS5hcHBlbmQodGFz
ayk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNz
T3duUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQoIXRhc2stPmhhc1N5bmNo
cm9uaXplcigpIHx8IHRhc2stPmhhc0NoZWNrZWRGb3JUZXJtaW5hdGlvbigpKTsKKyAgICBtX3F1
ZXVlLnByZXBlbmQodGFzayk7Cit9CisKK2NsYXNzIFNhbWVEYXRhYmFzZVByZWRpY2F0ZSB7Citw
dWJsaWM6CisgICAgU2FtZURhdGFiYXNlUHJlZGljYXRlKGNvbnN0IERhdGFiYXNlKiBkYXRhYmFz
ZSkgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKSB7IH0KKyAgICBib29sIG9wZXJhdG9yKCkoRGF0YWJh
c2VUYXNrKiB0YXNrKSBjb25zdCB7IHJldHVybiB0YXNrLT5kYXRhYmFzZSgpID09IG1fZGF0YWJh
c2U7IH0KK3ByaXZhdGU6CisgICAgY29uc3QgRGF0YWJhc2UqIG1fZGF0YWJhc2U7Cit9OworCit2
b2lkIERhdGFiYXNlVGhyZWFkOjp1bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSogZGF0
YWJhc2UpCit7CisgICAgLy8gTm90ZSB0aGF0IHRoZSB0aHJlYWQgbG9vcCBpcyBydW5uaW5nLCBz
byBzb21lIHRhc2tzIGZvciB0aGUgZGF0YWJhc2UKKyAgICAvLyBtYXkgc3RpbGwgYmUgZXhlY3V0
ZWQuIFRoaXMgaXMgdW5hdm9pZGFibGUuCisgICAgU2FtZURhdGFiYXNlUHJlZGljYXRlIHByZWRp
Y2F0ZShkYXRhYmFzZSk7CisgICAgbV9xdWV1ZS5yZW1vdmVJZihwcmVkaWNhdGUpOworfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCShyZXZpc2lvbiAxMDk4NTgp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaDoxMDk4NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
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
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRGF0YWJhc2VUaHJlYWRf
aAorI2RlZmluZSBEYXRhYmFzZVRocmVhZF9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0YWJhc2U7
CitjbGFzcyBEYXRhYmFzZVRhc2s7CitjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7Citj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50OworY2xhc3MgU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvcjsKKworY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhYmFzZVRocmVhZD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IERhdGFiYXNlVGhyZWFkKTsgfQorICAgIH5EYXRhYmFzZVRocmVhZCgpOworCisgICAgYm9vbCBz
dGFydCgpOworICAgIHZvaWQgcmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogY2xlYW51cFN5bmMpOworICAgIGJvb2wgdGVybWluYXRpb25SZXF1ZXN0ZWQoRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKiB0YXNrU3luY2hyb25pemVyID0gMCkgY29uc3Q7CisKKyAgICB2
b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4pOworICAgIHZvaWQgc2No
ZWR1bGVJbW1lZGlhdGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNrPik7IC8vIFRoaXMganVz
dCBhZGRzIHRoZSB0YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgLSB0aGUgY2FsbGVyIG5l
ZWRzIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIG5vdCB0byBjcmVhdGUgZGVhZGxvY2tzIHdoZW4g
d2FpdGluZyBmb3IgY29tcGxldGlvbi4KKyAgICB2b2lkIHVuc2NoZWR1bGVEYXRhYmFzZVRhc2tz
KERhdGFiYXNlKik7CisKKyAgICB2b2lkIHJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSopOwor
ICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsKKyAgICBUaHJlYWRJZGVu
dGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorCisgICAgU1FMVHJh
bnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgeyByZXR1cm4gbV90cmFuc2FjdGlv
bkNsaWVudC5nZXQoKTsgfQorICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7
IH0KKworcHJpdmF0ZToKKyAgICBEYXRhYmFzZVRocmVhZCgpOworCisgICAgc3RhdGljIHZvaWQg
ZGF0YWJhc2VUaHJlYWRTdGFydCh2b2lkKik7CisgICAgdm9pZCBkYXRhYmFzZVRocmVhZCgpOwor
CisgICAgTXV0ZXggbV90aHJlYWRDcmVhdGlvbk11dGV4OworICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRDsKKyAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fc2VsZlJlZjsKKworICAg
IE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7CisKKyAgICAvLyBUaGlzIHNldCBr
ZWVwcyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhhdCBoYXZlIGJlZW4gdXNlZCBvbiB0
aGlzIHRocmVhZC4KKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+IERhdGFi
YXNlU2V0OworICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFiYXNlU2V0OworCisgICAgT3duUHRy
PFNRTFRyYW5zYWN0aW9uQ2xpZW50PiBtX3RyYW5zYWN0aW9uQ2xpZW50OworICAgIE93blB0cjxT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBtX2NsZWFudXBTeW5jOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyNlbmRpZiAv
LyBEYXRhYmFzZVRocmVhZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxMDk4NTgpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoxMDk4NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkNocm9tZS5o
IgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2Vy
Q2xpZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFu
YWdlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbkhhc2guaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU1FM
aXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyJiBv
cmlnaW5RdW90YU1hbmFnZXIoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2ViQ29yZTo6
T3JpZ2luUXVvdGFNYW5hZ2VyLCBxdW90YU1hbmFnZXIsICgpKTsKKyAgICByZXR1cm4gcXVvdGFN
YW5hZ2VyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBEYXRhYmFzZVRyYWNr
ZXIqIHN0YXRpY1RyYWNrZXIgPSAwOworCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW5pdGlhbGl6
ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCit7CisgICAgQVNTRVJUKCFzdGF0
aWNUcmFja2VyKTsKKyAgICBpZiAoc3RhdGljVHJhY2tlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RhdGljVHJhY2tlciA9IG5ldyBEYXRhYmFzZVRyYWNrZXIoZGF0YWJhc2VQYXRoKTsKK30K
KworRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKQoreworICAgIGlm
ICghc3RhdGljVHJhY2tlcikKKyAgICAgICAgc3RhdGljVHJhY2tlciA9IG5ldyBEYXRhYmFzZVRy
YWNrZXIoIiIpOworCisgICAgcmV0dXJuICpzdGF0aWNUcmFja2VyOworfQorCitEYXRhYmFzZVRy
YWNrZXI6OkRhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKKyAgICA6
IG1fY2xpZW50KDApCit7CisgICAgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlUGF0
aCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKTsKKwor
ICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIHBvcHVs
YXRlT3JpZ2lucygpOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
OworICAgIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKTsKK30K
KworU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCk7Cit9
CisKK1N0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAor
eworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9Q
YXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzb2xhdGVkQ29weSgpLCAiRGF0YWJhc2VzLmRi
Iik7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wg
Y3JlYXRlSWZEb2VzTm90RXhpc3QpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKKworICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOworICAg
IGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNl
UGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0
IGRvIGRvIGhlcmU/CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2VQ
YXRoICVzLiIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisgICAgaWYg
KCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikpIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRFWFQg
VU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHF1b3RhIElOVEVHRVIgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhbmQgaGVyZQorICAgICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFibGUiKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkRhdGFiYXNlcyIp
KSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxF
IERhdGFiYXNlcyAoZ3VpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIG9yaWdp
biBURVhULCBuYW1lIFRFWFQsIGRpc3BsYXlOYW1lIFRFWFQsIGVzdGltYXRlZFNpemUgSU5URUdF
UiwgcGF0aCBURVhUKTsiKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IGFuZCBoZXJlCisgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgRGF0YWJhc2VzIHRhYmxlIik7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSkKK3sKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKTsKKyAgICBQcm9wb3NlZERhdGFiYXNlIGRldGFpbHM7CisKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgcmVxdWlyZW1lbnQ7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKworICAgICAgICBpZiAo
IWNhbkNyZWF0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworCisg
ICAgICAgIC8vIFNpbmNlIHdlJ3JlIGltbWluZW50bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdpdGhp
biB0aGlzIGNvbnRleHQncyBvcmlnaW4sIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0
cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIKKyAgICAgICAgLy8gYnkgZmV0Y2hpbmcgaXRzIGN1
cnJlbnQgdXNhZ2Ugbm93LgorICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2Fn
ZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworCisgICAgICAgIC8vIElmIGEgZGF0YWJhc2UgYWxy
ZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWluIGVzdGltYXRlZCBzaXplIGFuZCBzYXkg
aXQncyBPSy4KKyAgICAgICAgaWYgKGhhc0VudHJ5Rm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3
aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9uLgorICAgICAgICByZXF1aXJlbWVudCA9IHVzYWdl
ICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6ZSk7CisgICAgICAgIGlmIChyZXF1aXJlbWVudCA8IHVz
YWdlKSB7CisgICAgICAgICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiB0aGUgZXN0aW1hdGVkIHNpemUgaXMgc28g
YmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdywgZG9uJ3QgYWxsb3cgY3JlYXRpb24uCisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdp
bikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBHaXZlIHRoZSBjaHJv
bWUgY2xpZW50IGEgY2hhbmNlIHRvIGluY3JlYXNlIHRoZSBxdW90YS4KKyAgICAgICAgLy8gVGVt
cG9yYXJpbHkgbWFrZSB0aGUgZGV0YWlscyBvZiB0aGUgcHJvcG9zZWQgZGF0YWJhc2UgYXZhaWxh
YmxlLCBzbyB0aGUgY2xpZW50IGNhbiBnZXQgYXQgdGhlbS4KKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCByZWFsbHkganVzdCBwYXNzIHRoZSBkZXRhaWxzIGludG8gdGhpcyBjYWxsLCByYXRo
ZXIgdGhhbiB1c2luZyBtX3Byb3Bvc2VkRGF0YWJhc2VzLgorICAgICAgICBkZXRhaWxzID0gUHJv
cG9zZWREYXRhYmFzZShvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBEYXRhYmFzZURldGFpbHMobmFt
ZS5pc29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNp
emUsIDApKTsKKyAgICAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5hZGQoJmRldGFpbHMpOworICAg
IH0KKyAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQ7IHdlIGRvbid0IGtu
b3cgd2hhdCB0aGV5J2xsIGRvLgorICAgIERhdGFiYXNlQ29udGV4dDo6ZnJvbShjb250ZXh0KS0+
ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFi
YXNlKG1fZGF0YWJhc2VHdWFyZCk7CisKKyAgICBtX3Byb3Bvc2VkRGF0YWJhc2VzLnJlbW92ZSgm
ZGV0YWlscyk7CisKKyAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQgbm93LCBhbGxvdyBp
dHMgY3JlYXRpb24uCisgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2Nr
KG9yaWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZG9uZUNyZWF0aW5nRGF0YWJh
c2Uob3JpZ2luLCBuYW1lKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEYXRhYmFz
ZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICBBU1NFUlQo
bV9xdW90YU1hcCk7CisgICAgcmV0dXJuIG1fcXVvdGFNYXAtPmNvbnRhaW5zKG9yaWdpbik7Cit9
CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbihTZWN1cml0eU9yaWdp
biogb3JpZ2luKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIHJldHVybiBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworfQorCiti
b29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFs
c2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBndWlk
IEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisKKyAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVy
KCkpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZpZXIpOworCisg
ICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OworfQorCit1bnNpZ25l
ZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3Qg
QWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBm
b3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgdGhl
IGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCisgICAgLy8gcGx1cyB0aGUgY3VycmVu
dCB1c2FnZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90
YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgIFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICByZXR1cm4gcXVvdGFG
b3JPcmlnaW5Ob0xvY2sob3JpZ2luKSAtIG9yaWdpblF1b3RhTWFuYWdlcigpLmRpc2tVc2FnZShv
cmlnaW4pICsgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShkYXRhYmFzZS0+
ZmlsZU5hbWUoKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUNoYW5nZWQo
QWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFu
YWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICBvcmln
aW5RdW90YU1hbmFnZXIoKS5tYXJrRGF0YWJhc2UoZGF0YWJhc2UpOworfQorCit2b2lkIERhdGFi
YXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIFZlY3RvcjxSZWZQdHI8QWJzdHJhY3RE
YXRhYmFzZT4gPiBvcGVuRGF0YWJhc2VzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgb3Bl
bkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKKworICAgICAgICBpZiAo
IW1fb3BlbkRhdGFiYXNlTWFwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIERhdGFi
YXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGlmICghbmFtZU1hcCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVu
ZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9
IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7CisgICAgICAgICAgICBEYXRhYmFzZVNl
dCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAgICAgICAgRGF0YWJh
c2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Cisg
ICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0
YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFwcGVuZCgqZGJT
ZXRJdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8UmVm
UHRyPEFic3RyYWN0RGF0YWJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRhYmFzZXNFbmRJ
dCA9IG9wZW5EYXRhYmFzZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPEFic3RyYWN0
RGF0YWJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRhYmFzZXNJdCA9IG9wZW5EYXRhYmFz
ZXMuYmVnaW4oKTsgb3BlbkRhdGFiYXNlc0l0ICE9IG9wZW5EYXRhYmFzZXNFbmRJdDsgKytvcGVu
RGF0YWJhc2VzSXQpCisgICAgICAgICgqb3BlbkRhdGFiYXNlc0l0KS0+aW50ZXJydXB0KCk7Cit9
CisKK1N0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikgY29uc3QKK3sKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJh
c2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKSwg
b3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Cit9CisKK1N0cmluZyBEYXRhYmFzZVRyYWNr
ZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQoreworICAgIEFTU0VSVCgh
bV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFvcmlnaW5RdW90YU1hbmFn
ZXIoKS50cnlMb2NrKCkpOworCisgICAgZm9yIChIYXNoU2V0PFByb3Bvc2VkRGF0YWJhc2UqPjo6
aXRlcmF0b3IgaXRlciA9IG1fcHJvcG9zZWREYXRhYmFzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3By
b3Bvc2VkRGF0YWJhc2VzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGlmICgoKml0ZXIpLT5zZWNv
bmQubmFtZSgpID09IG5hbWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdpbikpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9
IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgU3RyaW5nIG9yaWdpblBhdGggPSB0
aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHBhdGggZm9y
IHRoaXMgU2VjdXJpdHlPcmlnaW4gZXhpc3RzCisgICAgaWYgKGNyZWF0ZUlmTm90RXhpc3RzICYm
ICFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0cyhvcmlnaW5Q
YXRoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gU2VlIGlmIHdlIGhhdmUg
YSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAorICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/
IEFORCBuYW1lPT87Iik7CisKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsK
KworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworCisgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmRE
YXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApKTsKKyAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3RzKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBUcmFja2VyIGZv
ciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpLCBu
YW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAg
ICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKworICAgIFN0cmluZyBmaWxlTmFtZSA9IFNRTGl0ZUZp
bGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uob3JpZ2luUGF0aCwgbmFtZSwgb3Jp
Z2luSWRlbnRpZmllciwgJm1fZGF0YWJhc2UpOworICAgIGlmICghYWRkRGF0YWJhc2Uob3JpZ2lu
LCBuYW1lLCBmaWxlTmFtZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIElm
IHRoaXMgb3JpZ2luJ3MgcXVvdGEgaXMgYmVpbmcgdHJhY2tlZCAob3BlbiBoYW5kbGUgdG8gYSBk
YXRhYmFzZSBpbiB0aGlzIG9yaWdpbiksIGFkZCB0aGlzIG5ldyBkYXRhYmFzZQorICAgIC8vIHRv
IHRoZSBxdW90YSBtYW5hZ2VyIG5vdworICAgIFN0cmluZyBmdWxsRmlsZVBhdGggPSBTUUxpdGVG
aWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIGZpbGVO
YW1lKTsKKyAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikp
CisgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwg
ZnVsbEZpbGVQYXRoKTsKKworICAgIHJldHVybiBmdWxsRmlsZVBhdGg7Cit9CisKK1N0cmluZyBE
YXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQoreworICAgIE11
dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIExvY2tlcjxPcmln
aW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7
CisKKyAgICByZXR1cm4gZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhvcmlnaW4sIG5hbWUsIGNy
ZWF0ZUlmTm90RXhpc3RzKS5pc29sYXRlZENvcHkoKTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OnBvcHVsYXRlT3JpZ2lucygpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKKyAgICBpZiAobV9xdW90YU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9x
dW90YU1hcCA9IGFkb3B0UHRyKG5ldyBRdW90YU1hcCk7CisKKyAgICBvcGVuVHJhY2tlckRhdGFi
YXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBv
cmlnaW4sIHF1b3RhIEZST00gT3JpZ2lucyIpOworCisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFy
ZSBzdGF0ZW1lbnQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0
OworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93
KSB7CisgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpOworICAgICAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLmdldCgpLT5pc29sYXRlZENvcHko
KSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpKTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgaW4g
YWxsIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NF
UlQobV9xdW90YU1hcCk7CisgICAgY29weUtleXNUb1ZlY3RvcigqbV9xdW90YU1hcCwgcmVzdWx0
KTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xv
Y2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdFZlY3RvcikK
K3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIG9wZW5UcmFj
a2VyRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87Iik7CisKKyAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworCisgICAgaW50IHJlc3VsdDsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVu
ZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJl
c3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgYWxsIGRh
dGFiYXNlIG5hbWVzIGZvciBvcmlnaW4gJXMiLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9y
aWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0VmVjdG9y
KQoreworICAgIFZlY3RvcjxTdHJpbmc+IHRlbXA7CisgICAgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgaWYgKCFkYXRhYmFzZU5h
bWVzRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbiwgdGVtcCkpCisgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSB0ZW1w
LmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytpdGVyKQorICAgICAgICByZXN1bHRWZWN0
b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
RGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIFN0cmlu
ZyBvcmlnaW5JZGVudGlmaWVyID0gb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKKyAgICBT
dHJpbmcgZGlzcGxheU5hbWU7CisgICAgaW50NjRfdCBleHBlY3RlZFVzYWdlOworCisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKworICAg
ICAgICBmb3IgKEhhc2hTZXQ8UHJvcG9zZWREYXRhYmFzZSo+OjppdGVyYXRvciBpdGVyID0gbV9w
cm9wb3NlZERhdGFiYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fcHJvcG9zZWREYXRhYmFzZXMuZW5k
KCk7ICsraXRlcikKKyAgICAgICAgICAgIGlmICgoKml0ZXIpLT5zZWNvbmQubmFtZSgpID09IG5h
bWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoKCppdGVyKS0+c2Vjb25kLnRocmVhZCgpID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICgqaXRlciktPnNlY29uZDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygpOworICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9
PyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAg
ICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKKworICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgyLCBuYW1lKTsKKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAgcmV0dXJuIERh
dGFiYXNlRGV0YWlscygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWlscyBmb3IgZGF0
YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5hbWUuYXNjaWko
KS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAg
cmV0dXJuIERhdGFiYXNlRGV0YWlscygpOworICAgICAgICB9CisgICAgICAgIGRpc3BsYXlOYW1l
ID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGV4cGVjdGVkVXNhZ2UgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgfQorCisgICAgcmV0dXJuIERhdGFiYXNl
RGV0YWlscyhuYW1lLCBkaXNwbGF5TmFtZSwgZXhwZWN0ZWRVc2FnZSwgdXNhZ2VGb3JEYXRhYmFz
ZShuYW1lLCBvcmlnaW4pKTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNl
RGV0YWlscyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK3sKKyAg
ICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7
CisgICAgaW50NjRfdCBndWlkID0gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZSht
X2RhdGFiYXNlR3VhcmQpOworCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0cnVlKTsKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBX
SEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7
CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09
IFNRTFJlc3VsdFJvdykKKyAgICAgICAgZ3VpZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKworICAgIGlmIChndWlkID09IDApIHsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGluIG9yaWdpbiAl
cyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luSWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gVGhp
cyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIGRh
dGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qg
aW4gdGhlIHRyYWNrZXIKKyAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJhY2tlciBmaWxl
IGlzIGFuIGV4dGVybmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250cm9sIG9mIG91
ciBjb2RlLCBpdCdzIHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFTU0VSVCBjYXNl
CisgICAgICAgICAgICAvLyBTbyB3ZSdsbCBwcmludCBhbiBlcnJvciBpbnN0ZWFkCisgICAgICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRhYmFzZSAlcyBp
biBvcmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGludmFsaWQgdG8g
c2V0IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBl
eGlzdCBpbiB0aGUgdHJhY2tlciIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuYXNjaWko
KS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFtZT0/LCBlc3Rp
bWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Iik7CisgICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZVN0YXRl
bWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7CisgICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJ
bnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZEludDY0KDMs
IGd1aWQpOworCisgICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9u
ZSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgZGV0YWlscyBmb3IgZGF0
YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luSWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKG9y
aWdpbiwgbmFtZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVz
YWdlRm9yRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQoreworICAgIFN0cmluZyBwYXRoID0gZnVsbFBhdGhGb3JEYXRhYmFzZShvcmlnaW4sIG5hbWUs
IGZhbHNlKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7Cit9
CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFz
ZSogZGF0YWJhc2UpCit7CisgICAgaWYgKCFkYXRhYmFzZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFi
YXNlTWFwR3VhcmQpOworCisgICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCisgICAgICAg
ICAgICBtX29wZW5EYXRhYmFzZU1hcCA9IGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9yaWdpbk1hcCk7
CisKKyAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Cisg
ICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQo
ZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBpZiAoIW5hbWVNYXApIHsKKyAg
ICAgICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwOworICAgICAgICAgICAgbV9v
cGVuRGF0YWJhc2VNYXAtPnNldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNvbGF0ZWRD
b3B5KCksIG5hbWVNYXApOworICAgICAgICB9CisKKyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFi
YXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOworICAgICAgICBpZiAoIWRhdGFiYXNlU2V0KSB7
CisgICAgICAgICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldDsKKyAgICAgICAgICAg
IG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBkYXRhYmFzZVNldCk7CisgICAgICAg
IH0KKworICAgICAgICBkYXRhYmFzZVNldC0+YWRkKGRhdGFiYXNlKTsKKworICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0
cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworCisgICAgICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CisgICAgICAgIGlmICghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2lu
KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKSkgeworICAgICAgICAgICAgb3JpZ2luUXVvdGFN
YW5hZ2VyKCkudHJhY2tPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAg
ICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2UoZGF0YWJhc2UtPnNlY3VyaXR5
T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCksIGRhdGFiYXNlLT5maWxlTmFt
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZSht
X2RhdGFiYXNlR3VhcmQpOworICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKK30KKwordm9pZCBE
YXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRh
YmFzZSkKK3sKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBH
dWFyZCk7CisKKyAgICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChkYXRh
YmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGlmICghbmFtZU1hcCkgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFt
ZSk7CisgICAgICAgIGlmICghZGF0YWJhc2VTZXQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGF0
YWJhc2VTZXQtPnJlbW92ZShkYXRhYmFzZSk7CisKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJS
ZW1vdmVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZp
ZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworCisgICAgICAgIGlmICghZGF0YWJhc2VT
ZXQtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBuYW1lTWFwLT5y
ZW1vdmUobmFtZSk7CisgICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKKworICAgICAgICBpZiAo
IW5hbWVNYXAtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX29w
ZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICAg
ICAgZGVsZXRlIG5hbWVNYXA7CisKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAgICAgb3JpZ2lu
UXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsK
KyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8QWJz
dHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKQoreworICAgIE11dGV4TG9ja2VyIG9wZW5EYXRh
YmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgaWYgKCFtX29wZW5EYXRh
YmFzZU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFw
ID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChvcmlnaW4pOworICAgIGlmICghbmFtZU1hcCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+
Z2V0KG5hbWUpOworICAgIGlmICghZGF0YWJhc2VTZXQpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0
ICE9IGRhdGFiYXNlU2V0LT5lbmQoKTsgKytpdCkKKyAgICAgICAgZGF0YWJhc2VzLT5hZGQoKml0
KTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JPcmln
aW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoIW9yaWdpblF1
b3RhTWFuYWdlcigpLnRyeUxvY2soKSk7CisKKyAgICAvLyBVc2UgdGhlIE9yaWdpblF1b3RhTWFu
YWdlciBtZWNoYW5pc20gdG8gY2FsY3VsYXRlIHRoZSB1c2FnZQorICAgIGlmIChvcmlnaW5RdW90
YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIG9yaWdpblF1
b3RhTWFuYWdlcigpLmRpc2tVc2FnZShvcmlnaW4pOworCisgICAgLy8gSWYgdGhlIE9yaWdpblF1
b3RhTWFuYWdlciBkb2Vzbid0IHRyYWNrIHRoaXMgb3JpZ2luIGFscmVhZHksIHByaW1lIGl0IHRv
IGRvIHNvCisgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4ob3JpZ2luKTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIGRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xv
Y2sob3JpZ2luLCBuYW1lcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9y
aWdpbiwgbmFtZXNbaV0sIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lc1tp
XSwgZmFsc2UpKTsKKworICAgIGlmICghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2lu
KG9yaWdpbikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBvcmlnaW5RdW90YU1hbmFn
ZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
VHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBMb2NrZXI8T3Jp
Z2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkp
OworICAgIHJldHVybiB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworfQorCit1bnNpZ25l
ZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdpbk5vTG9jayhTZWN1cml0
eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2so
KSk7CisgICAgQVNTRVJUKG1fcXVvdGFNYXApOworICAgIHJldHVybiBtX3F1b3RhTWFwLT5nZXQo
b3JpZ2luKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFG
b3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICByZXR1cm4gcXVvdGFGb3JPcmlnaW5Ob0xv
Y2sob3JpZ2luKTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKworICAgIGlmIChxdW90YUZvck9y
aWdpbk5vTG9jayhvcmlnaW4pID09IHF1b3RhKQorICAgICAgICByZXR1cm47CisKKyAgICBvcGVu
VHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3F1b3RhTWFwLT5jb250YWlucyhvcmlnaW4pKSB7
CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
ZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBxdW90YSk7CisKKyAgICAgICAgICAgIGlm
IChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9y
aWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iKTsKKyAgICAgICAg
Ym9vbCBlcnJvciA9IHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2s7CisgICAgICAg
IGlmICghZXJyb3IpIHsKKyAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMSwgcXVvdGEp
OworICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOworCisgICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1h
bmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvcikKKyNpZiBPUyhXSU5ET1dTKQor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHF1b3RhICVJNjR1IGluIHRyYWNr
ZXIgZGF0YWJhc2UgZm9yIG9yaWdpbiAlcyIsIHF1b3RhLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlCisgICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzZXQgcXVvdGEgJWxsdSBpbiB0cmFja2VyIGRhdGFiYXNlIGZvciBvcmlnaW4gJXMi
LCBxdW90YSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRvIHVwZGF0ZSB0
aGUgcXVvdGEgaW4gbWVtb3J5IGlmIHdlIGZhaWxlZCB0byB1cGRhdGUgaXQgb24gZGlzaz8KKyAg
ICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgcXVvdGEpOworCisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4o
b3JpZ2luKTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmFkZERhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKG1f
cXVvdGFNYXApOworICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CisgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBOZXcgZGF0
YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHVudGlsIHRoZSBvcmlnaW4gaGFzIGJlZW4gZXN0
YWJsaXNoZWQKKyAgICBBU1NFUlQoaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSk7CisK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBE
YXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/KTsiKTsKKworICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgzLCBwYXRoKTsKKworICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWRkIGRhdGFiYXNlICVzIHRvIG9y
aWdpbiAlczogJXNcbiIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKK3sK
KyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IG9yaWdpbnNDb3B5OworICAgIG9y
aWdpbnMob3JpZ2luc0NvcHkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdp
bnNDb3B5LnNpemUoKTsgKytpKQorICAgICAgICBkZWxldGVPcmlnaW4ob3JpZ2luc0NvcHlbaV0u
Z2V0KCkpOworfQorCisvLyBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gbWFr
ZSBzdXJlIHRoYXQgbm9ib2R5IGlzIHRyeWluZyB0byBjcmVhdGUsIGRlbGV0ZSwgb3Blbiwgb3Ig
Y2xvc2UgZGF0YWJhc2VzIGluIHRoaXMgb3JpZ2luIHdoaWxlIHRoZSBkZWxldGlvbiBpcworLy8g
dGFraW5nIHBsYWNlLgorYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbihTZWN1cml0
eU9yaWdpbiogb3JpZ2luKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNlTmFtZXM7Cisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
KyAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAo
IWRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCBkYXRhYmFzZU5hbWVzKSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlzdCBvZiBkYXRhYmFz
ZSBuYW1lcyBmb3Igb3JpZ2luICVzIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFjYW5EZWxldGVPcmlnaW4ob3JpZ2luKSkgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJUcmllZCB0byBkZWxldGUgYW4gb3JpZ2luICglcykgd2hpbGUgZWl0aGVyIGNyZWF0aW5nIGRh
dGFiYXNlIGluIGl0IG9yIGFscmVhZHkgZGVsZXRpbmcgaXQiLCBvcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmVjb3JkRGVsZXRp
bmdPcmlnaW4ob3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUg
YmVjYXVzZSBob2xkaW5nIGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxl
IHdpbGwgZGVhZGxvY2suCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFt
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2lu
LCBkYXRhYmFzZU5hbWVzW2ldKSkgeworICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgZmlsZSBj
YW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVsZXRlIHRoZSByZXN0LCBkb24n
dCByZXR1cm4gZWFybHkgaGVyZS4KKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGRl
bGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBkYXRhYmFzZU5hbWVzW2ld
LmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIGRvbmVEZWxldGluZ09yaWdpbihv
cmlnaW4pOworCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOworICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMg
ZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisKKyAgICAg
ICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4g
JXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBP
cmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgICAgIGlmIChvcmlnaW5TdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG9yaWdpblN0YXRlbWVudC5iaW5kVGV4dCgxLCBv
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKworICAgICAgICBpZiAoIW9yaWdpblN0YXRl
bWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBmcm9tIHRyYWNr
ZXIiLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFNRTGl0ZUZpbGVTeXN0
ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmlnaW4pKTsKKwor
ICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFzdFJlZmVyZW5j
ZSA9IG9yaWdpbjsKKyAgICAgICAgbV9xdW90YU1hcC0+cmVtb3ZlKG9yaWdpbik7CisKKyAgICAg
ICAgeworICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2Vy
TG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAgICAgICAgIG9yaWdpblF1b3RhTWFu
YWdlcigpLnJlbW92ZU9yaWdpbihvcmlnaW4pOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
d2UgcmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4sIGRvIHNvbWUgYWRkaXRpb25hbCBkZWxldGlvbi4K
KyAgICAgICAgaWYgKG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1f
ZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwor
ICAgICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUodHJhY2tlckRh
dGFiYXNlUGF0aCgpKTsKKyAgICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlE
YXRhYmFzZURpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERp
ZE1vZGlmeU9yaWdpbihvcmlnaW4pOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAg
IC8vIENhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIHdoaWxlIHNvbWVvbmUgZWxzZSBpcyBkZWxldGlu
ZyBpdDsgdGhlcmUncyBhIHJpc2sgb2YgbGVhdmluZyB1bnRyYWNrZWQgZGF0YWJhc2UgZGVicmlz
IG9uIHRoZSBkaXNrLgorICAgIHJldHVybiAhZGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUp
ICYmICFkZWxldGluZ09yaWdpbihvcmlnaW4pOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6
cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAg
ICBOYW1lQ291bnRNYXAqIG5hbWVNYXAgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsKKyAg
ICBpZiAoIW5hbWVNYXApIHsKKyAgICAgICAgbmFtZU1hcCA9IG5ldyBOYW1lQ291bnRNYXAoKTsK
KyAgICAgICAgbV9iZWluZ0NyZWF0ZWQuc2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5hbWVN
YXApOworICAgIH0KKyAgICBsb25nIGNvdW50ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOworICAgIG5h
bWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBjb3VudCArIDEpOworfQorCit2b2lkIERh
dGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdp
biwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRy
eUxvY2soKSk7CisgICAgTmFtZUNvdW50TWFwKiBuYW1lTWFwID0gbV9iZWluZ0NyZWF0ZWQuZ2V0
KG9yaWdpbik7CisgICAgaWYgKG5hbWVNYXApIHsKKyAgICAgICAgbG9uZyBjb3VudCA9IG5hbWVN
YXAtPmdldChuYW1lKTsKKyAgICAgICAgQVNTRVJUKGNvdW50ID4gMCk7CisgICAgICAgIGlmIChj
b3VudCA8PSAxKSB7CisgICAgICAgICAgICBuYW1lTWFwLT5yZW1vdmUobmFtZSk7CisgICAgICAg
ICAgICBpZiAobmFtZU1hcC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbV9iZWluZ0Ny
ZWF0ZWQucmVtb3ZlKG9yaWdpbik7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5hbWVNYXA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmFtZU1hcC0+c2V0KG5h
bWUsIGNvdW50IC0gMSk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChmYWxzZSk7Cit9CisK
K2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjcmVhdGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFy
ZC50cnlMb2NrKCkpOworICAgIE5hbWVDb3VudE1hcCogbmFtZU1hcCA9IG1fYmVpbmdDcmVhdGVk
LmdldChvcmlnaW4pOworICAgIHJldHVybiBuYW1lTWFwICYmIG5hbWVNYXAtPmdldChuYW1lKTsK
K30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJh
c2VHdWFyZC50cnlMb2NrKCkpOworICAgIHJldHVybiAhY3JlYXRpbmdEYXRhYmFzZShvcmlnaW4s
IG5hbWUpICYmICFkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Cit9CisKK3ZvaWQgRGF0
YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmln
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50
cnlMb2NrKCkpOworICAgIEFTU0VSVChjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpKTsK
KyAgICBOYW1lU2V0KiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7CisgICAg
aWYgKCFuYW1lU2V0KSB7CisgICAgICAgIG5hbWVTZXQgPSBuZXcgTmFtZVNldCgpOworICAgICAg
ICBtX2JlaW5nRGVsZXRlZC5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgbmFtZVNldCk7Cisg
ICAgfQorICAgIEFTU0VSVCghbmFtZVNldC0+Y29udGFpbnMobmFtZSkpOworICAgIG5hbWVTZXQt
PmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRv
bmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIE5h
bWVTZXQqIG5hbWVTZXQgPSBtX2JlaW5nRGVsZXRlZC5nZXQob3JpZ2luKTsKKyAgICBpZiAobmFt
ZVNldCkgeworICAgICAgICBBU1NFUlQobmFtZVNldC0+Y29udGFpbnMobmFtZSkpOworICAgICAg
ICBuYW1lU2V0LT5yZW1vdmUobmFtZSk7CisgICAgICAgIGlmIChuYW1lU2V0LT5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIG1fYmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW4pOworICAgICAgICAg
ICAgZGVsZXRlIG5hbWVTZXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZmFsc2UpOworICAgIH0KK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0aW5nRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgTmFtZVNldCogbmFtZVNl
dCA9IG1fYmVpbmdEZWxldGVkLmdldChvcmlnaW4pOworICAgIHJldHVybiBuYW1lU2V0ICYmIG5h
bWVTZXQtPmNvbnRhaW5zKG5hbWUpOworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRGVs
ZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX2RhdGFi
YXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICByZXR1cm4gIShkZWxldGluZ09yaWdpbihvcmlnaW4p
IHx8IG1fYmVpbmdDcmVhdGVkLmdldChvcmlnaW4pKTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmRlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCit7CisgICAgQVNTRVJU
KCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICByZXR1cm4gbV9vcmlnaW5zQmVpbmdE
ZWxldGVkLmNvbnRhaW5zKG9yaWdpbik7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZWNv
cmREZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKQoreworICAgIEFTU0VSVCgh
bV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFkZWxldGluZ09yaWdpbihv
cmlnaW4pKTsKKyAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi0+aXNvbGF0ZWRD
b3B5KCkpOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKKyAgICBBU1NFUlQoZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7CisgICAgbV9vcmln
aW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW4pOworfQorCitib29sIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJh
c2VHdWFyZCk7CisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAgICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCFjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpKSB7CisgICAgICAgICAg
ICBBU1NFUlQoRkFMU0UpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJlY29yZERlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKKyAgICB9CisKKyAg
ICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tzIGR1cmluZyBh
IGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2suCisgICAgaWYgKCFkZWxl
dGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1lKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBkZWxldGUgZmlsZSBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS5hc2Np
aSgpLmRhdGEoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VH
dWFyZCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyIpOworICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgZGF0YWJhc2UgJXMgZnJvbSBvcmlnaW4gJXMg
ZnJvbSB0cmFja2VyIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50
aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGRvbmVEZWxldGluZ0RhdGFiYXNlKG9y
aWdpbiwgbmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDIsIG5hbWUpOworCisgICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1h
bmQoKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9m
IGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUuYXNjaWkoKS5k
YXRhKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2Vy
PiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgICAgICBvcmln
aW5RdW90YU1hbmFnZXIoKS5yZW1vdmVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIH0KKwor
ICAgIGlmIChtX2NsaWVudCkgeworICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlP
cmlnaW4ob3JpZ2luKTsKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJh
c2Uob3JpZ2luLCBuYW1lKTsKKyAgICB9CisgICAgZG9uZURlbGV0aW5nRGF0YWJhc2Uob3JpZ2lu
LCBuYW1lKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gZGVsZXRlRGF0YWJhc2VG
aWxlIGhhcyB0byByZWxlYXNlIGxvY2tzIGJldHdlZW4gbG9va2luZyB1cCB0aGUgbGlzdCBvZiBk
YXRhYmFzZXMgdG8gY2xvc2UgYW5kIGNsb3NpbmcgdGhlbS4gIFdoaWxlIHRoaXMgaXMgaW4gcHJv
Z3Jlc3MsIHRoZSBjYWxsZXIKKy8vIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBubyBu
ZXcgZGF0YWJhc2VzIGFyZSBvcGVuZWQgaW4gdGhlIGZpbGUgdG8gYmUgZGVsZXRlZC4KK2Jvb2wg
RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFN0cmluZyBmdWxsUGF0aCA9IGZ1bGxQYXRo
Rm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmYWxzZSk7CisgICAgaWYgKGZ1bGxQYXRoLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAg
QVNTRVJUKGRlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSB8fCBkZWxldGluZ09yaWdpbihv
cmlnaW4pKTsKKyAgICB9CisjZW5kaWYKKworICAgIFZlY3RvcjxSZWZQdHI8QWJzdHJhY3REYXRh
YmFzZT4gPiBkZWxldGVkRGF0YWJhc2VzOworCisgICAgLy8gTWFrZSBzdXJlIG5vdCB0byBob2xk
IHRoZSBhbnkgbG9ja3Mgd2hlbiBjYWxsaW5nCisgICAgLy8gRGF0YWJhc2U6Om1hcmtBc0RlbGV0
ZWRBbmRDbG9zZSgpLCBzaW5jZSB0aGF0IGNhbiBjYXVzZSBhIGRlYWRsb2NrCisgICAgLy8gZHVy
aW5nIHRoZSBzeW5jaHJvbm91cyBEYXRhYmFzZVRocmVhZCBjYWxsIGl0IHRyaWdnZXJzLgorICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFz
ZU1hcEd1YXJkKTsKKyAgICAgICAgaWYgKG1fb3BlbkRhdGFiYXNlTWFwKSB7CisgICAgICAgICAg
ICAvLyBUaGVyZSBhcmUgc29tZSBvcGVuIGRhdGFiYXNlcywgbGV0cyBjaGVjayBpZiB0aGV5IGFy
ZSBmb3IgdGhpcyBvcmlnaW4uCisgICAgICAgICAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAg
PSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbik7CisgICAgICAgICAgICBpZiAobmFtZU1h
cCAmJiBuYW1lTWFwLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgc29t
ZSBvcGVuIGRhdGFiYXNlcyBmb3IgdGhpcyBvcmlnaW4sIGxldCdzIGNoZWNrCisgICAgICAgICAg
ICAgICAgLy8gaWYgdGhleSBhcmUgdGhpcyBkYXRhYmFzZSBieSBuYW1lLgorICAgICAgICAgICAg
ICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0YWJhc2VTZXQtPnNpemUoKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUgZGF0YWJhc2Ugb3BlbiB3aXRoIHRoaXMg
bmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCisgICAgICAgICAgICAgICAgICAgIERhdGFiYXNl
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VT
ZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
bGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0t
Pm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworCisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxsUGF0aCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGll
bnQgPSBjbGllbnQ7Cit9CisKK3N0YXRpYyBNdXRleCYgbm90aWZpY2F0aW9uTXV0ZXgoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7CisgICAgcmV0dXJuIG11
dGV4OworfQorCit0eXBlZGVmIFZlY3RvcjxwYWlyPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFN0
cmluZz4gPiBOb3RpZmljYXRpb25RdWV1ZTsKKworc3RhdGljIE5vdGlmaWNhdGlvblF1ZXVlJiBu
b3RpZmljYXRpb25RdWV1ZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChOb3RpZmljYXRp
b25RdWV1ZSwgcXVldWUsICgpKTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisKK3ZvaWQgRGF0YWJh
c2VUcmFja2VyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG5v
dGlmaWNhdGlvbk11dGV4KCkpOworCisgICAgbm90aWZpY2F0aW9uUXVldWUoKS5hcHBlbmQocGFp
cjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTdHJpbmc+KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCks
IG5hbWUuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICBzY2hlZHVsZUZvck5vdGlmaWNhdGlvbigpOwor
fQorCitzdGF0aWMgYm9vbCBub3RpZmljYXRpb25TY2hlZHVsZWQgPSBmYWxzZTsKKwordm9pZCBE
YXRhYmFzZVRyYWNrZXI6OnNjaGVkdWxlRm9yTm90aWZpY2F0aW9uKCkKK3sKKyAgICBBU1NFUlQo
IW5vdGlmaWNhdGlvbk11dGV4KCkudHJ5TG9jaygpKTsKKworICAgIGlmICghbm90aWZpY2F0aW9u
U2NoZWR1bGVkKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoRGF0YWJhc2VUcmFja2VyOjpu
b3RpZnlEYXRhYmFzZXNDaGFuZ2VkLCAwKTsKKyAgICAgICAgbm90aWZpY2F0aW9uU2NoZWR1bGVk
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpub3RpZnlEYXRhYmFz
ZXNDaGFuZ2VkKHZvaWQqKQoreworICAgIC8vIE5vdGUgdGhhdCBpZiBEYXRhYmFzZVRyYWNrZXIg
ZXZlciBiZWNvbWVzIG5vbi1zaW5nbGV0b24sIHdlJ2xsIGhhdmUgdG8gYW1lbmQgdGhpcyBub3Rp
ZmljYXRpb24KKyAgICAvLyBtZWNoYW5pc20gdG8gaW5jbHVkZSB3aGljaCB0cmFja2VyIHRoZSBu
b3RpZmljYXRpb24gZ29lcyBvdXQgb24gYXMgd2VsbC4KKyAgICBEYXRhYmFzZVRyYWNrZXImIHRo
ZVRyYWNrZXIodHJhY2tlcigpKTsKKworICAgIE5vdGlmaWNhdGlvblF1ZXVlIG5vdGlmaWNhdGlv
bnM7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobm90aWZpY2F0aW9uTXV0ZXgo
KSk7CisKKyAgICAgICAgbm90aWZpY2F0aW9ucy5zd2FwKG5vdGlmaWNhdGlvblF1ZXVlKCkpOwor
CisgICAgICAgIG5vdGlmaWNhdGlvblNjaGVkdWxlZCA9IGZhbHNlOworICAgIH0KKworICAgIGlm
ICghdGhlVHJhY2tlci5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG5vdGlmaWNhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRoZVRy
YWNrZXIubV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uobm90aWZpY2F0aW9uc1tp
XS5maXJzdC5nZXQoKSwgbm90aWZpY2F0aW9uc1tpXS5zZWNvbmQpOworfQorCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCShyZXZpc2lvbiAxMDk4NTgpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmg6MTA5ODU4KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
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
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRhYmFzZVRyYWNr
ZXJfaAorI2RlZmluZSBEYXRhYmFzZVRyYWNrZXJfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJEYXRhYmFzZURldGFp
bHMuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ0hST01JVU0pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworc3RydWN0IFNlY3VyaXR5T3JpZ2luSGFzaDsKKwor
I2lmICFQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIERhdGFiYXNlVHJhY2tlckNsaWVudDsKKwor
c3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOworI2VuZGlmIC8vICFQTEFURk9STShDSFJPTUlV
TSkKKworY2xhc3MgRGF0YWJhc2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
YXRhYmFzZVRyYWNrZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7
CisgICAgc3RhdGljIERhdGFiYXNlVHJhY2tlciYgdHJhY2tlcigpOworICAgIC8vIFRoaXMgc2lu
Z2xldG9uIHdpbGwgcG90ZW50aWFsbHkgYmUgdXNlZCBmcm9tIG11bHRpcGxlIHdvcmtlciB0aHJl
YWRzIGFuZCB0aGUgcGFnZSdzIGNvbnRleHQgdGhyZWFkIHNpbXVsdGFuZW91c2x5LiAgVG8ga2Vl
cCB0aGlzIHNhZmUsIGl0J3MKKyAgICAvLyBjdXJyZW50bHkgdXNpbmcgNCBsb2Nrcy4gIEluIG9y
ZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHdoZW4gdGFraW5nIG11bHRpcGxlIGxvY2tzLCB5b3UgbXVz
dCB0YWtlIHRoZW0gaW4gdGhlIGNvcnJlY3Qgb3JkZXI6CisgICAgLy8gbV9kYXRhYmFzZUd1YXJk
IGJlZm9yZSBxdW90YU1hbmFnZXIgaWYgYm90aCBsb2NrcyBhcmUgbmVlZGVkLgorICAgIC8vIG1f
b3BlbkRhdGFiYXNlTWFwR3VhcmQgYmVmb3JlIHF1b3RhTWFuYWdlciBpZiBib3RoIGxvY2tzIGFy
ZSBuZWVkZWQuCisgICAgLy8gbV9kYXRhYmFzZUd1YXJkIGFuZCBtX29wZW5EYXRhYmFzZU1hcEd1
YXJkIGN1cnJlbnRseSBkb24ndCBvdmVybGFwLgorICAgIC8vIG5vdGlmaWNhdGlvbk11dGV4KCkg
aXMgY3VycmVudGx5IGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBsb2Nrcy4KKworICAgIGJvb2wg
Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKTsKKyAgICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKTsKKyAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9
IHRydWUpOworCisgICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwor
ICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lk
IGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpOworCisg
ICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFj
dERhdGFiYXNlKik7CisgICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoQWJzdHJhY3REYXRhYmFzZSop
OworCisgICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKKworcHJpdmF0ZToKKyAgICBEYXRhYmFzZVRyYWNrZXIoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOworCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorcHVi
bGljOgorICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYpOwor
ICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdDsKKworICAgIHZvaWQgb3Jp
Z2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpOworICAgIGJvb2wg
ZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiosIFZlY3RvcjxTdHJpbmc+JiBy
ZXN1bHQpOworCisgICAgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNv
bnN0IFN0cmluZyYsIFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg
dXNhZ2VGb3JEYXRhYmFzZShjb25zdCBTdHJpbmcmLCBTZWN1cml0eU9yaWdpbiopOworICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOworICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBxdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOworICAgIHZv
aWQgc2V0UXVvdGEoU2VjdXJpdHlPcmlnaW4qLCB1bnNpZ25lZCBsb25nIGxvbmcpOworCisgICAg
dm9pZCBkZWxldGVBbGxEYXRhYmFzZXMoKTsKKyAgICBib29sIGRlbGV0ZU9yaWdpbihTZWN1cml0
eU9yaWdpbiopOworICAgIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xp
ZW50Kik7CisKKyAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJlYWQg
c2FmZSB3aXRoIGl0cyBkYXRhCisgICAgdm9pZCBzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdl
ZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICBib29sIGhhc0Vu
dHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNF
bnRyeUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKKyAgICBTdHJpbmcg
ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7CisgICAgYm9vbCBkYXRhYmFzZU5hbWVz
Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiBy
ZXN1bHRWZWN0b3IpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdpbk5vTG9j
ayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFG
b3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7CisKKyAgICBTdHJpbmcgdHJh
Y2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFzZShi
b29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKworICAgIFN0cmluZyBvcmlnaW5QYXRoKFNlY3Vy
aXR5T3JpZ2luKikgY29uc3Q7CisKKyAgICBib29sIGhhc0VudHJ5Rm9yRGF0YWJhc2UoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CisKKyAgICBib29s
IGFkZERhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHBhdGgpOworICAgIHZvaWQgcG9wdWxhdGVPcmlnaW5zKCk7CisKKyAgICBib29sIGRl
bGV0ZURhdGFiYXNlRmlsZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisK
KyAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0OworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VOYW1lTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBEYXRhYmFzZU5hbWVN
YXAqLCBTZWN1cml0eU9yaWdpbkhhc2g+IERhdGFiYXNlT3JpZ2luTWFwOworCisgICAgTXV0ZXgg
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKKyAgICBtdXRhYmxlIE93blB0cjxEYXRhYmFzZU9yaWdp
bk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7CisKKyAgICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgbV9k
YXRhYmFzZSwgbV9xdW90YU1hcCwgbV9wcm9wb3NlZERhdGFiYXNlcywgbV9kYXRhYmFzZURpcmVj
dG9yeVBhdGgsIG1fb3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0ZWQsIGFuZCBtX2Jl
aW5nRGVsZXRlZC4KKyAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CisgICAgU1FMaXRlRGF0YWJh
c2UgbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gUXVvdGFNYXA7Cisg
ICAgbXV0YWJsZSBPd25QdHI8UXVvdGFNYXA+IG1fcXVvdGFNYXA7CisKKyAgICBTdHJpbmcgbV9k
YXRhYmFzZURpcmVjdG9yeVBhdGg7CisKKyAgICBEYXRhYmFzZVRyYWNrZXJDbGllbnQqIG1fY2xp
ZW50OworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRGF0
YWJhc2VEZXRhaWxzPiBQcm9wb3NlZERhdGFiYXNlOworICAgIEhhc2hTZXQ8UHJvcG9zZWREYXRh
YmFzZSo+IG1fcHJvcG9zZWREYXRhYmFzZXM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBsb25nPiBOYW1lQ291bnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIE5hbWVDb3VudE1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gQ3JlYXRlU2V0Owor
ICAgIENyZWF0ZVNldCBtX2JlaW5nQ3JlYXRlZDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5n
PiBOYW1lU2V0OworICAgIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgTmFtZVNldCos
IFNlY3VyaXR5T3JpZ2luSGFzaD4gbV9iZWluZ0RlbGV0ZWQ7CisgICAgSGFzaFNldDxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBTZWN1cml0eU9yaWdpbkhhc2g+IG1fb3JpZ2luc0JlaW5nRGVsZXRl
ZDsKKyAgICBib29sIGNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCByZWNvcmRDcmVhdGluZ0RhdGFiYXNlKFNlY3Vy
aXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBkb25lQ3Jl
YXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIGJvb2wgY3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIGJvb2wgY2FuRGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlY29yZERlbGV0aW5n
RGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICB2b2lkIGRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBkZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2lu
ICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBjYW5EZWxldGVPcmlnaW4o
U2VjdXJpdHlPcmlnaW4gKm9yaWdpbik7CisgICAgYm9vbCBkZWxldGluZ09yaWdpbihTZWN1cml0
eU9yaWdpbiAqb3JpZ2luKTsKKyAgICB2b2lkIHJlY29yZERlbGV0aW5nT3JpZ2luKFNlY3VyaXR5
T3JpZ2luICpvcmlnaW4pOworICAgIHZvaWQgZG9uZURlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4pOworCisgICAgc3RhdGljIHZvaWQgc2NoZWR1bGVGb3JOb3RpZmljYXRpb24o
KTsKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlEYXRhYmFzZXNDaGFuZ2VkKHZvaWQqKTsKKyNlbHNl
CitwdWJsaWM6CisgICAgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0OworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VOYW1lTWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlTmFtZU1hcCo+IERhdGFiYXNlT3JpZ2lu
TWFwOworICAgIGNsYXNzIENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s7CisKKyAgICB2
b2lkIGNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpOwor
CisgICAgTXV0ZXggbV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKKyAgICBtdXRhYmxlIE93blB0cjxE
YXRhYmFzZU9yaWdpbk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7CisjZW5kaWYgLy8gIVBMQVRGT1JN
KENIUk9NSVVNKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERhdGFiYXNlVHJhY2tlcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIERhdGFiYXNlVHJhY2tlckNsaWVudF9oCisjZGVm
aW5lIERhdGFiYXNlVHJhY2tlckNsaWVudF9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgRGF0YWJhc2VUcmFja2VyQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZVRyYWNrZXJDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIERhdGFiYXNlVHJhY2tlckNsaWVudF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9Pcmln
aW5RdW90YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3JpZ2lu
UXVvdGFNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAi
QWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIk9yaWdpblVzYWdlUmVjb3JkLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworT3JpZ2luUXVvdGFNYW5hZ2VyOjpPcmlnaW5RdW90YU1hbmFn
ZXIoKQorI2lmbmRlZiBOREVCVUcKKyAgICA6IG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZChmYWxz
ZSkKKyNlbmRpZgoreworfQorCitib29sIE9yaWdpblF1b3RhTWFuYWdlcjo6dHJ5TG9jaygpCit7
CisgICAgYm9vbCBsb2NrZWQgPSBtX3VzYWdlUmVjb3JkR3VhcmQudHJ5TG9jaygpOworI2lmbmRl
ZiBOREVCVUcKKyAgICBpZiAobG9ja2VkKQorICAgICAgICBtX3VzYWdlUmVjb3JkR3VhcmRMb2Nr
ZWQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExv
Y2tlZCk7CisjZW5kaWYKKyAgICByZXR1cm4gbG9ja2VkOworfQorCit2b2lkIE9yaWdpblF1b3Rh
TWFuYWdlcjo6bG9jaygpCit7CisgICAgbV91c2FnZVJlY29yZEd1YXJkLmxvY2soKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV91c2FnZVJlY29yZEd1YXJkTG9ja2VkID0gdHJ1ZTsKKyNlbmRpZgor
fQorCit2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6dW5sb2NrKCkKK3sKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV91c2FnZVJlY29yZEd1YXJkTG9ja2VkID0gZmFsc2U7CisjZW5kaWYKKyAgICBtX3Vz
YWdlUmVjb3JkR3VhcmQudW5sb2NrKCk7Cit9CisKK3ZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjp0
cmFja09yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCit7CisgICAgQVNT
RVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7CisgICAgQVNTRVJUKCFtX3VzYWdlTWFwLmNv
bnRhaW5zKG9yaWdpbi5nZXQoKSkpOworCisgICAgbV91c2FnZU1hcC5zZXQob3JpZ2luLT5pc29s
YXRlZENvcHkoKSwgbmV3IE9yaWdpblVzYWdlUmVjb3JkKTsKK30KKworYm9vbCBPcmlnaW5RdW90
YU1hbmFnZXI6OnRyYWNrc09yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOworICAgIHJldHVybiBtX3VzYWdl
TWFwLmNvbnRhaW5zKG9yaWdpbik7Cit9CisKK3ZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjphZGRE
YXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKK3sKKyAgICBBU1NFUlQobV91c2FnZVJl
Y29yZEd1YXJkTG9ja2VkKTsKKworICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9
IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbik7CisgICAgQVNTRVJUKHVzYWdlUmVjb3JkKTsKKworICAg
IHVzYWdlUmVjb3JkLT5hZGREYXRhYmFzZShkYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5
KCksIGZ1bGxQYXRoLmlzb2xhdGVkQ29weSgpKTsKK30KKwordm9pZCBPcmlnaW5RdW90YU1hbmFn
ZXI6OnJlbW92ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2Nr
ZWQpOworCisgICAgaWYgKE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9IG1fdXNhZ2VN
YXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHVzYWdlUmVjb3JkLT5yZW1vdmVEYXRhYmFzZShkYXRh
YmFzZUlkZW50aWZpZXIpOworfQorCit2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6cmVtb3ZlT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRH
dWFyZExvY2tlZCk7CisKKyAgICBpZiAoT3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdlUmVjb3JkID0g
bV91c2FnZU1hcC5nZXQob3JpZ2luKSkgeworICAgICAgICBtX3VzYWdlTWFwLnJlbW92ZShvcmln
aW4pOworICAgICAgICBkZWxldGUgdXNhZ2VSZWNvcmQ7CisgICAgfQorfQorCit2b2lkIE9yaWdp
blF1b3RhTWFuYWdlcjo6bWFya0RhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExv
Y2tlZCk7CisgICAgT3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdlUmVjb3JkID0gbV91c2FnZU1hcC5n
ZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIEFTU0VSVCh1c2FnZVJlY29yZCk7
CisKKyAgICB1c2FnZVJlY29yZC0+bWFya0RhdGFiYXNlKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlm
aWVyKCkpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luUXVvdGFNYW5hZ2VyOjpkaXNr
VXNhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKK3sKKyAgICBBU1NFUlQobV91c2Fn
ZVJlY29yZEd1YXJkTG9ja2VkKTsKKworICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29y
ZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbik7CisgICAgQVNTRVJUKHVzYWdlUmVjb3JkKTsKKwor
ICAgIHJldHVybiB1c2FnZVJlY29yZC0+ZGlza1VzYWdlKCk7Cit9CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRh
dGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDEwOTg1
OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuaDoxMDk4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblF1b3RhTWFu
YWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3JpZ2luUXVv
dGFNYW5hZ2VyX2gKKyNkZWZpbmUgT3JpZ2luUXVvdGFNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWJz
dHJhY3REYXRhYmFzZTsKK2NsYXNzIE9yaWdpblVzYWdlUmVjb3JkOworCitjbGFzcyBPcmlnaW5R
dW90YU1hbmFnZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9yaWdpblF1b3RhTWFuYWdl
cik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9yaWdpblF1b3RhTWFu
YWdlcigpOworCisgICAgYm9vbCB0cnlMb2NrKCk7CisgICAgdm9pZCBsb2NrKCk7CisgICAgdm9p
ZCB1bmxvY2soKTsKKworICAgIHZvaWQgdHJhY2tPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4pOworICAgIGJvb2wgdHJhY2tzT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7Cisg
ICAgdm9pZCBhZGREYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKKyAgICB2b2lkIHJlbW92ZURh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIp
OworICAgIHZvaWQgcmVtb3ZlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICB2b2lkIG1h
cmtEYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7IC8vIE1hcmsgZGlydGluZXNzIG9mIGEgc3Bl
Y2lmaWMgZGF0YWJhc2UuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGRpc2tVc2FnZShTZWN1cml0
eU9yaWdpbiopIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgTXV0ZXggbV91c2FnZVJl
Y29yZEd1YXJkOworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fdXNhZ2VSZWNvcmRHdWFyZExv
Y2tlZDsKKyNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIE9yaWdpblVzYWdlUmVjb3JkKiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBPcmlnaW5Vc2FnZU1h
cDsKKyAgICBPcmlnaW5Vc2FnZU1hcCBtX3VzYWdlTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIE9y
aWdpblF1b3RhTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkocmV2aXNpb24gMTA5ODU4
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcDoxMDk4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblVzYWdlUmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJPcmlnaW5Vc2FnZVJlY29yZC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitPcmlnaW5Vc2FnZVJlY29yZDo6T3JpZ2luVXNhZ2VSZWNvcmQoKQorICAgIDogbV9j
YWNoZWREaXNrVXNhZ2VJc1ZhbGlkKGZhbHNlKQoreworfQorCit2b2lkIE9yaWdpblVzYWdlUmVj
b3JkOjphZGREYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
ZnVsbFBhdGgpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZp
ZXIpKTsKKyAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5oYXNP
bmVSZWYoKSB8fCBpZGVudGlmaWVyLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUX0FSRyhmdWxsUGF0
aCwgZnVsbFBhdGguaW1wbCgpLT5oYXNPbmVSZWYoKSB8fCBmdWxsUGF0aC5pc0VtcHR5KCkpOwor
CisgICAgbV9kYXRhYmFzZU1hcC5zZXQoaWRlbnRpZmllciwgRGF0YWJhc2VFbnRyeShmdWxsUGF0
aCkpOworICAgIG1fdW5rbm93blNldC5hZGQoaWRlbnRpZmllcik7CisKKyAgICBtX2NhY2hlZERp
c2tVc2FnZUlzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBPcmlnaW5Vc2FnZVJlY29yZDo6cmVt
b3ZlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX2Rh
dGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1fZGF0YWJhc2VNYXAucmVt
b3ZlKGlkZW50aWZpZXIpOworICAgIG1fdW5rbm93blNldC5yZW1vdmUoaWRlbnRpZmllcik7Cisg
ICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgT3JpZ2luVXNh
Z2VSZWNvcmQ6Om1hcmtEYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2VNYXAuY29udGFpbnMoaWRlbnRpZmllcikpOworICAgIEFTU0VSVF9B
UkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBsKCktPmhhc09uZVJlZigpIHx8IGlkZW50aWZp
ZXIuaXNFbXB0eSgpKTsKKworICAgIG1fdW5rbm93blNldC5hZGQoaWRlbnRpZmllcik7CisgICAg
bV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9u
ZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKK3sKKyAgICAvLyBVc2UgdGhlIGxhc3Qg
Y2FjaGVkIHVzYWdlIHZhbHVlIGlmIHdlIGhhdmUgaXQuCisgICAgaWYgKG1fY2FjaGVkRGlza1Vz
YWdlSXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkRGlza1VzYWdlOworCisgICAgLy8g
c3RhdCgpIGZvciB0aGUgc2l6ZXMga25vd24gdG8gYmUgZGlydHkuCisgICAgSGFzaFNldDxTdHJp
bmc+OjppdGVyYXRvciBpVW5rbm93biA9IG1fdW5rbm93blNldC5iZWdpbigpOworICAgIEhhc2hT
ZXQ8U3RyaW5nPjo6aXRlcmF0b3IgZW5kVW5rbm93biA9IG1fdW5rbm93blNldC5lbmQoKTsKKyAg
ICBmb3IgKDsgaVVua25vd24gIT0gZW5kVW5rbm93bjsgKytpVW5rbm93bikgeworICAgICAgICBj
b25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25vd24pLmZpbGVuYW1l
OworICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKworICAgICAgICAvLyBXaGVuIHdl
IGNhbid0IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSdsbCBqdXN0IGhhdmUgdG8gYXNzdW1l
IHRoZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgorICAgICAgICBsb25nIGxvbmcgc2l6
ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0aCk7CisgICAgICAg
IG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShwYXRoLCBzaXplKSk7
CisgICAgfQorICAgIG1fdW5rbm93blNldC5jbGVhcigpOworCisgICAgLy8gUmVjYWxjdWxhdGUg
dGhlIGNhY2hlZCB1c2FnZSB2YWx1ZS4KKyAgICBtX2NhY2hlZERpc2tVc2FnZSA9IDA7CisgICAg
SGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBpRGF0YWJhc2UgPSBtX2Rh
dGFiYXNlTWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+Ojpp
dGVyYXRvciBlbmREYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuZW5kKCk7CisgICAgZm9yICg7IGlE
YXRhYmFzZSAhPSBlbmREYXRhYmFzZTsgKytpRGF0YWJhc2UpCisgICAgICAgIG1fY2FjaGVkRGlz
a1VzYWdlICs9IGlEYXRhYmFzZS0+c2Vjb25kLnNpemU7CisKKyAgICBtX2NhY2hlZERpc2tVc2Fn
ZUlzVmFsaWQgPSB0cnVlOworICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2FnZTsKK30KKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRh
dGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5oOjEwOTg1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBPcmlnaW5Vc2FnZVJlY29yZF9oCisjZGVmaW5l
IE9yaWdpblVzYWdlUmVjb3JkX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4gCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgdXNl
ZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgd2l0aCBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCisv
LyBTdHJpbmcgYXJndW1lbnRzIGFyZSBhbHNvIHN1cHBvc2VkIHRvIGJlIGRlZXBseSBjb3BpZWQg
YnkgdGhlIGNhbGxlciB3aGVuIG5lY2Vzc2FyeS4KK2NsYXNzIE9yaWdpblVzYWdlUmVjb3JkIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcmlnaW5Vc2FnZVJlY29yZCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9yaWdpblVzYWdlUmVjb3JkKCk7CisKKyAgICB2
b2lkIGFkZERhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBm
dWxsUGF0aCk7CisgICAgdm9pZCByZW1vdmVEYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpOworICAgIHZvaWQgbWFya0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7IC8v
IFNpemUgbWF5IGhhdmUgY2hhbmdlZCwgYW5kIHdpbGwgbmVlZCB0byBiZSByZWNhbGN1bGF0ZWQu
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGRpc2tVc2FnZSgpOworCitwcml2YXRlOgorICAgIHN0
cnVjdCBEYXRhYmFzZUVudHJ5IHsKKyAgICAgICAgRGF0YWJhc2VFbnRyeSgpIHsgfQorICAgICAg
ICBEYXRhYmFzZUVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIDogZmlsZW5hbWUoZmlsZW5h
bWUpIHsgfQorICAgICAgICBEYXRhYmFzZUVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHVu
c2lnbmVkIGxvbmcgbG9uZyBzaXplKSA6IGZpbGVuYW1lKGZpbGVuYW1lKSwgc2l6ZShzaXplKSB7
IH0KKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
c2l6ZTsgLy8gVGhpcyBtZW1iZXIgcmVtYWlucyB1bmluaXRpYWxpemVkIHVudGlsIGRpc2sgdXNh
Z2UgaXMgY2FsY3VsYXRlZC4KKyAgICB9OworICAgIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZUVu
dHJ5PiBtX2RhdGFiYXNlTWFwOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3Vua25vd25TZXQ7CisK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9jYWNoZWREaXNrVXNhZ2U7CisgICAgYm9vbCBtX2Nh
Y2hlZERpc2tVc2FnZUlzVmFsaWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2Uv
U1FMQ2FsbGJhY2tXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaAkocmV2aXNpb24gMTA5ODU4KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oOjEwOTg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBTUUxDYWxsYmFja1dyYXBw
ZXJfaAorI2RlZmluZSBTUUxDYWxsYmFja1dyYXBwZXJfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEg
aGVscGVyIGNsYXNzIHRvIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgY2FsbGJhY2sgb2JqZWN0cyBo
ZWxkIGJ5CisvLyBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uIG9uIHRoZSBwcm9wZXIg
dGhyZWFkLiBUaGUgJ3dyYXBwZWQnCisvLyBjYWxsYmFjayBpcyBkZXJlZmVyZW5jZWQ6CisvLyAt
IGJ5IGRlc3RydWN0aW5nIHRoZSBlbmNsb3Npbmcgd3JhcHBlciAtIG9uIGFueSB0aHJlYWQKKy8v
IC0gYnkgY2FsbGluZyBjbGVhcigpIC0gb24gYW55IHRocmVhZAorLy8gLSBieSB1bndyYXBwaW5n
IGFuZCB0aGVuIGRlcmVmZXJlbmNpbmcgbm9ybWFsbHkgLSBvbiBjb250ZXh0IHRocmVhZCBvbmx5
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTUUxDYWxsYmFja1dyYXBwZXIgeworcHVibGlj
OgorICAgIFNRTENhbGxiYWNrV3JhcHBlcihQYXNzUmVmUHRyPFQ+IGNhbGxiYWNrLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICA6IG1fY2Fs
bGJhY2soY2FsbGJhY2spCisgICAgICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KG1fY2Fs
bGJhY2sgPyBzY3JpcHRFeGVjdXRpb25Db250ZXh0IDogMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9jYWxsYmFjayB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpICYmIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpKTsKKyAgICB9CisKKyAgICB+
U1FMQ2FsbGJhY2tXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0OworICAgICAgICBUKiBjYWxsYmFjazsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICAgICAgaWYgKCFtX2NhbGxiYWNrKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKSB7CisgICAgICAgICAgICAg
ICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb250ZXh0ID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKS5sZWFrUmVm
KCk7CisgICAgICAgICAgICBjYWxsYmFjayA9IG1fY2FsbGJhY2sucmVsZWFzZSgpLmxlYWtSZWYo
KTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5wb3N0VGFzayhTYWZlUmVsZWFzZVRhc2s6
OmNyZWF0ZShjYWxsYmFjaykpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8VD4gdW53cmFwKCkK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgQVNT
RVJUKCFtX2NhbGxiYWNrIHx8IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgICAgICBy
ZXR1cm4gbV9jYWxsYmFjay5yZWxlYXNlKCk7CisgICAgfQorCisgICAgLy8gVXNlZnVsIGZvciBv
cHRpbWl6YXRpb25zIG9ubHksIHBsZWFzZSB0ZXN0IHRoZSByZXR1cm4gdmFsdWUgb2YgdW53cmFw
IHRvIGJlIHN1cmUuCisgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGJhY2s7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBTYWZlUmVsZWFzZVRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxTYWZlUmVsZWFzZVRhc2s+IGNyZWF0ZShUKiBjYWxsYmFja1RvUmVsZWFz
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTYWZlUmVsZWFz
ZVRhc2soY2FsbGJhY2tUb1JlbGVhc2UpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9jYWxsYmFja1RvUmVsZWFzZSAmJiBjb250ZXh0ICYm
IGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tUb1Jl
bGVhc2UtPmRlcmVmKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kZXJlZigpOworICAgICAgICB9
CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTYWZlUmVsZWFzZVRhc2soVCogY2FsbGJh
Y2tUb1JlbGVhc2UpCisgICAgICAgICAgICA6IG1fY2FsbGJhY2tUb1JlbGVhc2UoY2FsbGJhY2tU
b1JlbGVhc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFQqIG1fY2FsbGJhY2tU
b1JlbGVhc2U7CisgICAgfTsKKworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgUmVmUHRyPFQ+IG1f
Y2FsbGJhY2s7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxDYWxsYmFja1dyYXBwZXJfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFcnJvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMRXJyb3IuaAko
cmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmg6
MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFcnJvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FMRXJyb3JfaAorI2Rl
ZmluZSBTUUxFcnJvcl9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTUUxFcnJvciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTUUxFcnJvcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNRTEVycm9yPiBjcmVhdGUodW5zaWduZWQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgU1FMRXJyb3IoY29kZSwgbWVzc2FnZSkpOyB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1FMRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2RlLCBjb25zdCBjaGFy
KiBtZXNzYWdlLCBpbnQgc3FsaXRlQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGUo
Y29kZSwgU3RyaW5nOjpmb3JtYXQoIiVzICglZCkiLCBtZXNzYWdlLCBzcWxpdGVDb2RlKSk7Cisg
ICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTEVycm9yPiBjcmVhdGUodW5zaWduZWQgY29k
ZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0ZUNvZGUsIGNvbnN0IGNoYXIqIHNxbGl0
ZU1lc3NhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlKGNvZGUsIFN0cmluZzo6Zm9y
bWF0KCIlcyAoJWQgJXMpIiwgbWVzc2FnZSwgc3FsaXRlQ29kZSwgc3FsaXRlTWVzc2FnZSkpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAg
ICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS5pc29sYXRlZENvcHko
KTsgfQorCisgICAgZW51bSBTUUxFcnJvckNvZGUgeworICAgICAgICBVTktOT1dOX0VSUiA9IDAs
CisgICAgICAgIERBVEFCQVNFX0VSUiA9IDEsCisgICAgICAgIFZFUlNJT05fRVJSID0gMiwKKyAg
ICAgICAgVE9PX0xBUkdFX0VSUiA9IDMsCisgICAgICAgIFFVT1RBX0VSUiA9IDQsCisgICAgICAg
IFNZTlRBWF9FUlIgPSA1LAorICAgICAgICBDT05TVFJBSU5UX0VSUiA9IDYsCisgICAgICAgIFRJ
TUVPVVRfRVJSID0gNworICAgIH07CisKK3ByaXZhdGU6CisgICAgU1FMRXJyb3IodW5zaWduZWQg
Y29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA6IG1fY29kZShjb2RlKSwgbV9tZXNzYWdlKG1l
c3NhZ2UuaXNvbGF0ZWRDb3B5KCkpIHsgfQorICAgIHVuc2lnbmVkIG1fY29kZTsKKyAgICBTdHJp
bmcgbV9tZXNzYWdlOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIFNRTEVycm9yX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMRXJyb3IuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMRXJyb3Iu
aWRsCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJy
b3IuaWRsOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FM
RXJyb3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdl
IHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwK
KyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBKU05vU3RhdGljVGFibGVzCisgICAg
XSBTUUxFcnJvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGNv
ZGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbWVzc2FnZTsKKworICAg
ICAgICAvLyBTUUxFcnJvckNvZGU6IHVzZWQgb25seSBpbiB0aGUgYXN5bmMgREIgQVBJCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05fRVJSID0gMDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgREFUQUJBU0VfRVJSID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgVkVSU0lPTl9FUlIgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUT09f
TEFSR0VfRVJSID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUVVPVEFfRVJSID0g
NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1lOVEFYX0VSUiA9IDU7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUUkFJTlRfRVJSID0gNjsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgVElNRU9VVF9FUlIgPSA3OworICAgIH07Cit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24uY3BwCShy
ZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9u
LmNwcDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEV4
Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU1FMRXhj
ZXB0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGFuIGFycmF5IG9mIHN0cnVjdHMgdG8gcGFpciB0aGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9u
cy4KK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25OYW1lc1tdID0geworICAgICJV
TktOT1dOX0VSUiIsCisgICAgIkRBVEFCQVNFX0VSUiIsCisgICAgIlZFUlNJT05fRVJSIiwKKyAg
ICAiVE9PX0xBUkdFX0VSUiIsCisgICAgIlFVT1RBX0VSUiIsCisgICAgIlNZTlRBWF9FUlIiLAor
ICAgICJDT05TVFJBSU5UX0VSUiIsCisgICAgIlRJTUVPVVRfRVJSIgorfTsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1tdID0geworICAgICJUaGUgb3Bl
cmF0aW9uIGZhaWxlZCBmb3IgcmVhc29ucyB1bnJlbGF0ZWQgdG8gdGhlIGRhdGFiYXNlLiIsCisg
ICAgIlRoZSBvcGVyYXRpb24gZmFpbGVkIGZvciBzb21lIHJlYXNvbiByZWxhdGVkIHRvIHRoZSBk
YXRhYmFzZS4iLAorICAgICJUaGUgYWN0dWFsIGRhdGFiYXNlIHZlcnNpb24gZGlkIG5vdCBtYXRj
aCB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4iLAorICAgICJEYXRhIHJldHVybmVkIGZyb20gdGhlIGRh
dGFiYXNlIGlzIHRvbyBsYXJnZS4iLAorICAgICJRdW90YSB3YXMgZXhjZWVkZWQuIiwKKyAgICAi
SW52YWxpZCBvciB1bmF1dGhvcml6ZWQgc3RhdGVtZW50OyBvciB0aGUgbnVtYmVyIG9mIGFyZ3Vt
ZW50cyBkaWQgbm90IG1hdGNoIHRoZSBudW1iZXIgb2YgPyBwbGFjZWhvbGRlcnMuIiwKKyAgICAi
QSBjb25zdHJhaW50IHdhcyB2aW9sYXRlZC4iLAorICAgICJBIHRyYW5zYWN0aW9uIGxvY2sgY291
bGQgbm90IGJlIGFjcXVpcmVkIGluIGEgcmVhc29uYWJsZSB0aW1lLiIKK307CisKK0NPTVBJTEVf
QVNTRVJUKFdURl9BUlJBWV9MRU5HVEgoZXhjZXB0aW9uTmFtZXMpID09IFdURl9BUlJBWV9MRU5H
VEgoZXhjZXB0aW9uRGVzY3JpcHRpb25zKSwgU1FMRXhjZXB0aW9uVGFibGVzTXVzdE1hdGNoKTsK
KworYm9vbCBTUUxFeGNlcHRpb246OmluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2Rl
IGVjLCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChl
YyA8IFNRTEV4Y2VwdGlvbk9mZnNldCB8fCBlYyA+IFNRTEV4Y2VwdGlvbk1heCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgZGVzY3JpcHRpb24tPnR5cGVOYW1lID0gIkRPTSBTUUwiOwor
ICAgIGRlc2NyaXB0aW9uLT5jb2RlID0gZWMgLSBTUUxFeGNlcHRpb25PZmZzZXQ7CisgICAgZGVz
Y3JpcHRpb24tPnR5cGUgPSBTUUxFeGNlcHRpb25UeXBlOworCisgICAgc2l6ZV90IHRhYmxlU2l6
ZSA9IFdURl9BUlJBWV9MRU5HVEgoZXhjZXB0aW9uTmFtZXMpOworICAgIHNpemVfdCB0YWJsZUlu
ZGV4ID0gZWMgLSBVTktOT1dOX0VSUjsKKworICAgIGRlc2NyaXB0aW9uLT5uYW1lID0gdGFibGVJ
bmRleCA8IHRhYmxlU2l6ZSA/IGV4Y2VwdGlvbk5hbWVzW3RhYmxlSW5kZXhdIDogMDsKKyAgICBk
ZXNjcmlwdGlvbi0+ZGVzY3JpcHRpb24gPSB0YWJsZUluZGV4IDwgdGFibGVTaXplID8gZXhjZXB0
aW9uRGVzY3JpcHRpb25zW3RhYmxlSW5kZXhdIDogMDsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEV4
Y2VwdGlvbi5oCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMRXhjZXB0aW9uLmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTUUxFeGNlcHRpb25faAorI2RlZmluZSBTUUxFeGNlcHRpb25faAorCisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTUUxFeGNlcHRpb24gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMRXhjZXB0aW9uPiBjcmVhdGUoY29uc3Qg
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1FMRXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0IGludCBTUUxFeGNlcHRpb25PZmZzZXQgPSAxMDAwOworICAgIHN0YXRp
YyBjb25zdCBpbnQgU1FMRXhjZXB0aW9uTWF4ID0gMTA5OTsKKworICAgIGVudW0gU1FMRXhjZXB0
aW9uQ29kZSB7CisgICAgICAgIFVOS05PV05fRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0LAorICAg
ICAgICBEQVRBQkFTRV9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyAxLAorICAgICAgICBWRVJT
SU9OX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDIsCisgICAgICAgIFRPT19MQVJHRV9FUlIg
PSBTUUxFeGNlcHRpb25PZmZzZXQgKyAzLAorICAgICAgICBRVU9UQV9FUlIgPSBTUUxFeGNlcHRp
b25PZmZzZXQgKyA0LAorICAgICAgICBTWU5UQVhfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsg
NSwKKyAgICAgICAgQ09OU1RSQUlOVF9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA2LAorICAg
ICAgICBUSU1FT1VUX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDcKKyAgICB9OworCisgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZURlc2NyaXB0aW9uKEV4Y2VwdGlvbkNvZGUsIEV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiopOworCitwcml2YXRlOgorICAgIFNRTEV4Y2VwdGlvbihjb25zdCBF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorICAgICAgICA6IEV4Y2VwdGlv
bkJhc2UoZGVzY3JpcHRpb24pCisgICAgeworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxF
eGNlcHRpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxF
eGNlcHRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMRXhjZXB0aW9uLmlkbAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGw6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxFeGNlcHRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBD
b25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMsCisgICAg
ICAgIERvTm90Q2hlY2tDb25zdGFudHMKKyAgICBdIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGNvZGU7CisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgbWVzc2FnZTsKKworICAgICAgICAvLyBTUUxFeGNlcHRpb25Db2Rl
OiB1c2VkIG9ubHkgaW4gdGhlIHN5bmMgREIgQVBJCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFVOS05PV05fRVJSID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgREFUQUJB
U0VfRVJSID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVkVSU0lPTl9FUlIgPSAy
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUT09fTEFSR0VfRVJSID0gMzsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUVVPVEFfRVJSID0gNDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgU1lOVEFYX0VSUiA9IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IENPTlNUUkFJTlRfRVJSID0gNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVElNRU9V
VF9FUlIgPSA3OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFJlc3VsdFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwCShyZXZpc2lvbiAxMDk4NTgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcDoxMDk4NTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNR
TFJlc3VsdFNldC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdW5zaWduZWQg
Y29uc3QgTWF4RXJyb3JDb2RlID0gMjsKKworU1FMUmVzdWx0U2V0OjpTUUxSZXN1bHRTZXQoKQor
ICAgIDogbV9yb3dzKFNRTFJlc3VsdFNldFJvd0xpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9pbnNl
cnRJZCgwKQorICAgICwgbV9pbnNlcnRJZFNldChmYWxzZSkKKyAgICAsIG1fcm93c0FmZmVjdGVk
KDApCit7Cit9CisKK2ludDY0X3QgU1FMUmVzdWx0U2V0OjppbnNlcnRJZChFeGNlcHRpb25Db2Rl
JiBlKSBjb25zdAoreworICAgIC8vIDQuMTEuNCAtIFJldHVybiB0aGUgaWQgb2YgdGhlIGxhc3Qg
cm93IGluc2VydGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBxdWVyeQorICAgIC8vIElmIHRoZSBxdWVy
eSBkaWRuJ3QgcmVzdWx0IGluIGFueSByb3dzIGJlaW5nIGFkZGVkLCByYWlzZSBhbiBJTlZBTElE
X0FDQ0VTU19FUlIgZXhjZXB0aW9uCisgICAgaWYgKG1faW5zZXJ0SWRTZXQpCisgICAgICAgIHJl
dHVybiBtX2luc2VydElkOworCisgICAgZSA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICByZXR1
cm4gLTE7Cit9CisKK2ludCBTUUxSZXN1bHRTZXQ6OnJvd3NBZmZlY3RlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcm93c0FmZmVjdGVkOworfQorCitTUUxSZXN1bHRTZXRSb3dMaXN0KiBTUUxS
ZXN1bHRTZXQ6OnJvd3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jvd3MuZ2V0KCk7Cit9CisK
K3ZvaWQgU1FMUmVzdWx0U2V0OjpzZXRJbnNlcnRJZChpbnQ2NF90IGlkKQoreworICAgIEFTU0VS
VCghbV9pbnNlcnRJZFNldCk7CisKKyAgICBtX2luc2VydElkID0gaWQ7CisgICAgbV9pbnNlcnRJ
ZFNldCA9IHRydWU7Cit9CisKK3ZvaWQgU1FMUmVzdWx0U2V0OjpzZXRSb3dzQWZmZWN0ZWQoaW50
IGNvdW50KQoreworICAgIG1fcm93c0FmZmVjdGVkID0gY291bnQ7Cit9CisKK30KKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVz
dWx0U2V0LmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxSZXN1bHRTZXQuaDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFi
YXNlL1NRTFJlc3VsdFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
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
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU1FMUmVzdWx0U2V0X2gKKyNkZWZpbmUgU1FMUmVzdWx0U2V0X2gKKworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgU1FMUmVzdWx0U2V0IDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFJlc3VsdFNldD4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTFJlc3VsdFNldCk7IH0KKworICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd3MoKSBjb25z
dDsKKworICAgIGludDY0X3QgaW5zZXJ0SWQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGlu
dCByb3dzQWZmZWN0ZWQoKSBjb25zdDsKKworLy8gRm9yIGludGVybmFsIChub24tSlMpIHVzZQor
ICAgIHZvaWQgc2V0SW5zZXJ0SWQoaW50NjRfdCk7CisgICAgdm9pZCBzZXRSb3dzQWZmZWN0ZWQo
aW50KTsKKworcHJpdmF0ZToKKyAgICBTUUxSZXN1bHRTZXQoKTsKKworICAgIFJlZlB0cjxTUUxS
ZXN1bHRTZXRSb3dMaXN0PiBtX3Jvd3M7CisgICAgaW50NjRfdCBtX2luc2VydElkOworICAgIGJv
b2wgbV9pbnNlcnRJZFNldDsKKyAgICBpbnQgbV9yb3dzQWZmZWN0ZWQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1FMUmVzdWx0U2V0X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3Vs
dFNldC5pZGwJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxSZXN1bHRTZXQuaWRsOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMUmVzdWx0U2V0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1T
UUxfREFUQUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgSlNOb1N0YXRp
Y1RhYmxlcworICAgIF0gU1FMUmVzdWx0U2V0IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IFNRTFJlc3VsdFNldFJvd0xpc3Qgcm93czsKKworI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkg
fHwgIUxBTkdVQUdFX0NQUAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBpbnNlcnRJ
ZAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworI2Vsc2UKKyAgICAg
ICAgLy8gRXhwbGljaXRlbHkgY2hvb3NlICdsb25nIGxvbmcnIGhlcmUgdG8gYXZvaWQgYSA2NGJp
dC0+MzJiaXQgc2hvcnRlbmluZyB3YXJuaW5nIGZvciB1cy4KKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgbG9uZyBpbnNlcnRJZAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyhET01F
eGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHJvd3NB
ZmZlY3RlZDsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwCShyZXZpc2lvbiAx
MDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5j
cHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1
bHRTZXRSb3dMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMUmVzdWx0U2V0Um93TGlzdC5oIgorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1bnNpZ25lZCBTUUxS
ZXN1bHRTZXRSb3dMaXN0OjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmIChtX3Jlc3VsdC5zaXpl
KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQobV9yZXN1bHQuc2l6ZSgp
ICUgbV9jb2x1bW5zLnNpemUoKSA9PSAwKTsKKworICAgIHJldHVybiBtX3Jlc3VsdC5zaXplKCkg
LyBtX2NvbHVtbnMuc2l6ZSgpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1
bHRTZXRSb3dMaXN0Lmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTUUxSZXN1bHRTZXRSb3dMaXN0X2gKKyNkZWZpbmUgU1FMUmVzdWx0U2V0Um93
TGlzdF9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgIlNRTFZhbHVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMUmVzdWx0U2V0Um93TGlzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPFNRTFJlc3VsdFNldFJvd0xpc3Q+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXRSb3dMaXN0PiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgU1FMUmVzdWx0U2V0Um93TGlzdCk7IH0KKworICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBjb2x1bW5OYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uczsgfQorICAgIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9
CisKKyAgICB2b2lkIGFkZENvbHVtbihjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9jb2x1bW5zLmFw
cGVuZChuYW1lKTsgfQorICAgIHZvaWQgYWRkUmVzdWx0KGNvbnN0IFNRTFZhbHVlJiByZXN1bHQp
IHsgbV9yZXN1bHQuYXBwZW5kKHJlc3VsdCk7IH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIFNRTFJlc3VsdFNldFJvd0xpc3QoKSB7IH0KKworICAgIFZl
Y3RvcjxTdHJpbmc+IG1fY29sdW1uczsKKyAgICBWZWN0b3I8U1FMVmFsdWU+IG1fcmVzdWx0Owor
fTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwJKHJl
dmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRS
b3dMaXN0LmlkbDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNl
L1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFs
PVNRTF9EQVRBQkFTRSwKKyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBKU05vU3Rh
dGljVGFibGVzCisgICAgXSBTUUxSZXN1bHRTZXRSb3dMaXN0IHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgICAgICBbQ3VzdG9tXSBET01PYmpl
Y3QgaXRlbShpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcAko
cmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxT
dGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgor
I2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U1FMU3RhdGVtZW50
PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYg
c3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNRTFN0YXRlbWVudChkYXRhYmFzZSwgc3RhdGVtZW50LCBhcmd1bWVu
dHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNzaW9ucykpOworfQorCitTUUxTdGF0
ZW1lbnQ6OlNRTFN0YXRlbWVudChEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3Rh
dGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FM
U3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKKyAgICA6IG1fc3RhdGVt
ZW50KHN0YXRlbWVudC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50
cykKKyAgICAsIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNr
V3JhcHBlcihlcnJvckNhbGxiYWNrLCBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykKK3sKK30KKworYm9vbCBTUUxTdGF0
ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQoreworICAgIEFTU0VSVCghbV9yZXN1bHRTZXQp
OworCisgICAgLy8gSWYgd2UncmUgcmUtcnVubmluZyB0aGlzIHN0YXRlbWVudCBhZnRlciBhIHF1
b3RhIHZpb2xhdGlvbiwgd2UgbmVlZCB0byBjbGVhciB0aGF0IGVycm9yIG5vdworICAgIGNsZWFy
RmFpbHVyZUR1ZVRvUXVvdGEoKTsKKworICAgIC8vIFRoaXMgdHJhbnNhY3Rpb24gbWlnaHQgaGF2
ZSBiZWVuIG1hcmtlZCBiYWQgd2hpbGUgaXQgd2FzIGJlaW5nIHNldCB1cCBvbiB0aGUgbWFpbiB0
aHJlYWQsCisgICAgLy8gc28gaWYgdGhlcmUgaXMgc3RpbGwgYW4gZXJyb3IsIHJldHVybiBmYWxz
ZS4KKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGItPnNl
dEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhtX3Blcm1pc3Npb25zKTsKKworICAgIFNRTGl0ZURhdGFi
YXNlKiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2UoKTsKKworICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVudCk7CisgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7
CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBv
ZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRh
KCksIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCA9PSBTUUxSZXN1bHRJbnRlcnJ1cHQpCisgICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6
OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVt
ZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBu
b3QgcHJlcGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDEsIG1fZXJyb3ItPmNv
ZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiAgSWYgdGhlIHN0YXRlbWVudCB1c2VzIHRoZSA/IyMjIHN5bnRheCBzdXBwb3J0ZWQgYnkg
c3FsaXRlLCB0aGUgYmluZCBwYXJhbWV0ZXIgY291bnQgaXMgdmVyeSBsaWtlbHkgb2ZmIGZyb20g
dGhlIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcy4KKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNl
LCB0aGV5IG1pZ2h0IGJlIHRyeWluZyB0byBkbyBzb21ldGhpbmcgZmlzaHkgb3IgbWFsaWNpb3Vz
CisgICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291bnQoKSAhPSBtX2FyZ3VtZW50cy5z
aXplKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJCaW5kIHBhcmFtZXRlciBjb3VudCBk
b2Vzbid0IG1hdGNoIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcyIpOworICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShkYi0+aXNJbnRlcnJ1cHRlZCgpID8gU1FMRXJyb3I6OkRBVEFC
QVNFX0VSUiA6IFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVt
ZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOworICAgICAgICBkYi0+
cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCgyLCBtX2Vycm9yLT5jb2RlKCksIDApOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5i
aW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBT
UUxSZXN1bHRGdWxsKSB7CisgICAgICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YShkYik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0
byBiaW5kIHZhbHVlIGluZGV4ICVpIHRvIHN0YXRlbWVudCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAx
LCBtX3N0YXRlbWVudC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBkYi0+cmVwb3J0RXhl
Y3V0ZVN0YXRlbWVudFJlc3VsdCgzLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCByZXN1bHQpOwor
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBiaW5kIHZhbHVlIiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0ID0gU1FMUmVzdWx0U2V0OjpjcmVhdGUo
KTsKKworICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZldGNoIHRoZSBjb2x1bW4gbmFtZXMuCisgICAg
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJv
dykgeworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsK
KyAgICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cyA9IHJlc3VsdFNldC0+cm93cygpOwor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKKyAgICAgICAg
ICAgIHJvd3MtPmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsr
KQorICAgICAgICAgICAgICAgIHJvd3MtPmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFs
dWUoaSkpOworCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAg
ICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsKKworICAgICAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVt
ZW50UmVzdWx0KDQsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIHJlc3VsdCk7CisgICAgICAgICAg
ICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291
bGQgbm90IGl0ZXJhdGUgcmVzdWx0cyIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhp
bmcsIG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgaWYgKGRiLT5sYXN0QWN0aW9uV2FzSW5zZXJ0
KCkpCisgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRhdGFiYXNlLT5sYXN0SW5z
ZXJ0Um93SUQoKSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkgewor
ICAgICAgICAvLyBSZXR1cm4gdGhlIFF1b3RhIGVycm9yIC0gdGhlIGRlbGVnYXRlIHdpbGwgYmUg
YXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bgor
ICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YShkYik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBkYi0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg1
LCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCByZXN1bHQpOworICAgICAgICBtX2Vycm9yID0gU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IGV4ZWN1dGUg
c3RhdGVtZW50IiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIHRoZSBzcGVjIGFsbG93cyB0
cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3VyYXRlIiBpbiBhIGRpZmZlcmVudCB3YXks
IHdlJ2QgdXNlCisgICAgLy8gc3FsaXRlM190b3RhbF9jaGFuZ2VzKCkgaGVyZSBpbnN0ZWFkIG9m
IHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGluY2x1ZGVzIHJvd3MgbW9kaWZpZWQgZnJv
bSB3aXRoaW4gYSB0cmlnZ2VyCisgICAgLy8gRm9yIG5vdywgdGhpcyBzZWVtcyBzdWZmaWNpZW50
CisgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkp
OworCisgICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7CisgICAgZGItPnJlcG9ydEV4ZWN1dGVT
dGF0ZW1lbnRSZXN1bHQoMCwgLTEsIDApOyAvLyBPSworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNRTFN0YXRlbWVudDo6c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoRGF0YWJhc2UqIGRhdGFi
YXNlKQoreworICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQpOworICAgIGRhdGFi
YXNlLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDYsIFNRTEVycm9yOjpVTktOT1dOX0VS
UiwgMCk7CisgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05f
RVJSLCAidW5hYmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0
ZWQgdGhlIGRhdGFiYXNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXRWZXJzaW9uTWlz
bWF0Y2hlZEVycm9yKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3Ig
JiYgIW1fcmVzdWx0U2V0KTsKKyAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJl
c3VsdCg3LCBTUUxFcnJvcjo6VkVSU0lPTl9FUlIsIDApOworICAgIG1fZXJyb3IgPSBTUUxFcnJv
cjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VSUiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUg
ZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVudCBkbyBub3QgbWF0Y2giKTsKK30KKwor
Ym9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKKworICAgIGJvb2wgY2FsbGJhY2tF
cnJvciA9IGZhbHNlOworCisgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFj
ayA9IG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIFJlZlB0cjxTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9zdGF0ZW1lbnRFcnJvckNh
bGxiYWNrV3JhcHBlci51bndyYXAoKTsKKworICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHN0
YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsCisg
ICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJy
b3IgY2FsbGJhY2suCisgICAgaWYgKG1fZXJyb3IpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yQ2Fs
bGJhY2spOworICAgICAgICBjYWxsYmFja0Vycm9yID0gZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZl
bnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAoY2FsbGJhY2sp
CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0
aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CisKKyAgICByZXR1cm4gY2FsbGJhY2tFcnJvcjsKK30K
Kwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNldEZhaWx1cmVEdWVUb1F1b3RhKERhdGFiYXNlKiBkYXRh
YmFzZSkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKKyAgICBkYXRh
YmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg4LCBTUUxFcnJvcjo6UVVPVEFfRVJS
LCAwKTsKKyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6UVVPVEFfRVJS
LCAidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UsIG9yIHRoZSBz
dG9yYWdlIHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNlciBkZWNsaW5lZCB0byBhbGxvdyBt
b3JlIHNwYWNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpjbGVhckZhaWx1cmVEdWVUb1F1
b3RhKCkKK3sKKyAgICBpZiAobGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkKKyAgICAg
ICAgbV9lcnJvciA9IDA7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50OjpsYXN0RXhlY3V0aW9uRmFp
bGVkRHVlVG9RdW90YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXJyb3IgJiYgbV9lcnJvci0+
Y29kZSgpID09IFNRTEVycm9yOjpRVU9UQV9FUlI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50LmgJKHJldmlzaW9uIDEw
OTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaDoxMDk4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNRTFN0YXRlbWVudF9oCisjZGVm
aW5lIFNRTFN0YXRlbWVudF9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxDYWxsYmFja1dyYXBwZXIuaCIKKyNp
bmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERhdGFiYXNlOworY2xhc3MgU1FMRXJyb3I7CitjbGFzcyBTUUxTdGF0
ZW1lbnRDYWxsYmFjazsKK2NsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7CitjbGFzcyBT
UUxUcmFuc2FjdGlvbjsKKworY2xhc3MgU1FMU3RhdGVtZW50IDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFNRTFN0YXRlbWVudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudD4gY3JlYXRlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOworCisgICAg
Ym9vbCBleGVjdXRlKERhdGFiYXNlKik7CisgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVl
VG9RdW90YSgpIGNvbnN0OworCisgICAgYm9vbCBoYXNTdGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KKyAg
ICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
bWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KKworICAgIHZvaWQgc2V0
RGF0YWJhc2VEZWxldGVkRXJyb3IoRGF0YWJhc2UqKTsKKyAgICB2b2lkIHNldFZlcnNpb25NaXNt
YXRjaGVkRXJyb3IoRGF0YWJhc2UqKTsKKworICAgIGJvb2wgcGVyZm9ybUNhbGxiYWNrKFNRTFRy
YW5zYWN0aW9uKik7CisKKyAgICBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJldHVybiBt
X2Vycm9yLmdldCgpOyB9Citwcml2YXRlOgorICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIGNv
bnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOworCisgICAgdm9pZCBzZXRGYWlsdXJl
RHVlVG9RdW90YShEYXRhYmFzZSopOworICAgIHZvaWQgY2xlYXJGYWlsdXJlRHVlVG9RdW90YSgp
OworCisgICAgU3RyaW5nIG1fc3RhdGVtZW50OworICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1
bWVudHM7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0
YXRlbWVudENhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlcjsKKworICAg
IFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsKKyAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jl
c3VsdFNldDsKKworICAgIGludCBtX3Blcm1pc3Npb25zOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIFNR
TFN0YXRlbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TFN0YXRlbWVudENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiAxMDk4NTgpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaDoxMDk4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU1FMU3RhdGVtZW50
Q2FsbGJhY2tfaAorI2RlZmluZSBTUUxTdGF0ZW1lbnRDYWxsYmFja19oCisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBTUUxS
ZXN1bHRTZXQ7CisKK2NsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNrIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNRTFN0YXRlbWVudENhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+U1FMU3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZl
bnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqKSA9IDA7Cit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja19oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVu
dENhbGxiYWNrLmlkbAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKKyAgICAgICAgQ2FsbGJhY2sKKyAgICBd
IFNRTFN0YXRlbWVudENhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBT
UUxUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiwgaW4gU1FMUmVzdWx0U2V0IHJlc3VsdFNldCk7Cisg
ICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiAxMDk4
NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5oOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja19oCisjZGVmaW5lIFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2tfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNRTFRyYW5zYWN0aW9uOworY2xhc3MgU1FMRXJyb3I7CisKK2NsYXNzIFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4geworcHVibGljOgorICAgIHZpcnR1YWwgflNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24q
LCBTUUxFcnJvciopID0gMDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlk
bAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2suaWRsOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIENhbGxiYWNrCisgICAgXSBT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIHsKKyAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBoYW5k
bGVFdmVudChpbiBTUUxUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiwgaW4gU1FMRXJyb3IgZXJyb3Ip
OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TFN0YXRlbWVudFN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcDoxMDk4NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisj
aW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCisjaW5j
bHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NRTFN0YXRlbWVudFN5bmM6OlNRTFN0YXRlbWVudFN5bmMoY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgaW50IHBl
cm1pc3Npb25zKQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQorICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQorICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykKK3sKKyAgICBB
U1NFUlQoIW1fc3RhdGVtZW50LmlzRW1wdHkoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U1FMUmVzdWx0
U2V0PiBTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKERhdGFiYXNlU3luYyogZGIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGRiLT5zZXRBdXRob3JpemVyUGVybWlzc2lvbnMobV9wZXJtaXNz
aW9ucyk7CisKKyAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJhc2UgPSAmZGItPnNxbGl0ZURhdGFi
YXNlKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpkYXRhYmFzZSwgbV9zdGF0
ZW1lbnQpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgZWMgPSAocmVzdWx0ID09IFNRTFJlc3Vs
dEludGVycnVwdCA/IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSIDogU1FMRXhjZXB0aW9uOjpT
WU5UQVhfRVJSKTsKKyAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoImNvdWxkIG5vdCBw
cmVwYXJlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVy
Q291bnQoKSAhPSBtX2FyZ3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgZWMgPSAoZGItPmlzSW50
ZXJydXB0ZWQoKT8gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIgOiBTUUxFeGNlcHRpb246OlNZ
TlRBWF9FUlIpOworICAgICAgICBkYi0+c2V0TGFzdEVycm9yTWVzc2FnZSgibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmJp
bmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpRVU9UQV9FUlI7
CisgICAgICAgICAgICBkYi0+c2V0TGFzdEVycm9yTWVzc2FnZSgidGhlcmUgd2FzIG5vdCBlbm91
Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAg
ICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgICAgIGRiLT5zZXRM
YXN0RXJyb3JNZXNzYWdlKCJjb3VsZCBub3QgYmluZCB2YWx1ZSIsIHJlc3VsdCwgZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
fQorCisgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0ID0gU1FMUmVzdWx0U2V0Ojpj
cmVhdGUoKTsKKworICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZldGNoIHRoZSBjb2x1bW4gbmFtZXMu
CisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJl
c3VsdFJvdykgeworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291
bnQoKTsKKyAgICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cyA9IHJlc3VsdFNldC0+cm93
cygpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKKyAg
ICAgICAgICAgIHJvd3MtPmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisK
KyAgICAgICAgZG8geworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3Vu
dDsgaSsrKQorICAgICAgICAgICAgICAgIHJvd3MtPmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29s
dW1uVmFsdWUoaSkpOworCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwor
ICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsKKworICAgICAgICBpZiAo
cmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9u
OjpEQVRBQkFTRV9FUlI7CisgICAgICAgICAgICBkYi0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY291
bGQgbm90IGl0ZXJhdGUgcmVzdWx0cyIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXN1
bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAvLyBEaWRuJ3QgZmluZCBhbnl0aGluZywg
b3Igd2FzIGFuIGluc2VydC4KKyAgICAgICAgaWYgKGRiLT5sYXN0QWN0aW9uV2FzSW5zZXJ0KCkp
CisgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRhdGFiYXNlLT5sYXN0SW5zZXJ0
Um93SUQoKSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkgeworICAg
ICAgICAvLyBRdW90YSBlcnJvciwgdGhlIGRlbGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIG1vcmUg
c3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bi4KKyAgICAgICAgZWMgPSBT
UUxFeGNlcHRpb246OlFVT1RBX0VSUjsKKyAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2Uo
InRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlIik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRB
QkFTRV9FUlI7CisgICAgICAgIGRiLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjb3VsZCBub3QgZXhl
Y3V0ZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJlc3VsdFNldC0+c2V0Um93c0FmZmVjdGVkKGRh
dGFiYXNlLT5sYXN0Q2hhbmdlcygpKTsKKyAgICByZXR1cm4gcmVzdWx0U2V0LnJlbGVhc2UoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVt
ZW50U3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJh
c2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFN0YXRlbWVudFN5bmNfaAorI2RlZmluZSBTUUxTdGF0
ZW1lbnRTeW5jX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRGF0YWJhc2VTeW5jOworY2xhc3MgU1FMUmVzdWx0U2V0OworCit0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOworCitjbGFzcyBTUUxTdGF0ZW1lbnRTeW5jIHsKK3B1YmxpYzoKKyAgICBT
UUxTdGF0ZW1lbnRTeW5jKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FM
VmFsdWU+JiBhcmd1bWVudHMsIGludCBwZXJtaXNzaW9ucyk7CisKKyAgICBQYXNzUmVmUHRyPFNR
TFJlc3VsdFNldD4gZXhlY3V0ZShEYXRhYmFzZVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CisKK3By
aXZhdGU6CisgICAgU3RyaW5nIG1fc3RhdGVtZW50OworICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9h
cmd1bWVudHM7CisgICAgaW50IG1fcGVybWlzc2lvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FM
U3RhdGVtZW50U3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoxMDk4NTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisj
aW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgor
I2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNr
LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5o
IgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1
ZGUgIlZvaWRDYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworLy8gVGhlcmUncyBu
byB3YXkgb2Yga25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSByZXF1
aXJlZCB3aGVuIGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgorLy8gRm9yIG5vdywg
d2UnbGwgYXJiaXRyYXJpbHkgY2hvb3NlIGN1cnJlbnRRdW90YSArIDFtYi4KKy8vIEluIHRoZSBm
dXR1cmUgd2UgZGVjaWRlIHRvIHRyYWNrIGlmIGEgc2l6ZSBpbmNyZWFzZSB3YXNuJ3QgZW5vdWdo
LCBhbmQgYXNrIGZvciBsYXJnZXItYW5kLWxhcmdlciBpbmNyZWFzZXMgdW50aWwgaXRzIGVub3Vn
aC4KK3N0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXNlID0gMTA0ODU3NjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxU
cmFuc2FjdGlvbjo6Y3JlYXRlKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNhbGxiYWNrLCBl
cnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5KSk7Cit9CisK
K1NRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQorICAgIDog
bV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQorICAgICwgbV9leGVjdXRl
U3FsQWxsb3dlZChmYWxzZSkKKyAgICAsIG1fZGF0YWJhc2UoZGIpCisgICAgLCBtX3dyYXBwZXIo
d3JhcHBlcikKKyAgICAsIG1fY2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYi0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyKHN1Y2Nlc3ND
YWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZXJyb3JDYWxs
YmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
KyAgICAsIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9tb2Rp
ZmllZERhdGFiYXNlKGZhbHNlKQorICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCisgICAgLCBt
X3JlYWRPbmx5KHJlYWRPbmx5KQorICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2goZmFsc2UpCit7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworfQorCitTUUxUcmFuc2FjdGlvbjo6flNRTFRyYW5z
YWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOworfQorCit2b2lk
IFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCit7CisgICAgaWYgKCFtX2V4ZWN1dGVT
cWxBbGxvd2VkIHx8ICFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgeworICAgICAgICBlID0gSU5WQUxJ
RF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcGVybWlzc2lv
bnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0ZU1hc2s7CisgICAgaWYgKCFtX2RhdGFi
YXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQorICAgICAgICBw
ZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsKKyAgICBlbHNl
IGlmIChtX3JlYWRPbmx5KQorICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6
ZXI6OlJlYWRPbmx5TWFzazsKKworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9
IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2UuZ2V0KCksIHNxbFN0YXRlbWVudCwgYXJn
dW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOworCisgICAgaWYg
KG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKKyAgICAgICAgc3RhdGVtZW50LT5zZXREYXRhYmFzZURl
bGV0ZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKKworICAgIGVucXVldWVTdGF0ZW1lbnQoc3Rh
dGVtZW50KTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6ZW5xdWV1ZVN0YXRlbWVudChQYXNz
UmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3N0YXRlbWVudE11dGV4KTsKKyAgICBtX3N0YXRlbWVudFF1ZXVlLmFwcGVuZChzdGF0ZW1l
bnQpOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorY29uc3QgY2hhciogU1FMVHJhbnNhY3Rpb246
OmRlYnVnU3RlcE5hbWUoU1FMVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uU3RlcE1ldGhvZCBzdGVw
KQoreworICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCisgICAg
ICAgIHJldHVybiAiYWNxdWlyZUxvY2siOworICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5z
YWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCisgICAgICAgIHJldHVybiAib3Bl
blRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IjsKKyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFu
c2FjdGlvbjo6cnVuU3RhdGVtZW50cykKKyAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1lbnRzIjsK
KyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1p
dCkKKyAgICAgICAgcmV0dXJuICJwb3N0ZmxpZ2h0QW5kQ29tbWl0IjsKKyAgICBlbHNlIGlmIChz
dGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrKQorICAgICAgICByZXR1cm4gImNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2Fj
dGlvbkNhbGxiYWNrKQorICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNr
IjsKKyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuICJkZWxpdmVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrIjsKKyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clN0YXRlbWVudENhbGxiYWNrKQorICAgICAgICByZXR1cm4gImRlbGl2ZXJTdGF0ZW1lbnRDYWxs
YmFjayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90
YUluY3JlYXNlQ2FsbGJhY2spCisgICAgICAgIHJldHVybiAiZGVsaXZlclF1b3RhSW5jcmVhc2VD
YWxsYmFjayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJT
dWNjZXNzQ2FsbGJhY2spCisgICAgICAgIHJldHVybiAiZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayI7
CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nl
c3NDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuICJjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2si
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICJVTktOT1dOIjsKK30KKyNlbmRpZgorCit2b2lk
IFNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFz
ZSgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UtPm9wZW5lZCgpICYmICFtX2RhdGFiYXNlLT5pc0lu
dGVycnVwdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3
YXMgc3RvcHBlZCwgZG9uJ3QgZG8gYW55dGhpbmcgYW5kIGNhbmNlbCBxdWV1ZWQgd29yaworICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ugd2FzIHN0b3BwZWQgb3IgaW50ZXJydXB0ZWQgLSBj
YW5jZWxsaW5nIHdvcmsgZm9yIHRoaXMgdHJhbnNhY3Rpb24iKTsKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7CisgICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVhcigpOwor
ICAgIG1fbmV4dFN0ZXAgPSAwOworCisgICAgLy8gUmVsZWFzZSB0aGUgdW5uZWVkZWQgY2FsbGJh
Y2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1fY2FsbGJhY2tXcmFwcGVyLmNs
ZWFyKCk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CisgICAgbV9lcnJv
ckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOworCisgICAgLy8gVGhlIG5leHQgc3RlcHMgc2hvdWxk
IGJlIGV4ZWN1dGVkIG9ubHkgaWYgd2UncmUgb24gdGhlIERCIHRocmVhZC4KKyAgICBpZiAoY3Vy
cmVudFRocmVhZCgpICE9IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRo
cmVhZCgpLT5nZXRUaHJlYWRJRCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgY3Vy
cmVudCBTUUxpdGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHN0b3BwZWQsIGFzIHdlbGwKKyAgICBp
ZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgeworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5z
dG9wKCk7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9CisKKyAg
ICBpZiAobV9sb2NrQWNxdWlyZWQpCisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7Cit9CisKKworYm9vbCBTUUxUcmFuc2FjdGlv
bjo6cGVyZm9ybU5leHRTdGVwKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlN0ZXAgJXNcbiIs
IGRlYnVnU3RlcE5hbWUobV9uZXh0U3RlcCkpOworCisgICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jayB8fAorICAgICAgICAgICBtX25leHRTdGVwID09
ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IHx8CisgICAgICAg
ICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzIHx8CisgICAg
ICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0
IHx8CisgICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0
ZXJTdWNjZXNzQ2FsbGJhY2sgfHwKKyAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNh
Y3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk7CisKKyAgICBjaGVj
a0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpOworCisgICAgaWYgKG1fbmV4
dFN0ZXApCisgICAgICAgICh0aGlzLT4qbV9uZXh0U3RlcCkoKTsKKworICAgIC8vIElmIHRoZXJl
IGlzIG5vIG5leHRTdGVwIGFmdGVyIHBlcmZvcm1pbmcgdGhlIGFib3ZlIHN0ZXAsIHRoZSB0cmFu
c2FjdGlvbiBpcyBjb21wbGV0ZQorICAgIHJldHVybiAhbV9uZXh0U3RlcDsKK30KKwordm9pZCBT
UUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpCit7CisgICAgTE9HKFN0b3Jh
Z2VBUEksICJDYWxsYmFjayAlc1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7CisKKyAg
ICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlv
bkNhbGxiYWNrIHx8CisgICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpk
ZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIHx8CisgICAgICAgICAgIG1fbmV4dFN0ZXAg
PT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgfHwKKyAgICAgICAg
ICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2Fs
bGJhY2sgfHwKKyAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2
ZXJTdWNjZXNzQ2FsbGJhY2spOworCisgICAgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVycnVw
dGVkRGF0YWJhc2UoKTsKKworICAgIGlmIChtX25leHRTdGVwKQorICAgICAgICAodGhpcy0+Km1f
bmV4dFN0ZXApKCk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246Om5vdGlmeURhdGFiYXNlVGhy
ZWFkSXNTaHV0dGluZ0Rvd24oKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0
YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElE
KCkpOworCisgICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIGluIHByb2dyZXNzLCB3ZSBzaG91
bGQgcm9sbCBpdCBiYWNrIGhlcmUsIHNpbmNlIHRoaXMgaXMgb3VyIGxhc3QKKyAgICAvLyBvcG9y
dHVuaXR5IHRvIGRvIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgdHJhbnNhY3Rpb24gb24gdGhl
IERCIHRocmVhZC4KKyAgICAvLyBDbGVhcmluZyBtX3NxbGl0ZVRyYW5zYWN0aW9uIGludm9rZXMg
U1FMaXRlVHJhbnNhY3Rpb24ncyBkZXN0cnVjdG9yIHdoaWNoIGRvZXMganVzdCB0aGF0LgorICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6
YWNxdWlyZUxvY2soKQoreworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+YWNxdWlyZUxvY2sodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmxvY2tBY3F1
aXJlZCgpCit7CisgICAgbV9sb2NrQWNxdWlyZWQgPSB0cnVlOworICAgIG1fbmV4dFN0ZXAgPSAm
U1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodDsKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIlNjaGVkdWxpbmcgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IGltbWVkaWF0
ZWx5IGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2NoZWR1
bGVUcmFuc2FjdGlvblN0ZXAodGhpcywgdHJ1ZSk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246
Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NFUlQo
bV9sb2NrQWNxdWlyZWQpOworCisgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5nIGFuZCBwcmVm
bGlnaHRpbmcgdHJhbnNhY3Rpb24gJXAiLCB0aGlzKTsKKworICAgIC8vIElmIHRoZSBkYXRhYmFz
ZSB3YXMgZGVsZXRlZCwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKKyAgICBpZiAobV9kYXRh
YmFzZS0+ZGVsZXRlZCgpKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNh
Y3Rpb25SZXN1bHQoMSwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKKyAgICAgICAgbV90cmFu
c2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1
bmFibGUgdG8gb3BlbiBhIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhl
IGRhdGFiYXNlIik7CisgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0
aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkKKyAg
ICBpZiAoIW1fcmVhZE9ubHkpCisgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
c2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CisKKyAgICBBU1NFUlQo
IW1fc3FsaXRlVHJhbnNhY3Rpb24pOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBhZG9wdFB0
cihuZXcgU1FMaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgbV9y
ZWFkT25seSkpOworCisgICAgbV9kYXRhYmFzZS0+cmVzZXREZWxldGVzKCk7CisgICAgbV9kYXRh
YmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5iZWdp
bigpOworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXBzIDErMiAtIE9wZW4gYSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0YWJhc2UsIGp1
bXBpbmcgdG8gdGhlIGVycm9yIGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKKyAgICBpZiAoIW1fc3Fs
aXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YWJh
c2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBt
X2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVycm9yOjpEQVRB
QkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOworICAg
ICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRB
QkFTRV9FUlIsICJ1bmFibGUgdG8gYmVnaW4gdHJhbnNhY3Rpb24iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNl
KCkubGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIGhhbmRs
ZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gTm90ZTogV2UgaW50ZW50aW9uYWxseSByZXRyaWV2ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZl
biB3aXRoIGFuIGVtcHR5IGV4cGVjdGVkIHZlcnNpb24uCisgICAgLy8gSW4gbXVsdGktcHJvY2Vz
cyBicm93c2Vycywgd2UgdGFrZSB0aGlzIG9wcG9ydGludXRpeSB0byB1cGRhdGUgdGhlIGNhY2hl
ZCB2YWx1ZSBmb3IKKyAgICAvLyB0aGUgYWN0dWFsIHZlcnNpb24uIEluIHNpbmdsZS1wcm9jZXNz
IGJyb3dzZXJzLCB0aGlzIGlzIGp1c3QgYSBtYXAgbG9va3VwLgorICAgIFN0cmluZyBhY3R1YWxW
ZXJzaW9uOworICAgIGlmICghbV9kYXRhYmFzZS0+Z2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0
aW9uKGFjdHVhbFZlcnNpb24pKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJh
bnNhY3Rpb25SZXN1bHQoMywgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3Fs
aXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInVuYWJsZSB0byByZWFk
IHZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5kaXNh
YmxlQXV0aG9yaXplcigpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Cisg
ICAgICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKyAgICAgICAgaGFuZGxlVHJh
bnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9oYXNW
ZXJzaW9uTWlzbWF0Y2ggPSAhbV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJzaW9uKCkuaXNFbXB0eSgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJz
aW9uKCkgIT0gYWN0dWFsVmVyc2lvbik7CisKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwcyAzIC0g
UGVmb3JtIHByZWZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYg
dGhleSBmYWlsCisgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUHJlZmxp
Z2h0KHRoaXMpKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Cisg
ICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+
ZW5hYmxlQXV0aG9yaXplcigpOworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBw
ZXItPnNxbEVycm9yKCk7CisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7CisgICAg
ICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDQsIFNRTEVy
cm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBT
UUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVua25vd24gZXJyb3Igb2Nj
dXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9uIHByZWZsaWdodCIpOworICAgICAgICB9CisgICAgICAg
IGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA0IC0gSW52b2tlIHRoZSB0cmFuc2FjdGlvbiBjYWxs
YmFjayB3aXRoIHRoZSBuZXcgU1FMVHJhbnNhY3Rpb24gb2JqZWN0CisgICAgbV9uZXh0U3RlcCA9
ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2s7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIGZvciB0cmFu
c2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlv
bkNhbGxiYWNrKHRoaXMpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNh
Y3Rpb25DYWxsYmFjaygpCit7CisgICAgYm9vbCBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9
IGZhbHNlOworCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0g
bV9jYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAg
IG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOworICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JD
YWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CisgICAgICAgIG1fZXhlY3V0
ZVNxbEFsbG93ZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDUg
LSBJZiB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIG51bGwgb3IgcmFpc2VkIGFuIGV4Y2Vw
dGlvbiwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKKyAgICBpZiAoc2hvdWxkRGVsaXZlckVy
cm9yQ2FsbGJhY2spIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdCg1LCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOworICAgICAgICBtX3RyYW5zYWN0
aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInRoZSBT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrIHdhcyBudWxsIG9yIHRocmV3IGFuIGV4Y2VwdGlvbiIpOwor
ICAgICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7CisKKyAgICBtX2RhdGFiYXNlLT5yZXBv
cnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKK30KKwordm9pZCBTUUxU
cmFuc2FjdGlvbjo6c2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKQoreworICAgIG1fbmV4dFN0ZXAg
PSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHM7CisgICAgTE9HKFN0b3JhZ2VBUEksICJT
Y2hlZHVsaW5nIHJ1blN0YXRlbWVudHMgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKK30KKwordm9pZCBT
UUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50cygpCit7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVp
cmVkKTsKKworICAgIC8vIElmIHRoZXJlIGlzIGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVk
IHVwIHRoYXQgYXJlIGFsbCBzdWNjZXNzZnVsIGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKKyAgICAv
LyBTUUxTdGF0ZW1lbnRDYWxsYmFjayBvYmplY3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2gg
dGhlIHF1ZXVlCisgICAgZG8geworICAgICAgICBpZiAobV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0
ZW1lbnQgJiYgIW1fc3FsaXRlVHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKSB7
CisgICAgICAgICAgICBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCA9IGZhbHNlOworICAg
ICAgICAgICAgLy8gRklYTUUgLSBBbm90aGVyIHBsYWNlIHRoYXQgbmVlZHMgZml4aW5nIHVwIGFm
dGVyIDxyZGFyOi8vcHJvYmxlbS81NjI4NDY4PiBpcyBhZGRyZXNzZWQuCisgICAgICAgICAgICAv
LyBTZWUgOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKSBmb3IgZGlzY3Vzc2lvbgorCisg
ICAgICAgICAgICAvLyBSZXNldCB0aGUgbWF4aW11bSBzaXplIGhlcmUsIGFzIGl0IHdhcyBpbmNy
ZWFzZWQgdG8gYWxsb3cgdXMgdG8gcmV0cnkgdGhpcyBzdGF0ZW1lbnQuCisgICAgICAgICAgICAv
LyBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCBpcyBzZXQgdG8gdHJ1ZSBvbmx5IHdoZW4g
YSBzdGF0ZW1lbnQgZXhjZWVkcworICAgICAgICAgICAgLy8gdGhlIHF1b3RhLCB3aGljaCBjYW4g
aGFwcGVuIG9ubHkgaW4gYSByZWFkLXdyaXRlIHRyYW5zYWN0aW9uLiBUaGVyZWZvcmUsIHRoZXJl
CisgICAgICAgICAgICAvLyBpcyBubyBuZWVkIHRvIGNoZWNrIGhlcmUgaWYgdGhlIHRyYW5zYWN0
aW9uIGlzIHJlYWQtd3JpdGUuCisgICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFz
ZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJhc2UtPm1heGltdW1TaXplKCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGVtZW50IGhhcyBhbHJl
YWR5IGJlZW4gcnVuLCBmYWlsZWQgZHVlIHRvIHF1b3RhIGNvbnN0cmFpbnRzLCBhbmQgd2UncmUg
bm90IHJldHJ5aW5nIGl0LAorICAgICAgICAgICAgLy8gdGhhdCBtZWFucyBpdCBlbmRlZCBpbiBh
biBlcnJvci4gIEhhbmRsZSBpdCBub3cKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1l
bnQgJiYgbV9jdXJyZW50U3RhdGVtZW50LT5sYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgp
KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgYWR2YW5jZSB0byB0aGUgbmV4dCBzdGF0ZW1lbnQKKyAgICAgICAgICAgIGdldE5leHRT
dGF0ZW1lbnQoKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHJ1bkN1cnJlbnRTdGF0ZW1lbnQo
KSk7CisKKyAgICAvLyBJZiBydW5DdXJyZW50U3RhdGVtZW50KCkgcmV0dXJuZWQgZmFsc2UsIHRo
YXQgbWVhbnMgZWl0aGVyIHRoZXJlIHdhcyBubyBjdXJyZW50IHN0YXRlbWVudCB0byBydW4sCisg
ICAgLy8gb3IgdGhlIGN1cnJlbnQgc3RhdGVtZW50IHJlcXVpcmVzIGEgY2FsbGJhY2sgdG8gY29t
cGxldGUuICBJbiB0aGUgbGF0ZXIgY2FzZSwgaXQgYWxzbyBzY2hlZHVsZWQKKyAgICAvLyB0aGUg
Y2FsbGJhY2sgb3IgcGVyZm9ybWVkIGFueSBvdGhlciBhZGRpdGlvbmFsIHdvcmsgc28gd2UgY2Fu
IHJldHVybgorICAgIGlmICghbV9jdXJyZW50U3RhdGVtZW50KQorICAgICAgICBwb3N0ZmxpZ2h0
QW5kQ29tbWl0KCk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmdldE5leHRTdGF0ZW1lbnQo
KQoreworICAgIG1fY3VycmVudFN0YXRlbWVudCA9IDA7CisKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9zdGF0ZW1lbnRNdXRleCk7CisgICAgaWYgKCFtX3N0YXRlbWVudFF1ZXVlLmlzRW1wdHko
KSkgeworICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQgPSBtX3N0YXRlbWVudFF1ZXVlLnRha2VG
aXJzdCgpOworICAgIH0KK30KKworYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRl
bWVudCgpCit7CisgICAgaWYgKCFtX2N1cnJlbnRTdGF0ZW1lbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOworCisgICAgaWYgKG1f
aGFzVmVyc2lvbk1pc21hdGNoKQorICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNldFZlcnNp
b25NaXNtYXRjaGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7CisKKyAgICBpZiAobV9jdXJyZW50
U3RhdGVtZW50LT5leGVjdXRlKG1fZGF0YWJhc2UuZ2V0KCkpKSB7CisgICAgICAgIGlmIChtX2Rh
dGFiYXNlLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkpIHsKKyAgICAgICAgICAgIC8vIEZs
YWcgdGhpcyB0cmFuc2FjdGlvbiBhcyBoYXZpbmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxh
dGVyIGRlbGVnYXRlIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgbV9tb2RpZmllZERhdGFiYXNl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIEFsc28gZGlydHkgdGhlIHNpemUgb2YgdGhpcyBkYXRh
YmFzZSBmaWxlIGZvciBjYWxjdWxhdGluZyBxdW90YSB1c2FnZQorICAgICAgICAgICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhlY3V0ZVN0YXRlbWVudChkYXRhYmFzZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRl
bWVudENhbGxiYWNrKCkpIHsKKyAgICAgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjazsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25D
YWxsYmFjayh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5s
YXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpKSB7CisgICAgICAgIG1fbmV4dFN0ZXAgPSAm
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2s7CisgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrIGZv
ciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxl
VHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3Io
KQoreworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDYuZXJyb3IgLSBDYWxsIHRoZSBzdGF0ZW1l
bnQncyBlcnJvciBjYWxsYmFjaywgYnV0IGlmIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjaywK
KyAgICAvLyBvciB0aGUgdHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrLCBqdW1wIHRvIHRoZSB0
cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjaworICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhh
c1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSAmJiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9s
bGVkQmFja0J5U3FsaXRlKCkpIHsKKyAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlv
bjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNj
aGVkdWxpbmcgZGVsaXZlclN0YXRlbWVudENhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwg
dGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0
aGlzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX2N1cnJl
bnRTdGF0ZW1lbnQtPnNxbEVycm9yKCk7CisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9y
KSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3Vs
dCgxLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAwKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rp
b25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInRoZSBz
dGF0ZW1lbnQgZmFpbGVkIHRvIGV4ZWN1dGUiKTsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGVU
cmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKKyAgICB9Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFN0YXRl
bWVudCk7CisKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDYuNiBhbmQgNi4zKGVycm9yKSAtIElm
IHRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgd2VudCB3cm9uZywganVtcCB0byB0aGUgdHJhbnNhY3Rp
b24gZXJyb3IgY2FsbGJhY2sKKyAgICAvLyBPdGhlcndpc2UsIGNvbnRpbnVlIHRvIGxvb3AgdGhy
b3VnaCB0aGUgc3RhdGVtZW50IHF1ZXVlCisgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7
CisgICAgYm9vbCByZXN1bHQgPSBtX2N1cnJlbnRTdGF0ZW1lbnQtPnBlcmZvcm1DYWxsYmFjayh0
aGlzKTsKKyAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7CisKKyAgICBpZiAocmVzdWx0
KSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDIs
IFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBj
YWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBk
aWQgbm90IHJldHVybiBmYWxzZSIpOworICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKHRy
dWUpOworICAgIH0gZWxzZQorICAgICAgICBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOworfQor
Cit2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKCkKK3sK
KyAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKKyAgICBBU1NFUlQoIW1fc2hvdWxkUmV0
cnlDdXJyZW50U3RhdGVtZW50KTsKKworICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50
ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJh
c2UoKSk7CisKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRz
OworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFu
c2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlv
blN0ZXAodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21t
aXQoKQoreworICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7CisKKyAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDcgLSBQZWZvcm0gcG9zdGZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3Ig
Y2FsbGJhY2sgaWYgdGhleSBmYWlsCisgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5w
ZXJmb3JtUG9zdGZsaWdodCh0aGlzKSkgeworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBt
X3dyYXBwZXItPnNxbEVycm9yKCk7CisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7
CisgICAgICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgz
LCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbkVy
cm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmtub3duIGVy
cm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2FjdGlvbiBwb3N0ZmxpZ2h0Iik7CisgICAgICAgIH0K
KyAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUcmFuc2FjdG9uIFN0ZXAgOCs5IC0gQ29tbWl0IHRoZSB0cmFuc2Fj
dGlvbiwganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscworICAgIEFT
U0VSVChtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKKworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRo
b3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgbV9kYXRh
YmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAgLy8gSWYgdGhlIGNvbW1pdCBmYWlsZWQs
IHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxsIGJlIG1hcmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCisg
ICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBpZiAo
bV93cmFwcGVyKQorICAgICAgICAgICAgbV93cmFwcGVyLT5oYW5kbGVDb21taXRGYWlsZWRBZnRl
clBvc3RmbGlnaHQodGhpcyk7CisgICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVh
cigpOworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCg0
LCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxh
c3RFcnJvcigpKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxlIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFz
ZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJh
c2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFs
c2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29t
bWl0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSworCisgICAgLy8gVmFjdXVtIHRo
ZSBkYXRhYmFzZSBpZiBhbnl0aGluZyB3YXMgZGVsZXRlZC4KKyAgICBpZiAobV9kYXRhYmFzZS0+
aGFkRGVsZXRlcygpKQorICAgICAgICBtX2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVl
ZGVkKCk7CisKKyAgICAvLyBUaGUgY29tbWl0IHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNh
Y3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZXMuCisgICAg
aWYgKG1fbW9kaWZpZWREYXRhYmFzZSkKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
bGllbnQoKS0+ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKKworICAgIC8v
IE5vdyByZWxlYXNlIG91ciB1bm5lZWRlZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBj
eWNsZXMuCisgICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOworCisgICAgLy8gVHJh
bnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjaywgaWYgdGhlcmUgaXMg
b25lCisgICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7Cisg
ICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJh
Y2s7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3VjY2Vzc0Nh
bGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2Ut
PnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrKCk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKQoreworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAg
LSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2sKKyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgaWYg
KHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudCgp
OworCisgICAgLy8gU2NoZWR1bGUgYSAicG9zdC1zdWNjZXNzIGNhbGxiYWNrIiBzdGVwIHRvIHJl
dHVybiBjb250cm9sIHRvIHRoZSBkYXRhYmFzZSB0aHJlYWQgaW4gY2FzZSB0aGVyZQorICAgIC8v
IGFyZSBmdXJ0aGVyIHRyYW5zYWN0aW9ucyBxdWV1ZWQgdXAgZm9yIHRoaXMgRGF0YWJhc2UKKyAg
ICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJh
Y2s7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBBZnRlclN1Y2Nlc3ND
YWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnNj
aGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uOjpj
bGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKQoreworICAgIEFTU0VSVChtX2xvY2tBY3F1aXJl
ZCk7CisKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDExIC0gRW5kIHRyYW5zYWN0aW9uIHN0ZXBz
CisgICAgLy8gVGhlcmUgaXMgbm8gbmV4dCBzdGVwCisgICAgTE9HKFN0b3JhZ2VBUEksICJUcmFu
c2FjdGlvbiAlcCBpcyBjb21wbGV0ZVxuIiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBtX3NxbGl0
ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgbV9uZXh0U3RlcCA9IDA7CisKKyAgICAvLyBSZWxl
YXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOworfQorCit2b2lkIFNRTFRyYW5zYWN0
aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjaykKK3sKKyAgICBpZiAo
bV9lcnJvckNhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7CisgICAgICAgIGlmIChpbkNh
bGxiYWNrKQorICAgICAgICAgICAgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBmb3IgdHJh
bnNhY3Rpb24gJXBcbiIsIHRoaXMpOworICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVU
cmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBObyBlcnJvciBjYWxsYmFjaywgc28gZmFzdC1mb3J3YXJkIHRvOgorICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCisgICAg
aWYgKGluQ2FsbGJhY2spIHsKKyAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZv
ciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxl
VHJhbnNhY3Rpb25TdGVwKHRoaXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNsZWFudXBBZnRl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworICAgIH0KK30KKwordm9pZCBTUUxUcmFuc2Fj
dGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpCit7CisgICAgQVNTRVJUKG1f
dHJhbnNhY3Rpb25FcnJvcik7CisKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gSWYgZXhp
c3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sgd2l0aCB0aGUgbGFzdAorICAgIC8vIGVycm9yIHRv
IGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KKyAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNrV3JhcHBl
ci51bndyYXAoKTsKKyAgICBpZiAoZXJyb3JDYWxsYmFjaykKKyAgICAgICAgZXJyb3JDYWxsYmFj
ay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKKworICAgIG1fbmV4dFN0
ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
azsKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRh
YmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNh
Y3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpCit7CisgICAgQVNT
RVJUKG1fbG9ja0FjcXVpcmVkKTsKKworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVy
KCk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgLy8gVHJhbnNhY3Rp
b24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgICAgbV9zcWxpdGVU
cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBtX3NxbGl0
ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgfQorICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhv
cml6ZXIoKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBBbnkgc3RpbGwtcGVuZGlu
ZyBzdGF0ZW1lbnRzIGluIHRoZSB0cmFuc2FjdGlvbiBhcmUgZGlzY2FyZGVkLgorICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOworICAgICAgICBtX3N0
YXRlbWVudFF1ZXVlLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gVHJhbnNhY3Rpb24gaXMgY29t
cGxldGUhICBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKKyAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5z
YWN0aW9uICVwIGlzIGNvbXBsZXRlIHdpdGggYW4gZXJyb3JcbiIsIHRoaXMpOworICAgIEFTU0VS
VCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CisgICAgbV9uZXh0U3RlcCA9IDA7CisKKyAgICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0
aGlzIGRhdGFiYXNlCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5y
ZWxlYXNlTG9jayh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Fs
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDEwOTg1OCkJKGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oOjEwOTg1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25faAorI2RlZmlu
ZSBTUUxUcmFuc2FjdGlvbl9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiU1FMU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0YWJh
c2U7CitjbGFzcyBTUUxFcnJvcjsKK2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOworY2xhc3MgU1FM
U3RhdGVtZW50Q2FsbGJhY2s7CitjbGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOworY2xh
c3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3Mg
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBWb2lk
Q2FsbGJhY2s7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFNRTFRyYW5z
YWN0aW9uV3JhcHBlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlv
bldyYXBwZXI+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbldyYXBwZXIo
KSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlvbiop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24q
KSA9IDA7CisgICAgdmlydHVhbCBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxUcmFuc2Fj
dGlvbiopID0gMDsKK307CisKK2NsYXNzIFNRTFRyYW5zYWN0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29s
IHJlYWRPbmx5ID0gZmFsc2UpOworCisgICAgflNRTFRyYW5zYWN0aW9uKCk7CisKKyAgICB2b2lk
IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxW
YWx1ZT4mIGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4sIEV4
Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7CisgICAgYm9vbCBwZXJm
b3JtTmV4dFN0ZXAoKTsKKyAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsKKworICAg
IERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKyAgICBi
b29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX3JlYWRPbmx5OyB9CisgICAgdm9pZCBub3RpZnlE
YXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CisKK3ByaXZhdGU6CisgICAgU1FMVHJhbnNh
Y3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCisgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBl
cj4sIGJvb2wgcmVhZE9ubHkpOworCisgICAgdHlwZWRlZiB2b2lkIChTUUxUcmFuc2FjdGlvbjo6
KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCkoKTsKKyAgICBUcmFuc2FjdGlvblN0ZXBNZXRob2QgbV9u
ZXh0U3RlcDsKKworICAgIHZvaWQgZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRl
bWVudD4pOworCisgICAgdm9pZCBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRh
YmFzZSgpOworCisgICAgdm9pZCBhY3F1aXJlTG9jaygpOworICAgIHZvaWQgb3BlblRyYW5zYWN0
aW9uQW5kUHJlZmxpZ2h0KCk7CisgICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygp
OworICAgIHZvaWQgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKKyAgICB2b2lkIHJ1blN0YXRl
bWVudHMoKTsKKyAgICB2b2lkIGdldE5leHRTdGF0ZW1lbnQoKTsKKyAgICBib29sIHJ1bkN1cnJl
bnRTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOwor
ICAgIHZvaWQgZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKCk7CisgICAgdm9pZCBkZWxpdmVyUXVv
dGFJbmNyZWFzZUNhbGxiYWNrKCk7CisgICAgdm9pZCBwb3N0ZmxpZ2h0QW5kQ29tbWl0KCk7Cisg
ICAgdm9pZCBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgdm9pZCBjbGVhbnVwQWZ0ZXJT
dWNjZXNzQ2FsbGJhY2soKTsKKyAgICB2b2lkIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBp
bkNhbGxiYWNrKTsKKyAgICB2b2lkIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsK
KyAgICB2b2lkIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworCisjaWYg
IUxPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z1N0ZXBOYW1lKFRyYW5z
YWN0aW9uU3RlcE1ldGhvZCk7CisjZW5kaWYKKworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IG1f
Y3VycmVudFN0YXRlbWVudDsKKworICAgIGJvb2wgbV9leGVjdXRlU3FsQWxsb3dlZDsKKworICAg
IFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25X
cmFwcGVyPiBtX3dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IG1fY2FsbGJhY2tXcmFwcGVyOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxWb2lk
Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBw
ZXI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyOwor
ICAgIFJlZlB0cjxTUUxFcnJvcj4gbV90cmFuc2FjdGlvbkVycm9yOworICAgIGJvb2wgbV9zaG91
bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQ7CisgICAgYm9vbCBtX21vZGlmaWVkRGF0YWJhc2U7Cisg
ICAgYm9vbCBtX2xvY2tBY3F1aXJlZDsKKyAgICBib29sIG1fcmVhZE9ubHk7CisgICAgYm9vbCBt
X2hhc1ZlcnNpb25NaXNtYXRjaDsKKworICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CisgICAg
RGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOworCisgICAgT3du
UHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24u
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENv
bmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKKyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAg
ICBKU05vU3RhdGljVGFibGVzCisgICAgXSBTUUxUcmFuc2FjdGlvbiB7CisgICAgICAgIFtDdXN0
b21dIHZvaWQgZXhlY3V0ZVNxbChpbiBET01TdHJpbmcgc3FsU3RhdGVtZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gU1FMU3Rh
dGVtZW50Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2spOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkocmV2aXNp
b24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2suaDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqVHJhbnNhY3Rp
b24KKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25DYWxsYmFja19oCisjZGVmaW5lIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2tfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNRTFRyYW5zYWN0aW9uOworCitjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKCkgeyB9CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKikgPSAwOworfTsKKworfQorCisj
ZW5kaWYKKworI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2tfaApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw6MTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKKyAgICAgICAgQ2FsbGJh
Y2sKKyAgICBdIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgeworICAgICAgICBib29sZWFuIGhhbmRs
ZUV2ZW50KGluIFNRTFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKTsKKyAgICB9OworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHA6MTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
UUxUcmFuc2FjdGlvbkNsaWVudC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0
aW9uKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKAorICAgICAgICBkYXRhYmFz
ZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Cit9CisK
K3ZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3RE
YXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0
YWJhc2VDaGFuZ2VkKGRhdGFiYXNlKTsKK30KKworYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6
ZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgQVNTRVJU
KGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkucXVvdGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAg
IGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGRhdGFi
YXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90
YSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGRhdGFiYXNlLT5z
ZWN1cml0eU9yaWdpbigpKTsKKyAgICByZXR1cm4gKG5ld1F1b3RhID4gY3VycmVudFF1b3RhKTsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
Q2xpZW50LmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNsaWVudC5oOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTUUxUcmFuc2FjdGlvbkNsaWVudF9oCisjZGVmaW5lIFNRTFRyYW5z
YWN0aW9uQ2xpZW50X2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3
dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2U7CisKKy8vIEEgY2xpZW50
IHRvIHRoZSBTUUxUcmFuc2FjdGlvbiBjbGFzcy4gQWxsb3dzIFNRTFRyYW5zYWN0aW9uIHRvIG5v
dGlmeSBpbnRlcmVzdGVkCisvLyBwYXJ0aWVzIHRoYXQgY2VydGFpbiB0aGluZ3MgaGF2ZSBoYXBw
ZW5lZCBpbiBhIHRyYW5zYWN0aW9uLgorY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGllbnQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNRTFRyYW5zYWN0aW9uQ2xpZW50KTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQoKSB7IH0KKyAg
ICB2b2lkIGRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSopOworICAg
IHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChBYnN0cmFjdERhdGFiYXNlKik7CisgICAgYm9vbCBk
aWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFiYXNlKik7Cit9OworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25DbGllbnRfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMDk4NTgpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6
MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisK
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBnZXREYXRh
YmFzZUlkZW50aWZpZXIoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIERhdGFi
YXNlKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRh
YmFzZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCk7Cit9CisKK3Zv
aWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMo
Q29vcmRpbmF0aW9uSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoaW5mby5hY3RpdmVXcml0ZVRyYW5z
YWN0aW9uIHx8IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gZmlyc3RQZW5kaW5nVHJhbnNhY3Rp
b24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKTsKKyAgICBpZiAoZmlyc3RQZW5k
aW5nVHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy50YWtl
Rmlyc3QoKTsKKyAgICAgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5hZGQoZmly
c3RQZW5kaW5nVHJhbnNhY3Rpb24pOworICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rp
b24tPmxvY2tBY3F1aXJlZCgpOworICAgICAgICB9IHdoaWxlICghaW5mby5wZW5kaW5nVHJhbnNh
Y3Rpb25zLmlzRW1wdHkoKSAmJiBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+aXNS
ZWFkT25seSgpKTsKKyAgICB9IGVsc2UgaWYgKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZUZpcnN0
KCk7CisgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9IGZpcnN0UGVuZGluZ1Ry
YW5zYWN0aW9uOworICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVk
KCk7CisgICAgfQorfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVM
b2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBTdHJpbmcgZGJJZGVudGlm
aWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKworICAgIENvb3JkaW5h
dGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRp
bmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmllcik7CisgICAgaWYgKGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvciA9PSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCkpIHsKKyAgICAgICAgLy8g
Tm8gcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIHRoaXMgREIKKyAgICAgICAgY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmFkZChkYklkZW50aWZpZXIsIENv
b3JkaW5hdGlvbkluZm8oKSkuZmlyc3Q7CisgICAgfQorCisgICAgQ29vcmRpbmF0aW9uSW5mbyYg
aW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgIGluZm8ucGVuZGlu
Z1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOworICAgIHByb2Nlc3NQZW5kaW5nVHJh
bnNhY3Rpb25zKGluZm8pOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJl
bGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBpZiAobV9jb29y
ZGluYXRpb25JbmZvTWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CisKKyAg
ICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3Ig
PSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOworICAgIEFTU0VSVChj
b29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpKTsK
KyAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5z
ZWNvbmQ7CisKKyAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBB
U1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7
CisgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24p
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rp
b24gPT0gdHJhbnNhY3Rpb24pOworICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24g
PSAwOworICAgIH0KKworICAgIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKGluZm8pOworfQor
Cit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKCkKK3sKKyAgICAvLyBO
b3RpZnkgYWxsIHRyYW5zYWN0aW9ucyBpbiBwcm9ncmVzcyB0aGF0IHRoZSBkYXRhYmFzZSB0aHJl
YWQgaXMgc2h1dHRpbmcgZG93bgorICAgIGZvciAoQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0
b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmJlZ2lu
KCk7CisgICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25J
bmZvTWFwLmVuZCgpOyArK2Nvb3JkaW5hdGlvbkluZm9JdGVyYXRvcikgeworICAgICAgICBDb29y
ZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCisgICAgICAgICAgICBpbmZv
LmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rv
d24oKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPjo6aXRl
cmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KKyAgICAgICAgICAgICAgICAg
ICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5iZWdpbigpOworICAgICAgICAgICAgIGFj
dGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciAhPSBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlv
bnMuZW5kKCk7CisgICAgICAgICAgICAgKythY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3Ip
IHsKKyAgICAgICAgICAgICgqYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yKS0+bm90aWZ5
RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQ2xlYW4gdXAgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0YWJhc2VzCisg
ICAgbV9jb29yZGluYXRpb25JbmZvTWFwLmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoxMDk4NTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvciB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IH0KKyAgICAgICAgdm9pZCBhY3F1
aXJlTG9jayhTUUxUcmFuc2FjdGlvbiopOworICAgICAgICB2b2lkIHJlbGVhc2VMb2NrKFNRTFRy
YW5zYWN0aW9uKik7CisgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKKyAgICBwcml2YXRlOgorICAg
ICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBUcmFuc2FjdGlvbnNR
dWV1ZTsKKyAgICAgICAgc3RydWN0IENvb3JkaW5hdGlvbkluZm8geworICAgICAgICAgICAgVHJh
bnNhY3Rpb25zUXVldWUgcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICAgICAgICAgIEhhc2hTZXQ8
UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnM7CisgICAgICAg
ICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGFjdGl2ZVdyaXRlVHJhbnNhY3Rpb247CisgICAg
ICAgIH07CisgICAgICAgIC8vIE1hcHMgZGF0YWJhc2UgbmFtZXMgdG8gaW5mb3JtYXRpb24gYWJv
dXQgcGVuZGluZyB0cmFuc2FjdGlvbnMKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
Q29vcmRpbmF0aW9uSW5mbz4gQ29vcmRpbmF0aW9uSW5mb01hcDsKKyAgICAgICAgQ29vcmRpbmF0
aW9uSW5mb01hcCBtX2Nvb3JkaW5hdGlvbkluZm9NYXA7CisKKyAgICAgICAgdm9pZCBwcm9jZXNz
UGVuZGluZ1RyYW5zYWN0aW9ucyhDb29yZGluYXRpb25JbmZvJiBpbmZvKTsKKyAgICB9OworfQor
CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCShy
ZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmg6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja19oCisjZGVm
aW5lIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMRXJyb3I7CisKK2NsYXNzIFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9
IDA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwJKHJldmlz
aW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2suaWRsOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworICAgIGludGVyZmFjZSBbCisgICAgICAg
IENvbmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKKyAgICAgICAgQ2FsbGJhY2sKKyAgICBdIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayB7CisgICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4g
U1FMRXJyb3IgZXJyb3IpOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCShyZXZp
c2lvbiAxMDk4NTgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25T
eW5jLmNwcDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCisKKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCisj
aW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNp
bmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCisj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRl
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IFNRTFRyYW5z
YWN0aW9uU3luYzo6Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb25TeW5jKGRiLCBjYWxsYmFjaywgcmVhZE9ubHkp
KTsKK30KKworU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VT
eW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ss
IGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX2RhdGFiYXNlKGRiKQorICAgICwgbV9jYWxsYmFjayhj
YWxsYmFjaykKKyAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCisgICAgLCBtX2hhc1ZlcnNpb25N
aXNtYXRjaChmYWxzZSkKKyAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkKKyAgICAsIG1f
dHJhbnNhY3Rpb25DbGllbnQoYWRvcHRQdHIobmV3IFNRTFRyYW5zYWN0aW9uQ2xpZW50KCkpKQor
eworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKTsKK30KKworU1FMVHJhbnNhY3Rpb25TeW5jOjp+U1FMVHJhbnNhY3Rpb25T
eW5jKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24gJiYgbV9z
cWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAgICAgICByb2xsYmFjaygpOworfQor
CitQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FM
KGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKworICAgIG1fZGF0YWJh
c2UtPnNldExhc3RFcnJvck1lc3NhZ2UoIiIpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVu
ZWQoKSkgeworICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjYW5ub3Qg
ZXhlY3V0ZVNRTCBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3BlbiIpOworICAgICAgICBl
YyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGlmIChtX2hhc1ZlcnNpb25NaXNtYXRjaCkgeworICAgICAgICBtX2RhdGFiYXNlLT5z
ZXRMYXN0RXJyb3JNZXNzYWdlKCJjYW5ub3QgZXhlY3V0ZVNRTCBiZWNhdXNlIHRoZXJlIGlzIGEg
dmVyc2lvbiBtaXNtYXRjaCIpOworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VkVSU0lPTl9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzcWxTdGF0ZW1lbnQuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFi
YXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmRhdGFi
YXNlQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNzKCkpCisgICAgICBwZXJtaXNzaW9ucyB8
PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsKKyAgICBlbHNlIGlmIChtX3JlYWRP
bmx5KQorICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpSZWFkT25seU1h
c2s7CisKKyAgICBTUUxTdGF0ZW1lbnRTeW5jIHN0YXRlbWVudChzcWxTdGF0ZW1lbnQsIGFyZ3Vt
ZW50cywgcGVybWlzc2lvbnMpOworCisgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7
CisgICAgYm9vbCByZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAgUmVmUHRyPFNRTFJlc3VsdFNl
dD4gcmVzdWx0U2V0OworICAgIHdoaWxlIChyZXRyeVN0YXRlbWVudCkgeworICAgICAgICByZXRy
eVN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICByZXN1bHRTZXQgPSBzdGF0ZW1lbnQuZXhlY3V0
ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7CisgICAgICAgIGlmICghcmVzdWx0U2V0KSB7CisgICAg
ICAgICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGlmIChlYyA9PSBTUUxF
eGNlcHRpb246OlFVT1RBX0VSUikgeworICAgICAgICAgICAgICAgIGlmIChtX3RyYW5zYWN0aW9u
Q2xpZW50LT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLT5z
ZXRMYXN0RXJyb3JNZXNzYWdlKCJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFn
ZSBzcGFjZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9kYXRhYmFz
ZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7CisgICAgICAgIG1fbW9kaWZpZWREYXRh
YmFzZSA9IHRydWU7CisgICAgICAgIG1fdHJhbnNhY3Rpb25DbGllbnQtPmRpZEV4ZWN1dGVTdGF0
ZW1lbnQoZGF0YWJhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdFNldC5yZWxlYXNl
KCk7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbigpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgbV9k
YXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFeGNlcHRpb246OlVO
S05PV05fRVJSLCAwKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgi
Y2Fubm90IGJlZ2luIHRyYW5zYWN0aW9uIGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVu
Iik7CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgIH0KKwor
ICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJv
Z3Jlc3MoKSk7CisKKyAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRoaXMgdHJhbnNh
Y3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seS4KKyAgICBpZiAoIW1f
cmVhZE9ubHkpCisgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkuc2V0TWF4aW11
bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CisKKyAgICBBU1NFUlQoIW1fc3FsaXRl
VHJhbnNhY3Rpb24pOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBhZG9wdFB0cihuZXcgU1FM
aXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgbV9yZWFkT25seSkp
OworCisgICAgbV9kYXRhYmFzZS0+cmVzZXREZWxldGVzKCk7CisgICAgbV9kYXRhYmFzZS0+ZGlz
YWJsZUF1dGhvcml6ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5iZWdpbigpOworICAg
IG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIC8vIENoZWNrIGlmIGJlZ2lu
KCkgc3VjY2VlZGVkLgorICAgIGlmICghbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygp
KSB7CisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNh
Y3Rpb25SZXN1bHQoMiwgU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOworICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0
RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gYmVnaW4gdHJhbnNhY3Rpb24iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBT
UUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICB9CisKKyAgICAvLyBOb3RlOiBXZSBpbnRl
bnRpb25hbGx5IHJldHJpZXZlIHRoZSBhY3R1YWwgdmVyc2lvbiBldmVuIHdpdGggYW4gZW1wdHkg
ZXhwZWN0ZWQgdmVyc2lvbi4KKyAgICAvLyBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzLCB3ZSB0
YWtlIHRoaXMgb3Bwb3J0aW51dGl5IHRvIHVwZGF0ZSB0aGUgY2FjaGVkIHZhbHVlIGZvcgorICAg
IC8vIHRoZSBhY3R1YWwgdmVyc2lvbi4gSW4gc2luZ2xlLXByb2Nlc3MgYnJvd3NlcnMsIHRoaXMg
aXMganVzdCBhIG1hcCBsb29rdXAuCisgICAgU3RyaW5nIGFjdHVhbFZlcnNpb247CisgICAgaWYg
KCFtX2RhdGFiYXNlLT5nZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oYWN0dWFsVmVyc2lv
bikpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgz
LCBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2Uo
KS5sYXN0RXJyb3IoKSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2Uo
InVuYWJsZSB0byByZWFkIHZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICByb2xsYmFj
aygpOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgfQor
ICAgIG1faGFzVmVyc2lvbk1pc21hdGNoID0gIW1fZGF0YWJhc2UtPmV4cGVjdGVkVmVyc2lvbigp
LmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fZGF0YWJhc2UtPmV4
cGVjdGVkVmVyc2lvbigpICE9IGFjdHVhbFZlcnNpb24pOworICAgIG1fZGF0YWJhc2UtPnJlcG9y
dFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSworICAgIHJldHVybiAwOwor
fQorCitFeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZSgpCit7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkgfHwgKG1fY2FsbGJhY2sgJiYg
IW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpKSkgeworICAgICAgICBpZiAobV9kYXRhYmFz
ZS0+bGFzdEVycm9yTWVzc2FnZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2Ut
PnNldExhc3RFcnJvck1lc3NhZ2UoImZhaWxlZCB0byBleGVjdXRlIHRyYW5zYWN0aW9uIGNhbGxi
YWNrIik7CisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0
aW9uOjpVTktOT1dOX0VSUjsKKyAgICB9CisKKyAgICBtX2NhbGxiYWNrID0gMDsKKyAgICByZXR1
cm4gMDsKK30KKworRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmNvbW1pdCgpCit7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250
ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAg
bV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXhjZXB0aW9u
OjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3Nh
Z2UoInVuYWJsZSB0byBjb21taXQgdHJhbnNhY3Rpb24gYmVjYXVzZSB0aGUgZGF0YWJhc2UgaXMg
bm90IG9wZW4uIik7CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOwor
ICAgIH0KKworICAgIEFTU0VSVChtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKKworICAgIG1fZGF0YWJh
c2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+Y29tbWl0
KCk7CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAgLy8gSWYgdGhl
IGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxsIGJlIG1hcmtlZCBhcyAi
aW4gcHJvZ3Jlc3MiCisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkg
eworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgyLCBT
UUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5s
YXN0RXJyb3IoKSk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBjb21taXQgdHJhbnNhY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgfQorCisgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi5jbGVhcigpOworCisgICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBhbnl0aGlu
ZyB3YXMgZGVsZXRlZC4KKyAgICBpZiAobV9kYXRhYmFzZS0+aGFkRGVsZXRlcygpKQorICAgICAg
ICBtX2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKKyAgICAvLyBUaGUg
Y29tbWl0IHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBk
YXRhYmFzZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZXMuCisgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFz
ZSkKKyAgICAgICAgbV90cmFuc2FjdGlvbkNsaWVudC0+ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bihkYXRhYmFzZSgpKTsKKworICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBTUUxUcmFu
c2FjdGlvblN5bmM6OnJvbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9kYXRhYmFzZS0+
ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgeworICAg
ICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgICAgICBtX3NxbGl0ZVRy
YW5zYWN0aW9uLmNsZWFyKCk7CisgICAgfQorICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6
ZXIoKTsKKworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nx
bGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgJKHJldmlzaW9uIDEw
OTg1OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaDox
MDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFRyYW5z
YWN0aW9uU3luY19oCisjZGVmaW5lIFNRTFRyYW5zYWN0aW9uU3luY19oCisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlU3luYzsK
K2NsYXNzIFNRTFJlc3VsdFNldDsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50OworY2xhc3Mg
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CitjbGFzcyBTUUxWYWx1ZTsKK2NsYXNzIFNRTGl0
ZVRyYW5zYWN0aW9uOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisvLyBJbnN0YW5j
ZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3
b3JrZXIncyBjb250ZXh0IHRocmVhZC4KK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3luYyA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luYz4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERhdGFiYXNlU3luYyosIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5ID0gZmFsc2Up
OworCisgICAgflNRTFRyYW5zYWN0aW9uU3luYygpOworCisgICAgUGFzc1JlZlB0cjxTUUxSZXN1
bHRTZXQ+IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9uQ29kZSYpOworCisgICAgRGF0YWJhc2VT
eW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKyAgICBib29sIGlz
UmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CisKKyAgICBFeGNlcHRpb25D
b2RlIGJlZ2luKCk7CisgICAgRXhjZXB0aW9uQ29kZSBleGVjdXRlKCk7CisgICAgRXhjZXB0aW9u
Q29kZSBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKK3ByaXZhdGU6CisgICAgU1FM
VHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsKKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+
IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBtX2Nh
bGxiYWNrOworICAgIGJvb2wgbV9yZWFkT25seTsKKyAgICBib29sIG1faGFzVmVyc2lvbk1pc21h
dGNoOworCisgICAgYm9vbCBtX21vZGlmaWVkRGF0YWJhc2U7CisgICAgT3duUHRyPFNRTFRyYW5z
YWN0aW9uQ2xpZW50PiBtX3RyYW5zYWN0aW9uQ2xpZW50OworICAgIE93blB0cjxTUUxpdGVUcmFu
c2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvblN5bmNfaApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmlkbAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGw6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAg
ICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgIF0gU1FMVHJhbnNhY3Rpb25TeW5jIHsKKyAgICAg
ICAgW0N1c3RvbV0gU1FMUmVzdWx0U2V0IGV4ZWN1dGVTcWwoaW4gRE9NU3RyaW5nIHNxbFN0YXRl
bWVudCwgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRzKTsKKyAgICB9OworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg6MTA5ODU4KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2tfaAorCisj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOworCisvLyBJ
bnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9u
IHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaygpIHsgfQor
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvblN5bmMqKSA9IDA7Cit9
OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2tf
aApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHJldmlzaW9uIDEwOTg1
OCkJKGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
ay5pZGw6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K21vZHVsZSBzdG9yYWdlIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1T
UUxfREFUQUJBU0UsCisgICAgICAgIENhbGxiYWNrCisgICAgXSBTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjayB7CisgICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gU1FMVHJhbnNhY3Rpb25T
eW5jIHRyYW5zYWN0aW9uKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcWxkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFi
YXNlLmNwcAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dv
cmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcWxkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dFNRTERhdGFi
YXNlOjpvcGVuRGF0YWJhc2UoV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBj
cmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwgIUFic3RyYWN0RGF0YWJh
c2U6OmlzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKGNv
bnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlv
bkNhbGxiYWNrLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBXb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2U6Om9wZW5EYXRhYmFzZVN5bmMoV29ya2VyQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRh
YmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwg
IUFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBEYXRhYmFzZVN5
bmM6Om9wZW5EYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9Xb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oOjEwOTg1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYg
V29ya2VyQ29udGV4dFNRTERhdGFiYXNlX2gKKyNkZWZpbmUgV29ya2VyQ29udGV4dFNRTERhdGFi
YXNlX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlOworY2xhc3MgRGF0
YWJhc2VDYWxsYmFjazsKK2NsYXNzIERhdGFiYXNlU3luYzsKK2NsYXNzIFdvcmtlckNvbnRleHQ7
CisKK2NsYXNzIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShXb3JrZXJDb250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5jKFdvcmtlckNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0
ZToKKyAgICBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UoKSB7IH07CisgICAgfldvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZSgpIHsgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBXb3JrZXJDb250ZXh0U1FM
RGF0YWJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9Xb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3FsZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAkocmV2aXNpb24g
MTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRh
YmFzZS5pZGw6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9X
b3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIFN1cHBsZW1lbnRhbD1Xb3Jr
ZXJDb250ZXh0CisgICAgXSBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UgeworICAgICAgICBbVjhF
bmFibGVkQXRSdW50aW1lXSBEYXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUs
IGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRGF0YWJhc2VD
YWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisKKyAgICAgICAgW1Y4RW5hYmxlZEF0UnVudGltZV0gRGF0YWJhc2VTeW5jIG9wZW5EYXRh
YmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01T
dHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gW0Nh
bGxiYWNrLCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1
bS9EYXRhYmFzZU9ic2VydmVyLmgJKHJldmlzaW9uIDEwOTg1OCkJKGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmg6MTA5ODU4KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YWJhc2VPYnNlcnZlcl9o
CisjZGVmaW5lIERhdGFiYXNlT2JzZXJ2ZXJfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKy8v
IFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGluIHRoZSBXZWJLaXQgQVBJIChD
aHJvbWl1bSBzb3VyY2UgdHJlZSkKKy8vIGluIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VP
YnNlcnZlci5jcHAuCitjbGFzcyBEYXRhYmFzZU9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyk7CisgICAgc3RhdGljIHZv
aWQgZGF0YWJhc2VPcGVuZWQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRh
dGFiYXNlTW9kaWZpZWQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lkIGRhdGFi
YXNlQ2xvc2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKKworICAgIHN0YXRpYyB2b2lkIHJlcG9ydE9w
ZW5EYXRhYmFzZVJlc3VsdChBYnN0cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2Vi
U3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZXBv
cnRDaGFuZ2VWZXJzaW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGlu
dCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRpYyB2b2lk
IHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGludCBjYWxs
c2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CisgICAgc3Rh
dGljIHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoQWJzdHJhY3REYXRhYmFzZSos
IGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7
CisgICAgc3RhdGljIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChBYnN0cmFjdERh
dGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJy
b3JDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChBYnN0
cmFjdERhdGFiYXNlKiwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Cit9OworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gRGF0YWJhc2VPYnNlcnZlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNl
VHJhY2tlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NxbGRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNp
b24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNl
VHJhY2tlckNocm9taXVtLmNwcDoxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nx
bGRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJB
YnN0cmFjdERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgorI2luY2x1
ZGUgIlF1b3RhVHJhY2tlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5
c3RlbS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitEYXRhYmFzZVRyYWNrZXImIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpCit7Cisg
ICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKERhdGFiYXNlVHJhY2tlciYsIHRyYWNrZXIg
PSAqbmV3IERhdGFiYXNlVHJhY2tlcigiIikpOworICAgIHJldHVybiB0cmFja2VyOworfQorCitE
YXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmKQoreworICAgIFNR
TGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7Cit9CisKK2Jvb2wgRGF0YWJhc2VU
cmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK3sKKyAgICByZXR1cm4gRGF0
YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworfQorCit2b2lkIERhdGFiYXNl
VHJhY2tlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZykKK3sKKyAgICAvLyBDaHJvbWl1bSBzZXRz
IHRoZSBkYXRhYmFzZSBkZXRhaWxzIHdoZW4gdGhlIGRhdGFiYXNlIGlzIG9wZW5lZAorfQorCitT
dHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCkKK3sKKyAgICByZXR1cm4gb3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIvIiArIG5hbWUgKyAiIyI7Cit9CisKK3ZvaWQgRGF0
YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2Up
Cit7CisgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3Bl
bkRhdGFiYXNlTWFwR3VhcmQpOworICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCisgICAgICAg
IG1fb3BlbkRhdGFiYXNlTWFwID0gYWRvcHRQdHIobmV3IERhdGFiYXNlT3JpZ2luTWFwKTsKKwor
ICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkt
PmRhdGFiYXNlSWRlbnRpZmllcigpOworICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1f
b3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRpZmllcik7CisgICAgaWYgKCFuYW1lTWFw
KSB7CisgICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwKCk7CisgICAgICAgIG1f
b3BlbkRhdGFiYXNlTWFwLT5zZXQob3JpZ2luSWRlbnRpZmllciwgbmFtZU1hcCk7CisgICAgfQor
CisgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CisgICAgRGF0
YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOworICAgIGlmICghZGF0
YWJhc2VTZXQpIHsKKyAgICAgICAgZGF0YWJhc2VTZXQgPSBuZXcgRGF0YWJhc2VTZXQoKTsKKyAg
ICAgICAgbmFtZU1hcC0+c2V0KG5hbWUsIGRhdGFiYXNlU2V0KTsKKyAgICB9CisKKyAgICBkYXRh
YmFzZVNldC0+YWRkKGRhdGFiYXNlKTsKKworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNl
T3BlbmVkKGRhdGFiYXNlKTsKK30KKworY2xhc3MgTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xv
c2VUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFz
ayhkYXRhYmFzZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgRGF0YWJhc2VPYnNl
cnZlcjo6ZGF0YWJhc2VDbG9zZWQobV9kYXRhYmFzZS5nZXQoKSk7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3Nl
VGFzayhQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgICAgICA6IG1f
ZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxBYnN0cmFjdERh
dGFiYXNlPiBtX2RhdGFiYXNlOworfTsKKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9w
ZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBTdHJpbmcgb3Jp
Z2luSWRlbnRpZmllciA9IGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50
aWZpZXIoKTsKKyAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFi
YXNlTWFwR3VhcmQpOworICAgIEFTU0VSVChtX29wZW5EYXRhYmFzZU1hcCk7CisgICAgRGF0YWJh
c2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChvcmlnaW5JZGVudGlm
aWVyKTsKKyAgICBpZiAoIW5hbWVNYXApCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBu
YW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgIERhdGFiYXNlU2V0KiBkYXRh
YmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKKyAgICBpZiAoIWRhdGFiYXNlU2V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZm91bmQgPSBkYXRhYmFz
ZVNldC0+ZmluZChkYXRhYmFzZSk7CisgICAgaWYgKGZvdW5kID09IGRhdGFiYXNlU2V0LT5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGF0YWJhc2VTZXQtPnJlbW92ZShmb3VuZCk7Cisg
ICAgaWYgKGRhdGFiYXNlU2V0LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmFtZU1hcC0+cmVtb3Zl
KG5hbWUpOworICAgICAgICBkZWxldGUgZGF0YWJhc2VTZXQ7CisgICAgICAgIGlmIChuYW1lTWFw
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLT5yZW1vdmUob3Jp
Z2luSWRlbnRpZmllcik7CisgICAgICAgICAgICBkZWxldGUgbmFtZU1hcDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpCisgICAgICAgIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPnBvc3RUYXNrKE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3JlYXRlKGRh
dGFiYXNlKSk7CisgICAgZWxzZQorICAgICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZUNs
b3NlZChkYXRhYmFzZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkK
K3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUgPSAwOworICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUgPSAwOworICAgIFF1b3RhVHJhY2tlcjo6aW5zdGFu
Y2UoKS5nZXREYXRhYmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKAorICAgICAgICBk
YXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCksCisgICAgICAg
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCksICZkYXRhYmFzZVNpemUsICZzcGFjZUF2YWls
YWJsZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlU2l6ZSArIHNwYWNlQXZhaWxhYmxlOworfQorCit2
b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25z
dCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIG9w
ZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisKKyAgICBpZiAoIW1f
b3BlbkRhdGFiYXNlTWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZU5hbWVNYXAq
IG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCktPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICBpZiAoIW5hbWVNYXApCisgICAgICAgIHJl
dHVybjsKKworICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5k
SXQgPSBuYW1lTWFwLT5lbmQoKTsKKyAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZGJOYW1lTWFwSXQgPSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5h
bWVNYXBFbmRJdDsgKytkYk5hbWVNYXBJdCkgeworICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJh
c2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOworICAgICAgICBmb3IgKERhdGFiYXNl
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgIGlmICgoKml0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
ID09IGNvbnRleHQpCisgICAgICAgICAgICAgICAgKCppdCktPmludGVycnVwdCgpOworICAgICAg
ICB9CisgICAgfQorfQorCitjbGFzcyBEYXRhYmFzZVRyYWNrZXI6OkNsb3NlT25lRGF0YWJhc2VJ
bW1lZGlhdGVseVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5
VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuYW1lLCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5VGFzayhvcmlnaW5JZGVu
dGlmaWVyLCBuYW1lLCBkYXRhYmFzZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5KG1f
b3JpZ2luSWRlbnRpZmllciwgbV9uYW1lLCBtX2RhdGFiYXNlKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQ2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5VGFzayhjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpCisgICAgICAgIDogbV9vcmlnaW5JZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIuaXNvbGF0
ZWRDb3B5KCkpCisgICAgICAgICwgbV9uYW1lKG5hbWUuaXNvbGF0ZWRDb3B5KCkpCisgICAgICAg
ICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIG1fb3Jp
Z2luSWRlbnRpZmllcjsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIEFic3RyYWN0RGF0YWJhc2Uq
IG1fZGF0YWJhc2U7ICAvLyBJbnRlbnRpb25hbGx5IGEgcmF3IHBvaW50ZXIuCit9OworCit2b2lk
IERhdGFiYXNlVHJhY2tlcjo6Y2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgIE11dGV4TG9ja2Vy
IG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgaWYgKCFt
X29wZW5EYXRhYmFzZU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VOYW1lTWFw
KiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChvcmlnaW5JZGVudGlmaWVyKTsKKyAg
ICBpZiAoIW5hbWVNYXApCisgICAgICAgIHJldHVybjsKKworICAgIERhdGFiYXNlU2V0KiBkYXRh
YmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKKyAgICBpZiAoIWRhdGFiYXNlU2V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBoYXZlIHRvIGNhbGwgY2xvc2VJbW1lZGlhdGVseSgp
IG9uIHRoZSBjb250ZXh0IHRocmVhZCBhbmQgd2UgY2Fubm90IHNhZmVseSBhZGQgYSByZWZlcmVu
Y2UgdG8KKyAgICAvLyB0aGUgZGF0YWJhc2UgaW4gb3VyIGNvbGxlY3Rpb24gd2hlbiBub3Qgb24g
dGhlIGNvbnRleHQgdGhyZWFkICh3aGljaCBpcyBhbHdheXMgdGhlIGNhc2UgZ2l2ZW4KKyAgICAv
LyBjdXJyZW50IHVzYWdlKS4KKyAgICBmb3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IGRh
dGFiYXNlU2V0LT5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZVNldC0+ZW5kKCk7ICsraXQpCisgICAg
ICAgICgqaXQpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKENsb3NlT25lRGF0
YWJhc2VJbW1lZGlhdGVseVRhc2s6OmNyZWF0ZShvcmlnaW5JZGVudGlmaWVyLCBuYW1lLCAqaXQp
KTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVs
eShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgQWJz
dHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgLy8gRmlyc3Qgd2UgaGF2ZSB0byBjb25m
aXJtIHRoZSAnZGF0YWJhc2UnIGlzIHN0aWxsIGluIG91ciBjb2xsZWN0aW9uLgorICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1
YXJkKTsKKyAgICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1h
cC0+Z2V0KG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICBpZiAoIW5hbWVNYXApCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1h
cC0+Z2V0KG5hbWUpOworICAgICAgICBpZiAoIWRhdGFiYXNlU2V0KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBmb3VuZCA9IGRhdGFiYXNlU2V0
LT5maW5kKGRhdGFiYXNlKTsKKyAgICAgICAgaWYgKGZvdW5kID09IGRhdGFiYXNlU2V0LT5lbmQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBbmQgd2UgaGF2ZSB0byBj
YWxsIGNsb3NlSW1tZWRpYXRlbHkoKSB3aXRob3V0IG91ciBjb2xsZWN0aW9uIGxvY2sgYmVpbmcg
aGVsZC4KKyAgICBkYXRhYmFzZS0+Y2xvc2VJbW1lZGlhdGVseSgpOworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cWxkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAko
cmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1
b3RhVHJhY2tlci5jcHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRh
YmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXVvdGFUcmFja2VyLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1F1
b3RhVHJhY2tlciYgUXVvdGFUcmFja2VyOjppbnN0YW5jZSgpCit7CisgICAgQXRvbWljYWxseUlu
aXRpYWxpemVkU3RhdGljKFF1b3RhVHJhY2tlciYsIHRyYWNrZXIgPSAqbmV3IFF1b3RhVHJhY2tl
cik7CisgICAgcmV0dXJuIHRyYWNrZXI7Cit9CisKK3ZvaWQgUXVvdGFUcmFja2VyOjpnZXREYXRh
YmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKAorICAgIGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsCisgICAgdW5zaWduZWQg
bG9uZyBsb25nKiBkYXRhYmFzZVNpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyogc3BhY2VBdmFpbGFi
bGUpCit7CisgICAgLy8gRXh0cmEgc2NvcGUgdG8gdW5sb2NrIHByaW9yIHRvIHBvdGVudGlhbGx5
IGNhbGxpbmcgUGxhdGZvcm1TdXBwb3J0LgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a0RhdGEobV9kYXRhR3VhcmQpOworICAgICAgICBBU1NFUlQobV9kYXRhYmFzZVNpemVzLmNvbnRh
aW5zKG9yaWdpbklkZW50aWZpZXIpKTsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5maW5kKG9yaWdpbklkZW50aWZp
ZXIpOworICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5jb250YWlucyhkYXRhYmFzZU5hbWUpKTsK
KyAgICAgICAgKmRhdGFiYXNlU2l6ZSA9IGl0LT5zZWNvbmQuZ2V0KGRhdGFiYXNlTmFtZSk7CisK
KyAgICAgICAgaWYgKG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRl
bnRpZmllcikpIHsKKyAgICAgICAgICAgICpzcGFjZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFi
bGVUb09yaWdpbnMuZ2V0KG9yaWdpbklkZW50aWZpZXIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIGVtYmVkZGVyIGhhc24ndCBwdXNoZWQgdGhp
cyB2YWx1ZSB0byB1cywgc28gd2UgcHVsbCBpdCBhcyBuZWVkZWQuCisgICAgKnNwYWNlQXZhaWxh
YmxlID0gUGxhdGZvcm1TdXBwb3J0OjpkYXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3JpZ2lu
KG9yaWdpbklkZW50aWZpZXIpOworfQorCit2b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJh
c2VTaXplKAorICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFNpemVNYXA+OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRl
bnRpZmllciwgU2l6ZU1hcCgpKS5maXJzdDsKKyAgICBpdC0+c2Vjb25kLnNldChkYXRhYmFzZU5h
bWUsIGRhdGFiYXNlU2l6ZSk7Cit9CisKK3ZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVTcGFjZUF2
YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQg
bG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1f
ZGF0YUd1YXJkKTsKKyAgICBtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLnNldChvcmlnaW5JZGVu
dGlmaWVyLCBzcGFjZUF2YWlsYWJsZSk7Cit9CisKK3ZvaWQgUXVvdGFUcmFja2VyOjpyZXNldFNw
YWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorewor
ICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKKyAgICBtX3NwYWNlQXZhaWxh
YmxlVG9PcmlnaW5zLnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3FsZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuaAkocmV2aXNpb24gMTA5ODU4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5oOjEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3FsZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUXVvdGFUcmFja2VyX2gKKyNkZWZpbmUgUXVvdGFUcmFj
a2VyX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUXVvdGFUcmFja2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUXVvdGFU
cmFja2VyJiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBnZXREYXRhYmFzZVNpemVBbmRTcGFjZUF2
YWlsYWJsZVRvT3JpZ2luKAorICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAorICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcq
IGRhdGFiYXNlU2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nKiBzcGFjZUF2YWlsYWJsZSk7CisgICAg
dm9pZCB1cGRhdGVEYXRhYmFzZVNpemUoCisgICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsCisgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBkYXRhYmFzZVNpemUpOworICAgIHZvaWQgdXBkYXRlU3BhY2VBdmFpbGFibGVUb09y
aWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBz
cGFjZUF2YWlsYWJsZSk7CisgICAgdm9pZCByZXNldFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBRdW90YVRyYWNr
ZXIoKSB7IH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkIGxvbmcgbG9u
Zz4gU2l6ZU1hcDsKKyAgICBTaXplTWFwIG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnM7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+IG1fZGF0YWJhc2VTaXplczsKKyAgICBNdXRleCBtX2Rh
dGFHdWFyZDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNl
bmRpZiAvLyBRdW90YVRyYWNrZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxk
YXRhYmFzZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NxbGRhdGFiYXNlL2Nocm9taXVtL1NRTFRy
YW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDk4NTgpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5j
cHA6MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcWxkYXRhYmFzZS9jaHJvbWl1
bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xp
ZW50LmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiQWJzdHJhY3RE
YXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTm90
aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZUNoYW5n
ZWRUYXNrPiBjcmVhdGUoQWJzdHJhY3REYXRhYmFzZSAqZGF0YWJhc2UpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2soZGF0YWJhc2Up
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopCisgICAgeworICAgICAgICBXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRh
YmFzZU1vZGlmaWVkKG1fZGF0YWJhc2UuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBO
b3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gZGF0
YWJhc2UpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICB7CisgICAgfQorCisg
ICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJhc2U7Cit9OworCit2b2lkIFNRTFRy
YW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJh
c2UqIGRhdGFiYXNlKQoreworICAgIGlmICghZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAgICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRl
KGRhdGFiYXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpEYXRh
YmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKGRhdGFiYXNlKTsKK30KKwordm9pZCBTUUxU
cmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgZXhlY3V0aW5n
IGV2ZXJ5IHN0YXRlbWVudCB0aGF0IGNoYW5nZXMgdGhlIERCLgorICAgIC8vIENocm9taXVtIGRv
ZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhdCB0aGF0IHBvaW50LgorfQorCitib29sIFNRTFRy
YW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFz
ZSkKK3sKKyAgICAvLyBDaHJvbWl1bSBkb2VzIG5vdCBhbGxvdyB1c2VycyB0byBtYW51YWxseSBj
aGFuZ2UgdGhlIHF1b3RhIGZvciBhbiBvcmlnaW4gKGZvciBub3csIGF0IGxlYXN0KS4KKyAgICAv
LyBEb24ndCBkbyBhbnl0aGluZy4KKyAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBA
QAogICAgICAgJy4uL01vZHVsZXMvaW50ZW50cycsCiAgICAgICAnLi4vTW9kdWxlcy9pbmRleGVk
ZGInLAogICAgICAgJy4uL01vZHVsZXMvbWVkaWFzdHJlYW0nLAorICAgICAgJy4uL01vZHVsZXMv
c3FsZGF0YWJhc2UnLAorICAgICAgJy4uL01vZHVsZXMvc3FsZGF0YWJhc2UvY2hyb21pdW0nLAog
ICAgICAgJy4uL01vZHVsZXMvd2Vic29ja2V0cycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eScs
CiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eS9jaHJvbWl1bScsCkBAIC05OTAsNiArOTkyLDcgQEAK
ICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAn
LS1pbmNsdWRlJywgJy4uL01vZHVsZXMvaW5kZXhlZGRiJywKICAgICAgICAgICAgICAgJy0taW5j
bHVkZScsICcuLi9Nb2R1bGVzL21lZGlhc3RyZWFtJywKKyAgICAgICAgICAgICAgJy0taW5jbHVk
ZScsICcuLi9Nb2R1bGVzL3NxbGRhdGFiYXNlJywKICAgICAgICAgICAgICAgJy0taW5jbHVkZScs
ICcuLi9jc3MnLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL2RvbScsCiAgICAgICAg
ICAgICAgICctLWluY2x1ZGUnLCAnLi4vZmlsZWFwaScsCkBAIC0xODQ0LDYgKzE4NDcsMTEgQEAK
IAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2VcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGxcXC5jcHAkJ10sCisgICAgICAgIFsnZXhjbHVkZScs
ICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlckNsaWVudFxcLmgkJ10sCisgICAg
ICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlclxcLmNw
cCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvc3FsZGF0YWJhc2UvT3JpZ2luUXVv
dGFNYW5hZ2VyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvc3Fs
ZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmRcXC4oY3BwfGgpJCddLAorICAgICAgICBbJ2V4Y2x1
ZGUnLCAnTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudFxcLmNwcCQnXSwK
ICAgICAgICAgWydleGNsdWRlJywgJ2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtXFwuY3BwJCddLAog
ICAgICAgICBbJ2V4Y2x1ZGUnLCAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWxcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdpbnNwZWN0b3IvSmF2YVNjcmlwdFte
L10qXFwuY3BwJCddLApAQCAtMTg2MCwxMSArMTg2OCw2IEBACiAgICAgICAgIFsnZXhjbHVkZScs
ICdwbHVnaW5zL1BsdWdpblN0cmVhbVxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3Bs
dWdpbnMvUGx1Z2luVmlld1xcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3BsdWdpbnMv
bnBhcGlcXC5jcHAkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNlVHJh
Y2tlckNsaWVudFxcLmgkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL0RhdGFiYXNl
VHJhY2tlclxcLmNwcCQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvT3JpZ2luUXVv
dGFNYW5hZ2VyXFwuKGNwcHxoKSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJ3N0b3JhZ2UvT3Jp
Z2luVXNhZ2VSZWNvcmRcXC4oY3BwfGgpJCddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNsaWVudFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3N0
b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlclxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRl
JywgJ3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZVxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRl
JywgJ3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnlcXC4oY3BwfGgpJCddLApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDI5NCw2ICsyNDI5NCwyMTggQEAKIAkJCQk8L0Zp
bGU+CiAJCQk8L0ZpbHRlcj4KIAkJCTxGaWx0ZXIKKwkJCQlOYW1lPSJzcWxkYXRhYmFzZSIKKwkJ
CQk+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNl
XEFic3RyYWN0RGF0YWJhc2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxBYnN0cmFjdERhdGFiYXNl
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXHNxbGRhdGFiYXNlXENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3Fs
ZGF0YWJhc2VcQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcRGF0YWJh
c2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxEYXRhYmFzZS5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxE
YXRhYmFzZUF1dGhvcml6ZXIuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxEYXRhYmFzZUF1dGhvcml6
ZXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcRGF0YWJhc2VDYWxsYmFjay5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRh
YmFzZVxEYXRhYmFzZUNvbnRleHQuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxEYXRhYmFzZUNvbnRl
eHQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcRGF0YWJhc2VTeW5jLmNwcCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJh
c2VcRGF0YWJhc2VTeW5jLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXERhdGFiYXNlVGFzay5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXHNxbGRhdGFiYXNlXERhdGFiYXNlVGFzay5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxEYXRhYmFz
ZVRocmVhZC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXERhdGFiYXNlVGhyZWFkLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNx
bGRhdGFiYXNlXERhdGFiYXNlVHJhY2tlci5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXERhdGFiYXNl
VHJhY2tlci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1
bGVzXHNxbGRhdGFiYXNlXERPTVdpbmRvd1NRTERhdGFiYXNlLmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNl
XE9yaWdpblF1b3RhTWFuYWdlci5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXE9yaWdpblF1b3RhTWFu
YWdlci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxPcmlnaW5Vc2FnZVJlY29yZC5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNx
bGRhdGFiYXNlXE9yaWdpblVzYWdlUmVjb3JkLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXFNRTENhbGxi
YWNrV3JhcHBlci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxTUUxFcnJvci5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRh
YmFzZVxTUUxFeGNlcHRpb24uY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxTUUxFeGNlcHRpb24uaCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcc3FsZGF0YWJhc2VcU1FMUmVzdWx0U2V0LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcU1FM
UmVzdWx0U2V0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xzcWxkYXRhYmFzZVxTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNl
XFNRTFN0YXRlbWVudC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXFNRTFN0YXRlbWVudC5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxl
c1xzcWxkYXRhYmFzZVxTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXFNRTFN0YXRlbWVu
dFN5bmMuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxTUUxTdGF0ZW1lbnRTeW5jLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNx
bGRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcU1FMVHJhbnNh
Y3Rpb24uaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxl
c1xzcWxkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNl
XFNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxNb2R1bGVzXHNxbGRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xzcWxkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN5bmMuY3BwIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xzcWxkYXRhYmFz
ZVxTUUxUcmFuc2FjdGlvblN5bmMuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcV29ya2VyQ29udGV4dFNRTERhdGFiYXNl
LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcc3FsZGF0YWJhc2VcV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgiCisJCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTwvRmlsdGVyPgorCQkJPEZpbHRlcgogCQkJCU5hbWU9IndlYnNv
Y2tldHMiCiAJCQkJPgogCQkJCTxGaWxlCkBAIC03MDg0MiwyMjIgKzcxMDU0LDYgQEAKIAkJCU5h
bWU9InN0b3JhZ2UiCiAJCQk+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxBYnN0cmFjdERhdGFiYXNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxBYnN0cmFjdERhdGFiYXNlLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcQ2hhbmdlVmVy
c2lvbldyYXBwZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXENoYW5nZVZlcnNpb25XcmFwcGVyLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2UuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXERhdGFiYXNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VBdXRob3JpemVyLmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFzZUF1dGhv
cml6ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxEYXRhYmFzZUNhbGxiYWNrLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VDb250ZXh0LmNwcCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxE
YXRhYmFzZUNvbnRleHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFzZVN5bmMuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXERhdGFiYXNlU3luYy5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdl
XERhdGFiYXNlVGFzay5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VUYXNrLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VUaHJlYWQuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXERhdGFiYXNlVGhyZWFkLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VUcmFja2VyLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFzZVRy
YWNrZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRE9NV2luZG93U1FMRGF0YWJh
c2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxTdG9yYWdlVGFzay5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRhc2suaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlVGhyZWFk
LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxTdG9yYWdlVGhyZWFkLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxPcmln
aW5RdW90YU1hbmFnZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxPcmlnaW5Vc2FnZVJlY29yZC5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcT3JpZ2luVXNhZ2VS
ZWNvcmQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTUUxDYWxsYmFja1dyYXBwZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxFcnJvci5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTEV4Y2Vw
dGlvbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcU1FMRXhjZXB0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMUmVzdWx0U2V0LmNwcCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxSZXN1
bHRTZXQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxSZXN1bHRTZXRSb3dMaXN0
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU1FMU3RhdGVtZW50LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1lbnQuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1lbnRD
YWxsYmFjay5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1lbnRT
eW5jLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTUUxTdGF0ZW1lbnRTeW5jLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb24uY3BwIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNR
TFRyYW5zYWN0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0
aW9uQ2xpZW50LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3RvcmFnZVxTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxUcmFuc2FjdGlvblN5bmMuY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRy
YW5zYWN0aW9uU3luYy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFn
ZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNzExNTgsMTkgKzcxMTU0LDIzIEBACiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3Rv
cmFnZVRyYWNrZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRhc2su
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dG9yYWdlXFN0b3JhZ2VUYXNrLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcVmVyc2lvbkNoYW5nZUNhbGxiYWNrLmgiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUaHJlYWQuY3BwIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFdvcmtlckNvbnRleHRT
UUxEYXRhYmFzZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUaHJl
YWQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVy
PgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3By
b3BzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVD
b21tb24udnNwcm9wcwkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzCSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcs
NyBAQAogCT4KIAk8VG9vbAogCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQlBZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3REaXIpLi4mcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXE1vZHVsZXNcZ2VvbG9jYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXE1vZHVsZXNcaW5kZXhlZGRiJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxNb2R1bGVz
XHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHkmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHlcd2luJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxicmlkZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZVxj
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcanNjJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxjc3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGVkaXRpbmcmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGZpbGVhcGkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHJlbmRlcmluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXG1hdGhtbCZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN0eWxlJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxi
aW5kaW5ncyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcZ2VuZXJpYyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGJpbmRpbmdzXGpzXHNwZWNpYWxpemF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxkb20mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxo
dG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5caHRtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0
bWxcc2hhZG93JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNwZWN0b3ImcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9h
ZGVyXGFwcGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZSZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVcY2YmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGxvYWRlclxjYWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
bG9hZGVyXGljb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG1hdGhtbCZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxhbmltYXRpb24mcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcc2Nyb2xsaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwYWdlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGxhdGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cc3FsJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3Jh
cGhpY3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFybSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVn
aW5zXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxzdmdccHJvcGVydGllcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBo
aWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cdGVzdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlx3ZWJzb2NrZXRzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7
OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1
cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVk
ZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGly
KVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNs
dWRlXHNxbGl0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxKYXZh
U2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVx6bGli
JnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3RE
aXIpLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcZ2VvbG9jYXRpb24mcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcaW5kZXhlZGRiJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxNb2R1bGVzXHNxbGRhdGFiYXNlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxNb2R1bGVzXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vz
c2liaWxpdHkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHlcd2luJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGJyaWRnZVxjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcanNjJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxjc3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGVk
aXRpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGZpbGVhcGkmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHJlbmRlcmluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVy
aW5nXG1hdGhtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nXHN0eWxlJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3ZnJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxiaW5kaW5ncyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3Nc
Z2VuZXJpYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanMmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGpzXHNwZWNpYWxpemF0aW9uJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxkb20mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZh
dWx0JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxodG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxwYXJzZXImcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXGh0bWxcc2hhZG93JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNwZWN0
b3ImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cbG9hZGVyXGFwcGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2Fk
ZXJcYXJjaGl2ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVcY2Ym
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxjYWNoZSZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cbG9hZGVyXGljb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG1hdGht
bCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxhbmlt
YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcc2Nyb2xsaW5nJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwYWdlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm0mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5ccGxhdGZvcm1cc3FsJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0
Zm9ybVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdy
YXBoaWNzXGNhJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0
ZXJzXGFybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3Bl
bnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5z
Zm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbFxwYXJzZXImcXVvdDs7
JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2Vz
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1h
dGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxzdmdccHJvcGVydGllcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2ZyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cdGVzdGluZyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cd21sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlx3ZWJzb2NrZXRzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3
b3JrZXJzJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7
OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1
b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7
JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0
Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7
JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmll
c0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFy
aWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rpcilc
aW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rpcilc
aW5jbHVkZVx6bGliJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19XSU4zMl9f
O0RJU0FCTEVfM0RfUkVOREVSSU5HO1dFQkNPUkVfQ09OVEVYVF9NRU5VUyIKIAkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjIiCiAJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0iV2ViQ29yZVByZWZp
eC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdI
ZWFkZXJzLmNtZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9j
b3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw2ICsyMCw3IEBAIG1rZGlyIDI+TlVMICIlQ09ORklHVVJBVElPTkJVSUxERElS
JVxpbmMKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxjb25maWcuaCIgIiVDT05GSUdVUkFU
SU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlQ09ORklHVVJBVElP
TkJVSUxERElSJVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1wqLmgiICIlQ09ORklHVVJBVElP
TkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5c
TW9kdWxlc1xnZW9sb2NhdGlvblwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRl
XFdlYkNvcmUiCit4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cTW9kdWxlc1xzcWxkYXRhYmFz
ZVwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAv
eSAvZCAiJVByb2plY3REaXIlLi5cTW9kdWxlc1x3ZWJzb2NrZXRzXCouaCIgIiVDT05GSUdVUkFU
SU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUu
LlxhY2Nlc3NpYmlsaXR5XCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxhY2Nlc3NpYmlsaXR5XHdpblwqLmgi
ICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1MiwxMSArNDUyLDYgQEAKIAkJMUE3NjJDNzgwQTA3
NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MDBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aE5TUmVzb2x2ZXIuaCAqLzsgfTsKIAkJMUE3NjJDNzkwQTA3NEYyNjAwOTg5RjVCIC8qIEpT
WFBhdGhSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE3NjJDNzEwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuY3BwICovOyB9
OwogCQkxQTc2MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNzIwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCAqLzsgfTsKLQkJMUE3Q0NCMTkwQ0Q5NDY5QTAwQjdC
NjRFIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdDQ0IxNTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkxQTdDQ0IxQTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3
Q0NCMTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTdDQ0IxQjBD
RDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3Q0NCMTcwQ0Q5NDY5QTAwQjdCNjRF
IC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTdDQ0IxQzBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTdDQ0IxODBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMUE3Q0NCMjQwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdDQ0IyMjBDRDk0
NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTdGQTYxOTBEREEzQjNBMDAyOEY4QTUgLyogTmV0
d29ya1N0YXRlTm90aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBN0ZBNjE4MEREQTNCM0EwMDI4RjhBNSAvKiBOZXR3b3JrU3RhdGVOb3RpZmll
ci5oICovOyB9OwogCQkxQTdGQTYxQjBEREEzQkJFMDAyOEY4QTUgLyogTmV0d29ya1N0YXRlTm90
aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE3RkE2MUEwRERBM0JCRTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCAqLzsg
fTsKIAkJMUE3RkE2NDkwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFj
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBN0ZB
NjQ3MEREQTNDQkEwMDI4RjhBNSAvKiBOZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAgKi87IH07
CkBAIC01MzUsNyArNTMwLDYgQEAKIAkJMUFCQTc2QzkxMUQyMEU0NzAwNEMyMDFDIC8qIENvbG9y
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDA2RjNGQjExOTgzMDdEMDA5RDU5RDYgLyogQ29sb3JEYXRhLmNwcCAqLzsgfTsKIAkJMUFCQTc2
Q0ExMUQyMEU1MDAwNEMyMDFDIC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQxRUEwMzgxMTk4MzZEQjAwNzEwQkM1
IC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwICovOyB9OwogCQkxQUJBNzZDQjExRDIwRTU3MDA0QzIw
MUMgLyogQ1NTVmFsdWVLZXl3b3Jkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDFFQTAzOTExOTgzNzQ5MDA3MTBCQzUgLyogQ1NTVmFsdWVLZXl3
b3Jkcy5jcHAgKi87IH07Ci0JCTFBQkZFNzUzMENEOTY4RDAwMEZFNDgzNCAvKiBTUUxUcmFuc2Fj
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUJGRTc1MjBDRDk2OEQwMDBGRTQ4MzQgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovOyB9OwogCQkx
QUMyMjYwQzBEQjY5RjE5MDA4OUI2NjkgLyogSlNET01BcHBsaWNhdGlvbkNhY2hlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQzIyNjBBMERCNjlG
MTkwMDg5QjY2OSAvKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwICovOyB9OwogCQkxQUMyMjYw
RDBEQjY5RjE5MDA4OUI2NjkgLyogSlNET01BcHBsaWNhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUMyMjYwQjBEQjY5RjE5MDA4OUI2
NjkgLyogSlNET01BcHBsaWNhdGlvbkNhY2hlLmggKi87IH07CiAJCTFBQ0QxQjYzMEIwMjk3Mzkw
MDdFNTAxNiAvKiBET01DU1NTdHlsZURlY2xhcmF0aW9uSW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ0
MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01DU1NTdHlsZURlY2xhcmF0aW9uSW50ZXJuYWwuaCAqLzsg
fTsKQEAgLTU0OCw4ICs1NDIsNiBAQAogCQkxQUNFNTNGNjBBOEQxOTQ3MDAyMjk0N0QgLyogSlNY
TUxTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQ0U1M0Y0MEE4RDE5NDcwMDIyOTQ3RCAvKiBKU1hNTFNlcmlhbGl6ZXIuY3BwICov
OyB9OwogCQkxQUNFNTNGNzBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUNFNTNGNTBBOEQx
OTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmggKi87IH07CiAJCTFBRDIzMTZFMENEMjY5
RTcwMEMxRjE5NCAvKiBKU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRDIzMTZEMENEMjY5RTcwMEMxRjE5NCAv
KiBKU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKLQkJMUFENTFBMTQwQ0I1OUNEMzAw
OTUzRDExIC8qIERhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFENTFBMTIwQ0I1OUNEMzAwOTUzRDExIC8qIERhdGFiYXNlVHJh
Y2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTFBRDUxQTE1MENCNTlDRDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFENTFBMTMwQ0I1OUNEMzAw
OTUzRDExIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CiAJCTFBRDhGODFCMTFDQUI5RTkw
MEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRDhGODE5MTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9y
bVN0cmF0ZWdpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxQUQ4RjgxQzExQ0FCOUU5MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRDhGODFB
MTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwICovOyB9OwogCQkxQURB
MTQxMDBFMUFFNUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQURBMTQwRTBFMUFF
NUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAgKi87IH07CkBAIC02
MDgsOCArNjAwLDYgQEAKIAkJMUFGOEUxMUExMjU2NTkyNjAwMjMwRkY3IC8qIFByb3h5U2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUY4RTEx
OTEyNTY1OTI2MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUY4RTEzMzEyNTY1QTQ0MDAyMzBGRjcgLyog
UHJveHlTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFGOEUxMzIxMjU2NUE0NDAwMjMwRkY3IC8qIFByb3h5U2VydmVyLmNwcCAqLzsgfTsK
IAkJMUFGOEUxQzMxMjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGOEUxQzExMjU2NzNF
MDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3BwICovOyB9OwotCQkxQUZFMTE3RDBDQkZG
QjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE3QjBDQkZGQjM2MDAzMDE3RkEgLyog
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgKi87IH07Ci0JCTFBRkUxMTdFMENCRkZCMzYwMDMwMTdG
QSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE3QzBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0
Um93TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTFBRkUxMTk5MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExOTcw
Q0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgKi87IH07CiAJCTFB
RkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTk4MENCRkZDQzQw
MDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuaCAqLzsgfTsKIAkJMUMxMUNDQjUwQUE2
MDkzNzAwREFEQjIwIC8qIERPTU5vdGF0aW9uLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUNBOTZFODBBOTYyNEU5MDA2OTBD
Q0YgLyogRE9NTm90YXRpb24uaCAqLzsgfTsKQEAgLTY3OCw3ICs2NjgsNiBAQAogCQkyMjkyQjI3
QzEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVG
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLzsgfTsKIAkJMjJCRDlGN0YxMzUzNjI1QzAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0
YS5oICovOyB9OwogCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5
RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyB9OwotCQkyNDVE
ODBBMzEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNDVEODBBMjEzMjgwRTQwMDAzNDky
QTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggKi87IH07CiAJCTI0QUE1NjhEMTNDQzk0Q0UwMEU5
MDJGNiAvKiBET01TVkdBbHRHbHlwaEl0ZW1FbGVtZW50SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMkEz
MTNDQTk3N0QwMEQyMTkxNSAvKiBET01TVkdBbHRHbHlwaEl0ZW1FbGVtZW50SW50ZXJuYWwuaCAq
LzsgfTsKIAkJMjRBQTU2OEUxM0NDOTUwOTAwRTkwMkY2IC8qIERPTVNWR0FsdEdseXBoSXRlbUVs
ZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI0RDkxMkExMTNDQTk3N0QwMEQyMTkxNSAvKiBET01TVkdBbHRHbHlwaEl0
ZW1FbGVtZW50LmggKi87IH07CiAJCTI0QUE1NjkwMTNDQzk1MkYwMEU5MDJGNiAvKiBET01TVkdB
bHRHbHlwaERlZkVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjlCMTNDQTk3NUEwMEQyMTkxNSAvKiBET01T
VkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTE0NTksNyArMTQ0OCw2IEBACiAJCTUx
MEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1
RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCAqLzsgfTsKIAkJNTEwRDRB
MzcxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTMxMTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmggKi87IH07CiAJCTUxMEQ0QTM4MTAzMTY1
RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLzsgfTsKLQkJNTExNkQ5NzcwQ0YxNzdCRDAw
QzJCODREIC8qIERhdGFiYXNlRGV0YWlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExNkQ5NzUwQ0YxNzdCRDAwQzJCODREIC8qIERhdGFiYXNlRGV0
YWlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxMUYyMzE3MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGFzay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGMjMxMzBEQzE2MERBMDA0RjAw
MzIgLyogU3RvcmFnZVRhc2suY3BwICovOyB9OwogCQk1MTFGMjMxODBEQzE2MERBMDA0RjAwMzIg
LyogU3RvcmFnZVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMUYyMzE0MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGFzay5oICovOyB9Owog
CQk1MTFGMjMxOTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGMjMxNTBEQzE2MERBMDA0
RjAwMzIgLyogU3RvcmFnZVRocmVhZC5jcHAgKi87IH07CkBAIC0xNDgwLDggKzE0NjgsNiBAQAog
CQk1MTMyN0Q2MTExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMzI3RDVGMTFBMzNBMkIwMDRG
OUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwICovOyB9OwogCQk1MTNGMTQ1MzBBQjYzNEM0MDAwOTRE
REYgLyogSWNvbkxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTNGMTQ1MTBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxvYWRlci5jcHAgKi87
IH07CiAJCTUxM0YxNDU0MEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTNGMTQ1MjBBQjYzNEM0MDAw
OTREREYgLyogSWNvbkxvYWRlci5oICovOyB9OwotCQk1MTQxODVFRTBDRDY1RjA0MDA3NjNDOTkg
LyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNDE4NUVDMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9u
V3JhcHBlci5oICovOyB9OwotCQk1MTQxODVFRjBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVy
c2lvbldyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0MTg1RUQwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cCAqLzsgfTsKIAkJNTE0QjNGNzMwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEIzRjcyMEM3MjIw
NDcwMDA1MzBERiAvKiBGaWxlU3lzdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0QjNGNzYwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0
ZW1NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRCM0Y3NTBDNzIyMDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSAqLzsgfTsKIAkJNTE0
Qzc2MzcwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2MzUwQ0U5MjI1RTAwN0VGM0NEIC8q
IEpTU1FMRXJyb3IuY3BwICovOyB9OwpAQCAtMTUxMiw4ICsxNDk4LDYgQEAKIAkJNTE0Qzc2N0Uw
Q0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY5MENFOTIzQTEwMDdFRjND
RCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgKi87IH07CiAJCTUxNEM3NjdGMENFOTIzQTEw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291
cmNlUmVzcG9uc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTE1Nzg4QzExMjA3ODUyQzAwQTM3QzRBIC8qIFZpc2l0ZWRMaW5rU3RyYXRl
Z3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTc4
OEMwMTIwNzg1MkMwMEEzN0M0QSAvKiBWaXNpdGVkTGlua1N0cmF0ZWd5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE1QjAzOTkwQ0QxNjQyQTAw
QjdFQTlDIC8qIFNRTFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE1QjAzOTcwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxNUIw
MzlBMENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QjAzOTgwQ0QxNjQyQTAwQjdFQTlDIC8q
IFNRTFN0YXRlbWVudC5jcHAgKi87IH07CiAJCTUxNjAzMDBCMENDNDI1MTIwMEM4QUMyNSAvKiBG
aWxlU3lzdGVtUE9TSVguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE2MDMwMEEwQ0M0MjUxMjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAg
Ki87IH07CiAJCTUxNjAzMDZDMENDNDM2MjMwMEM4QUMyNSAvKiBGaWxlU3lzdGVtQ0YuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MDMwNkIwQ0M0
MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgKi87IH07CiAJCTUxNjBGNDk4MEIwQUE3
NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBGNDk3MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5
SXRlbU1hYy5tbSAqLzsgfTsKQEAgLTE1MzAsMjMgKzE1MTQsOSBAQAogCQk1MTg5RjAxRTEwQjM3
QkQ5MDBGM0M3MzkgLyogSlNQb3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg5RjAxQzEwQjM3QkQ5MDBGM0M3MzkgLyogSlNQb3BT
dGF0ZUV2ZW50LmggKi87IH07CiAJCTUxODlGMERFMTBCNDZCMEUwMEYzQzczOSAvKiBQb3BTdGF0
ZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxODlGMEREMTBCNDZCMEUwMEYzQzczOSAvKiBQb3BTdGF0ZUV2ZW50LmNwcCAqLzsgfTsKIAkJ
NTE4QTM0QzkxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM2MTAyNkM4Qzkw
MDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgKi87IH07Ci0JCTUxOTYxMTZBMENBQzU2
NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTE1RTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuY3Bw
ICovOyB9OwotCQk1MTk2MTE2QjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTVGMENBQzU2NTcw
MDEwQTgwQyAvKiBEYXRhYmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTUxOTYxMTZEMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk2
MTE2MTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2VUaHJlYWQuY3BwICovOyB9OwotCQk1MTk2
MTE3MzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTY3MENBQzU2NTcwMDEwQTgwQyAv
KiBTUUxSZXN1bHRTZXQuY3BwICovOyB9OwotCQk1MTk2MTE3NDBDQUM1NjU3MDAxMEE4MEMgLyog
U1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTk2MTE2ODBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE5NjExNzgwQ0FDNTZB
ODAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTE2MjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2VU
aHJlYWQuaCAqLzsgfTsKLQkJNTE5NjExRUEwQ0FDNzQ5QzAwMTBBODBDIC8qIERhdGFiYXNlVGFz
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjEx
RTgwQ0FDNzQ5QzAwMTBBODBDIC8qIERhdGFiYXNlVGFzay5oICovOyB9OwotCQk1MTk2MTFFQjBD
QUM3NDlDMDAxMEE4MEMgLyogRGF0YWJhc2VUYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMUU5MENBQzc0OUMwMDEwQTgwQyAvKiBEYXRh
YmFzZVRhc2suY3BwICovOyB9OwogCQk1MUEwNTIzMzEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVu
dGlhbFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQTA1MjMxMTA1ODc3NEYwMENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQTA1MjM0MTA1
ODc3NEYwMENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUEwNTIzMjEwNTg3NzRGMDBDQzlFOTUgLyog
Q3JlZGVudGlhbFN0b3JhZ2UuY3BwICovOyB9OwogCQk1MUEwNTI1NjEwNTg4NzQwMDBDQzlFOTUg
LyogUHJvdGVjdGlvblNwYWNlSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFBMDUyNTUxMDU4ODc0MDAwQ0M5RTk1IC8qIFByb3RlY3Rpb25TcGFj
ZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQk1MUE0NUI1NjBDQUQ3RkQ3MDAwRDJCRTkgLyogRGF0YWJhc2VBdXRob3JpemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE0NUI1NDBDQUQ3RkQ3
MDAwRDJCRTkgLyogRGF0YWJhc2VBdXRob3JpemVyLmggKi87IH07Ci0JCTUxQTQ1QjU3MENBRDdG
RDcwMDBEMkJFOSAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNDVCNTUwQ0FEN0ZENzAwMEQyQkU5IC8qIERh
dGFiYXNlQXV0aG9yaXplci5jcHAgKi87IH07Ci0JCTUxQTkyNjdDMEQ1M0YwNTcwMDYzRUNDMiAv
KiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFBOTI2NzgwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFu
YWdlci5jcHAgKi87IH07Ci0JCTUxQTkyNjdEMEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5RdW90
YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxQTkyNjc5MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLzsgfTsK
LQkJNTFBOTI2N0UwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3JkLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTkyNjdBMEQ1M0Yw
NTcwMDYzRUNDMiAvKiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAgKi87IH07Ci0JCTUxQTkyNjdGMEQ1
M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5Vc2FnZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOTI2N0IwRDUzRjA1NzAwNjNFQ0MyIC8qIE9y
aWdpblVzYWdlUmVjb3JkLmggKi87IH07CiAJCTUxQUEzRjZGMEJENUFBOUUwMDg5Mjk3MSAvKiBS
ZXNvdXJjZUxvYWRlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQUEzRjZFMEJENUFBOUUwMDg5Mjk3MSAvKiBSZXNvdXJjZUxvYWRlck1hYy5t
bSAqLzsgfTsKIAkJNTFBQkFFMUIxMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCQUUx
QTEwM0MxOEZGMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCAqLzsgfTsKIAkJNTFBQkFF
MUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovOyB9OwpAQCAtMTU3Nyw5ICsxNTQ3LDcgQEAKIAkJ
NTFFMUVDQzMwQzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTFFQ0JEMEM5MUM5MDQwMERDMjU1
QiAvKiBQYWdlVVJMUmVjb3JkLmggKi87IH07CiAJCTUxRTNGOUM3MERBMDU5REMwMDI1MDkxMSAv
KiBTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTNGOUM1MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLzsgfTsKIAkJNTFF
M0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUzRjlENDBEQTA1RTFEMDAyNTA5MTEgLyog
SlNTdG9yYWdlLmNwcCAqLzsgfTsKLQkJNTFFQzkyNTkwQ0U5MERCNDAwRjkwMzA4IC8qIFNRTEVy
cm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVD
OTI1NzBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyog
SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAvKiBK
U0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovOyB9OwotCQk1MUZBRkUzNDBD
RUNCRjJEMDBCQjNGMjQgLyogRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZBRkUzMzBDRUNCRjJEMDBCQjNGMjQg
LyogRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGQjU1MDQxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
QjU1MDIxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oICovOyB9OwogCQk1MUZCNTUw
NTExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3NiAvKiBK
U0Nsb3NlRXZlbnQuY3BwICovOyB9OwogCQk1MjFENDZGNjExQUVDOTgxMDA1MTQ2MTMgLyogS2ls
bFJpbmdNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MjFENDZGNTExQUVDOTgxMDA1MTQ2MTMgLyogS2lsbFJpbmdNYWMubW0gKi87IH07CkBAIC0z
Mzg5LDggKzMzNTcsNiBAQAogCQk5NzIwNUFCODEyMzkyOTEwMDBCMTczODAgLyogTWVkaWFEb2N1
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcy
MDVBQjQxMjM5MjkxMDAwQjE3MzgwIC8qIE1lZGlhRG9jdW1lbnQuaCAqLzsgfTsKIAkJOTcyMDVB
QkIxMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MjA1QUI5MTIzOTI5MjcwMEIxNzM4MCAv
KiBQbHVnaW5Eb2N1bWVudC5jcHAgKi87IH07CiAJCTk3MjA1QUJDMTIzOTI5MjcwMEIxNzM4MCAv
KiBQbHVnaW5Eb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcyMDVBQkExMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3VtZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTcyNDU4NTIx
NEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzI0NTg1MDE0RkI3MjQ4MDBDQTg3NDYgLyog
RGF0YWJhc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJOTcyNDU4NTMxNEZCNzI0ODAwQ0E4NzQ2IC8q
IERhdGFiYXNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcyNDU4NTExNEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3MjhDMzEz
MTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1bXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzI4QzMxMTEyNjhFNDM5MDA0MUU4OUIg
LyogTWFya3VwQWNjdW11bGF0b3IuY3BwICovOyB9OwogCQk5NzI4QzMxNDEyNjhFNDM5MDA0MUU4
OUIgLyogTWFya3VwQWNjdW11bGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MjhDMzEyMTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1bXVs
YXRvci5oICovOyB9OwogCQk5NzM4ODlBMDExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcz
ODg5OUUxMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3JpdGVyLmNwcCAqLzsgfTsKQEAgLTM0
OTUsNyArMzQ2MSw2IEBACiAJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzdFMkUw
QzEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oICovOyB9OwogCQk5NzhBRDY3NDE0MTMw
QThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEFENjcxMTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1M
U3BhbkVsZW1lbnQuY3BwICovOyB9OwogCQk5NzhBRDY3NTE0MTMwQThEMDBDN0NBRTMgLyogSFRN
TFNwYW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzhBRDY3MjE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmggKi87IH07
Ci0JCTk3OEQwN0I0MTQ1QTBFQ0QwMDk2OTA4RCAvKiBTUUxFeGNlcHRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4RDA3QjMxNDVBMEVDRDAw
OTY5MDhEIC8qIFNRTEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCTk3OEQwN0I2MTQ1QTBGMDMwMDk2
OTA4RCAvKiBGaWxlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3OEQwN0I1MTQ1QTBGMDMwMDk2OTA4RCAvKiBGaWxlRXhjZXB0aW9u
LmNwcCAqLzsgfTsKIAkJOTc4RDA3QjgxNDVBMEYxQjAwOTY5MDhEIC8qIE9wZXJhdGlvbk5vdEFs
bG93ZWRFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTc4RDA3QjcxNDVBMEYxQjAwOTY5MDhEIC8qIE9wZXJhdGlvbk5vdEFsbG93ZWRF
eGNlcHRpb24uY3BwICovOyB9OwogCQk5NzhEMDdCQTE0NUEwRjNDMDA5NjkwOEQgLyogUmFuZ2VF
eGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTc4RDA3QjkxNDVBMEYzQzAwOTY5MDhEIC8qIFJhbmdlRXhjZXB0aW9uLmNwcCAqLzsgfTsK
QEAgLTM1MzQsNiArMzQ5OSw2MCBAQAogCQk5N0FBQkQyRDE0RkEwOUQ1MDA3NDU3QUUgLyogV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QUFCRDEyMTRGQTA5RDUwMDc0NTdBRSAvKiBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovOyB9OwogCQk5N0IxRjAyRTEzQjAyNUNBMDBG
NTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1NjlFMDAxM0FGMTcyQzAwQ0RCQThFIC8qIFNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyLmNwcCAqLzsgfTsKIAkJOTdCMUYwMkYxM0IwMjVEMjAwRjUx
MDNGIC8qIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzU2OUUwMjEzQUYxNzJDMDBDREJBOEUgLyogU2hhcmVk
QnVmZmVyQ2h1bmtSZWFkZXIuaCAqLzsgfTsKKwkJOTdCQzY5REExNTA1RjA3NjAwMUI3NEFDIC8q
IEFic3RyYWN0RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTdCQzY5RDYxNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2Uu
Y3BwICovOyB9OworCQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5
RDcxNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCAqLzsgfTsKKwkJOTdCQzY5
REMxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUQ4MTUwNUYwNzYwMDFC
NzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi87IH07CisJCTk3QkM2OUREMTUwNUYw
NzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDkxNTA1RjA3NjAwMUI3NEFDIC8qIENo
YW5nZVZlcnNpb25XcmFwcGVyLmggKi87IH07CisJCTk3QkM2QTIwMTUwNUYwODEwMDFCNzRBQyAv
KiBEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5N0JDNjlERTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwICovOyB9OworCQk5
N0JDNkEyMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OURGMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZS5oICovOyB9OworCQk5N0JDNkEyMzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VB
dXRob3JpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3QkM2OUUxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwICov
OyB9OworCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFMjE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmggKi87IH07CisJCTk3QkM2QTI1
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFMzE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VDYWxsYmFjay5oICovOyB9OworCQk5N0JDNkEyNzE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3QkM2OUU1MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuY3Bw
ICovOyB9OworCQk5N0JDNkEyODE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFNjE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0LmggKi87IH07CisJCTk3QkM2QTI5MTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZURldGFpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUU3MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZURldGFpbHMuaCAqLzsgfTsKKwkJOTdCQzZBMkExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFi
YXNlU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0JDNjlFODE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmNwcCAqLzsgfTsKKwkJ
OTdCQzZBMkIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RTkxNTA1RjA4MTAwMUI3NEFD
IC8qIERhdGFiYXNlU3luYy5oICovOyB9OworCQk5N0JDNkEyRDE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VUYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3QkM2OUVCMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suY3BwICovOyB9
OworCQk5N0JDNkEyRTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFQzE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2VUYXNrLmggKi87IH07CisJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5N0JDNjlFRDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQu
Y3BwICovOyB9OworCQk5N0JDNkEzMDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUVF
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5oICovOyB9OworCQk5N0JDNkEzMTE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUVGMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZVRyYWNrZXIuY3BwICovOyB9OworCQk5N0JDNkEzMjE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5N0JDNjlGMDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmggKi87
IH07CisJCTk3QkM2QTMzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUYx
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsKKwkJOTdC
QzZBMzQxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUYyMTUwNUYwODEw
MDFCNzRBQyAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAgKi87IH07CisJCTk3QkM2QTM1MTUw
NUYwODEwMDFCNzRBQyAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RjMxNTA1RjA4MTAwMUI3NEFDIC8q
IERPTVdpbmRvd1NRTERhdGFiYXNlLmggKi87IH07CisJCTk3QkM2QTM3MTUwNUYwODEwMDFCNzRB
QyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RjUxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblF1b3Rh
TWFuYWdlci5jcHAgKi87IH07CisJCTk3QkM2QTM4MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5R
dW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3QkM2OUY2MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLzsg
fTsKKwkJOTdCQzZBMzkxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblVzYWdlUmVjb3JkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUY3MTUw
NUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAgKi87IH07CisJCTk3QkM2QTNB
MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RjgxNTA1RjA4MTAwMUI3NEFDIC8q
IE9yaWdpblVzYWdlUmVjb3JkLmggKi87IH07CisJCTk3QkM2QTNCMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxDYWxsYmFja1dyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3QkM2OUY5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxDYWxsYmFja1dyYXBw
ZXIuaCAqLzsgfTsKKwkJOTdCQzZBM0MxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEVycm9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlGQTE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMRXJyb3IuaCAqLzsgfTsKKwkJOTdCQzZBM0UxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5N0JDNjlGQzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmNw
cCAqLzsgfTsKKwkJOTdCQzZBM0YxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RkQxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5oICovOyB9OworCQk5N0JDNkE0MTE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUZGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRT
ZXQuY3BwICovOyB9OworCQk5N0JDNkE0MjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEw
MDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmggKi87IH07CisJCTk3QkM2QTQ0MTUw
NUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTAyMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAqLzsgfTsKKwkJOTdCQzZBNDUxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTAzMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmggKi87IH07CisJCTk3QkM2QTQ3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTdCQzZBMDUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5jcHAgKi87IH07CisJCTk3
QkM2QTQ4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTA2MTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJOTdCQzZBNDkxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5N0JDNkEwNzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50Q2FsbGJh
Y2suaCAqLzsgfTsKKwkJOTdCQzZBNEIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3QkM2QTA5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmggKi87IH07CisJCTk3QkM2QTREMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5j
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2
QTBCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLzsgfTsKKwkJOTdC
QzZBNEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTBDMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi87IH07CisJCTk3QkM2QTRGMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5N0JDNkEwRDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24u
Y3BwICovOyB9OworCQk5N0JDNkE1MDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTBF
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5oICovOyB9OworCQk5N0JDNkE1MjE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTAxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCAqLzsgfTsKKwkJOTdCQzZBNTQxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTEyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxU
cmFuc2FjdGlvbkNsaWVudC5jcHAgKi87IH07CisJCTk3QkM2QTU1MTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTdCQzZBMTMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9u
Q2xpZW50LmggKi87IH07CisJCTk3QkM2QTU2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3QkM2QTE0MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcCAqLzsgfTsKKwkJOTdCQzZBNTcxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3QkM2QTE1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggKi87IH07CisJCTk3QkM2QTU4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3QkM2QTE2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2suaCAqLzsgfTsKKwkJOTdCQzZBNUExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5z
YWN0aW9uU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5N0JDNkExODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCAq
LzsgfTsKKwkJOTdCQzZBNUIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTkx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oICovOyB9OworCQk5N0JDNkE1
RDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTFCMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovOyB9OworCQk5N0JDNkE1
RjE1MDVGMDgxMDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTFEMTUwNUYwODEw
MDFCNzRBQyAvKiBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwICovOyB9OworCQk5N0JDNkE2
MDE1MDVGMDgxMDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExRTE1MDVGMDgxMDAx
Qjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmggKi87IH07CiAJCTk3QkM4NDgzMTIz
NkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzg0ODExMjM2RkQ5MzAwMEM2MTYxIC8q
IFRleHREb2N1bWVudFBhcnNlci5jcHAgKi87IH07CiAJCTk3QkM4NDg0MTIzNkZEOTMwMDBDNjE2
MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3QkM4NDgyMTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQ
YXJzZXIuaCAqLzsgfTsKIAkJOTdCQzg0OUIxMjM3MEE0QjAwMEM2MTYxIC8qIEhUTUxJbnB1dFN0
cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdC
Qzg0OUExMjM3MEE0QjAwMEM2MTYxIC8qIEhUTUxJbnB1dFN0cmVhbS5oICovOyB9OwpAQCAtMzU1
Miw4ICszNTcxLDYgQEAKIAkJOTdFNDAyOTAxM0E2OTZFRDAwOTEzRDY3IC8qIEljb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0U0
MDI4RTEzQTY5NkVEMDA5MTNENjcgLyogSWNvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5N0U0QTEyNjE0RjRDNUQ0MDA4NzBF
NDMgLyogTmF2aWdhdG9yUmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MzBCRTE1MTRFRjI4NkIwMERGMDZCOSAv
KiBOYXZpZ2F0b3JSZWdpc3RlclByb3RvY29sSGFuZGxlci5oICovOyB9OwogCQk5N0U0QTEyNzE0
RjRDNUQ3MDA4NzBFNDMgLyogTmF2aWdhdG9yUmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczMEJFMTQxNEVG
Mjg2QjAwREYwNkI5IC8qIE5hdmlnYXRvclJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyLmNwcCAqLzsg
fTsKLQkJOTdFNkMxM0QxNTA1ODczRjAwNkZDOTQzIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0U2
QzEzQTE1MDU4NzNGMDA2RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCAqLzsg
fTsKLQkJOTdFNkMxM0UxNTA1ODczRjAwNkZDOTQzIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFNkMx
M0IxNTA1ODczRjAwNkZDOTQzIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oICovOyB9Owog
CQk5N0VGN0RGRTEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFRjdERkQxMDdF
NTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLzsgfTsKIAkJOTg0MjY0
RjExMkQ1MjgwQTAwMEQ4OEE0IC8qIExpbmtMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4NDI2NEVGMTJENTI4MEEwMDBEODhBNCAv
KiBMaW5rTG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTk4NUJCOTZEMTNBOTQwNTgwMDdBMEI2OSAv
KiBMaW5rUmVsQXR0cmlidXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk4NUJCOTZCMTNBOTQwNTgwMDdBMEI2OSAvKiBMaW5rUmVsQXR0cmlidXRl
LmNwcCAqLzsgfTsKQEAgLTQyMTksOCArNDIzNiw2IEBACiAJCUE4RUE4MDBDMEExOTUxNkUwMEE4
RUY1RiAvKiBTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEVBODAwNDBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4RUE4MDBEMEEx
OTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE4MDA1MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNo
ZWV0LmNwcCAqLzsgfTsKIAkJQThFQTgwMEUwQTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTgwMDYw
QTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE4RjQ1N0EwMTRCQzFBODgwMDBDRUE1OSAvKiBET01X
aW5kb3dTUUxEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEY0NTc5RDE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJh
c2UuY3BwICovOyB9OwotCQlBOEY0NTdBMTE0QkMxQTk0MDAwQ0VBNTkgLyogRE9NV2luZG93U1FM
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4RjQ1NzlFMTRCQzEzRUMwMDBDRUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5oICovOyB9
OwogCQlBOEY0NkE4NDBDQjIwQTlEMDAzQTk2NzAgLyogRE9NU1ZHQ2xpcFBhdGhFbGVtZW50Lmgg
aW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NTAzNjEyQzBBQ0UwMDdCMDAxRjNEOUUgLyogRE9NU1ZHQ2xpcFBhdGhFbGVtZW50Lmgg
Ki87IH07CiAJCUE4RjQ2QTg4MENCMjBBOUQwMDNBOTY3MCAvKiBET01TVkdHcmFkaWVudEVsZW1l
bnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1QzlBMkVDMEFEN0U5MDMwMEZCRkYxRSAvKiBET01TVkdHcmFkaWVudEVsZW1l
bnQuaCAqLzsgfTsKIAkJQThGNDZBODkwQ0IyMEE5RDAwM0E5NjcwIC8qIERPTVNWR0FuaW1hdGVD
b2xvckVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDM2MTI4MEFDRTAwN0IwMDFGM0Q5RSAvKiBET01TVkdBbmlt
YXRlQ29sb3JFbGVtZW50LmggKi87IH07CkBAIC01MDQwLDIzICs1MDU1LDEzIEBACiAJCUIyRkEz
RTE4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0QzMDBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdab29tRXZlbnQuY3BwICovOyB9OwogCQlCMkZBM0UxOTBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdab29tRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyRkEzRDMxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5oICov
OyB9OwogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTBGNUI4MDBF
OTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0gKi87IHNldHRpbmdzID0ge0NP
TVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiOyB9OyB9OwotCQlC
NTFCRjZGMDEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUxQkY2RUUxMDJDOUU1
OTAwMDJDMTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCAqLzsgfTsKLQkJQjUxQkY2RjEx
MDJDOUU1OTAwMDJDMTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTFCRjZFRjEwMkM5RTU5MDAwMkMxNUEg
LyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCAqLzsgfTsKLQkJQjUyM0NGMDYxMTgyNjc1NDAwRUJC
MjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTIzQ0VGRjExODI2NzU0MDBFQkIyOUMgLyogU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsKLQkJQjUyM0NGMDgxMTgyNjc1NDAwRUJC
MjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjUyM0NGMDExMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0
aW9uU3luYy5oICovOyB9OwotCQlCNTIzQ0YwOTExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNh
Y3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1MjNDRjAyMTE4MjY3NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICov
OyB9OwotCQlCNTIzQ0YwQTExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAzMTE4MjY3
NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuY3BwICovOyB9OwotCQlCNTIzQ0YwQjExODI2NzU0
MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCNTIzQ0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5j
LmggKi87IH07CiAJCUI1MjVBOTY1MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjMx
MUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggKi87IH07CiAJCUI1MjVBOTY2MTFD
QTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNT
UUxFeGNlcHRpb24uY3BwICovOyB9OwogCQlCNTMyMEQ2QjEyMkEyNEU5MDAyRDE0NDAgLyogRm9u
dFBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjUzMjBENjkxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNTMyMEQ2QzEy
MkEyNEU5MDAyRDE0NDAgLyogRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUzMjBENkExMjJBMjRFOTAwMkQxNDQw
IC8qIEZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSAqLzsgfTsKLQkJQjU1MEI1MjUxMURDNjhBODAw
OTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRl
bWVudFN5bmMuY3BwICovOyB9OwotCQlCNTUwQjUyNjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3Rh
dGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjU1MEI1MjIxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLzsgfTsK
IAkJQjU1RDVBQTQxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUQ1
QUEyMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi87
IH07CiAJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
LmNwcCAqLzsgfTsKIAkJQjU1RDVBQTkxMTkxMzI1MDAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rp
b25TeW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1NUQ1QUE3MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1
c3RvbS5jcHAgKi87IH07Ci0JCUI1NkVCQTg1MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NkVC
QTgzMTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjU4Q0VCNjkx
MTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNThDRUI2NzExOTEzNjA3MDAyQTY3OTAgLyogSlNE
YXRhYmFzZVN5bmMuaCAqLzsgfTsKIAkJQjU4Q0VCNkExMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0
YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1OENFQjY4MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgKi87IH07
CiAJCUI1OENFQjZEMTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4Q0VCNkIxMTkx
MzYxQzAwMkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggKi87IH07CkBAIC01MDczLDEz
ICs1MDc4LDggQEAKIAkJQjU5REQ2QUExMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNTlERDZBODExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcCAqLzsgfTsKIAkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZp
bGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi87IH07CiAJ
CUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4NDIzMEZGQUJFQUEw
MEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLzsgfTsKLQkJQjVCNURDNjkxMTlCQjNE
NTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVCNURDNjcxMTlCQjNENTAwMkE4NzkwIC8qIEFic3Ry
YWN0RGF0YWJhc2UuY3BwICovOyB9OwotCQlCNUI1REM2QTExOUJCM0Q1MDAyQTg3OTAgLyogQWJz
dHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjVCNURDNjgxMTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCNUMxMTIzQjEw
MkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07Ci0JCUI1QzExMjND
MTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCNUQzMURGQTEx
Q0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8q
IEFjdGl2ZURPTUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJQjVEMzFERkIxMUNGNjEwQjAwOUYyMkI0
IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJh
Y2suaCAqLzsgfTsKLQkJQjVEMzYwMUExMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDM2
MDE5MTEyRjhCNTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi87IH07CiAJCUI2NTY2
MjcwMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2RTEyMEIxMjI3MDA2RUE4NUMg
LyogSlNJREJUcmFuc2FjdGlvbi5oICovOyB9OwogCQlCNjU2NjI3MTEyMEIxMjI3MDA2RUE4NUMg
LyogSlNJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNjU2NjI2RjEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlv
bi5jcHAgKi87IH07CiAJCUI3MUZFNkRGMTEwOTFDQjMwMERBRUY3NyAvKiBQcmludENvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NzZENDNB
MTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzI1MCwxMiArNzI1MCw2IEBACiAJCTFBNzYy
QzcwMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUE3NjJDNzEwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFBhdGhSZXN1bHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTc2MkM3MjBBMDc0RjI2MDA5ODlG
NUIgLyogSlNYUGF0aFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNYUGF0aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTdDQ0IxNTBD
RDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1FMU3RhdGVtZW50Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUE3Q0NCMTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTdDQ0Ix
NzBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBN0NDQjE4MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBN0NDQjIyMENEOTQ2RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTdDQ0IyMzBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rp
b24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3RkE2MTgwRERBM0IzQTAwMjhGOEE1IC8qIE5ldHdv
cmtTdGF0ZU5vdGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdv
cmtTdGF0ZU5vdGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBN0ZBNjFB
MEREQTNCQkUwMDI4RjhBNSAvKiBOZXR3b3JrU3RhdGVOb3RpZmllci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrU3RhdGVOb3RpZmllci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBN0ZBNjQ3MEREQTNDQkEwMDI4RjhBNSAvKiBOZXR3
b3JrU3RhdGVOb3RpZmllck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBOZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzQ0LDcgKzczMzgsNiBAQAogCQkxQUI3RkM2NTBBOEI5MkVDMDBEOUQzN0IgLyog
WFBhdGhWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUI3RkM2NjBBOEI5MkVDMDBEOUQz
N0IgLyogWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBQjdGQzY3MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhcmlhYmxl
UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0aFZhcmlh
YmxlUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQkZFNzUyMENE
OTY4RDAwMEZFNDgzNCAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBQzIyNjBBMERCNjlGMTkwMDg5QjY2OSAvKiBKU0RPTUFwcGxpY2F0aW9uQ2Fj
aGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01BcHBsaWNh
dGlvbkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFDMjI2MEIwREI2
OUYxOTAwODlCNjY5IC8qIEpTRE9NQXBwbGljYXRpb25DYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFDRTUzREQwQThEMTg4MTAwMjI5NDdEIC8qIEpTRE9NUGFyc2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBhcnNlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzU4LDggKzczNTEsNiBAQAogCQkxQUNF
NTNGNDBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hNTFNlcmlhbGl6ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUNFNTNGNTBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJp
YWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hNTFNlcmlhbGl6
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFEMjMxNkQwQ0QyNjlFNzAwQzFG
MTk0IC8qIEpTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBRDUxQTEyMENCNTlDRDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VUcmFja2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRDUxQTEzMENCNTlDRDMwMDk1M0QxMSAv
KiBEYXRhYmFzZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGF0YWJhc2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFE
OEY4MTkxMUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVN0cmF0ZWdpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFEOEY4MUExMUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQURBMTQwRTBF
MUFFNUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0MzgsOSArNzQyOSw2IEBACiAJCTFB
RjhFMTE5MTI1NjU5MjYwMDIzMEZGNyAvKiBQcm94eVNlcnZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQcm94eVNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQUY4RTEzMjEyNTY1QTQ0MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUY4RTFDMTEyNTY3M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2
ZXJDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVNl
cnZlckNGTmV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFGRTExN0IwQ0JG
RkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBRkUxMTdDMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFJlc3VsdFNl
dFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFGRTExOEMwQ0JGRkM0
RTAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUZFMTE5NzBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRkUxMTk4MENCRkZDQzQwMDMw
MTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNTUUxSZXN1bHRTZXRSb3dMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDMjY0OTc5MEQ3RTI0OEEwMEJEMTBGMiAvKiBEb2N1bWVudExvYWRlck1hYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRlck1hYy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDk1LDcgKzc0ODMsNiBAQAogCQky
MkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5
IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
YXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjQ1RDgwQTIx
MzI4MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTUUxDYWxsYmFja1dyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEy
OTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkzMTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoSXRlbUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTgzNzYsNyArODM2Myw2IEBACiAJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxl
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTMyMTAzMTY1RUUw
MDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUxMTZEOTc1MENGMTc3QkQwMEMyQjg0RCAvKiBEYXRhYmFzZURldGFp
bHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VEZXRhaWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzEzMERDMTYwREEwMDRGMDAzMiAv
KiBTdG9yYWdlVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dG9yYWdlVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzE0MERD
MTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdG9yYWdlVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFG
MjMxNTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTgzOTcsOCArODM4Myw2IEBACiAJCTUxMzI3RDVGMTFBMzNBMkIwMDRG
OUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2lua0RvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEz
RjE0NTEwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEljb25Mb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTNGMTQ1MjBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxvYWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvbkxvYWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MTQxODVFQzBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0MTg1RUQwQ0Q2NUYw
NDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN5c3RlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCM0Y3NTBDNzIyMDU1MDAwNTMwREYgLyogRmlsZVN5
c3RlbU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbGVT
eXN0ZW1NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEM3NjM1MENFOTIy
NUUwMDdFRjNDRCAvKiBKU1NRTEVycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU1FMRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
ODQyOSw4ICs4NDEzLDYgQEAKIAkJNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNl
UmVzcG9uc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c291cmNlUmVzcG9uc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0
Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNTc4OEMwMTIwNzg1MkMwMEEzN0M0QSAvKiBWaXNpdGVk
TGlua1N0cmF0ZWd5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0ZWRM
aW5rU3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE1QjAzOTcwQ0Qx
NjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTUUxTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE1
QjAzOTgwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxTdGF0ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTYwMzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lY
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0ZW1QT1NJ
WC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjAzMDZCMENDNDM2MjMwMEM4
QUMyNSAvKiBGaWxlU3lzdGVtQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRmlsZVN5c3RlbUNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
MEY0OTcwQjBBQTc1RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gSGlzdG9yeUl0ZW1NYWMubW07IHBhdGggPSBtYWMv
SGlzdG9yeUl0ZW1NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDQ4LDI3
ICs4NDMwLDExIEBACiAJCTUxODlGMDFDMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQb3BTdGF0ZUV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODlGMEREMTBCNDZCMEUwMEYzQzczOSAv
KiBQb3BTdGF0ZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBvcFN0YXRlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThBMzRD
NjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJTb2NrZXRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTk2MTE1RTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTk2MTE1RjBDQUM1NjU3MDAxMEE4MEMgLyog
RGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5NjExNjAwQ0FDNTY1NzAwMTBBODBDIC8q
IERhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhYmFzZS5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMTYxMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRh
YmFzZVRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRh
YmFzZVRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMTYyMENB
QzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhYmFzZVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTk2MTE2NzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFJlc3VsdFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMTY4MENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMUmVzdWx0U2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMTY5MENBQzU2NTcwMDEwQTgwQyAvKiBT
UUxSZXN1bHRTZXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNRTFJlc3VsdFNldC5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMUU4MENBQzc0OUMwMDEwQTgwQyAv
KiBEYXRhYmFzZVRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJh
c2VUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMUU5MENBQzc0OUMw
MDEwQTgwQyAvKiBEYXRhYmFzZVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGF0YWJhc2VUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE5RkUwQTEwREFENDQ2RTAwQTA4RjIxIC8qIEhUTUxBdHRyaWJ1dGVOYW1lcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBIVE1MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxOUZFMEEyMERBRDQ0NkUwMEEwOEYyMSAvKiBIVE1MVGFnTmFtZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUEwNTIzMTEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0b3Jh
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlhbFN0b3JhZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBMDUyMzIxMDU4Nzc0RjAwQ0M5RTk1
IC8qIENyZWRlbnRpYWxTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENyZWRlbnRpYWxTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFBMDUyNTUxMDU4ODc0MDAwQ0M5RTk1IC8qIFByb3RlY3Rpb25TcGFjZUhhc2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdGVjdGlvblNwYWNlSGFzaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUE0NUI1NDBDQUQ3RkQ3MDAwRDJCRTkgLyogRGF0
YWJhc2VBdXRob3JpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFi
YXNlQXV0aG9yaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUE0NUI1NTBD
QUQ3RkQ3MDAwRDJCRTkgLyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlQXV0aG9yaXplci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxQTkyNjc4MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5RdW90
YU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3JpZ2lu
UXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBOTI2Nzkw
RDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPcmlnaW5RdW90YU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTFBOTI2N0EwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3Jk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9yaWdpblVzYWdlUmVj
b3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBOTI2N0IwRDUzRjA1NzAw
NjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE9yaWdpblVzYWdlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQUEzRjZFMEJENUFBOUUwMDg5Mjk3MSAvKiBSZXNvdXJjZUxvYWRlck1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlTG9hZGVyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCQUUxQTEwM0MxOEZGMDA4QzUyNjAgLyog
U29ja2V0U3RyZWFtRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29j
a2V0U3RyZWFtRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUMx
MDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTg1MDMsMTIgKzg0NjksOSBAQAogCQk1MUUzRjlEMTBEQTA1RDcxMDAyNTA5
MTEgLyogU3RvcmFnZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU3RvcmFnZS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTNGOUQ0MERBMDVFMUQwMDI1MDkxMSAvKiBK
U1N0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdG9y
YWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFM0Y5RDUwREEwNUUxRDAw
MjUwOTExIC8qIEpTU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1N0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFFQzkyNTcwQ0U5MERC
NDAwRjkwMzA4IC8qIFNRTEVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNRTEVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRUM5MjU4MENFOTBE
QjQwMEY5MDMwOCAvKiBTUUxFcnJvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMRXJy
b3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUVDOTI1RDBDRTkwREQ0MDBG
OTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjZBM0Q1MDY2M0JGMDQw
MDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQ2FudmFzRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1
MUY2QTNENjA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZhc0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENhbnZhc0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07Ci0JCTUxRkFGRTMzMENFQ0JGMkQwMEJCM0YyNCAvKiBEYXRhYmFzZVRyYWNrZXJDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VUcmFja2VyQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI1NTAyMTEzRTNFOTEwMDgyMTE3
NiAvKiBKU0Nsb3NlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
bG9zZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI1NTAzMTEzRTNF
OTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDbG9zZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTIxRDQ2RjUxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS2lsbFJpbmdNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDMxOCw4ICsxMDI4MSw2IEBACiAJCTk3MjA1QUI0MTIzOTI5
MTAwMEIxNzM4MCAvKiBNZWRpYURvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcy
MDVBQjkxMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkRvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTcyMDVBQkExMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3Vt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkRvY3VtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MjQ1ODUwMTRGQjcyNDgwMENBODc0NiAv
KiBEYXRhYmFzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGF0YWJhc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcy
NDU4NTExNEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTcyOEMzMTExMjY4RTQzOTAwNDFFODlCIC8qIE1hcmt1cEFjY3VtdWxhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmt1cEFjY3VtdWxh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcyOEMzMTIxMjY4RTQzOTAw
NDFFODlCIC8qIE1hcmt1cEFjY3VtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcmt1cEFjY3VtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MzBCRTE0MTRFRjI4NkIwMERGMDZCOSAvKiBOYXZpZ2F0b3JSZWdpc3RlclByb3RvY29sSGFu
ZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0b3JS
ZWdpc3RlclByb3RvY29sSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMDQzOCw3ICsxMDM5OSw2IEBACiAJCTk3OEFENjcxMTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1M
U3BhbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRN
TFNwYW5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc4QUQ2NzIx
NDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIVE1MU3BhbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTc4QUQ2NzMxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTFNwYW5FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTc4RDA3QjMxNDVBMEVDRDAwOTY5MDhEIC8qIFNRTEV4Y2VwdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhEMDdCNTE0NUEwRjAzMDA5NjkwOEQg
LyogRmlsZUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGaWxlRXhjZXB0aW9uLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZUV4Y2VwdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3OEQwN0I3MTQ1QTBGMUIwMDk2OTA4RCAvKiBP
cGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE9wZXJhdGlvbk5vdEFsbG93ZWRFeGNlcHRpb24uY3BwOyBwYXRoID0gZmls
ZWFwaS9PcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTc4RDA3QjkxNDVBMEYzQzAwOTY5MDhEIC8qIFJhbmdlRXhjZXB0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhbmdlRXhjZXB0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDc4LDYgKzEwNDM4LDc2IEBACiAJ
CTk3QUFCRDEwMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZS5oOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QUFCRDExMTRGQTA5RDUwMDc0
NTdBRSAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0FBQkQxMjE0RkEw
OUQ1MDA3NDU3QUUgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwuaDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlENjE1MDVGMDc2
MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBYnN0cmFjdERhdGFiYXNlLmNwcDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0
YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3QkM2OUQ3MTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFic3RyYWN0RGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVs
ZXMvc3FsZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5N0JDNjlEODE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2hhbmdlVmVyc2lvbldy
YXBwZXIuY3BwOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUQ5MTUwNUYwNzYwMDFC
NzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFz
ZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
N0JDNjlERTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2UuY3BwOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRh
YmFzZS9EYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OURG
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBEYXRhYmFzZS5oOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlFMDE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERhdGFiYXNlLmlkbDsgcGF0
aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5N0JDNjlFMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERhdGFiYXNlQXV0aG9y
aXplci5jcHA7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUUyMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRGF0YWJhc2VBdXRob3JpemVyLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFi
YXNlQXV0aG9yaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlFMzE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUNhbGxiYWNrLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFi
YXNlL0RhdGFiYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdC
QzY5RTQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IERhdGFiYXNlQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRh
YmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTdCQzY5RTUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29udGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZUNvbnRleHQuY3BwOyBwYXRoID0g
TW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5N0JDNjlFNjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlQ29udGV4dC5oOyBw
YXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RTcxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlRGV0
YWlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZURldGFpbHMu
aDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VEZXRhaWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUU4MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2VT
eW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RTkxNTA1RjA4MTAwMUI3NEFDIC8qIERh
dGFiYXNlU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZVN5
bmMuaDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUVBMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZVN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERhdGFiYXNlU3luYy5pZGw7IHBhdGgg
PSBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3QkM2OUVCMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2VUYXNrLmNwcDsg
cGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RUMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGFz
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZVRhc2suaDsgcGF0
aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3QkM2OUVEMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZVRocmVhZC5j
cHA7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RUUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFi
YXNlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlVGhy
ZWFkLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUVGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0
YWJhc2VUcmFja2VyLmNwcDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RjAxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBEYXRhYmFzZVRyYWNrZXIuaDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUYxMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg7IHBhdGggPSBNb2R1bGVzL3Nx
bGRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5N0JDNjlGMjE1MDVGMDgxMDAxQjc0QUMgLyogRE9NV2luZG93U1FMRGF0YWJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRE9NV2luZG93U1FMRGF0
YWJhc2UuY3BwOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUYzMTUwNUYwODEwMDFC
NzRBQyAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBET01XaW5kb3dTUUxEYXRhYmFzZS5oOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFz
ZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
N0JDNjlGNDE1MDVGMDgxMDAxQjc0QUMgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IERPTVdpbmRvd1NRTERhdGFiYXNlLmlkbDsgcGF0aCA9IE1vZHVs
ZXMvc3FsZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5N0JDNjlGNTE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFNYW5h
Z2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9yaWdpblF1b3Rh
TWFuYWdlci5jcHA7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUY2MTUwNUYwODEwMDFC
NzRBQyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gT3JpZ2luUXVvdGFNYW5hZ2VyLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL09y
aWdpblF1b3RhTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlG
NzE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOyBwYXRoID0gTW9k
dWxlcy9zcWxkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3QkM2OUY4MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29y
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPcmlnaW5Vc2FnZVJlY29yZC5o
OyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlGOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMQ2Fs
bGJhY2tXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTENhbGxi
YWNrV3JhcHBlci5oOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RkExNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTEVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTEVy
cm9yLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTEVycm9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUZCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFcnJvci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU1FMRXJyb3IuaWRsOyBwYXRoID0gTW9kdWxlcy9z
cWxkYXRhYmFzZS9TUUxFcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
QkM2OUZDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMRXhjZXB0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTdCQzY5RkQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxFeGNlcHRpb24uaDsgcGF0aCA9IE1vZHVsZXMvc3Fs
ZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
QkM2OUZFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFeGNlcHRpb24uaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFNRTEV4Y2VwdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TEV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUZGMTUw
NUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gU1FMUmVzdWx0U2V0LmNwcDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJh
c2UvU1FMUmVzdWx0U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZB
MDAxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTUUxSZXN1bHRTZXQuaDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2Uv
U1FMUmVzdWx0U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTAxMTUw
NUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IFNRTFJlc3VsdFNldC5pZGw7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFJlc3VsdFNl
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTAyMTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwOyBwYXRoID0gTW9kdWxlcy9zcWxk
YXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTdCQzZBMDMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBw
YXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTA0MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1
bHRTZXRSb3dMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxSZXN1bHRTZXRSb3dM
aXN0LmlkbDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTA1MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxTdGF0ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gU1FMU3RhdGVtZW50LmNwcDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMDYxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTUUxTdGF0ZW1lbnQuaDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTA3MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9T
UUxTdGF0ZW1lbnRDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JD
NkEwODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IFNRTFN0YXRlbWVudENhbGxiYWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMv
c3FsZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5N0JDNkEwOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMEExNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMEIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVu
dFN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMU3RhdGVt
ZW50U3luYy5jcHA7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkEwQzE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMU3RhdGVtZW50U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTUUxTdGF0ZW1lbnRTeW5jLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFN0YXRl
bWVudFN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMEQxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JD
NkEwRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb24uaDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdC
QzZBMEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZB
MTAxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOyBwYXRoID0g
TW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTExMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTEyMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHA7IHBhdGggPSBNb2R1bGVz
L3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTdCQzZBMTMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQ2xp
ZW50Lmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTE0MTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOyBwYXRoID0gTW9kdWxl
cy9zcWxkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2
QTE2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
Lmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkExNzE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy9zcWxk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5N0JDNkExODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25T
eW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0
aW9uU3luYy5jcHA7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3lu
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTE5MTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU1FMVHJhbnNhY3Rpb25TeW5jLmg7IHBhdGggPSBNb2R1bGVzL3NxbGRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkEx
QTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN5bmMuaWRsOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5N0JDNkExQjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMUMxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGw7IHBhdGggPSBNb2R1bGVzL3Nx
bGRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMUQxNTA1RjA4MTAwMUI3NEFDIC8qIFdvcmtlckNvbnRleHRT
UUxEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwOyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9Xb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
N0JDNkExRTE1MDVGMDgxMDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5o
OyBwYXRoID0gTW9kdWxlcy9zcWxkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMUYxNTA1RjA4MTAwMUI3NEFDIC8q
IFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV29y
a2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbDsgcGF0aCA9IE1vZHVsZXMvc3FsZGF0YWJhc2UvV29y
a2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTdCQzg0ODExMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZXh0RG9jdW1lbnRQYXJzZXIuY3BwOyBw
YXRoID0gcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3QkM4NDgyMTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGV4dERvY3VtZW50UGFyc2VyLmg7
IHBhdGggPSBwYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3QkM4NDlBMTIzNzBBNEIwMDBDNjE2MSAvKiBIVE1MSW5wdXRTdHJlYW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSFRNTElucHV0U3RyZWFtLmg7IHBhdGgg
PSBwYXJzZXIvSFRNTElucHV0U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMDQ5NSw5ICsxMDUyNSw2IEBACiAJCTk3RENFMjAwMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0
b3J5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaXN0b3J5
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0U0MDI4RDEzQTY5
NkVEMDA5MTNENjcgLyogSWNvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSWNvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5N0U0MDI4RTEzQTY5NkVEMDA5MTNENjcgLyogSWNvbkNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvbkNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTdFNkMxM0ExNTA1ODczRjAwNkZDOTQzIC8qIFdvcmtlckNv
bnRleHRTUUxEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5N0U2QzEzQjE1MDU4NzNGMDA2RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlckNvbnRleHRTUUxEYXRh
YmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5N0U2QzEzQzE1MDU4NzNGMDA2
RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q29udHJvbGxl
ckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5ODQyNjRFRjEyRDUyODBB
MDAwRDg4QTQgLyogTGlua0xvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMaW5rTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk4NUJCOTZCMTNBOTQwNTgwMDdBMEI2OSAvKiBMaW5rUmVsQXR0cmlidXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtSZWxBdHRyaWJ1dGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTExNzQsOSArMTEyMDEsNiBAQAogCQlBOEVBODAw
NDBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEVBODAwNTBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4RUE4MDA2MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhTGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBOEY0NTc5RDE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FM
RGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2lu
ZG93U1FMRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEY0NTc5
RTE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93U1FMRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQThGNDU3OUYxNEJDMTNFQzAwMENFQTU5IC8qIERPTVdpbmRvd1NR
TERhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01XaW5kb3dTUUxEYXRhYmFz
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdHRl
cm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGQTZFNUMwRTRDRkRFRDAwRDVD
RjQ5IC8qIFBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUxMEQ3NDVF
MDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRE9NTWltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTIwMzEsMzYgKzEyMDU1LDE3IEBACiAJCUIyRkEzRDMwMEFCNzVBNkYwMDBFNUFDNCAvKiBK
U1NWR1pvb21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTVkdab29tRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkZBM0Qz
MTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdab29tRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUI1MEY1QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVPYmpDRXh0cmFz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTFCRjZFRTEwMkM5RTU5MDAwMkMx
NUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCNTFCRjZFRjEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25DbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjUyM0NFRkYxMTgyNjc1NDAwRUJC
MjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUI1MjNDRjAxMTE4MjY3NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlv
blN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25T
eW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1MjNDRjAyMTE4MjY3NTQwMEVC
QjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjUyM0NGMDMxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZVN5bmMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTIzQ0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0
YWJhc2VTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlU3lu
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTI1QTk2MzExQ0EyMzQwMDAzQTIz
QTggLyogSlNTUUxFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTUUxFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjUyNUE5NjQx
MUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjUzMjBENjkxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFBsYXRmb3JtRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTMyMEQ2QTEyMkEyNEU5MDAyRDE0NDAgLyog
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCNTUwQjUyMTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5jLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjU1MEI1MjIxMURDNjhBODAwOTIzODg1
IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1FMU3RhdGVtZW50U3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFB
MjExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMx
NSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFBNzExOTEzMjUwMDBCQ0MzMTUgLyogSlNT
UUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCNTVENUFCQjExOTEzMjcyMDBCQ0MzMTUgLyogRGF0YWJhc2VTeW5jLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhYmFzZVN5bmMuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCNTVENUFCQzExOTEzMjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rp
b25TeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTVENUFCRDExOTEzMjcyMDBCQ0MzMTUg
LyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQjU2RUJBODQxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjU4Q0VCNjcxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VT
eW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YWJhc2VTeW5jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENFQjY4MTE5MTM2MDcwMDJBNjc5MCAv
KiBKU0RhdGFiYXNlU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RhdGFiYXNlU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENF
QjZCMTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCNThDRUI2QzExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFu
c2FjdGlvblN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
UUxUcmFuc2FjdGlvblN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTlE
RDY4RDExOTAyOThFMDA3RTk2ODQgLyogRGF0YWJhc2VDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRGF0YWJhc2VDYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUI1OURENjhFMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTlERDY4RjExOTAyOThFMDA3RTk2ODQgLyogU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1
OURENjkwMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjU5REQ2OTExMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5
REQ2OTcxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RhdGFiYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjU5REQ2OTgxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VD
YWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFi
YXNlQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlERDY5QjEx
OTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIwNzMsMTMgKzEyMDc4LDggQEAKIAkJQjU5REQ2QTgx
MTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUE2ODQyMTBGRkFCRTk4MDBE
MjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTUUxpdGVGaWxlU3lzdGVtLmg7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3RlbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2ODkgLyog
U1FMaXRlRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTUUxpdGVGaWxlU3lzdGVtLmNwcDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjVCNURDNjcxMTlCQjNENTAwMkE4NzkwIC8q
IEFic3RyYWN0RGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQWJzdHJhY3REYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1
QjVEQzY4MTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0RGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQjVDMTEyMzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVEMzFERjgxMUNGNjEwQjAwOUYy
MkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFjdGl2ZURPTUNhbGxiYWNrLmNwcDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9N
Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUQzMURGOTExQ0Y2
MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWN0aXZlRE9NQ2FsbGJhY2suaDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9N
Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjVEMzYwMTkxMTJGOEI1
NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGF0YWJhc2VDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCNjU2NjI2RTEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI2NTY2MjZGMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5z
YWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCVHJh
bnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNzM0QjE4MDExOUI5
OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRm9udFRyYW5zY29kZXIuY3BwOyBwYXRoID0gdHJhbnNjb2Rlci9Gb250
VHJhbnNjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzk3Niw3MyAr
MTM5NzYsNiBAQAogCQkxQUU4MkVDOTBDQUFFMTc3MDAyMjM3QUUgLyogc3RvcmFnZSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQjVCNURDNjcxMTlCQjNE
NTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwICovLAotCQkJCUI1QjVEQzY4MTE5QkIz
RDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8sCi0JCQkJNTE0MTg1RUQwQ0Q2NUYw
NDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLywKLQkJCQk1MTQxODVFQzBD
RDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCAqLywKLQkJCQk1MTk2MTE1
RTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuY3BwICovLAotCQkJCTUxOTYxMTVGMENBQzU2
NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oICovLAotCQkJCTUxOTYxMTYwMENBQzU2NTcwMDEwQTgw
QyAvKiBEYXRhYmFzZS5pZGwgKi8sCi0JCQkJNTFBNDVCNTUwQ0FEN0ZENzAwMEQyQkU5IC8qIERh
dGFiYXNlQXV0aG9yaXplci5jcHAgKi8sCi0JCQkJNTFBNDVCNTQwQ0FEN0ZENzAwMEQyQkU5IC8q
IERhdGFiYXNlQXV0aG9yaXplci5oICovLAotCQkJCUI1RDM2MDE5MTEyRjhCNTYwMDQ4REVBOCAv
KiBEYXRhYmFzZUNhbGxiYWNrLmggKi8sCi0JCQkJQjU5REQ2OEQxMTkwMjk4RTAwN0U5Njg0IC8q
IERhdGFiYXNlQ2FsbGJhY2suaWRsICovLAotCQkJCTk3MjQ1ODUwMTRGQjcyNDgwMENBODc0NiAv
KiBEYXRhYmFzZUNvbnRleHQuY3BwICovLAotCQkJCTk3MjQ1ODUxMTRGQjcyNDgwMENBODc0NiAv
KiBEYXRhYmFzZUNvbnRleHQuaCAqLywKLQkJCQk1MTE2RDk3NTBDRjE3N0JEMDBDMkI4NEQgLyog
RGF0YWJhc2VEZXRhaWxzLmggKi8sCi0JCQkJQjUyM0NGMDMxMTgyNjc1NDAwRUJCMjlDIC8qIERh
dGFiYXNlU3luYy5jcHAgKi8sCi0JCQkJQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFi
YXNlU3luYy5oICovLAotCQkJCUI1NUQ1QUJCMTE5MTMyNzIwMEJDQzMxNSAvKiBEYXRhYmFzZVN5
bmMuaWRsICovLAotCQkJCTUxOTYxMUU5MENBQzc0OUMwMDEwQTgwQyAvKiBEYXRhYmFzZVRhc2su
Y3BwICovLAotCQkJCTUxOTYxMUU4MENBQzc0OUMwMDEwQTgwQyAvKiBEYXRhYmFzZVRhc2suaCAq
LywKLQkJCQk1MTk2MTE2MTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2VUaHJlYWQuY3BwICov
LAotCQkJCTUxOTYxMTYyMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5oICovLAot
CQkJCTFBRDUxQTEzMENCNTlDRDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwICovLAot
CQkJCTFBRDUxQTEyMENCNTlDRDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNrZXIuaCAqLywKLQkJ
CQk1MUZBRkUzMzBDRUNCRjJEMDBCQjNGMjQgLyogRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8s
Ci0JCQkJQThGNDU3OUQxNEJDMTNFQzAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNw
cCAqLywKLQkJCQlBOEY0NTc5RTE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJh
c2UuaCAqLywKLQkJCQlBOEY0NTc5RjE0QkMxM0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0
YWJhc2UuaWRsICovLAotCQkJCTUxQTkyNjc4MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5RdW90
YU1hbmFnZXIuY3BwICovLAotCQkJCTUxQTkyNjc5MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5R
dW90YU1hbmFnZXIuaCAqLywKLQkJCQk1MUE5MjY3QTBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2lu
VXNhZ2VSZWNvcmQuY3BwICovLAotCQkJCTUxQTkyNjdCMEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmln
aW5Vc2FnZVJlY29yZC5oICovLAotCQkJCTI0NUQ4MEEyMTMyODBFNDAwMDM0OTJBNiAvKiBTUUxD
YWxsYmFja1dyYXBwZXIuaCAqLywKLQkJCQk1MUVDOTI1NzBDRTkwREI0MDBGOTAzMDggLyogU1FM
RXJyb3IuaCAqLywKLQkJCQk1MUVDOTI1ODBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaWRs
ICovLAotCQkJCTk3OEQwN0IzMTQ1QTBFQ0QwMDk2OTA4RCAvKiBTUUxFeGNlcHRpb24uY3BwICov
LAotCQkJCUI1NkVCQTgzMTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCAqLywKLQkJ
CQlCNTZFQkE4NDExQzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhjZXB0aW9uLmlkbCAqLywKLQkJCQk1
MTk2MTE2NzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmNwcCAqLywKLQkJCQk1MTk2
MTE2ODBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmggKi8sCi0JCQkJNTE5NjExNjkw
Q0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5pZGwgKi8sCi0JCQkJMUFGRTExN0IwQ0JG
RkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovLAotCQkJCTFBRkUxMTdD
MENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8sCi0JCQkJMUFGRTEx
OEMwQ0JGRkM0RTAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsICovLAotCQkJCTUx
NUIwMzk4MENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuY3BwICovLAotCQkJCTUxNUIw
Mzk3MENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuaCAqLywKLQkJCQkxQTdDQ0IxNTBD
RDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaCAqLywKLQkJCQlCNTlERDY4
RTExOTAyOThFMDA3RTk2ODQgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsICovLAotCQkJCTFB
N0NDQjE2MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggKi8s
Ci0JCQkJQjU5REQ2OEYxMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaWRsICovLAotCQkJCUI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRT
eW5jLmNwcCAqLywKLQkJCQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50
U3luYy5oICovLAotCQkJCTFBQkZFNzUyMENEOTY4RDAwMEZFNDgzNCAvKiBTUUxUcmFuc2FjdGlv
bi5jcHAgKi8sCi0JCQkJMUE3Q0NCMjIwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9u
LmggKi8sCi0JCQkJMUE3Q0NCMjMwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmlk
bCAqLywKLQkJCQkxQTdDQ0IxNzBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oICovLAotCQkJCUI1OURENjkwMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmlkbCAqLywKLQkJCQlCNTFCRjZFRTEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJh
bnNhY3Rpb25DbGllbnQuY3BwICovLAotCQkJCUI1MUJGNkVGMTAyQzlFNTkwMDAyQzE1QSAvKiBT
UUxUcmFuc2FjdGlvbkNsaWVudC5oICovLAotCQkJCUI1QzExMjM5MTAyQjZDNDYwMDA5NjU3OCAv
KiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLywKLQkJCQlCNUMxMTIzQTEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovLAotCQkJCTFBN0NDQjE4
MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLywKLQkJ
CQlCNTlERDY5MTExOTAyOThFMDA3RTk2ODQgLyogU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
LmlkbCAqLywKLQkJCQlCNTIzQ0YwMjExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25T
eW5jLmNwcCAqLywKLQkJCQlCNTIzQ0YwMTExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rp
b25TeW5jLmggKi8sCi0JCQkJQjU1RDVBQkMxMTkxMzI3MjAwQkNDMzE1IC8qIFNRTFRyYW5zYWN0
aW9uU3luYy5pZGwgKi8sCi0JCQkJQjUyM0NFRkYxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmggKi8sCi0JCQkJQjU1RDVBQkQxMTkxMzI3MjAwQkNDMzE1IC8q
IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbCAqLywKIAkJCQk1MUUzRjlDNTBEQTA1OURD
MDAyNTA5MTEgLyogU3RvcmFnZS5jcHAgKi8sCiAJCQkJNTFFM0Y5QzQwREEwNTlEQzAwMjUwOTEx
IC8qIFN0b3JhZ2UuaCAqLywKIAkJCQk1MUUzRjlEMTBEQTA1RDcxMDAyNTA5MTEgLyogU3RvcmFn
ZS5pZGwgKi8sCkBAIC0xNDA3Niw5ICsxNDAwOSw2IEBACiAJCQkJM0FCMDJEMjkxMkQ0RjkxNjAw
RkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLywKIAkJCQkzQUIwMkQyODEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLywKIAkJCQkzQUMzNjdGRTEyRUY3QTA5MDA2QTNE
NkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLywKLQkJCQk5N0U2QzEzQTE1MDU4NzNGMDA2
RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCAqLywKLQkJCQk5N0U2QzEzQjE1
MDU4NzNGMDA2RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmggKi8sCi0JCQkJOTdF
NkMxM0MxNTA1ODczRjAwNkZDOTQzIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwgKi8s
CiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwogCQkJcGF0aCA9IHN0b3JhZ2U7CkBAIC0xNzEw
Myw2ICsxNzAzMyw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk5NzExNDVGRjE0RUYwMDc5MDA2
NzRGRDkgLyogZ2VvbG9jYXRpb24gKi8sCiAJCQkJOTcxMkE1NTMxNTAwNEUzQzAwNDhBRjEwIC8q
IGluZGV4ZWRkYiAqLywKKwkJCQk5N0JDNjlENTE1MDVGMDU0MDAxQjc0QUMgLyogc3FsZGF0YWJh
c2UgKi8sCiAJCQkJOTdBQUJDRjcxNEZBMDlCNTAwNzQ1N0FFIC8qIHdlYnNvY2tldHMgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IE1vZHVsZXM7CkBAIC0xNzM5MCw2ICsxNzMyMSw4MyBAQAogCQkJbmFt
ZSA9IHdlYnNvY2tldHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk5N0JD
NjlENTE1MDVGMDU0MDAxQjc0QUMgLyogc3FsZGF0YWJhc2UgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk3QkM2OUQ2MTUwNUYwNzYwMDFCNzRBQyAvKiBB
YnN0cmFjdERhdGFiYXNlLmNwcCAqLywKKwkJCQk5N0JDNjlENzE1MDVGMDc2MDAxQjc0QUMgLyog
QWJzdHJhY3REYXRhYmFzZS5oICovLAorCQkJCTk3QkM2OUQ4MTUwNUYwNzYwMDFCNzRBQyAvKiBD
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi8sCisJCQkJOTdCQzY5RDkxNTA1RjA3NjAwMUI3NEFD
IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggKi8sCisJCQkJOTdCQzY5REUxNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlLmNwcCAqLywKKwkJCQk5N0JDNjlERjE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2UuaCAqLywKKwkJCQk5N0JDNjlFMDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2Uu
aWRsICovLAorCQkJCTk3QkM2OUUxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6
ZXIuY3BwICovLAorCQkJCTk3QkM2OUUyMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhv
cml6ZXIuaCAqLywKKwkJCQk5N0JDNjlFMzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDYWxs
YmFjay5oICovLAorCQkJCTk3QkM2OUU0MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxi
YWNrLmlkbCAqLywKKwkJCQk5N0JDNjlFNTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250
ZXh0LmNwcCAqLywKKwkJCQk5N0JDNjlFNjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250
ZXh0LmggKi8sCisJCQkJOTdCQzY5RTcxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlRGV0YWls
cy5oICovLAorCQkJCTk3QkM2OUU4MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVN5bmMuY3Bw
ICovLAorCQkJCTk3QkM2OUU5MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVN5bmMuaCAqLywK
KwkJCQk5N0JDNjlFQTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmlkbCAqLywKKwkJ
CQk5N0JDNjlFQjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmNwcCAqLywKKwkJCQk5
N0JDNjlFQzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmggKi8sCisJCQkJOTdCQzY5
RUQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCAqLywKKwkJCQk5N0JDNjlF
RTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQuaCAqLywKKwkJCQk5N0JDNjlFRjE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCAqLywKKwkJCQk5N0JDNjlGMDE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmggKi8sCisJCQkJOTdCQzY5RjExNTA1
RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlckNsaWVudC5oICovLAorCQkJCTk3QkM2OUYy
MTUwNUYwODEwMDFCNzRBQyAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAgKi8sCisJCQkJOTdC
QzY5RjMxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmggKi8sCisJCQkJ
OTdCQzY5RjQxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCAqLywK
KwkJCQk5N0JDNjlGNTE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCAq
LywKKwkJCQk5N0JDNjlGNjE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmgg
Ki8sCisJCQkJOTdCQzY5RjcxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblVzYWdlUmVjb3JkLmNw
cCAqLywKKwkJCQk5N0JDNjlGODE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQu
aCAqLywKKwkJCQk5N0JDNjlGOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMQ2FsbGJhY2tXcmFwcGVy
LmggKi8sCisJCQkJOTdCQzY5RkExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEVycm9yLmggKi8sCisJ
CQkJOTdCQzY5RkIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEVycm9yLmlkbCAqLywKKwkJCQk5N0JD
NjlGQzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmNwcCAqLywKKwkJCQk5N0JDNjlG
RDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmggKi8sCisJCQkJOTdCQzY5RkUxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5pZGwgKi8sCisJCQkJOTdCQzY5RkYxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5jcHAgKi8sCisJCQkJOTdCQzZBMDAxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFJlc3VsdFNldC5oICovLAorCQkJCTk3QkM2QTAxMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxSZXN1bHRTZXQuaWRsICovLAorCQkJCTk3QkM2QTAyMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAqLywKKwkJCQk5N0JDNkEwMzE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oICovLAorCQkJCTk3QkM2QTA0MTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmlkbCAqLywKKwkJCQk5N0JDNkEwNTE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMU3RhdGVtZW50LmNwcCAqLywKKwkJCQk5N0JDNkEwNjE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMU3RhdGVtZW50LmggKi8sCisJCQkJOTdCQzZBMDcxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmggKi8sCisJCQkJOTdCQzZBMDgxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmlkbCAqLywKKwkJCQk5N0JDNkEwOTE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oICovLAorCQkJCTk3QkM2QTBB
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCAqLywKKwkJ
CQk5N0JDNkEwQjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8sCisJ
CQkJOTdCQzZBMEMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLywKKwkJ
CQk5N0JDNkEwRDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovLAorCQkJ
CTk3QkM2QTBFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5oICovLAorCQkJCTk3
QkM2QTBGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5pZGwgKi8sCisJCQkJOTdC
QzZBMTAxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCAqLywKKwkJ
CQk5N0JDNkExMTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwg
Ki8sCisJCQkJOTdCQzZBMTIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50
LmNwcCAqLywKKwkJCQk5N0JDNkExMzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25D
bGllbnQuaCAqLywKKwkJCQk5N0JDNkExNDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJOTdCQzZBMTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk5N0JDNkExNjE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggKi8sCisJCQkJOTdCQzZBMTcxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgKi8sCisJCQkJ
OTdCQzZBMTgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5jcHAgKi8sCisJ
CQkJOTdCQzZBMTkxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oICovLAor
CQkJCTk3QkM2QTFBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaWRsICov
LAorCQkJCTk3QkM2QTFCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjay5oICovLAorCQkJCTk3QkM2QTFDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5pZGwgKi8sCisJCQkJOTdCQzZBMUQxNTA1RjA4MTAwMUI3NEFDIC8qIFdv
cmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHAgKi8sCisJCQkJOTdCQzZBMUUxNTA1RjA4MTAwMUI3
NEFDIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oICovLAorCQkJCTk3QkM2QTFGMTUwNUYw
ODEwMDFCNzRBQyAvKiBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsICovLAorCQkJKTsKKwkJ
CW5hbWUgPSBzcWxkYXRhYmFzZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CTk3QzFGNTUxMTIyODU1ODgwMEVERTYxNiAvKiBwYXJzZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjEzNzUsNyArMjEzODMsNyBAQAogCQkJaXNhID0g
UEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCi0JCQkJQjVCNURDNkExMTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0
YWJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBB
YnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1
NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjJFMEZC
QjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyOUE4MTIzMzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Um93LmggaW4gSGVhZGVycyAqLywKQEAgLTIxNTQ5LDcgKzIxNTU3LDcgQEAKIAkJCQk0OTQ4NEZD
QjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OTQ4NEZDRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1NTBCNjlFMDk5REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAotCQkJCTUxNDE4NUVFMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VW
ZXJzaW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3
NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZB
MDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDAwMjJFNjkxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAv
KiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTY5NiwxNiArMjE3MDQsMTYgQEAK
IAkJCQk1MEQ0MDYxMjE0N0Q0OURFMDBEMzBCQjUgLyogQ3VzdG9tRmlsdGVyU2hhZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOENCNDEzRTBFODYzM0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJk
UmVnaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTk2MTE2QjBDQUM1NjU3MDAxMEE4MEMgLyog
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxQTQ1QjU2MENBRDdGRDcwMDBEMkJFOSAv
KiBEYXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUI1RDM2MDFBMTEyRjhC
NTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzI0
NTg1MzE0RkI3MjQ4MDBDQTg3NDYgLyogRGF0YWJhc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MTE2RDk3NzBDRjE3N0JEMDBDMkI4NEQgLyogRGF0YWJhc2VEZXRhaWxzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1MTk2MTFFQTBDQUM3NDlDMDAxMEE4MEMgLyogRGF0YWJhc2VU
YXNrLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTk2MTE3ODBDQUM1NkE4MDAxMEE4MEMgLyogRGF0
YWJhc2VUaHJlYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBRDUxQTE0MENCNTlDRDMwMDk1M0Qx
MSAvKiBEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRkFGRTM0MENFQ0JG
MkQwMEJCM0YyNCAvKiBEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3QkM2QTIxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTdCQzZBMjQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTdCQzZBMjUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTI4MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTI5MTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZURldGFpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTJCMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTJF
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
QkM2QTMwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTdCQzZBMzIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTdCQzZBMzMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tl
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMjc0NkYwRTgzNjY0NTAwRTdGOTc1IC8q
IERhdGFSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVCMCAv
KiBEYXRhc2V0RE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEzMTYz
NkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjM2
NCw3ICsyMjM3Miw3IEBACiAJCQkJMTQwM0I5OTcwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRv
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1QUUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdp
bmRvd0luZGV4ZWREYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdEMkFEMDQxNEI4MjNB
NjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEY0
NTdBMTE0QkMxQTk0MDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3QkM2QTM1MTUwNUYwODEwMDFCNzRBQyAvKiBET01XaW5kb3dTUUxEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM1QUU1QUMxNDkyNUY1QjAwNEQ1Nzc2IC8qIERPTVdy
YXBwZXJWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzUzREEyRTExNDMxMjFFMDAwRDgx
N0UgLyogRE9NV3JhcHBlcldvcmxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTFEMTM4MDBBNTMy
NTUyMDA2NEJGNUYgLyogRE9NWFBhdGguaCBpbiBIZWFkZXJzICovLApAQCAtMjI0NDQsNiArMjI0
NTIsNyBAQAogCQkJCTk3NjdDRTBDMTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25JbnRlcmZh
Y2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0
ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4Rjcg
LyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLywKKwkJCQk3NzI4Njk0RjE0Rjg4
ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzVFOEI4OTBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc1RThCOEIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRy
YW5zZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyOTg5LDYgKzIyOTk4LDcgQEAKIAkJCQlFMEZF
RjM3MkIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM2MDkwMUYwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMzMTRBQ0VDMTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTc3Mjg2OTg0MTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBBMTg5
NTAwRkQwNEUzIC8qIEpTRmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODkzQzQ3QjgxMjM4QTA5
OTAwMkIzRDg2IC8qIEpTRmlsZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg3ODVC
MTEyMkNBMkE3MDAzQUFCREEgLyogSlNGaWxlRW50cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjM1
NjUsOCArMjM1NzUsOCBAQAogCQkJCUY0RUFGNEFGMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlw
ZVNhbml0aXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUyNDQ1RjcxMzk1ODkzQTAwNEI2QzE5
IC8qIE9wZXJhdGlvbk5vdEFsbG93ZWRFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTAw
MTQ2MjhCMTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTFBOTI2N0QwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNTFBOTI2N0YwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVz
YWdlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEzODE1MDVGMDgxMDAxQjc0QUMg
LyogT3JpZ2luUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEzQTE1MDVG
MDgxMDAxQjc0QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NUVCNUREMEU4MUI4REQwMEIyNTk2NSAvKiBPdXRsaW5lVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBMEQ1NzM3MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzOTUxLDI2ICsyMzk2MSwyNiBAQAogCQkJCTkz
MzA5RTE0MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMzMDlFMTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzMwRDkzMTI0OEYw
QjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTI0NUQ4
MEEzMTMyODBFNDAwMDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUxRUM5MjU5MENFOTBEQjQwMEY5MDMwOCAvKiBTUUxFcnJvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQjU2RUJBODUxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTdCQzZBM0IxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTENhbGxiYWNrV3Jh
cHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBM0MxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TEVycm9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEzRjE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTIyNDY0QTBDQzk4RERCMDBDMDUy
NDAgLyogU1FMaXRlRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1QTY4NDIyMEZGQUJF
OTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTIy
NDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTIyNDY0RTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUxOTYxMTc0MENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQu
aCBpbiBIZWFkZXJzICovLAotCQkJCTFBRkUxMTdFMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1
bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTVCMDM5OTBDRDE2NDJBMDBCN0VB
OUMgLyogU1FMU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTdDQ0IxOTBDRDk0NjlB
MDBCN0I2NEUgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
N0NDQjFBMENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTUwQjUyNjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50
U3luYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE3Q0NCMjQwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNR
TFRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTdDQ0IxQjBDRDk0NjlBMDBCN0I2
NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjUxQkY2
RjExMDJDOUU1OTAwMDJDMTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKLQkJCQlCNUMxMTIzQzEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE3Q0NCMUMwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjUyM0NGMDgx
MTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjUyM0NGMDYxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkE0MjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVz
dWx0U2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkE0NTE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMUmVzdWx0U2V0Um93TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNDgxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNDkx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5N0JDNkE0QjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0
YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTUwMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNTIxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3QkM2QTU1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTdCQzZBNTcxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTU4MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
QkM2QTVCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3QkM2QTVEMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEwQ0M1NTIxMzAwNEEyMDYyIC8q
IFNRTFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk2MzA4MjQ1RTU5MDAxRTlBQkMg
LyogU1NMS2V5R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRUEzOTQ5RDExRDQ1Q0RB
MDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0
NDY4LDcgKzI0NDc4LDcgQEAKIAkJCQkyRTQzNDY0OTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2Vy
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE2MTIxNTAwOTBDRTAwNDhBRjEwIC8q
IFdvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFNDM0
NjRCMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0UHJveHkuaCBpbiBIZWFkZXJzICov
LAotCQkJCTk3RTZDMTNFMTUwNTg3M0YwMDZGQzk0MyAvKiBXb3JrZXJDb250ZXh0U1FMRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTYwMTUwNUYwODEwMDFCNzRBQyAvKiBXb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0MkUxMTM0MzYz
MUYwMDUzMUJDMiAvKiBXb3JrZXJEZWJ1Z2dlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
M0UyNjQzMTE0NzQ4OTkxMDA1QTg1ODggLyogV29ya2VyRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjM2RTA3QTUxMzU4QThCRTAwQUFDQkM5IC8qIFdvcmtlckluc3BlY3RvckNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MjksOCArMjQ1MzksNiBAQAogCQkJCUUxQkU1
MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTc3Mjg2OTRGMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTc3Mjg2OTg0MTRGRDlBREEwMEY0ODREQyAv
KiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNDg4
OCw3ICsyNDg5Niw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQlCNUI1REM2OTExOUJC
M0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5
N0JDNjlEQTE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MUUxQjFEMDBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2li
aWxpdHlBbGxJbk9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkNERDJGMjExMDNEQTY2MDA2
ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjUw
MTIsNyArMjUwMjAsNyBAQAogCQkJCTQ5NDg0RkNBMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQ0QxMDJDRjIz
QzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNjlE
MDk5REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NTE0MTg1RUYwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3QkM2OURDMTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9u
V3JhcHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUwQjY5RjA5OURGMDI3MDA5MEQ3ODEg
LyogQ2hhcmFjdGVyRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzI2REMwQzA5REFENUQ2
MDBBRkM4NDcgLyogQ2hhcnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjEx
MjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjUxMzYsMTMgKzI1MTQ0LDEzIEBACiAJCQkJNTBDQzBBMzkxNEM2RjVCMTAwMTdBQjUxIC8q
IEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MDNEMENBQTE0
QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MEQ0MDYxMTE0N0Q0OURFMDBEMzBCQjUgLyogQ3VzdG9tRmlsdGVyU2hhZGVyLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUxOTYxMTZBMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUE0NUI1NzBDQUQ3RkQ3MDAwRDJCRTkgLyogRGF0YWJh
c2VBdXRob3JpemVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MjQ1ODUyMTRGQjcyNDgwMENB
ODc0NiAvKiBEYXRhYmFzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjUyM0NGMEEx
MTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MTk2MTFFQjBDQUM3NDlDMDAxMEE4MEMgLyogRGF0YWJhc2VUYXNrLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxOTYxMTZEMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkxQUQ1MUExNTBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0YWJhc2VUcmFj
a2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTIwMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkEyMzE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTI3MTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTdCQzZBMkExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5N0JDNkEyRDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVh
ZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkEzMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjQ2NDFEMTFEN0Y0MTYwMDY0
NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgxNUU2
MTY3MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFOTdDQ0VBMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI1NTAyLDcgKzI1NTEwLDcgQEAKIAkJCQkxNDAzQjk5ODA5RUIxM0FGMDA3OTdD
N0YgLyogRE9NV2luZG93LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUFEMTUwMDRFREEw
MDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTdEMkFEMDMxNEI4MjNBNjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUE4RjQ1N0EwMTRCQzFBODgwMDBDRUE1OSAvKiBET01XaW5kb3dTUUxE
YXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkEzNDE1MDVGMDgxMDAxQjc0QUMg
LyogRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1M0RBNDgx
MTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTFEMTM4MTBBNTMyNTUyMDA2NEJGNUYgLyogRE9NWFBhdGgubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NUU5RTBBMjBBQjNBMEM3MDAwNjlDRDAgLyogRE9NWFBhdGhFeHByZXNzaW9uLm1tIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNTU1Niw2ICsyNTU2NCw3IEBACiAJCQkJQTdDQUNEQjExM0NFODc1
QzAwQkJCRTNGIC8qIEV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDhBRkRBNjBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc3Mjg2OTRFMTRGODg4MjUwMEY0ODREQyAv
KiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1
RThCODgwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc1RThCOEEwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc1RThCOEMwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjA5Niw2ICsyNjEwNSw3IEBACiAJCQkJRTBGRUYzNzJC
NDdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM2MDkwMjAwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzMxNEFDRUIxMDg5MjA4NjAwMEYwRTU2IC8qIEpTRXhjZXB0aW9uQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3NzI4Njk4MzE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMEYwMTQwRTBB
MTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDdCNzEy
MzhBMDk5MDAyQjNEODYgLyogSlNGaWxlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODk4Nzg1QjAxMjJDQTJBNzAwM0FBQkRBIC8qIEpTRmlsZUVudHJ5LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjY3MjksOCArMjY3MzksOCBAQAogCQkJCUY0RUFGNEFFMTBDNzQyQjEwMDkxMDBEMyAv
KiBPcGVuVHlwZVNhbml0aXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCODE0NUEw
RjFCMDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwMDE0NjI4QTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnku
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFBOTI2N0MwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdp
blF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUE5MjY3RTBENTNGMDU3MDA2
M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzZB
MzcxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5N0JDNkEzOTE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8q
IFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3N0U3NzYwQkY0MTM0QTAwMTUyODcyIC8q
IFBhZ2VDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MDQ4LDIwICsyNzA1OCwyMCBAQAog
CQkJCTkzMzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUUx
MTU0ODEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTk3OEQwN0I0MTQ1QTBFQ0QwMDk2OTA4RCAvKiBTUUxFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTdCQzZBM0UxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJFNkU3QTBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRl
QXV0aG9yaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTIyNDY0OTBDQzk4RERCMDBDMDUy
NDAgLyogU1FMaXRlRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjVBNjg0MjQwRkZB
QkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEyMjQ2NEIwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVN0YXRlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTIyNDY0RDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5NjExNzMwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJl
c3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUZFMTE3RDBDQkZGQjM2MDAzMDE3RkEg
LyogU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTVCMDM5QTBD
RDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUI1
NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTFBQkZFNzUzMENEOTY4RDAwMEZFNDgzNCAvKiBTUUxUcmFuc2FjdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlCNTFCRjZGMDEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNh
Y3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2
NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QjUyM0NGMDkxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk5N0JDNkE0MTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTQ0MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1
bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTQ3MTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxTdGF0ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzZBNEQxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTdCQzZBNEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTk3QkM2QTU0MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkE1NjE1MDVGMDgxMDAxQjc0QUMgLyogU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkE1QTE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBMkU2RTU5MENDNTUyMTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5M0YxOUFFNjA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNFQTM5NDlDMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNI
YXNoU2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzQ0Niw3ICsyNzQ1Niw3IEBA
CiAJCQkJRjM4MjA4OTYxNDdEMzVGOTAwMTBCQzA2IC8qIFdvcmtlckNvbnNvbGVBZ2VudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY0ODBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29u
dGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTYxMTE1MDA5MENFMDA0OEFGMTAgLyog
V29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5N0U2
QzEzRDE1MDU4NzNGMDA2RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3QkM2QTVGMTUwNUYwODEwMDFCNzRBQyAvKiBXb3JrZXJDb250ZXh0
U1FMRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM0NzQyRTAxMzQzNjMxRjAwNTMx
QkMyIC8qIFdvcmtlckRlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNFMjY0
MzAxNDc0ODk5MTAwNUE4NTg4IC8qIFdvcmtlckV2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjM2RTA3QTQxMzU4QThCRTAwQUFDQkM5IC8qIFdvcmtlckluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzUwMiw4ICsyNzUxMiw2IEBACiAJCQkJRTFCRTUx
MkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNzcyODY5NEUxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3NzI4Njk4MzE0RkQ5QURBMDBG
NDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgotI2luY2x1ZGUgIkRhdGFi
YXNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTY3Jp
cHRDYWxsU3RhY2suaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0K
LSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiIC8v
IEZvciBlcnJvciByZXBvcnRpbmcuCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uS2V5W10gPSAiV2ViS2l0RGF0YWJhc2VWZXJzaW9uS2V5
IjsKLXN0YXRpYyBjb25zdCBjaGFyIGluZm9UYWJsZU5hbWVbXSA9ICJfX1dlYktpdERhdGFiYXNl
SW5mb1RhYmxlX18iOwotCi1zdGF0aWMgU3RyaW5nIGZvcm1hdEVycm9yTWVzc2FnZShjb25zdCBj
aGFyKiBtZXNzYWdlLCBpbnQgc3FsaXRlRXJyb3JDb2RlLCBjb25zdCBjaGFyKiBzcWxpdGVFcnJv
ck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyAoJWQgJXMpIiwgbWVz
c2FnZSwgc3FsaXRlRXJyb3JDb2RlLCBzcWxpdGVFcnJvck1lc3NhZ2UpOwotfQotCi1zdGF0aWMg
Ym9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCBy
ZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQu
c3RlcCgpOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHJlc3Vs
dFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIHJl
c3VsdFN0cmluZyA9IFN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBMT0dfRVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNl
ICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2Um
IGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVl
IGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOwotCi0g
ICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3Vs
dERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8g
c2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRklY
TUU6IG1vdmUgYWxsIGd1aWQtcmVsYXRlZCBmdW5jdGlvbnMgdG8gYSBEYXRhYmFzZVZlcnNpb25U
cmFja2VyIGNsYXNzLgotc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQotewotICAgIEF0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0gKm5ldyBNdXRleCk7Ci0gICAgcmV0
dXJuIG11dGV4OwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1aWRWZXJzaW9u
TWFwOwotc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKLXsKLSAgICAv
LyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCi0gICAgQVNTRVJUKCFndWlkTXV0ZXgo
KS50cnlMb2NrKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNpb25NYXAsIG1h
cCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLS8vIE5PVEU6IENhbGxlciBtdXN0IGxvY2sg
Z3VpZE11dGV4KCkuCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAoaW50
IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQotewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4
IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0KLSAgICAv
LyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGludG8gdGhlIGd1
aWRUb1ZlcnNpb25NYXAoKSBtYXAuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBpcyBj
cm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgotICAgIC8vIFRo
ZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgeW91IGNhbiB1
c2Ugb24gdGhlIGN1cnJlbnQKLSAgICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5nIHdl
IGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0dXJlLgotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dyYW0g
d2l0aC4KLQotICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBjb21t
ZW50IGFib3ZlKS4KLSAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24u
aXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLmlzb2xhdGVkQ29weSgpKTsKLX0KLQot
dHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qPiBHdWlkRGF0
YWJhc2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCi17
Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3Vp
ZE11dGV4KCkudHJ5TG9jaygpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWREYXRhYmFz
ZU1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIGludCBndWlkRm9y
T3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1
aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nSUQgPSBvcmlnaW4gKyAi
LyIgKyBuYW1lOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1aWRNYXA7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZpZXJUb0dV
SURNYXAsICgpKTsKLSAgICBpbnQgZ3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0
KHN0cmluZ0lEKTsKLSAgICBpZiAoIWd1aWQpIHsKLSAgICAgICAgc3RhdGljIGludCBjdXJyZW50
TmV3R1VJRCA9IDE7Ci0gICAgICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOwotICAgICAgICBz
dHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGd1aWQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzRGF0YWJhc2VBdmFpbGFibGUgPSB0
cnVlOwotCi1ib29sIEFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkKLXsKLSAgICByZXR1
cm4gaXNEYXRhYmFzZUF2YWlsYWJsZTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRJ
c0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLXsKLSAgICBpc0RhdGFiYXNlQXZhaWxhYmxlID0g
YXZhaWxhYmxlOwotfQotCi0vLyBzdGF0aWMKLWNvbnN0IGNoYXIqIEFic3RyYWN0RGF0YWJhc2U6
OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCi17Ci0gICAgcmV0dXJuIGluZm9UYWJsZU5hbWU7Ci19
Ci0KLUFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZVR5cGUg
ZGF0YWJhc2VUeXBlKQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCi0g
ICAgLCBtX2RhdGFiYXNlQ29udGV4dChEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29udGV4dCkpCi0g
ICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fZXhwZWN0ZWRWZXJzaW9u
KGV4cGVjdGVkVmVyc2lvbi5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fZGlzcGxheU5hbWUoZGlz
cGxheU5hbWUuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVk
U2l6ZSkKLSAgICAsIG1fZ3VpZCgwKQotICAgICwgbV9vcGVuZWQoZmFsc2UpCi0gICAgLCBtX25l
dyhmYWxzZSkKLSAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBlID09IFN5bmNEYXRh
YmFzZSkKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1f
Y29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1
dGhvcml6ZXI6OmNyZWF0ZShpbmZvVGFibGVOYW1lKTsKLQotICAgIGlmIChtX25hbWUuaXNOdWxs
KCkpCi0gICAgICAgIG1fbmFtZSA9ICIiOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIoZ3VpZE11dGV4KCkpOwotICAgICAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFt
ZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKLSAgICAgICAgSGFzaFNldDxB
YnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1
aWQpOwotICAgICAgICBpZiAoIWhhc2hTZXQpIHsKLSAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcg
SGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj47Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1h
cCgpLnNldChtX2d1aWQsIGhhc2hTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFzaFNldC0+
YWRkKHRoaXMpOwotICAgIH0KLQotICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7Ci0g
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOwotfQot
Ci1BYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKCFt
X29wZW5lZCk7Ci19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZSgpCi17
Ci0gICAgaWYgKCFtX29wZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zcWxpdGVEYXRh
YmFzZS5jbG9zZSgpOwotICAgIG1fb3BlbmVkID0gZmFsc2U7Ci0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEhhc2hTZXQ8QWJzdHJhY3RE
YXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAg
ICAgICAgQVNTRVJUKGhhc2hTZXQpOwotICAgICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnMo
dGhpcykpOwotICAgICAgICBoYXNoU2V0LT5yZW1vdmUodGhpcyk7Ci0gICAgICAgIGlmIChoYXNo
U2V0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3Zl
KG1fZ3VpZCk7Ci0gICAgICAgICAgICBkZWxldGUgaGFzaFNldDsKLSAgICAgICAgICAgIGd1aWRU
b1ZlcnNpb25NYXAoKS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotU3Ry
aW5nIEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAotewotICAgIC8vIE5vdGU6IElu
IG11bHRpLXByb2Nlc3MgYnJvd3NlcnMgdGhlIGNhY2hlZCB2YWx1ZSBtYXkgYmUgYWNjdXJhdGUs
IGJ1dCB3ZSBjYW5ub3QgcmVhZCB0aGUKLSAgICAvLyBhY3R1YWwgdmVyc2lvbiBmcm9tIHRoZSBk
YXRhYmFzZSB3aXRob3V0IHBvdGVudGlhbGx5IGluZHVjaW5nIGEgZGVhZGxvY2suCi0gICAgLy8g
RklYTUU6IEFkZCBhbiBhc3luYyB2ZXJzaW9uIGdldHRlciB0byB0aGUgRGF0YWJhc2VBUEkuCi0g
ICAgcmV0dXJuIGdldENhY2hlZFZlcnNpb24oKTsKLX0KLQotYm9vbCBBYnN0cmFjdERhdGFiYXNl
OjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgQVNTRVJU
KGVycm9yTWVzc2FnZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lX
YWl0VGltZSA9IDMwMDAwOwotCi0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxl
bmFtZSwgdHJ1ZSkpIHsKLSAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFM
SURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKLSAgICAgICAgZXJy
b3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIs
IG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRh
bEF1dG9WYWN1dW0oKSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBvbiBpbmNy
ZW1lbnRhbCBhdXRvLXZhY3V1bSAoJWQgJXMpIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0KLSAgICBtX3NxbGl0ZURhdGFi
YXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7Ci0KLSAgICBTdHJpbmcg
Y3VycmVudFZlcnNpb247Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11
dGV4KCkpOwotCi0gICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRU
b1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7Ci0gICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9W
ZXJzaW9uTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBl
bXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1
cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IFN0cmluZygiIikgOiBlbnRy
eS0+c2Vjb25kLmlzb2xhdGVkQ29weSgpOwotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJD
dXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50
VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAgICAg
ICAgICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJvd3NlcnMgdGhlIGNhY2hlZCB2YWx1
ZSBtYXkgYmUgaW5hY2N1cmF0ZSwgYnV0Ci0gICAgICAgICAgICAvLyB3ZSBjYW5ub3QgcmVhZCB0
aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZGF0YWJhc2Ugd2l0aG91dCBwb3RlbnRpYWxseQot
ICAgICAgICAgICAgLy8gaW5kdWNpbmcgYSBmb3JtIG9mIGRlYWRsb2NrLCBhIGJ1c3l0aW1lb3V0
IGVycm9yIHdoZW4gdHJ5aW5nIHRvCi0gICAgICAgICAgICAvLyBhY2Nlc3MgdGhlIGRhdGFiYXNl
LiBTbyB3ZSdsbCB1c2UgdGhlIGNhY2hlZCB2YWx1ZSBpZiB3ZSdyZSB1bmFibGUgdG8gcmVhZAot
ICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGZyb20gdGhlIGRhdGFiYXNlIGZpbGUgd2l0aG91dCB3
YWl0aW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBhbiBhc3luYyBvcGVuRGF0YWJhc2Ug
bWV0aG9kIHRvIHRoZSBEYXRhYmFzZUFQSS4KLSAgICAgICAgICAgIGNvbnN0IGludCBub1NxbGl0
ZUJ1c3lXYWl0VGltZSA9IDA7Ci0gICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lU
aW1lb3V0KG5vU3FsaXRlQnVzeVdhaXRUaW1lKTsKLSAgICAgICAgICAgIFN0cmluZyB2ZXJzaW9u
RnJvbURhdGFiYXNlOwotICAgICAgICAgICAgaWYgKGdldFZlcnNpb25Gcm9tRGF0YWJhc2UodmVy
c2lvbkZyb21EYXRhYmFzZSwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFZlcnNp
b24gPSB2ZXJzaW9uRnJvbURhdGFiYXNlOwotICAgICAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJz
aW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5V2FpdFRpbWUp
OwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
Ik5vIGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKLQotICAgICAgICAgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9zcWxpdGVEYXRhYmFzZSk7Ci0gICAgICAg
ICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5p
blByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQo
MiwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAg
ICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRv
IG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBzdGFydCB0cmFuc2FjdGlvbiIsIG1fc3FsaXRlRGF0
YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgbV9z
cWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZShpbmZvVGFibGVOYW1l
KTsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cyh0YWJsZU5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFtX3NxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIHRh
YmxlTmFtZSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9O
IENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsi
KSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMywgSU5W
QUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAgICAg
ICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBv
cGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gY3JlYXRlICdpbmZvJyB0YWJsZSIsIG1fc3FsaXRlRGF0
YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAg
ICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBtX3NxbGl0
ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRWZXJzaW9uRnJvbURh
dGFiYXNlKGN1cnJlbnRWZXJzaW9uLCBmYWxzZSkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnRP
cGVuRGF0YWJhc2VSZXN1bHQoNCwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9y
TWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byByZWFkIGN1cnJlbnQg
dmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
Ci0gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3Ro
KCkpIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50
IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0
YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSB7Ci0gICAg
ICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJh
c2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5k
YXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAg
ICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24sIGZhbHNlKSkg
ewotICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoNSwgSU5WQUxJ
RF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAgICAgICAg
ICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVu
IGRhdGFiYXNlLCBmYWlsZWQgdG8gd3JpdGUgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAg
ICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3FsaXRl
RGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0
ZWRWZXJzaW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25N
YXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7Ci0gICAgICAgICAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwo
KSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUg
aXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGV4cGVj
dGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJl
bnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndp
c2UsIHNldCBhbiBleGNlcHRpb24uCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMg
dGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVy
c2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KLSAgICBpZiAoKCFtX25ldyB8fCBzaG91bGRT
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYg
bV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKLSAgICAgICAgcmVwb3J0T3Bl
bkRhdGFiYXNlUmVzdWx0KDYsIElOVkFMSURfU1RBVEVfRVJSLCAwKTsKLSAgICAgICAgZXJyb3JN
ZXNzYWdlID0gInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21hdGNoLCAnIiAr
IG1fZXhwZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnRWZXJzaW9u
IG9mICciICsgY3VycmVudFZlcnNpb24gKyAiJyI7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7Ci0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAg
bV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLQot
ICAgIG1fb3BlbmVkID0gdHJ1ZTsKLQotICAgIGlmIChtX25ldyAmJiAhc2hvdWxkU2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UpCi0gICAgICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7IC8vIFRoZSBj
YWxsZXIgcHJvdmlkZWQgYSBjcmVhdGlvbkNhbGxiYWNrIHdoaWNoIHdpbGwgc2V0IHRoZSBleHBl
Y3RlZCB2ZXJzaW9uLgotCi0gICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDAsIC0xLCAwKTsg
Ly8gT0sKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQWJz
dHJhY3REYXRhYmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsKLX0KLQotU2VjdXJpdHlPcmlnaW4q
IEFic3RyYWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCk7Ci19Ci0KLVN0cmluZyBBYnN0cmFj
dERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBk
ZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fbmFt
ZS5pc29sYXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlO
YW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGlu
ZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCk7
Ci19Ci0KLXVuc2lnbmVkIGxvbmcgQWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0KLQotU3RyaW5nIEFic3RyYWN0
RGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkg
Zm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZmlsZW5hbWUuaXNv
bGF0ZWRDb3B5KCk7Ci19Ci0KLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21E
YXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQotewotICAg
IFN0cmluZyBxdWVyeShTdHJpbmcoIlNFTEVDVCB2YWx1ZSBGUk9NICIpICsgaW5mb1RhYmxlTmFt
ZSArICAiIFdIRVJFIGtleSA9ICciICsgdmVyc2lvbktleSArICInOyIpOwotCi0gICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVU
ZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB2ZXJzaW9uKTsK
LSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChzaG91bGRDYWNoZVZlcnNpb24pCi0gICAg
ICAgICAgICBzZXRDYWNoZWRWZXJzaW9uKHZlcnNpb24pOwotICAgIH0gZWxzZQotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBk
YXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5lbmFibGUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQWJzdHJh
Y3REYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBi
b29sIHNob3VsZENhY2hlVmVyc2lvbikKLXsKLSAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFj
ZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9u
IG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQotICAgIC8vIGNs
YXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFu
ZFZlcmlmeSgpKS4KLSAgICBTdHJpbmcgcXVlcnkoU3RyaW5nKCJJTlNFUlQgSU5UTyAiKSArIGlu
Zm9UYWJsZU5hbWUgKyAgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIHZlcnNpb25LZXkgKyAi
JywgPyk7Iik7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAg
Ym9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHF1
ZXJ5LCB2ZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChzaG91bGRDYWNo
ZVZlcnNpb24pCi0gICAgICAgICAgICBzZXRDYWNoZWRWZXJzaW9uKHZlcnNpb24pOwotICAgIH0g
ZWxzZQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRh
YmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgcXVlcnkuYXNjaWkoKS5kYXRhKCkp
OwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gdmVyc2lvbi5p
c29sYXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmdldENhY2hlZFZl
cnNpb24oKSBjb25zdAotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0g
ICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS5pc29sYXRlZENvcHkoKTsK
LX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRDYWNoZWRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgYWN0dWFsVmVyc2lvbikKLXsKLSAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFz
ZSB2ZXJzaW9uIG1hcC4KLSAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAg
IHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgYWN0dWFsVmVyc2lvbik7Ci19Ci0KLWJvb2wg
QWJzdHJhY3REYXRhYmFzZTo6Z2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKFN0cmluZyAm
YWN0dWFsVmVyc2lvbikKLXsKLSAgICBBU1NFUlQobV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlv
bkluUHJvZ3Jlc3MoKSk7Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgLy8gTm90ZTogSW4g
bXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBpbmFjY3VyYXRl
LgotICAgIC8vIFNvIHdlIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhYmFzZSBhbmQg
dXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUgaGVyZS4KLSAgICByZXR1cm4gZ2V0VmVyc2lvbkZyb21E
YXRhYmFzZShhY3R1YWxWZXJzaW9uLCB0cnVlKTsKLSNlbHNlCi0gICAgYWN0dWFsVmVyc2lvbiA9
IGdldENhY2hlZFZlcnNpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCi12b2lk
IEFic3RyYWN0RGF0YWJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7
Ci19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCi17Ci0gICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZW5hYmxlKCk7Ci19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclJlYWRP
bmx5KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6
OnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpCi17Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UGVy
bWlzc2lvbnMocGVybWlzc2lvbnMpOwotfQotCi1ib29sIEFic3RyYWN0RGF0YWJhc2U6Omxhc3RB
Y3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERh
dGFiYXNlKCk7Ci19Ci0KLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2Vy
dCgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9k
YXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLX0KLQotdm9pZCBBYnN0
cmFjdERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0
aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOwotfQot
Ci1ib29sIEFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5oYWRE
ZWxldGVzKCk7Ci19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkK
LXsKLSAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCi0gICAgICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5yZXNldCgpOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgQWJzdHJhY3REYXRhYmFz
ZTo6bWF4aW11bVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7Ci19Ci0KLXZvaWQgQWJzdHJhY3RE
YXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCi17Ci0gICAgaW50NjRfdCBmcmVl
U3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7Ci0gICAgaW50NjRf
dCB0b3RhbFNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLnRvdGFsU2l6ZSgpOwotICAgIGlmICh0b3Rh
bFNpemUgPD0gMTAgKiBmcmVlU3BhY2VTaXplKSB7Ci0gICAgICAgIGludCByZXN1bHQgPSBtX3Nx
bGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOwotICAgICAgICByZXBv
cnRWYWN1dW1EYXRhYmFzZVJlc3VsdChyZXN1bHQpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFNR
TFJlc3VsdE9rKQotICAgICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKGZvcm1hdEVycm9yTWVzc2Fn
ZSgiZXJyb3IgdmFjdXVtaW5nIGRhdGFiYXNlIiwgcmVzdWx0LCBtX3NxbGl0ZURhdGFiYXNlLmxh
c3RFcnJvck1zZygpKSk7Ci0gICAgfQotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OmludGVy
cnVwdCgpCi17Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5pbnRlcnJ1cHQoKTsKLX0KLQotYm9vbCBB
YnN0cmFjdERhdGFiYXNlOjppc0ludGVycnVwdGVkKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9zcWxpdGVEYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOwotICAgIHJldHVybiBtX3NxbGl0
ZURhdGFiYXNlLmlzSW50ZXJydXB0ZWQoKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjps
b2dFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoT3RoZXJNZXNzYWdlU291cmNlLCBMb2dN
ZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UpOwotfQotCi0jaWYgUExBVEZP
Uk0oQ0hST01JVU0pCi0vLyBUaGVzZSBhcmUgdXNlZCB0byBnZW5lcmF0ZSBoaXN0b2dyYW1zIG9m
IGVycm9ycyBzZWVuIHdpdGggd2Vic3FsLgotLy8gU2VlIGFib3V0Omhpc3RvZ3JhbXMgaW4gY2hy
b21pdW0uCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChp
bnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQot
ewotICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCh0aGlzLCBl
cnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKLX0KLQotdm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KGludCBlcnJvclNpdGUs
IGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCi17Ci0gICAgRGF0YWJh
c2VPYnNlcnZlcjo6cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCh0aGlzLCBlcnJvclNpdGUsIHdl
YlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJT
cWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCi17Ci0gICAgRGF0YWJhc2VPYnNlcnZl
cjo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCh0aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVy
cm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpy
ZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJy
b3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQotewotICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJl
cG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JD
b2RlLCBzcWxpdGVFcnJvckNvZGUpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9y
dEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29k
ZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKLXsKLSAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRF
eGVjdXRlU3RhdGVtZW50UmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBz
cWxpdGVFcnJvckNvZGUpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydFZhY3V1
bURhdGFiYXNlUmVzdWx0KGludCBzcWxpdGVFcnJvckNvZGUpCi17Ci0gICAgRGF0YWJhc2VPYnNl
cnZlcjo6cmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQodGhpcywgc3FsaXRlRXJyb3JDb2RlKTsK
LX0KLQotI2Vsc2UKLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0T3BlbkRhdGFiYXNlUmVz
dWx0KGludCwgaW50LCBpbnQpIHsgfQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRDaGFu
Z2VWZXJzaW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQotdm9pZCBBYnN0cmFjdERhdGFiYXNl
OjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQotdm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwg
aW50KSB7IH0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJl
c3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0VmFj
dXVtRGF0YWJhc2VSZXN1bHQoaW50KSB7IH0KLSNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZp
c2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQWJzdHJhY3REYXRh
YmFzZV9oCi0jZGVmaW5lIEFic3RyYWN0RGF0YWJhc2VfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0
YWJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgotI2lmICFMT0dfRElTQUJMRUQgfHwgIUVSUk9SX0RJU0FCTEVECi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKLWNsYXNzIERhdGFiYXNlQ29udGV4dDsKLWNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLQotdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBYnN0cmFjdERhdGFiYXNlPiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJs
ZShib29sIGF2YWlsYWJsZSk7Ci0KLSAgICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7Ci0K
LSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7Ci0KLSAgICBib29sIG9wZW5lZCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9Ci0gICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0
dXJuIG1fbmV3OyB9Ci0gICAgYm9vbCBpc1N5bmNEYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNTeW5jRGF0YWJhc2U7IH0KLQotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRl
bnRpZmllcigpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OwotICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxp
dGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KLQotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1
dW1JZk5lZWRlZCgpOwotICAgIHZvaWQgaW50ZXJydXB0KCk7Ci0gICAgYm9vbCBpc0ludGVycnVw
dGVkKCk7Ci0KLSAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBlbmFibGVB
dXRob3JpemVyKCk7Ci0gICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKLSAgICB2b2lk
IHNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpOwotICAgIGJvb2wgbGFz
dEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgp
OwotICAgIHZvaWQgcmVzZXREZWxldGVzKCk7Ci0gICAgYm9vbCBoYWREZWxldGVzKCk7Ci0gICAg
dm9pZCByZXNldEF1dGhvcml6ZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVk
QW5kQ2xvc2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKSA9IDA7
Ci0KLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2VDb250ZXh0OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgQ2hh
bmdlVmVyc2lvbldyYXBwZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVudDsKLSAgICBm
cmllbmQgY2xhc3MgU1FMU3RhdGVtZW50U3luYzsKLSAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNh
Y3Rpb25TeW5jOwotICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKLQotICAgIGVudW0g
RGF0YWJhc2VUeXBlIHsKLSAgICAgICAgQXN5bmNEYXRhYmFzZSwKLSAgICAgICAgU3luY0RhdGFi
YXNlCi0gICAgfTsKLQotICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0g
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSk7Ci0KLSAgICB2b2lkIGNsb3NlRGF0YWJh
c2UoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3Vs
ZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOwotCi0gICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lv
biwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKLSAgICBib29sIHNldFZlcnNpb25J
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24g
PSB0cnVlKTsKLSAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLSAg
ICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0
ZWRWZXJzaW9uOyB9Ci0gICAgU3RyaW5nIGdldENhY2hlZFZlcnNpb24oKWNvbnN0OwotICAgIHZv
aWQgc2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIGdldEFjdHVhbFZl
cnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcmIHZlcnNpb24pOwotCi0gICAgdm9pZCBsb2dFcnJv
ck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotICAgIHZvaWQgcmVwb3J0T3BlbkRh
dGFiYXNlUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxp
dGVFcnJvckNvZGUpOwotICAgIHZvaWQgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQgZXJy
b3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICB2
b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNx
bEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgdm9pZCByZXBvcnRDb21taXRU
cmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQg
c3FsaXRlRXJyb3JDb2RlKTsKLSAgICB2b2lkIHJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQo
aW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7
Ci0gICAgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3FsaXRlRXJyb3JDb2Rl
KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKLQot
ICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47
Ci0gICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKLSAgICBEYXRhYmFzZUNvbnRleHQqIG1fZGF0YWJhc2VDb250ZXh0OyAvLyBPd25lZCBi
eSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCi0KLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0
cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAgICB1
bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKLSAgICBTdHJpbmcgbV9maWxlbmFtZTsKLQot
I2lmICFMT0dfRElTQUJMRUQgfHwgIUVSUk9SX0RJU0FCTEVECi0gICAgU3RyaW5nIGRhdGFiYXNl
RGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4t
PnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBp
bnQgbV9ndWlkOwotICAgIGJvb2wgbV9vcGVuZWQ7Ci0gICAgYm9vbCBtX25ldzsKLSAgICBjb25z
dCBib29sIG1faXNTeW5jRGF0YWJhc2U7Ci0KLSAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURh
dGFiYXNlOwotCi0gICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhv
cml6ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gQWJzdHJhY3REYXRhYmFzZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2aXNp
b24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMRXJyb3IuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1DaGFuZ2VWZXJzaW9uV3JhcHBlcjo6Q2hhbmdlVmVyc2lvbldy
YXBwZXIoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24p
Ci0gICAgOiBtX29sZFZlcnNpb24ob2xkVmVyc2lvbi5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1f
bmV3VmVyc2lvbihuZXdWZXJzaW9uLmlzb2xhdGVkQ29weSgpKQotewotfQotCi1ib29sIENoYW5n
ZVZlcnNpb25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkpOwotCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7
Ci0KLSAgICBTdHJpbmcgYWN0dWFsVmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5nZXRWZXJz
aW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24pKSB7Ci0gICAgICAgIGludCBzcWxpdGVFcnJv
ciA9IGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpOwotICAgICAgICBkYXRh
YmFzZS0+cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCgxLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIs
IHNxbGl0ZUVycm9yKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxlIHRvIHJlYWQgdGhlIGN1cnJlbnQgdmVyc2lvbiIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZUVycm9yLCBkYXRh
YmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYWN0dWFsVmVyc2lvbiAhPSBtX29sZFZlcnNpb24pIHsK
LSAgICAgICAgZGF0YWJhc2UtPnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoMiwgU1FMRXJyb3I6
OlZFUlNJT05fRVJSLCAwKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBh
bmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ2hhbmdlVmVyc2lv
bldyYXBwZXI6OnBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
LXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpOwot
Ci0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7Ci0KLSAg
ICBpZiAoIWRhdGFiYXNlLT5zZXRWZXJzaW9uSW5EYXRhYmFzZShtX25ld1ZlcnNpb24pKSB7Ci0g
ICAgICAgIGludCBzcWxpdGVFcnJvciA9IGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RF
cnJvcigpOwotICAgICAgICBkYXRhYmFzZS0+cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCgzLCBT
UUxFcnJvcjo6VU5LTk9XTl9FUlIsIHNxbGl0ZUVycm9yKTsKLSAgICAgICAgbV9zcWxFcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxlIHRvIHNldCBu
ZXcgdmVyc2lvbiBpbiBkYXRhYmFzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNxbGl0ZUVycm9yLCBkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBkYXRhYmFzZS0+c2V0
RXhwZWN0ZWRWZXJzaW9uKG1fbmV3VmVyc2lvbik7Ci0KLSAgICBkYXRhYmFzZS0+cmVwb3J0Q2hh
bmdlVmVyc2lvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OmhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZs
aWdodChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPnNldENhY2hlZFZlcnNpb24obV9vbGRWZXJzaW9uKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmgJKHJldmlzaW9u
IDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBDaGFuZ2VWZXJzaW9uV3Jh
cHBlcl9oCi0jZGVmaW5lIENoYW5nZVZlcnNpb25XcmFwcGVyX2gKLQotI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBTUUxFcnJvcjsKLQotY2xhc3MgQ2hhbmdlVmVyc2lvbldyYXBwZXIgOiBw
dWJsaWMgU1FMVHJhbnNhY3Rpb25XcmFwcGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDaGFuZ2VWZXJzaW9uV3JhcHBlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2hhbmdl
VmVyc2lvbldyYXBwZXIob2xkVmVyc2lvbiwgbmV3VmVyc2lvbikpOyB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgYm9v
bCBwZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgU1FMRXJy
b3IqIHNxbEVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9zcWxFcnJvci5nZXQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rp
b24qKTsKLQotcHJpdmF0ZToKLSAgICBDaGFuZ2VWZXJzaW9uV3JhcHBlcihjb25zdCBTdHJpbmcm
IG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbik7Ci0KLSAgICBTdHJpbmcgbV9v
bGRWZXJzaW9uOwotICAgIFN0cmluZyBtX25ld1ZlcnNpb247Ci0gICAgUmVmUHRyPFNRTEVycm9y
PiBtX3NxbEVycm9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQot
I2VuZGlmIC8vIENoYW5nZVZlcnNpb25XcmFwcGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIkRPTVdpbmRvd1NRTERhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93U1FMRGF0YWJh
c2U6Om9wZW5EYXRhYmFzZShET01XaW5kb3cqIHdpbmRvdywgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXdpbmRvdy0+aXNDdXJy
ZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRy
PERhdGFiYXNlPiBkYXRhYmFzZSA9IDA7Ci0gICAgaWYgKEFic3RyYWN0RGF0YWJhc2U6OmlzQXZh
aWxhYmxlKCkgJiYgd2luZG93LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nl
c3NEYXRhYmFzZSgpKQotICAgICAgICBkYXRhYmFzZSA9IERhdGFiYXNlOjpvcGVuRGF0YWJhc2Uo
d2luZG93LT5kb2N1bWVudCgpLCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVk
U2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwotCi0gICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMp
Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotCi0gICAgcmV0dXJuIGRhdGFiYXNlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2Uu
aAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dT
UUxEYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERPTVdpbmRvd1NRTERhdGFiYXNl
X2gKLSNkZWZpbmUgRE9NV2luZG93U1FMRGF0YWJhc2VfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIERhdGFiYXNlOwotY2xhc3MgRGF0YWJhc2VDYWxsYmFj
azsKLWNsYXNzIEZyYW1lOwotCi1jbGFzcyBET01XaW5kb3dTUUxEYXRhYmFzZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShET01XaW5kb3cq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKLQotcHJp
dmF0ZToKLSAgICBET01XaW5kb3dTUUxEYXRhYmFzZSgpIHsgfTsKLSAgICB+RE9NV2luZG93U1FM
RGF0YWJhc2UoKSB7IH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gRE9NV2luZG93U1FMRGF0YWJhc2Vf
aApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5pZGwJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2lu
ZG93U1FMRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHdpbmRvdyB7Ci0KLSAgICBpbnRlcmZhY2UgWwot
ICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIFN1cHBsZW1lbnRhbD1E
T01XaW5kb3cKLSAgICBdIERPTVdpbmRvd1NRTERhdGFiYXNlIHsKLSAgICAgICAgW1Y4RW5hYmxl
ZEF0UnVudGltZV0gRGF0YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lLCBpbiBE
T01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIERhdGFiYXNlQ2FsbGJh
Y2sgY3JlYXRpb25DYWxsYmFjaykKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwot
I2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAotICAgICAgICBhdHRy
aWJ1dGUgU1FMRXhjZXB0aW9uQ29uc3RydWN0b3IgU1FMRXhjZXB0aW9uOwotI2VuZGlmCi0gICAg
fTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEw
OTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJD
aGFuZ2VWZXJzaW9uV3JhcHBlci5oIgotI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgotI2lu
Y2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIK
LSNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgot
I2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiU1FMRXJyb3IuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgi
Ci0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
LmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBVU0UoSlND
KQotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERh
dGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBk
YXRhYmFzZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2tUYXNrKGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAg
ICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLmdldCgpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhQYXNzUmVm
UHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjYWxs
YmFjaykKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fY3JlYXRp
b25DYWxsYmFjayhjYWxsYmFjaykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPERhdGFiYXNl
PiBtX2RhdGFiYXNlOwotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2Fs
bGJhY2s7Ci19OwotCi1QYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBl
eHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlKQot
ewotICAgIGlmICghRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJh
c2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0
byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERh
dGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpKTsKLQotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFkYXRhYmFz
ZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGUsIGVycm9yTWVzc2Fn
ZSkpIHsKLSAgICAgICAgZGF0YWJhc2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwot
ICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotCi0gICAgRGF0YWJhc2VD
b250ZXh0Ojpmcm9tKGNvbnRleHQpLT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7Ci0KLSAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwg
Y29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24p
OwotCi0gICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkp
IHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlQ3JlYXRpb25D
YWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAg
IGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3Jl
YXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwot
ICAgIH0KLQotICAgIHJldHVybiBkYXRhYmFzZTsKLX0KLQotRGF0YWJhc2U6OkRhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwg
bmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgQXN5bmNE
YXRhYmFzZSkKLSAgICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQotICAgICwgbV9p
c1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCi0gICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi17
Ci0gICAgbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4tPmlzb2xhdGVkQ29weSgpOwotCi0gICAgU2NyaXB0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwotICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJh
c2VUaHJlYWQoKSk7Ci19Ci0KLWNsYXNzIERlcmVmQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
RGVyZWZDb250ZXh0VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVyZWZDb250
ZXh0VGFzayhjb250ZXh0KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNvbnRleHQsIGNvbnRleHQgPT0gbV9jb250ZXh0KTsKLSAgICAgICAgbV9jb250ZXh0
LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgRGVyZWZDb250ZXh0VGFzayhQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnRleHQpCi0gICAgICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gbV9jb250ZXh0OwotfTsKLQotRGF0YWJhc2U6On5EYXRhYmFzZSgpCi17Ci0g
ICAgLy8gVGhlIHJlZmVyZW5jZSB0byB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBuZWVkcyB0
byBiZSBjbGVhcmVkIG9uIHRoZSBKYXZhU2NyaXB0IHRocmVhZC4gIElmIHdlJ3JlIG9uIHRoYXQg
dGhyZWFkIGFscmVhZHksIHdlIGNhbiBqdXN0IGxldCB0aGUgUmVmUHRyJ3MgZGVzdHJ1Y3Rpb24g
ZG8gdGhlIGRlcmVmZmluZy4KLSAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpIHsKLSAgICAgICAgLy8gR3JhYiBhIHBvaW50ZXIgdG8gdGhlIHNjcmlw
dCBleGVjdXRpb24gaGVyZSBiZWNhdXNlIHdlJ3JlIHJlbGVhc2luZyBpdCB3aGVuIHdlIHBhc3Mg
aXQgdG8KLSAgICAgICAgLy8gRGVyZWZDb250ZXh0VGFzazo6Y3JlYXRlLgotICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LmdldCgpOwotICAgICAgICAKLSAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soRGVyZWZDb250ZXh0VGFzazo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5yZWxlYXNlKCkpKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBEYXRhYmFzZTo6dmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uKCk7Ci19Ci0KLWJvb2wgRGF0
YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IEV4Y2VwdGlvbkNvZGUmIGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7Ci0gICAgaWYgKCFkYXRhYmFzZUNvbnRleHQo
KS0+ZGF0YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIE93blB0cjxEYXRhYmFzZU9w
ZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOwot
ICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0
ZVRhc2sodGFzay5yZWxlYXNlKCkpOwotICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBs
ZXRpb24oKTsKLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi12b2lkIERhdGFiYXNlOjptYXJr
QXNEZWxldGVkQW5kQ2xvc2UoKQotewotICAgIGlmIChtX2RlbGV0ZWQgfHwgIWRhdGFiYXNlQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coU3Rv
cmFnZUFQSSwgIk1hcmtpbmcgJXMgKCVwKSBhcyBkZWxldGVkIiwgc3RyaW5nSWRlbnRpZmllcigp
LmFzY2lpKCkuZGF0YSgpLCB0aGlzKTsKLSAgICBtX2RlbGV0ZWQgPSB0cnVlOwotCi0gICAgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKLSAgICBpZiAoZGF0YWJhc2VDb250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCZzeW5jaHJvbml6
ZXIpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgaGFuZGxlICVwIGlzIG9u
IGEgdGVybWluYXRlZCBEYXRhYmFzZVRocmVhZCwgY2Fubm90IGJlIG1hcmtlZCBmb3Igbm9ybWFs
IGNsb3N1cmVcbiIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgT3duUHRy
PERhdGFiYXNlQ2xvc2VUYXNrPiB0YXNrID0gRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlz
LCAmc3luY2hyb25pemVyKTsKLSAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICBzeW5jaHJvbml6
ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OmNsb3NlKCkK
LXsKLSAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpOwotICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCktPmdldFRocmVhZElEKCkpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Ci0gICAgICAgIG1faXNUcmFuc2FjdGlv
blF1ZXVlRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9
IGZhbHNlOwotICAgICAgICBtX3RyYW5zYWN0aW9uUXVldWUuY2xlYXIoKTsKLSAgICB9Ci0KLSAg
ICBjbG9zZURhdGFiYXNlKCk7Ci0KLSAgICAvLyBNdXN0IHJlZigpIGJlZm9yZSBjYWxsaW5nIGRh
dGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCkuCi0gICAgUmVmUHRyPERhdGFi
YXNlPiBwcm90ZWN0ID0gdGhpczsKLSAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJl
YWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCkt
PmRhdGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwotICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKLX0KLQot
dm9pZCBEYXRhYmFzZTo6Y2xvc2VJbW1lZGlhdGVseSgpCi17Ci0gICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIERhdGFiYXNlVGhyZWFk
KiBkYXRhYmFzZVRocmVhZCA9IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpOwot
ICAgIGlmIChkYXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVx
dWVzdGVkKCkgJiYgb3BlbmVkKCkpIHsKLSAgICAgICAgbG9nRXJyb3JNZXNzYWdlKCJmb3JjaWJs
eSBjbG9zaW5nIGRhdGFiYXNlIik7Ci0gICAgICAgIGRhdGFiYXNlVGhyZWFkLT5zY2hlZHVsZUlt
bWVkaWF0ZVRhc2soRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlzLCAwKSk7Ci0gICAgfQot
fQotCi11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFi
YXNlKHRoaXMpOwotfQotCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKLXsKLSAgICBpZiAoQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJp
Znkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUsIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAg
aWYgKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICAgICAgZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlz
KTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9u
LCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
KQotewotICAgIHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNz
Q2FsbGJhY2ssIENoYW5nZVZlcnNpb25XcmFwcGVyOjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVy
c2lvbiksIGZhbHNlKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNr
PiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCwgZmFsc2UpOwotfQotCi12b2lkIERhdGFiYXNl
OjpyZWFkVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxs
YmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgcnVu
VHJhbnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCwg
dHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxFcnJvcj4gZXJyb3IpCi17Ci0gICAgY2FsbGJh
Y2stPmhhbmRsZUV2ZW50KGVycm9yLmdldCgpKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cnVuVHJh
bnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9v
bCByZWFkT25seSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJv
Z3Jlc3NNdXRleCk7Ci0gICAgaWYgKCFtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQpIHsKLSAg
ICAgICAgaWYgKGVycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIFJlZlB0cjxTUUxFcnJvcj4g
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgImRhdGFiYXNl
IGhhcyBiZWVuIGNsb3NlZCIpOwotICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmNhbGxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIGVycm9yLnJlbGVhc2UoKSkpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9
IFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1
Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpOwotICAgIG1fdHJhbnNhY3Rpb25RdWV1
ZS5hcHBlbmQodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb25J
blByb2dyZXNzKQotICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7Ci19Ci0KLXZvaWQgRGF0
YWJhc2U6OmluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwotICAgIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVUcmFuc2FjdGlvbigpOwotfQotCi12
b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKCkKLXsKLSAgICBBU1NFUlQoIW1fdHJh
bnNhY3Rpb25JblByb2dyZXNzTXV0ZXgudHJ5TG9jaygpKTsgLy8gTG9ja2VkIGJ5IGNhbGxlci4K
LSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uOwotCi0gICAgaWYgKG1faXNU
cmFuc2FjdGlvblF1ZXVlRW5hYmxlZCAmJiAhbV90cmFuc2FjdGlvblF1ZXVlLmlzRW1wdHkoKSkK
LSAgICAgICAgdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uUXVldWUudGFrZUZpcnN0KCk7Ci0K
LSAgICBpZiAodHJhbnNhY3Rpb24gJiYgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCkpIHsKLSAgICAgICAgT3duUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0gRGF0
YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbik7Ci0gICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayAlcCBmb3IgdHJh
bnNhY3Rpb24gJXBcbiIsIHRhc2suZ2V0KCksIHRhc2stPnRyYW5zYWN0aW9uKCkpOwotICAgICAg
ICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7Ci0gICAgICAgIGRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZVRhc2sodGFzay5yZWxlYXNlKCkpOwotICAg
IH0gZWxzZQotICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotfQotCi12
b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHkpCi17Ci0gICAgaWYgKCFkYXRhYmFzZUNvbnRleHQo
KS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3duUHRyPERhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0
ZSh0cmFuc2FjdGlvbik7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNl
VHJhbnNhY3Rpb25UYXNrICVwIGZvciB0aGUgdHJhbnNhY3Rpb24gc3RlcFxuIiwgdGFzay5nZXQo
KSk7Ci0gICAgaWYgKGltbWVkaWF0ZWx5KQotICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0
YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hl
ZHVsZVRhc2sodGFzay5yZWxlYXNlKCkpOwotfQotCi1jbGFzcyBEZWxpdmVyUGVuZGluZ0NhbGxi
YWNrVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxEZWxpdmVyUGVuZGluZ0NhbGxiYWNrVGFzaz4gY3JlYXRl
KFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxpdmVyUGVuZGluZ0NhbGxiYWNrVGFzayh0cmFuc2FjdGlv
bikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1QZW5kaW5n
Q2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRGVsaXZlclBlbmRpbmdDYWxsYmFj
a1Rhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCi0gICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNR
TFRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotfTsKLQotdm9pZCBEYXRhYmFzZTo6c2NoZWR1
bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERlbGl2ZXJQZW5kaW5nQ2FsbGJh
Y2tUYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKCkKLXsKLSAgICBkaXNhYmxlQXV0aG9yaXplcigpOwot
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNU
IG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJzsiKTsKLSAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmb3IgZGF0YWJhc2UgJXMiLCBkYXRh
YmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgZW5hYmxlQXV0aG9yaXpl
cigpOwotICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPiB0YWJsZU5hbWVzOwotICAgIGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgU3RyaW5n
IG5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgaWYgKG5hbWUgIT0g
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpCi0gICAgICAgICAgICB0YWJsZU5hbWVzLmFwcGVuZChu
YW1lKTsKLSAgICB9Ci0KLSAgICBlbmFibGVBdXRob3JpemVyKCk7Ci0KLSAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBnZXR0aW5nIHRh
YmxlcyBmb3IgZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRhYmxlTmFtZXM7Ci19Ci0KLVNRTFRyYW5zYWN0aW9uQ2xpZW50KiBEYXRhYmFzZTo6dHJhbnNh
Y3Rpb25DbGllbnQoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0
YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25DbGllbnQoKTsKLX0KLQotU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvciogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdAotewot
ICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1l
cygpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB1c2luZyBpc29sYXRlZENvcHkgb24gdGhlc2Ugc3Ry
aW5ncyBsb29rcyBvayBzaW5jZSB0aHJlYWRzIHRha2Ugc3RyaWN0IHR1cm5zCi0gICAgLy8gaW4g
ZGVhbGluZyB3aXRoIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZSBjb2RlIGNoYW5nZXMsIHRoaXMgbWF5
IG5vdCBiZSB0cnVlIGFueW1vcmUuCi0gICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIERh
dGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7Ci0gICAgaWYgKCFkYXRhYmFzZUNv
bnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0KLSAgICBPd25QdHI8RGF0YWJhc2VUYWJsZU5hbWVzVGFzaz4gdGFzayA9
IERhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmNyZWF0ZSh0aGlzLCAmc3luY2hyb25pemVyLCByZXN1
bHQpOwotICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUlt
bWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOwotICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFz
a0NvbXBsZXRpb24oKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVNlY3VyaXR5T3JpZ2lu
KiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIGlmIChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQotICAgICAgICByZXR1cm4gbV9jb250
ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9
PSBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9u
IDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhYmFzZV9oCi0jZGVmaW5l
IERhdGFiYXNlX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uOwotY2xh
c3MgU1FMVHJhbnNhY3Rpb25DYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50Owot
Y2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uV3JhcHBlcjsKLWNsYXNzIFZvaWRDYWxs
YmFjazsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgRGF0YWJhc2UgOiBw
dWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2Uo
KTsKLQotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUgRE9NIEFQSQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9u
KCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+LAotICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sp
OwotICAgIHZvaWQgdHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lkIHJlYWRUcmFuc2FjdGlvbihQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2spOwotCi0gICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKLSAgICBWZWN0b3I8U3RyaW5n
PiB0YWJsZU5hbWVzKCk7Ci0KLSAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgp
OwotICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQotCi0gICAg
dm9pZCBjbG9zZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCk7Ci0KLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQg
bG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNjaGVkdWxlVHJhbnNh
Y3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2NoZWR1bGVUcmFuc2Fj
dGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qLCBib29sIGltbWVkaWF0ZWx5ID0gZmFsc2UpOwotCi0g
ICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7Ci0gICAg
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIGNsYXNzIERhdGFiYXNlT3BlblRhc2s7Ci0gICAgY2xhc3MgRGF0
YWJhc2VDbG9zZVRhc2s7Ci0gICAgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7Ci0gICAg
Y2xhc3MgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazsKLQotICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRW
ZXJzaW9uLAotICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4sCi0gICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJv
b2wgcmVhZE9ubHkpOwotCi0gICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OwotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotCi0g
ICAgdm9pZCBpblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKLSAgICB2b2lkIHNjaGVk
dWxlVHJhbnNhY3Rpb24oKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5h
bWVzKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsK
LQotICAgIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7
Ci0gICAgTXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKLSAgICBib29sIG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzOwotICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVk
OwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlP
cmlnaW47Ci0KLSAgICBib29sIG1fZGVsZXRlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBEYXRhYmFz
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5ODU4
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAg
ICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3Is
Ci0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKLSAgICBdIERhdGFiYXNlIHsKLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwotICAgICAgICB2b2lkIGNoYW5nZVZl
cnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdWZXJzaW9uLCBp
biBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBp
biBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjayk7Ci0gICAgICAgIHZvaWQgdHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0g
Vm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgICAgIHZvaWQgcmVhZFRyYW5zYWN0
aW9uKGluIFtDYWxsYmFja10gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gW0Nh
bGxiYWNrLCBPcHRpb25hbF0gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh
Y2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2sp
OwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRo
b3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
QXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgot
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVy
PiBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlQXV0aG9yaXplcihk
YXRhYmFzZUluZm9UYWJsZU5hbWUpKTsKLX0KLQotRGF0YWJhc2VBdXRob3JpemVyOjpEYXRhYmFz
ZUF1dGhvcml6ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpCi0gICAgOiBt
X3NlY3VyaXR5RW5hYmxlZChmYWxzZSkKLSAgICAsIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lKGRh
dGFiYXNlSW5mb1RhYmxlTmFtZSkKLXsKLSAgICByZXNldCgpOwotICAgIGFkZFdoaXRlbGlzdGVk
RnVuY3Rpb25zKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpyZXNldCgpCi17Ci0g
ICAgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0ID0gZmFsc2U7Ci0gICAgbV9sYXN0QWN0aW9uQ2hhbmdl
ZERhdGFiYXNlID0gZmFsc2U7Ci0gICAgbV9wZXJtaXNzaW9ucyA9IFJlYWRXcml0ZU1hc2s7Ci19
Ci0KLXZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpyZXNldERlbGV0ZXMoKQotewotICAgIG1faGFk
RGVsZXRlcyA9IGZhbHNlOwotfQotCi12b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6YWRkV2hpdGVs
aXN0ZWRGdW5jdGlvbnMoKQotewotICAgIC8vIFNRTGl0ZSBmdW5jdGlvbnMgdXNlZCB0byBoZWxw
IGltcGxlbWVudCBzb21lIG9wZXJhdGlvbnMKLSAgICAvLyBBTFRFUiBUQUJMRSBoZWxwZXJzCi0g
ICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInNxbGl0ZV9yZW5hbWVfdGFibGUiKTsKLSAg
ICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic3FsaXRlX3JlbmFtZV90cmlnZ2VyIik7Ci0g
ICAgLy8gR0xPQiBoZWxwZXJzCi0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImdsb2Ii
KTsKLQotICAgIC8vIFNRTGl0ZSBjb3JlIGZ1bmN0aW9ucwotICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJhYnMiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiY2hhbmdl
cyIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJjb2FsZXNjZSIpOwotICAgIG1f
d2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJnbG9iIik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0
aW9ucy5hZGQoImlmbnVsbCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJoZXgi
KTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibGFzdF9pbnNlcnRfcm93aWQiKTsK
LSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibGVuZ3RoIik7Ci0gICAgbV93aGl0ZWxp
c3RlZEZ1bmN0aW9ucy5hZGQoImxpa2UiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFk
ZCgibG93ZXIiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibHRyaW0iKTsKLSAg
ICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibWF4Iik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1
bmN0aW9ucy5hZGQoIm1pbiIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJudWxs
aWYiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgicXVvdGUiKTsKLSAgICBtX3do
aXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgicmVwbGFjZSIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJyb3VuZCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJydHJp
bSIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzb3VuZGV4Iik7Ci0gICAgbV93
aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInNxbGl0ZV9zb3VyY2VfaWQiKTsKLSAgICBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zLmFkZCgic3FsaXRlX3ZlcnNpb24iKTsKLSAgICBtX3doaXRlbGlzdGVk
RnVuY3Rpb25zLmFkZCgic3Vic3RyIik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQo
InRvdGFsX2NoYW5nZXMiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgidHJpbSIp
OwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJ0eXBlb2YiKTsKLSAgICBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zLmFkZCgidXBwZXIiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25z
LmFkZCgiemVyb2Jsb2IiKTsKLQotICAgIC8vIFNRTGl0ZSBkYXRlIGFuZCB0aW1lIGZ1bmN0aW9u
cwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJkYXRlIik7Ci0gICAgbV93aGl0ZWxp
c3RlZEZ1bmN0aW9ucy5hZGQoInRpbWUiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFk
ZCgiZGF0ZXRpbWUiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgianVsaWFuZGF5
Iik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInN0cmZ0aW1lIik7Ci0KLSAgICAv
LyBTUUxpdGUgYWdncmVnYXRlIGZ1bmN0aW9ucwotICAgIC8vIG1heCgpIGFuZCBtaW4oKSBhcmUg
YWxyZWFkeSBpbiB0aGUgbGlzdAotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJhdmci
KTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiY291bnQiKTsKLSAgICBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zLmFkZCgiZ3JvdXBfY29uY2F0Iik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1
bmN0aW9ucy5hZGQoInN1bSIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJ0b3Rh
bCIpOwotCi0gICAgLy8gU1FMaXRlIEZUUyBmdW5jdGlvbnMKLSAgICBtX3doaXRlbGlzdGVkRnVu
Y3Rpb25zLmFkZCgibWF0Y2giKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic25p
cHBldCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJvZmZzZXRzIik7Ci0gICAg
bV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoIm9wdGltaXplIik7Ci0KLSAgICAvLyBTUUxpdGUg
SUNVIGZ1bmN0aW9ucwotICAgIC8vIGxpa2UoKSwgbG93ZXIoKSBhbmQgdXBwZXIoKSBhcmUgYWxy
ZWFkeSBpbiB0aGUgbGlzdAotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJyZWdleHAi
KTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGFibGUoY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBT
UUxBdXRoRGVueTsKLQotICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7Ci0g
ICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0KLWludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkK
LXsKLSAgICAvLyBTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgcmVzdWx0cyBpbiBhIFVQREFURSBv
cGVyYXRpb24sIHdoaWNoIGlzIG5vdAotICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5z
YWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwotICAgIC8vIHdlbGwg
ZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIGluIHRoZXNlIGNhc2VzCi0gICAgaWYg
KCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIHJldHVy
biBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRo
b3JpemVyOjpkcm9wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgaWYgKCFh
bGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIHJldHVybiB1
cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0YWJh
c2VBdXRob3JpemVyOjpkcm9wVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQotewot
ICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVEFCTEUgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRp
b24sIHdoaWNoIGlzIG5vdAotICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9u
cyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwotICAgIC8vIHdlbGwgZGlzYWxs
b3cgU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwotICAgIGlmICghYWxsb3dX
cml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICByZXR1cm4gdXBkYXRl
RGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0
aG9yaXplcjo6YWxsb3dBbHRlclRhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQotewotICAgIGlmICghYWxsb3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7Ci0KLSAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwotICAgIHJl
dHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSkKLXsKLSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhE
ZW55OwotCi0gICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKLSAgICByZXR1
cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0
aG9yaXplcjo6Y3JlYXRlVGVtcEluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQotewotICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBzaG91bGQgcmVzdWx0
IGluIGEgVVBEQVRFIG9yIElOU0VSVCBvcGVyYXRpb24sCi0gICAgLy8gd2hpY2ggaXMgbm90IGFs
bG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLAotICAg
IC8vIHNvIHdlIG1pZ2h0IGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX0lOREVY
IGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBT
UUxBdXRoRGVueTsKLQotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUp
OwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wSW5kZXgoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAg
ICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRP
blRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9w
VGVtcEluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQotewotICAg
IC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBpbiBhIERFTEVURSBvcGVy
YXRpb24sIHdoaWNoIGlzCi0gICAgLy8gbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0
aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodAotICAgIC8vIGFzIHdlbGwgZGlz
YWxsb3cgU1FMSVRFX0RST1BfVEVNUF9JTkRFWCBpbiB0aGVzZSBjYXNlcwotICAgIGlmICghYWxs
b3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICByZXR1cm4gdXBk
YXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlVHJpZ2dlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSkKLXsKLSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1
dGhEZW55OwotCi0gICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCi17Ci0gICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgcmVzdWx0
cyBpbiBhIElOU0VSVCBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAotICAgIC8vIGFsbG93ZWQgaW4g
cmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBh
cwotICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgaW4gdGhl
c2UgY2FzZXMKLSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhE
ZW55OwotCi0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0K
LWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKQotewotICAgIGlmICghYWxsb3dXcml0ZSgpKQotICAgICAgICBy
ZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBU
cmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQotewotICAgIC8v
IFNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwg
d2hpY2ggaXMgbm90Ci0gICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9y
IHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCi0gICAgLy8gd2VsbCBkaXNhbGxvdyBT
UUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgaW4gdGhlc2UgY2FzZXMKLSAgICBpZiAoIWFsbG93V3Jp
dGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAgcmV0dXJuIHVwZGF0ZURl
bGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZVZpZXcoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gKCFhbGxvd1dy
aXRlKCkgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Ci19Ci0KLWludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gU1FMSVRF
X0NSRUFURV9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIFVQREFURSBvcGVyYXRpb24sIHdoaWNoIGlz
IG5vdAotICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRl
IGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwotICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NS
RUFURV9URU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKLSAgICByZXR1cm4gKCFhbGxvd1dyaXRlKCkg
PyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmRyb3BWaWV3KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0g
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIG1faGFkRGVsZXRlcyA9IHRydWU7Ci0g
ICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJv
cFRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gU1FMSVRFX0RST1BfVEVNUF9WSUVX
IHJlc3VsdHMgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QKLSAgICAvLyBhbGxv
d2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2Ug
bWlnaHQgYXMKLSAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9EUk9QX1RFTVBfVklFVyBpbiB0
aGVzZSBjYXNlcwotICAgIGlmICghYWxsb3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7Ci0KLSAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOwotICAgIHJldHVybiBTUUxBdXRoQWxs
b3c7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJsZShjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQotewotICAgIGlmICghYWxs
b3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICAvLyBBbGxvdyBv
bmx5IHRoZSBGVFMzIGV4dGVuc2lvbgotICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxl
TmFtZSwgImZ0czMiKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAgbV9sYXN0
QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKLSAgICByZXR1cm4gZGVueUJhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQotewot
ICAgIGlmICghYWxsb3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAg
ICAvLyBBbGxvdyBvbmx5IHRoZSBGVFMzIGV4dGVuc2lvbgotICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55Owot
Ci0gICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19
Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQotewotICAgIGlmICghYWxsb3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7Ci0KLSAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVO
YW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dJbnNlcnQoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVy
biBTUUxBdXRoRGVueTsKLQotICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7
Ci0gICAgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0ID0gdHJ1ZTsKLSAgICByZXR1cm4gZGVueUJhc2Vk
T25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxs
b3dVcGRhdGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
aWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIG1f
bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7Ci0gICAgcmV0dXJuIGRlbnlCYXNlZE9u
VGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93
VHJhbnNhY3Rpb24oKQotewotICAgIHJldHVybiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhE
ZW55IDogU1FMQXV0aEFsbG93OwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1Jl
YWQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgaWYgKG1f
cGVybWlzc2lvbnMgJiBOb0FjY2Vzc01hc2sgJiYgbV9zZWN1cml0eUVuYWJsZWQpCi0gICAgICAg
IHJldHVybiBTUUxBdXRoRGVueTsKLSAgICAKLSAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5h
bWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWluZGV4
KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuICghYWxsb3dXcml0ZSgpID8gU1FMQXV0aERl
bnkgOiBTUUxBdXRoQWxsb3cpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0Fu
YWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgcmV0dXJuIGRlbnlCYXNlZE9u
VGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93
UHJhZ21hKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIG1fc2Vj
dXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3c7Ci19Ci0KLWludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93QXR0YWNoKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJu
IG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3c7Ci19Ci0KLWlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGV0YWNoKGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
cmV0dXJuIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3c7Ci19
Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBm
dW5jdGlvbk5hbWUpCi17Ci0gICAgaWYgKG1fc2VjdXJpdHlFbmFibGVkICYmICFtX3doaXRlbGlz
dGVkRnVuY3Rpb25zLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBTUUxB
dXRoRGVueTsKLQotICAgIHJldHVybiBTUUxBdXRoQWxsb3c7Ci19Ci0KLXZvaWQgRGF0YWJhc2VB
dXRob3JpemVyOjpkaXNhYmxlKCkKLXsKLSAgICBtX3NlY3VyaXR5RW5hYmxlZCA9IGZhbHNlOwot
fQotCi12b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6ZW5hYmxlKCkKLXsKLSAgICBtX3NlY3VyaXR5
RW5hYmxlZCA9IHRydWU7Ci19Ci0KLWJvb2wgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1dyaXRl
KCkKLXsKLSAgICByZXR1cm4gIShtX3NlY3VyaXR5RW5hYmxlZCAmJiAobV9wZXJtaXNzaW9ucyAm
IFJlYWRPbmx5TWFzayB8fCBtX3Blcm1pc3Npb25zICYgTm9BY2Nlc3NNYXNrKSk7Ci19Ci0KLXZv
aWQgRGF0YWJhc2VBdXRob3JpemVyOjpzZXRSZWFkT25seSgpCi17Ci0gICAgbV9wZXJtaXNzaW9u
cyB8PSBSZWFkT25seU1hc2s7Ci19Ci0gICAKLXZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpzZXRQ
ZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpCi17Ci0gICAgbV9wZXJtaXNzaW9ucyA9IHBlcm1p
c3Npb25zOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlTmFt
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fc2VjdXJpdHlF
bmFibGVkKQotICAgICAgICByZXR1cm4gU1FMQXV0aEFsbG93OwotCi0gICAgLy8gU2FkbHksIG5v
cm1hbCBjcmVhdGVzIGFuZCBkcm9wcyBlbmQgdXAgYWZmZWN0aW5nIHNxbGl0ZV9tYXN0ZXIgaW4g
YW4gYXV0aG9yaXplciBjYWxsYmFjaywgc28KLSAgICAvLyBpdCB3aWxsIGJlIHRvdWdoIHRvIGVu
Zm9yY2UgYWxsIG9mIHRoZSBmb2xsb3dpbmcgcG9saWNpZXMKLSAgICAvL2lmIChlcXVhbElnbm9y
aW5nQ2FzZSh0YWJsZU5hbWUsICJzcWxpdGVfbWFzdGVyIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
dGFibGVOYW1lLCAic3FsaXRlX3RlbXBfbWFzdGVyIikgfHwKLSAgICAvLyAgICBlcXVhbElnbm9y
aW5nQ2FzZSh0YWJsZU5hbWUsICJzcWxpdGVfc2VxdWVuY2UiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZSh0YWJsZU5hbWUsIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpCi0gICAgLy8g
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0
YWJsZU5hbWUsIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1
dGhEZW55OwotCi0gICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKLX0KLQotaW50IERhdGFiYXNlQXV0
aG9yaXplcjo6dXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpCi17Ci0gICAgaW50IGFsbG93ID0gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1l
KTsKLSAgICBpZiAoYWxsb3cpCi0gICAgICAgIG1faGFkRGVsZXRlcyA9IHRydWU7Ci0gICAgcmV0
dXJuIGFsbG93OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDEwOTg1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIERhdGFiYXNlQXV0aG9yaXplcl9oCi0jZGVmaW5l
IERhdGFiYXNlQXV0aG9yaXplcl9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZXh0ZXJuIGNvbnN0IGludCBTUUxBdXRo
QWxsb3c7Ci1leHRlcm4gY29uc3QgaW50IFNRTEF1dGhJZ25vcmU7Ci1leHRlcm4gY29uc3QgaW50
IFNRTEF1dGhEZW55OwotCi1jbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXIgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VBdXRob3JpemVyPiB7Ci1wdWJsaWM6Ci0KLSAgICBlbnVt
IFBlcm1pc3Npb25zIHsKLSAgICAgICAgUmVhZFdyaXRlTWFzayA9IDAsCi0gICAgICAgIFJlYWRP
bmx5TWFzayA9IDEgPDwgMSwKLSAgICAgICAgTm9BY2Nlc3NNYXNrID0gMSA8PCAyCi0gICAgfTsK
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKLQotICAgIGludCBjcmVhdGVUYWJsZShj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0gICAgaW50IGNyZWF0ZVRlbXBUYWJsZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSk7Ci0gICAgaW50IGRyb3BUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSk7Ci0gICAgaW50IGRyb3BUZW1wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwot
ICAgIGludCBhbGxvd0FsdGVyVGFibGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKTsKLQotICAgIGludCBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcm
IGluZGV4TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwotICAgIGludCBjcmVhdGVUZW1w
SW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsK
LSAgICBpbnQgZHJvcEluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSk7Ci0gICAgaW50IGRyb3BUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5h
bWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLQotICAgIGludCBjcmVhdGVUcmlnZ2VyKGNv
bnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLSAgICBp
bnQgY3JlYXRlVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpOwotICAgIGludCBkcm9wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdn
ZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0gICAgaW50IGRyb3BUZW1wVHJpZ2dl
cihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0K
LSAgICBpbnQgY3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKLSAgICBpbnQgY3Jl
YXRlVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7Ci0gICAgaW50IGRyb3BWaWV3KGNv
bnN0IFN0cmluZyYgdmlld05hbWUpOwotICAgIGludCBkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5n
JiB2aWV3TmFtZSk7Ci0KLSAgICBpbnQgY3JlYXRlVlRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpOwotICAgIGludCBkcm9wVlRhYmxlKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpOwotCi0gICAgaW50
IGFsbG93RGVsZXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLSAgICBpbnQgYWxsb3dJbnNl
cnQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwotICAgIGludCBhbGxvd1VwZGF0ZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBjb2x1bW5OYW1lKTsKLSAgICBpbnQgYWxs
b3dUcmFuc2FjdGlvbigpOwotCi0gICAgaW50IGFsbG93U2VsZWN0KCkgeyByZXR1cm4gU1FMQXV0
aEFsbG93OyB9Ci0gICAgaW50IGFsbG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29u
c3QgU3RyaW5nJiBjb2x1bW5OYW1lKTsKLQotICAgIGludCBhbGxvd1JlaW5kZXgoY29uc3QgU3Ry
aW5nJiBpbmRleE5hbWUpOwotICAgIGludCBhbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpOwotICAgIGludCBhbGxvd0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1l
KTsKLSAgICBpbnQgYWxsb3dQcmFnbWEoY29uc3QgU3RyaW5nJiBwcmFnbWFOYW1lLCBjb25zdCBT
dHJpbmcmIGZpcnN0QXJndW1lbnQpOwotCi0gICAgaW50IGFsbG93QXR0YWNoKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpOwotICAgIGludCBhbGxvd0RldGFjaChjb25zdCBTdHJpbmcmIGRhdGFiYXNl
TmFtZSk7Ci0KLSAgICB2b2lkIGRpc2FibGUoKTsKLSAgICB2b2lkIGVuYWJsZSgpOwotICAgIHZv
aWQgc2V0UmVhZE9ubHkoKTsKLSAgICB2b2lkIHNldFBlcm1pc3Npb25zKGludCBwZXJtaXNzaW9u
cyk7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCByZXNldERlbGV0ZXMoKTsKLQotICAg
IGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEFjdGlvbldh
c0luc2VydDsgfQotICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZTsgfQotICAgIGJvb2wgaGFkRGVsZXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFkRGVsZXRlczsgfQotCi1wcml2YXRlOgotICAgIERhdGFi
YXNlQXV0aG9yaXplcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7Ci0gICAg
dm9pZCBhZGRXaGl0ZWxpc3RlZEZ1bmN0aW9ucygpOwotICAgIGludCBkZW55QmFzZWRPblRhYmxl
TmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgdXBkYXRlRGVsZXRlc0Jhc2VkT25U
YWJsZU5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd1dyaXRlKCk7Ci0KLSAgICBp
bnQgbV9wZXJtaXNzaW9uczsKLSAgICBib29sIG1fc2VjdXJpdHlFbmFibGVkIDogMTsKLSAgICBi
b29sIG1fbGFzdEFjdGlvbldhc0luc2VydCA6IDE7Ci0gICAgYm9vbCBtX2xhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UgOiAxOwotICAgIGJvb2wgbV9oYWREZWxldGVzIDogMTsKLQotICAgIGNvbnN0
IFN0cmluZyBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nLCBD
YXNlRm9sZGluZ0hhc2g+IG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnM7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBEYXRhYmFzZUF1dGhvcml6ZXJfaApJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFiYXNlQ2FsbGJhY2tfaAotI2RlZmluZSBE
YXRhYmFzZUNhbGxiYWNrX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBEYXRhYmFzZTsKLWNsYXNzIERhdGFiYXNlU3luYzsKLQotY2xhc3MgRGF0YWJhc2VDYWxs
YmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZUNhbGxiYWNrPiB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFdmVudChEYXRhYmFzZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RXZlbnQoRGF0YWJhc2VTeW5jKikgPSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8v
IERhdGFiYXNlQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZUNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1tb2R1bGUgc3RvcmFnZSB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
U1FMX0RBVEFCQVNFLAotICAgICAgICBDYWxsYmFjawotICAgIF0gRGF0YWJhc2VDYWxsYmFjayB7
Ci0gICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gRGF0YWJhc2UgZGF0YWJhc2UpOwotICAg
ICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIERhdGFiYXNlU3luYyBkYXRhYmFzZSk7Ci0gICAg
fTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKLQotI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGFz
ay5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUcmFj
a2VyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiU2NoZW1lUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1
ZGUgIlNldHRpbmdzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIERhdGFiYXNl
Q29udGV4dCogZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFiYXNlQ29udGV4dCo+
KFN1cHBsZW1lbnQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OmZyb20oY29udGV4dCwgIkRhdGFi
YXNlQ29udGV4dCIpKTsKLX0KLQotRGF0YWJhc2VDb250ZXh0OjpEYXRhYmFzZUNvbnRleHQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dChjb250ZXh0KQotICAgICwgbV9oYXNPcGVuRGF0YWJhc2VzKGZhbHNlKQotewotfQotCi1E
YXRhYmFzZUNvbnRleHQ6On5EYXRhYmFzZUNvbnRleHQoKQotewotICAgIGlmIChtX2RhdGFiYXNl
VGhyZWFkKSB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJl
cXVlc3RlZCgpKTsKLSAgICAgICAgbV9kYXRhYmFzZVRocmVhZCA9IDA7Ci0gICAgfQotfQotCi1E
YXRhYmFzZUNvbnRleHQqIERhdGFiYXNlQ29udGV4dDo6ZnJvbShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQotewotICAgIERhdGFiYXNlQ29udGV4dCogc3VwcGxlbWVudCA9IGV4aXN0
aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KTsKLSAgICBpZiAoIXN1cHBsZW1lbnQpIHsK
LSAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBEYXRhYmFzZUNvbnRleHQoY29udGV4dCk7Ci0gICAg
ICAgIHByb3ZpZGVUbyhjb250ZXh0LCAiRGF0YWJhc2VDb250ZXh0IiwgYWRvcHRQdHIoc3VwcGxl
bWVudCkpOwotICAgICAgICBBU1NFUlQoc3VwcGxlbWVudCA9PSBleGlzdGluZ0RhdGFiYXNlQ29u
dGV4dEZyb20oY29udGV4dCkpOwotICAgIH0KLSAgICByZXR1cm4gc3VwcGxlbWVudDsKLX0KLQot
RGF0YWJhc2VUaHJlYWQqIERhdGFiYXNlQ29udGV4dDo6ZGF0YWJhc2VUaHJlYWQoKQotewotICAg
IGlmICghbV9kYXRhYmFzZVRocmVhZCAmJiAhbV9oYXNPcGVuRGF0YWJhc2VzKSB7Ci0gICAgICAg
IC8vIENyZWF0ZSB0aGUgZGF0YWJhc2UgdGhyZWFkIG9uIGZpcnN0IHJlcXVlc3QgLSBidXQgbm90
IGlmIGF0IGxlYXN0IG9uZSBkYXRhYmFzZSB3YXMgYWxyZWFkeSBvcGVuZWQsCi0gICAgICAgIC8v
IGJlY2F1c2UgaW4gdGhhdCBjYXNlIHdlIGFscmVhZHkgaGFkIGEgZGF0YWJhc2UgdGhyZWFkIGFu
ZCB0ZXJtaW5hdGVkIGl0IGFuZCBzaG91bGQgbm90IGNyZWF0ZSBhbm90aGVyLgotICAgICAgICBt
X2RhdGFiYXNlVGhyZWFkID0gRGF0YWJhc2VUaHJlYWQ6OmNyZWF0ZSgpOwotICAgICAgICBpZiAo
IW1fZGF0YWJhc2VUaHJlYWQtPnN0YXJ0KCkpCi0gICAgICAgICAgICBtX2RhdGFiYXNlVGhyZWFk
ID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9kYXRhYmFzZVRocmVhZC5nZXQoKTsKLX0KLQot
Ym9vbCBEYXRhYmFzZUNvbnRleHQ6Omhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKLXsKLSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJhc2VDb250ZXh0Ojpm
cm9tIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERhdGFiYXNlQ29udGV4
dCB0byBiZSBhbGxvY2F0ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KLSAgICBEYXRh
YmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJv
bShjb250ZXh0KTsKLSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRhdGFiYXNlczsKLX0K
LQotdm9pZCBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBjbGVhbnVwU3luYykKLXsK
LSAgICAvLyBXZSBkb24ndCB1c2UgRGF0YWJhc2VDb250ZXh0Ojpmcm9tIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0byBjYXVzZQotICAgIC8vIERhdGFiYXNlQ29udGV4dCB0byBiZSBhbGxvY2F0ZWQg
aWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KLSAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFi
YXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KTsKLQotICAg
IGlmIChkYXRhYmFzZUNvbnRleHQgJiYgZGF0YWJhc2VDb250ZXh0LT5tX2RhdGFiYXNlVGhyZWFk
KQotICAgICAgICBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQtPnJlcXVlc3RUZXJt
aW5hdGlvbihjbGVhbnVwU3luYyk7Ci0gICAgZWxzZSBpZiAoY2xlYW51cFN5bmMpCi0gICAgICAg
IGNsZWFudXBTeW5jLT50YXNrQ29tcGxldGVkKCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2VDb250ZXh0
OjphbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAg
ICBpZiAoIWRvY3VtZW50LT5wYWdlKCkgfHwgKGRvY3VtZW50LT5wYWdlKCktPnNldHRpbmdzKCkt
PnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSAmJiAhU2NoZW1lUmVnaXN0cnk6OmFsbG93c0RhdGFi
YXNlQWNjZXNzSW5Qcml2YXRlQnJvd3NpbmcoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnBy
b3RvY29sKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2Vy
Q29udGV4dCgpKTsKLSAgICAvLyBhbGxvd0RhdGFiYXNlQWNjZXNzIGlzIG5vdCB5ZXQgaW1wbGVt
ZW50ZWQgZm9yIHdvcmtlcnMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGF0YWJhc2VD
b250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkK
LSAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+ZXhjZWVkZWREYXRhYmFzZVF1
b3RhKGRvY3VtZW50LT5mcmFtZSgpLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0j
aWYgIVBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIGEgcmVhbCBp
bXBsZW1lbnRhdGlvbjsgdGhpcyBpcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiBmb3IgdGVzdGluZy4K
LSAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAx
MDI0OwotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgZGVmYXVsdFF1b3RhKTsKLSNlbmRpZgot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFC
QVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5oCShyZXZp
c2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWZuZGVmIERh
dGFiYXNlQ29udGV4dF9oCi0jZGVmaW5lIERhdGFiYXNlQ29udGV4dF9oCi0KLSNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZTsKLWNsYXNzIERhdGFiYXNlVGFza1N5bmNocm9u
aXplcjsKLWNsYXNzIERhdGFiYXNlVGhyZWFkOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKLQotY2xhc3MgRGF0YWJhc2VDb250ZXh0IDogcHVibGljIFN1cHBsZW1lbnQ8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dD4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQ29udGV4dCgp
OwotICAgIHN0YXRpYyBEYXRhYmFzZUNvbnRleHQqIGZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwotCi0gICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7Ci0KLSAgICB2b2lk
IHNldEhhc09wZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KLQot
ICAgIHN0YXRpYyBib29sIGhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwotCi0gICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCBjbGVhbnVwU3lu
YyB3aWxsIGJlIHNpZ25hbGxlZC4KLSAgICBzdGF0aWMgdm9pZCBzdG9wRGF0YWJhc2VzKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKLQotICAgIGJv
b2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0OwotICAgIHZvaWQgZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgRGF0
YWJhc2VDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQotICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBSZWZQdHI8RGF0YWJh
c2VUaHJlYWQ+IG1fZGF0YWJhc2VUaHJlYWQ7Ci0gICAgYm9vbCBtX2hhc09wZW5EYXRhYmFzZXM7
IC8vIFRoaXMgbmV2ZXIgY2hhbmdlcyBiYWNrIHRvIGZhbHNlLCBldmVuIGFmdGVyIHRoZSBkYXRh
YmFzZSB0aHJlYWQgaXMgY2xvc2VkLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIERhdGFiYXNlQ29udGV4
dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlRGV0YWlscy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VEZXRhaWxzLmgJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VEZXRhaWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhYmFzZURl
dGFpbHNfaAotI2RlZmluZSBEYXRhYmFzZURldGFpbHNfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlRGV0YWlscyB7
Ci1wdWJsaWM6Ci0gICAgRGF0YWJhc2VEZXRhaWxzKCkKLSAgICAgICAgOiBtX2V4cGVjdGVkVXNh
Z2UoMCkKLSAgICAgICAgLCBtX2N1cnJlbnRVc2FnZSgwKQotICAgIHsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIG1fdGhyZWFkID0gY3VycmVudFRocmVhZCgpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgRGF0YWJhc2VEZXRhaWxzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGN1cnJlbnRVc2FnZSkKLSAgICAgICAgOiBtX25hbWUoZGF0YWJhc2VOYW1l
KQotICAgICAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUpCi0gICAgICAgICwgbV9leHBl
Y3RlZFVzYWdlKGV4cGVjdGVkVXNhZ2UpCi0gICAgICAgICwgbV9jdXJyZW50VXNhZ2UoY3VycmVu
dFVzYWdlKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fdGhyZWFkID0gY3VycmVu
dFRocmVhZCgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheU5hbWU7IH0KLSAgICB1aW50NjRfdCBleHBlY3RlZFVzYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZFVzYWdlOyB9Ci0gICAgdWludDY0X3QgY3VycmVu
dFVzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VXNhZ2U7IH0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZDsg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9k
aXNwbGF5TmFtZTsKLSAgICB1aW50NjRfdCBtX2V4cGVjdGVkVXNhZ2U7Ci0gICAgdWludDY0X3Qg
bV9jdXJyZW50VXNhZ2U7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWQ7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBEYXRhYmFzZURldGFpbHNfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgotCi0jaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKLSNpbmNsdWRl
ICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU1FM
RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCi0jaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhYmFzZVN5
bmM+IERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
LQotICAgIGlmICghRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJh
c2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0
byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5l
dyBEYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSkpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAo
IWRhdGFiYXNlLT5wZXJmb3JtT3BlbkFuZFZlcmlmeSghY3JlYXRpb25DYWxsYmFjaywgZWMsIGVy
cm9yTWVzc2FnZSkpIHsKLSAgICAgICAgZGF0YWJhc2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJvck1l
c3NhZ2UpOwotICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0
YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotCi0gICAg
aWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKLSAgICAg
ICAgTE9HKFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9yIGRh
dGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KGRhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGF0YWJh
c2U7Ci19Ci0KLURhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZl
cnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi0gICAgOiBBYnN0cmFjdERhdGFiYXNl
KGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNp
emUsIFN5bmNEYXRhYmFzZSkKLXsKLX0KLQotRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkK
LXsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7Ci0KLSAgICBpZiAob3BlbmVkKCkpIHsKLSAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwotICAgICAgICBjbG9zZURhdGFiYXNlKCk7
Ci0gICAgfQotfQotCi12b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJp
bmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2hhbmdlVmVyc2lvbkNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7Ci0KLSAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJv
Z3Jlc3MoKSkgewotICAgICAgICByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDEsIFNRTEV4Y2Vw
dGlvbjo6REFUQUJBU0VfRVJSLCAwKTsKLSAgICAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgidW5h
YmxlIHRvIGNoYW5nZVZlcnNpb24gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbiIpOwotICAgICAg
ICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gdHJhbnNhY3Rpb24gPSBTUUxUcmFu
c2FjdGlvblN5bmM6OmNyZWF0ZSh0aGlzLCBjaGFuZ2VWZXJzaW9uQ2FsbGJhY2ssIGZhbHNlKTsK
LSAgICBpZiAoKGVjID0gdHJhbnNhY3Rpb24tPmJlZ2luKCkpKSB7Ci0gICAgICAgIEFTU0VSVCgh
bGFzdEVycm9yTWVzc2FnZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBTdHJpbmcgYWN0dWFsVmVyc2lvbjsKLSAgICBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJh
c2UoYWN0dWFsVmVyc2lvbikpIHsKLSAgICAgICAgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCgy
LCBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSLCBzcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigp
KTsKLSAgICAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIHJlYWQgdGhlIGN1cnJl
bnQgdmVyc2lvbiIsIHNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIHNxbGl0ZURhdGFiYXNl
KCkubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYWN0dWFsVmVyc2lvbiAhPSBv
bGRWZXJzaW9uKSB7Ci0gICAgICAgIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoMywgU1FMRXhj
ZXB0aW9uOjpWRVJTSU9OX0VSUiwgMCk7Ci0gICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoImN1
cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVudCBk
byBub3QgbWF0Y2giKTsKLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChlYyA9IHRyYW5zYWN0aW9uLT5leGVj
dXRlKCkpKSB7Ci0gICAgICAgIEFTU0VSVCghbGFzdEVycm9yTWVzc2FnZSgpLmlzRW1wdHkoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNl
KG5ld1ZlcnNpb24pKSB7Ci0gICAgICAgIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoNCwgU1FM
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgc3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7Ci0g
ICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBzZXQgdGhlIG5ldyB2ZXJzaW9u
Iiwgc3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+Y29tbWl0KCkp
KSB7Ci0gICAgICAgIEFTU0VSVCghbGFzdEVycm9yTWVzc2FnZSgpLmlzRW1wdHkoKSk7Ci0gICAg
ICAgIHNldENhY2hlZFZlcnNpb24ob2xkVmVyc2lvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLQotICAg
IHNldEV4cGVjdGVkVmVyc2lvbihuZXdWZXJzaW9uKTsKLSAgICBzZXRMYXN0RXJyb3JNZXNzYWdl
KCIiKTsKLX0KLQotdm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZmFsc2UsIGVjKTsKLX0KLQotdm9pZCBEYXRh
YmFzZVN5bmM6OnJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiBjYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcnVuVHJhbnNhY3Rp
b24oY2FsbGJhY2ssIHRydWUsIGVjKTsKLX0KLQotdm9pZCBEYXRhYmFzZVN5bmM6OnJ1blRyYW5z
YWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBi
b29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0KLSAgICBpZiAoc3FsaXRlRGF0
YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotICAgICAgICBzZXRMYXN0RXJyb3JN
ZXNzYWdlKCJ1bmFibGUgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiBmcm9tIHdpdGhpbiBhIHRyYW5z
YWN0aW9uIik7Ci0gICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiB0cmFu
c2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCByZWFk
T25seSk7Ci0gICAgaWYgKChlYyA9IHRyYW5zYWN0aW9uLT5iZWdpbigpKSB8fCAoZWMgPSB0cmFu
c2FjdGlvbi0+ZXhlY3V0ZSgpKSB8fCAoZWMgPSB0cmFuc2FjdGlvbi0+Y29tbWl0KCkpKSB7Ci0g
ICAgICAgIEFTU0VSVCghbGFzdEVycm9yTWVzc2FnZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIHRy
YW5zYWN0aW9uLT5yb2xsYmFjaygpOwotICAgIH0KLQotICAgIHNldExhc3RFcnJvck1lc3NhZ2Uo
IiIpOwotfQotCi12b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKLXsK
LSAgICAvLyBGSVhNRTogbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciB0byBjbG9zZUltbWVk
aWF0ZWx5KCksIGJ1dCBpbiBhIHN5bmMgd2F5Ci19Ci0KLWNsYXNzIENsb3NlU3luY0RhdGFiYXNl
T25Db250ZXh0VGhyZWFkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDbG9zZVN5bmNEYXRhYmFzZU9uQ29u
dGV4dFRocmVhZFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2Up
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENsb3NlU3luY0RhdGFiYXNlT25D
b250ZXh0VGhyZWFkVGFzayhkYXRhYmFzZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKLSAgICB7Ci0gICAgICAgIG1fZGF0
YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2xvc2VT
eW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBk
YXRhYmFzZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgIHsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOwotfTsKLQotdm9pZCBEYXRhYmFz
ZVN5bmM6OmNsb3NlSW1tZWRpYXRlbHkoKQotewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLQotICAgIGlmICghb3BlbmVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGxvZ0Vycm9yTWVzc2FnZSgiZm9yY2libHkgY2xvc2luZyBkYXRh
YmFzZSIpOwotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFz
ZSh0aGlzKTsKLSAgICBjbG9zZURhdGFiYXNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRGF0YWJhc2VTeW5jX2gKLSNkZWZpbmUgRGF0YWJhc2VTeW5jX2gKLQotI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2lmbmRlZiBO
REVCVUcKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9u
U3luYzsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwotY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotCi10eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwotCi0vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRl
ZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERh
dGFiYXNlU3luYyA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5EYXRhYmFzZVN5bmMoKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3lu
Yz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdHJh
bnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIHJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB2b2lkIG1h
cmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5
KCk7Ci0KLSAgICBjb25zdCBTdHJpbmcmIGxhc3RFcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RFcnJvck1lc3NhZ2U7IH0KLSAgICB2b2lkIHNldExhc3RFcnJvck1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSB7IG1fbGFzdEVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7IH0KLSAg
ICB2b2lkIHNldExhc3RFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0
ZUNvZGUpCi0gICAgewotICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdlKFN0cmluZzo6Zm9ybWF0
KCIlcyAoJWQpIiwgbWVzc2FnZSwgc3FsaXRlQ29kZSkpOwotICAgIH0KLSAgICB2b2lkIHNldExh
c3RFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0ZUNvZGUsIGNvbnN0
IGNoYXIqIHNxbGl0ZU1lc3NhZ2UpCi0gICAgewotICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdl
KFN0cmluZzo6Zm9ybWF0KCIlcyAoJWQsICVzKSIsIG1lc3NhZ2UsIHNxbGl0ZUNvZGUsIHNxbGl0
ZU1lc3NhZ2UpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VTeW5jKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLAotICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIFN0cmluZyBtX2xhc3RFcnJvck1lc3NhZ2U7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAotICAgICAgICBPbWl0
Q29uc3RydWN0b3IsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKLSAgICBdIERhdGFiYXNlU3lu
YyB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBsYXN0RXJyb3JNZXNzYWdlOwotICAgICAg
ICB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmlu
ZyBuZXdWZXJzaW9uLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjayBjYWxsYmFjaykgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgdHJh
bnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayBjYWxsYmFj
aykgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgcmVhZFRyYW5zYWN0aW9uKGlu
IFtDYWxsYmFja10gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHJhaXNlcyhE
T01FeGNlcHRpb24pOwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGFzay5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKLQotI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXI6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcigpCi0gICAgOiBtX3Rhc2tDb21wbGV0ZWQoZmFs
c2UpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9oYXNDaGVja2VkRm9yVGVybWluYXRpb24oZmFs
c2UpCi0jZW5kaWYKLXsKLX0KLQotdm9pZCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI6OndhaXRG
b3JUYXNrQ29tcGxldGlvbigpCi17Ci0gICAgbV9zeW5jaHJvbm91c011dGV4LmxvY2soKTsKLSAg
ICB3aGlsZSAoIW1fdGFza0NvbXBsZXRlZCkKLSAgICAgICAgbV9zeW5jaHJvbm91c0NvbmRpdGlv
bi53YWl0KG1fc3luY2hyb25vdXNNdXRleCk7Ci0gICAgbV9zeW5jaHJvbm91c011dGV4LnVubG9j
aygpOwotfQotCi12b2lkIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6dGFza0NvbXBsZXRlZCgp
Ci17Ci0gICAgbV9zeW5jaHJvbm91c011dGV4LmxvY2soKTsKLSAgICBtX3Rhc2tDb21wbGV0ZWQg
PSB0cnVlOwotICAgIG1fc3luY2hyb25vdXNDb25kaXRpb24uc2lnbmFsKCk7Ci0gICAgbV9zeW5j
aHJvbm91c011dGV4LnVubG9jaygpOwotfQotCi1EYXRhYmFzZVRhc2s6OkRhdGFiYXNlVGFzayhE
YXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVy
KQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1fc3luY2hyb25pemVyKHN5bmNo
cm9uaXplcikKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgLCBtX2NvbXBsZXRlKGZhbHNlKQotI2Vu
ZGlmCi17Ci19Ci0KLURhdGFiYXNlVGFzazo6fkRhdGFiYXNlVGFzaygpCi17Ci0jaWYgIUxPR19E
SVNBQkxFRAotICAgIEFTU0VSVChtX2NvbXBsZXRlIHx8ICFtX3N5bmNocm9uaXplcik7Ci0jZW5k
aWYKLX0KLQotdm9pZCBEYXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKLXsKLSAgICAvLyBEYXRh
YmFzZSB0YXNrcyBhcmUgbWVhbnQgdG8gYmUgdXNlZCBvbmx5IG9uY2UsIHNvIG1ha2Ugc3VyZSB0
aGlzIG9uZSBoYXNuJ3QgYmVlbiBwZXJmb3JtZWQgYmVmb3JlLgotI2lmICFMT0dfRElTQUJMRUQK
LSAgICBBU1NFUlQoIW1fY29tcGxldGUpOwotI2VuZGlmCi0KLSAgICBMT0coU3RvcmFnZUFQSSwg
IlBlcmZvcm1pbmcgJXMgJXBcbiIsIGRlYnVnVGFza05hbWUoKSwgdGhpcyk7Ci0KLSAgICBtX2Rh
dGFiYXNlLT5yZXNldEF1dGhvcml6ZXIoKTsKLSAgICBkb1BlcmZvcm1UYXNrKCk7Ci0KLSAgICBp
ZiAobV9zeW5jaHJvbml6ZXIpCi0gICAgICAgIG1fc3luY2hyb25pemVyLT50YXNrQ29tcGxldGVk
KCk7Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgbV9jb21wbGV0ZSA9IHRydWU7Ci0jZW5kaWYK
LX0KLQotLy8gKioqIERhdGFiYXNlT3BlblRhc2sgKioqCi0vLyBPcGVucyB0aGUgZGF0YWJhc2Ug
ZmlsZSBhbmQgdmVyaWZpZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmVyc2lv
bi4KLQotRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWJh
c2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tT
eW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2Us
IHN5bmNocm9uaXplcikKLSAgICAsIG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Uoc2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UpCi0gICAgLCBtX2NvZGUoY29kZSkKLSAgICAsIG1fZXJyb3JNZXNzYWdl
KGVycm9yTWVzc2FnZSkKLSAgICAsIG1fc3VjY2VzcyhzdWNjZXNzKQotewotICAgIEFTU0VSVChz
eW5jaHJvbml6ZXIpOyAvLyBBIHRhc2sgd2l0aCBvdXRwdXQgcGFyYW1ldGVycyBpcyBzdXBwb3Nl
ZCB0byBiZSBzeW5jaHJvbm91cy4KLX0KLQotdm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFz
azo6ZG9QZXJmb3JtVGFzaygpCi17Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBtX3N1
Y2Nlc3MgPSBkYXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX3NldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBtX2NvZGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgaWYgKCFtX3N1Y2Nlc3MpCi0g
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmlzb2xhdGVkQ29weSgpOwotfQot
Ci0jaWYgIUxPR19ESVNBQkxFRAotY29uc3QgY2hhciogRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRh
c2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiRGF0YWJhc2VPcGVuVGFz
ayI7Ci19Ci0jZW5kaWYKLQotLy8gKioqIERhdGFiYXNlQ2xvc2VUYXNrICoqKgotLy8gQ2xvc2Vz
IHRoZSBkYXRhYmFzZS4KLQotRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNs
b3NlVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3lu
Y2hyb25pemVyKQotICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5jaHJvbml6ZXIpCi17
Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpkb1BlcmZvcm1UYXNrKCkK
LXsKLSAgICBkYXRhYmFzZSgpLT5jbG9zZSgpOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotY29u
c3QgY2hhciogRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gIkRhdGFiYXNlQ2xvc2VUYXNrIjsKLX0KLSNlbmRpZgotCi0vLyAq
KiogRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgKioqCi0vLyBTdGFydHMgYSB0cmFuc2FjdGlvbiB0
aGF0IHdpbGwgcmVwb3J0IGl0cyByZXN1bHRzIHZpYSBhIGNhbGxiYWNrLgotCi1EYXRhYmFzZTo6
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKQotICAgIDogRGF0YWJhc2VUYXNrKHRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLCAwKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
LXsKLX0KLQotdm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9y
bVRhc2soKQotewotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5wZXJmb3JtTmV4dFN0ZXAoKSkKLSAg
ICAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29t
cGxldGVkKCk7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1jb25zdCBjaGFyKiBEYXRhYmFzZTo6
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAotewotICAgIHJl
dHVybiAiRGF0YWJhc2VUcmFuc2FjdGlvblRhc2siOwotfQotI2VuZGlmCi0KLS8vICoqKiBEYXRh
YmFzZVRhYmxlTmFtZXNUYXNrICoqKgotLy8gUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgdGFibGVz
IGluIHRoZSBkYXRhYmFzZSAtIGZvciBXZWJJbnNwZWN0b3Igc3VwcG9ydC4KLQotRGF0YWJhc2U6
OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2soRGF0YWJhc2Uq
IGRhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgVmVjdG9y
PFN0cmluZz4mIG5hbWVzKQotICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5jaHJvbml6
ZXIpCi0gICAgLCBtX3RhYmxlTmFtZXMobmFtZXMpCi17Ci0gICAgQVNTRVJUKHN5bmNocm9uaXpl
cik7IC8vIEEgdGFzayB3aXRoIG91dHB1dCBwYXJhbWV0ZXJzIGlzIHN1cHBvc2VkIHRvIGJlIHN5
bmNocm9ub3VzLgotfQotCi12b2lkIERhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpk
b1BlcmZvcm1UYXNrKCkKLXsKLSAgICBtX3RhYmxlTmFtZXMgPSBkYXRhYmFzZSgpLT5wZXJmb3Jt
R2V0VGFibGVOYW1lcygpOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotY29uc3QgY2hhciogRGF0
YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAotewot
ICAgIHJldHVybiAiRGF0YWJhc2VUYWJsZU5hbWVzVGFzayI7Ci19Ci0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRhc2suaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5k
ZWYgRGF0YWJhc2VUYXNrX2gKLSNkZWZpbmUgRGF0YWJhc2VUYXNrX2gKLQotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
LQotLy8gQ2FuIGJlIHVzZWQgdG8gd2FpdCB1bnRpbCBEYXRhYmFzZVRhc2sgaXMgY29tcGxldGVk
LgotLy8gSGFzIHRvIGJlIHBhc3NlZCBpbnRvIERhdGFiYXNlVGFzazo6Y3JlYXRlIHRvIGJlIGFz
c29jaWF0ZWQgd2l0aCB0aGUgdGFzay4KLWNsYXNzIERhdGFiYXNlVGFza1N5bmNocm9uaXplciB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKTsKLXB1
YmxpYzoKLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIoKTsKLQotICAgIC8vIENhbGxlZCBm
cm9tIG1haW4gdGhyZWFkIHRvIHdhaXQgdW50aWwgdGFzayBpcyBjb21wbGV0ZWQuCi0gICAgdm9p
ZCB3YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKLQotICAgIC8vIENhbGxlZCBieSB0aGUgdGFzay4K
LSAgICB2b2lkIHRhc2tDb21wbGV0ZWQoKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIGhh
c0NoZWNrZWRGb3JUZXJtaW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2tlZEZvclRl
cm1pbmF0aW9uOyB9Ci0gICAgdm9pZCBzZXRIYXNDaGVja2VkRm9yVGVybWluYXRpb24oKSB7IG1f
aGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uID0gdHJ1ZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0g
ICAgYm9vbCBtX3Rhc2tDb21wbGV0ZWQ7Ci0gICAgTXV0ZXggbV9zeW5jaHJvbm91c011dGV4Owot
ICAgIFRocmVhZENvbmRpdGlvbiBtX3N5bmNocm9ub3VzQ29uZGl0aW9uOwotI2lmbmRlZiBOREVC
VUcKLSAgICBib29sIG1faGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uOwotI2VuZGlmCi19OwotCi1j
bGFzcyBEYXRhYmFzZVRhc2sgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlVGFz
ayk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkRhdGFi
YXNlVGFzaygpOwotCi0gICAgdm9pZCBwZXJmb3JtVGFzaygpOwotCi0gICAgRGF0YWJhc2UqIGRh
dGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQotI2lmbmRlZiBOREVCVUcKLSAg
ICBib29sIGhhc1N5bmNocm9uaXplcigpIGNvbnN0IHsgcmV0dXJuIG1fc3luY2hyb25pemVyOyB9
Ci0gICAgYm9vbCBoYXNDaGVja2VkRm9yVGVybWluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N5
bmNocm9uaXplci0+aGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uKCk7IH0KLSNlbmRpZgotCi1wcm90
ZWN0ZWQ6Ci0gICAgRGF0YWJhc2VUYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKSA9IDA7
Ci0KLSAgICBEYXRhYmFzZSogbV9kYXRhYmFzZTsKLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqIG1fc3luY2hyb25pemVyOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0ID0gMDsKLSAgICBib29sIG1fY29tcGxldGU7
Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrIDogcHVibGlj
IERhdGFiYXNlVGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VP
cGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUm
IGNvZGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgc3luY2hyb25pemVyLCBjb2RlLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIGJvb2wg
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4Y2Vw
dGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3VjY2Vzcyk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgYm9v
bCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlOwotICAgIEV4Y2VwdGlvbkNvZGUmIG1fY29kZTsK
LSAgICBTdHJpbmcmIG1fZXJyb3JNZXNzYWdlOwotICAgIGJvb2wmIG1fc3VjY2VzczsKLX07Ci0K
LWNsYXNzIERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiBjcmVh
dGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGF0YWJhc2VDbG9zZVRhc2soZGIs
IHN5bmNocm9uaXplcikpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUNsb3NlVGFz
ayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwotCi0gICAgdmlydHVhbCB2
b2lkIGRvUGVyZm9ybVRhc2soKTsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdmlydHVhbCBjb25z
dCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIERhdGFi
YXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewotcHVi
bGljOgotICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sgaXMgbmV2ZXIgc3luY2hyb25vdXMsIHNvIG5v
ICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFz
ZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5z
YWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZVRyYW5z
YWN0aW9uVGFzayh0cmFuc2FjdGlvbikpOwotICAgIH0KLQotICAgIFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KLQotcHJp
dmF0ZToKLSAgICBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwotI2lmICFMT0dfRElT
QUJMRUQKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKLSNl
bmRpZgotCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotfTsKLQot
Y2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2sgOiBwdWJsaWMgRGF0YWJhc2VU
YXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNo
cm9uaXplciwgVmVjdG9yPFN0cmluZz4mIG5hbWVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKGRiLCBzeW5jaHJvbml6ZXIsIG5hbWVz
KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIERhdGFiYXNlVGFibGVOYW1lc1Rhc2soRGF0YWJh
c2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKLSNpZiAhTE9HX0RJU0FCTEVECi0g
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIFZlY3RvcjxTdHJpbmc+JiBtX3RhYmxlTmFtZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gRGF0
YWJhc2VUYXNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0KLSNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQXV0b2RyYWluZWRQb29sLmgiCi0jaW5jbHVkZSAi
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKLSNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotRGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkKLSAg
ICA6IG1fdGhyZWFkSUQoMCkKLSAgICAsIG1fdHJhbnNhY3Rpb25DbGllbnQoYWRvcHRQdHIobmV3
IFNRTFRyYW5zYWN0aW9uQ2xpZW50KCkpKQotICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KGFkb3B0UHRyKG5ldyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkpKQotICAgICwgbV9jbGVh
bnVwU3luYygwKQotewotICAgIG1fc2VsZlJlZiA9IHRoaXM7Ci19Ci0KLURhdGFiYXNlVGhyZWFk
Ojp+RGF0YWJhc2VUaHJlYWQoKQotewotICAgIC8vIEZJWE1FOiBBbnkgY2xlYW51cCByZXF1aXJl
ZCBoZXJlPyAgU2luY2UgdGhlIHRocmVhZCBkZWxldGVzIGl0c2VsZiBhZnRlciBydW5uaW5nIGl0
cyBkZXRhY2hlZCBjb3Vyc2UsIEkgZG9uJ3QgdGhpbmsgc28uICBMZXRzIGJlIHN1cmUuCi0gICAg
QVNTRVJUKHRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpOwotfQotCi1ib29sIERhdGFiYXNlVGhyZWFk
OjpzdGFydCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgp
OwotCi0gICAgaWYgKG1fdGhyZWFkSUQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgbV90
aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFy
dCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7Ci0KLSAgICByZXR1cm4gbV90aHJlYWRJRDsK
LX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciAqY2xlYW51cFN5bmMpCi17Ci0gICAgQVNTRVJUKCFtX2NsZWFudXBTeW5j
KTsKLSAgICBtX2NsZWFudXBTeW5jID0gY2xlYW51cFN5bmM7Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJEYXRhYmFzZVRocmVhZCAlcCB3YXMgYXNrZWQgdG8gdGVybWluYXRlXG4iLCB0aGlzKTsKLSAg
ICBtX3F1ZXVlLmtpbGwoKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRocmVhZDo6dGVybWluYXRpb25S
ZXF1ZXN0ZWQoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiB0YXNrU3luY2hyb25pemVyKSBjb25z
dAotewotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAodGFza1N5bmNocm9uaXplcikKLSAgICAgICAg
dGFza1N5bmNocm9uaXplci0+c2V0SGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uKCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTSh0YXNrU3luY2hyb25pemVyKTsKLSNlbmRpZgotCi0gICAgcmV0dXJu
IG1fcXVldWUua2lsbGVkKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkU3RhcnQodm9pZCogdkRhdGFiYXNlVGhyZWFkKQotewotICAgIERhdGFiYXNlVGhyZWFkKiBk
YlRocmVhZCA9IHN0YXRpY19jYXN0PERhdGFiYXNlVGhyZWFkKj4odkRhdGFiYXNlVGhyZWFkKTsK
LSAgICBkYlRocmVhZC0+ZGF0YWJhc2VUaHJlYWQoKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRocmVh
ZDo6ZGF0YWJhc2VUaHJlYWQoKQotewotICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgRGF0YWJh
c2VUaHJlYWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUuCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2so
bV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTdGFydGVk
IERhdGFiYXNlVGhyZWFkICVwIiwgdGhpcyk7Ci0gICAgfQotCi0gICAgQXV0b2RyYWluZWRQb29s
IHBvb2w7Ci0gICAgd2hpbGUgKE93blB0cjxEYXRhYmFzZVRhc2s+IHRhc2sgPSBtX3F1ZXVlLndh
aXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKLSAgICAgICAg
cG9vbC5jeWNsZSgpOwotICAgIH0KLQotICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBw
ZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAotICAgIG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKLQotICAgIExPRyhTdG9yYWdlQVBJLCAiQWJv
dXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVh
ZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCBy
ZWZDb3VudCgpKTsKLQotICAgIC8vIENsb3NlIHRoZSBkYXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJh
bnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBz
dGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBhbmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRh
dGFiYXNlIGluIGFuCi0gICAgLy8gaW5jb25zaXN0ZW50IG9yIGxvY2tlZCBzdGF0ZS4KLSAgICBp
ZiAobV9vcGVuRGF0YWJhc2VTZXQuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBBcyB0aGUgY2Fs
bCB0byBjbG9zZSB3aWxsIG1vZGlmeSB0aGUgb3JpZ2luYWwgc2V0LCB3ZSBtdXN0IHRha2UgYSBj
b3B5IHRvIGl0ZXJhdGUgb3Zlci4KLSAgICAgICAgRGF0YWJhc2VTZXQgb3BlblNldENvcHk7Ci0g
ICAgICAgIG9wZW5TZXRDb3B5LnN3YXAobV9vcGVuRGF0YWJhc2VTZXQpOwotICAgICAgICBEYXRh
YmFzZVNldDo6aXRlcmF0b3IgZW5kID0gb3BlblNldENvcHkuZW5kKCk7Ci0gICAgICAgIGZvciAo
RGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gb3BlblNldENvcHkuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgKCppdCktPmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLy8gRGV0
YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9uZ2VyIG9mIGFueSBjb25j
ZXJuIHRvIGFueW9uZSBlbHNlCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwotCi0gICAg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7Ci0K
LSAgICAvLyBDbGVhciB0aGUgc2VsZiByZWZwdHIsIHBvc3NpYmx5IHJlc3VsdGluZyBpbiBkZWxl
dGlvbgotICAgIG1fc2VsZlJlZiA9IDA7Ci0KLSAgICBpZiAoY2xlYW51cFN5bmMpIC8vIFNvbWVv
bmUgd2FudGVkIHRvIGtub3cgd2hlbiB3ZSB3ZXJlIGRvbmUgY2xlYW5pbmcgdXAuCi0gICAgICAg
IGNsZWFudXBTeW5jLT50YXNrQ29tcGxldGVkKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKLSAgICBBU1NFUlQoZGF0YWJhc2UpOwotICAg
IEFTU0VSVCghbV9vcGVuRGF0YWJhc2VTZXQuY29udGFpbnMoZGF0YWJhc2UpKTsKLSAgICBtX29w
ZW5EYXRhYmFzZVNldC5hZGQoZGF0YWJhc2UpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpy
ZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKLSAgICBBU1NFUlQoZGF0YWJhc2UpOwotICAg
IEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKGRh
dGFiYXNlKSk7Ci0gICAgbV9vcGVuRGF0YWJhc2VTZXQucmVtb3ZlKGRhdGFiYXNlKTsKLX0KLQot
dm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNr
PiB0YXNrKQotewotICAgIEFTU0VSVCghdGFzay0+aGFzU3luY2hyb25pemVyKCkgfHwgdGFzay0+
aGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uKCkpOwotICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOwot
fQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hlZHVsZUltbWVkaWF0ZVRhc2soUGFzc093blB0
cjxEYXRhYmFzZVRhc2s+IHRhc2spCi17Ci0gICAgQVNTRVJUKCF0YXNrLT5oYXNTeW5jaHJvbml6
ZXIoKSB8fCB0YXNrLT5oYXNDaGVja2VkRm9yVGVybWluYXRpb24oKSk7Ci0gICAgbV9xdWV1ZS5w
cmVwZW5kKHRhc2spOwotfQotCi1jbGFzcyBTYW1lRGF0YWJhc2VQcmVkaWNhdGUgewotcHVibGlj
OgotICAgIFNhbWVEYXRhYmFzZVByZWRpY2F0ZShjb25zdCBEYXRhYmFzZSogZGF0YWJhc2UpIDog
bV9kYXRhYmFzZShkYXRhYmFzZSkgeyB9Ci0gICAgYm9vbCBvcGVyYXRvcigpKERhdGFiYXNlVGFz
ayogdGFzaykgY29uc3QgeyByZXR1cm4gdGFzay0+ZGF0YWJhc2UoKSA9PSBtX2RhdGFiYXNlOyB9
Ci1wcml2YXRlOgotICAgIGNvbnN0IERhdGFiYXNlKiBtX2RhdGFiYXNlOwotfTsKLQotdm9pZCBE
YXRhYmFzZVRocmVhZDo6dW5zY2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqIGRhdGFiYXNl
KQotewotICAgIC8vIE5vdGUgdGhhdCB0aGUgdGhyZWFkIGxvb3AgaXMgcnVubmluZywgc28gc29t
ZSB0YXNrcyBmb3IgdGhlIGRhdGFiYXNlCi0gICAgLy8gbWF5IHN0aWxsIGJlIGV4ZWN1dGVkLiBU
aGlzIGlzIHVuYXZvaWRhYmxlLgotICAgIFNhbWVEYXRhYmFzZVByZWRpY2F0ZSBwcmVkaWNhdGUo
ZGF0YWJhc2UpOwotICAgIG1fcXVldWUucmVtb3ZlSWYocHJlZGljYXRlKTsKLX0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VUaHJlYWQuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZu
ZGVmIERhdGFiYXNlVGhyZWFkX2gKLSNkZWZpbmUgRGF0YWJhc2VUaHJlYWRfaAotCi0jaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTWVz
c2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIERhdGFiYXNlOwotY2xhc3MgRGF0YWJhc2VUYXNrOwotY2xhc3MgRGF0YWJhc2VU
YXNrU3luY2hyb25pemVyOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNs
aWVudDsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0KLWNsYXNzIERhdGFiYXNl
VGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRocmVhZCk7IH0KLSAgICB+RGF0YWJhc2VUaHJl
YWQoKTsKLQotICAgIGJvb2wgc3RhcnQoKTsKLSAgICB2b2lkIHJlcXVlc3RUZXJtaW5hdGlvbihE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jKTsKLSAgICBib29sIHRlcm1pbmF0
aW9uUmVxdWVzdGVkKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogdGFza1N5bmNocm9uaXplciA9
IDApIGNvbnN0OwotCi0gICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxEYXRhYmFzZVRh
c2s+KTsKLSAgICB2b2lkIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzT3duUHRyPERhdGFiYXNl
VGFzaz4pOyAvLyBUaGlzIGp1c3QgYWRkcyB0aGUgdGFzayB0byB0aGUgZnJvbnQgb2YgdGhlIHF1
ZXVlIC0gdGhlIGNhbGxlciBuZWVkcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bCBub3QgdG8gY3Jl
YXRlIGRlYWRsb2NrcyB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uCi0gICAgdm9pZCB1bnNj
aGVkdWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSopOwotCi0gICAgdm9pZCByZWNvcmREYXRhYmFz
ZU9wZW4oRGF0YWJhc2UqKTsKLSAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNl
Kik7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFk
SUQ7IH0KLQotICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIHsg
cmV0dXJuIG1fdHJhbnNhY3Rpb25DbGllbnQuZ2V0KCk7IH0KLSAgICBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VUaHJlYWQoKTsK
LQotICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlVGhyZWFkU3RhcnQodm9pZCopOwotICAgIHZvaWQg
ZGF0YWJhc2VUaHJlYWQoKTsKLQotICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgUmVmUHRyPERhdGFiYXNlVGhyZWFk
PiBtX3NlbGZSZWY7Ci0KLSAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1ZXVlOwot
Ci0gICAgLy8gVGhpcyBzZXQga2VlcHMgdHJhY2sgb2YgdGhlIG9wZW4gZGF0YWJhc2VzIHRoYXQg
aGF2ZSBiZWVuIHVzZWQgb24gdGhpcyB0aHJlYWQuCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0
cjxEYXRhYmFzZT4gPiBEYXRhYmFzZVNldDsKLSAgICBEYXRhYmFzZVNldCBtX29wZW5EYXRhYmFz
ZVNldDsKLQotICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVudD4gbV90cmFuc2FjdGlvbkNs
aWVudDsKLSAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yOwotICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogbV9jbGVhbnVwU3lu
YzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCi0jZW5kaWYgLy8gRGF0YWJhc2VUaHJlYWRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDExMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRh
dGFiYXNlVHJhY2tlci5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IkFic3RyYWN0RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJEYXRh
YmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKLSNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCi0jaW5j
bHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQotc3RhdGljIFdlYkNvcmU6Ok9yaWdpblF1b3RhTWFuYWdlciYgb3JpZ2luUXVvdGFNYW5hZ2Vy
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdlYkNvcmU6Ok9yaWdpblF1b3RhTWFuYWdl
ciwgcXVvdGFNYW5hZ2VyLCAoKSk7Ci0gICAgcmV0dXJuIHF1b3RhTWFuYWdlcjsKLX0KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgRGF0YWJhc2VUcmFja2VyKiBzdGF0aWNUcmFja2Vy
ID0gMDsKLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VQYXRoKQotewotICAgIEFTU0VSVCghc3RhdGljVHJhY2tlcik7Ci0gICAg
aWYgKHN0YXRpY1RyYWNrZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpY1RyYWNrZXIg
PSBuZXcgRGF0YWJhc2VUcmFja2VyKGRhdGFiYXNlUGF0aCk7Ci19Ci0KLURhdGFiYXNlVHJhY2tl
ciYgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkKLXsKLSAgICBpZiAoIXN0YXRpY1RyYWNrZXIp
Ci0gICAgICAgIHN0YXRpY1RyYWNrZXIgPSBuZXcgRGF0YWJhc2VUcmFja2VyKCIiKTsKLQotICAg
IHJldHVybiAqc3RhdGljVHJhY2tlcjsKLX0KLQotRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRy
YWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCi0gICAgOiBtX2NsaWVudCgwKQotewot
ICAgIHNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZVBhdGgpOwotICAgIAotICAgIFNR
TGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7Ci0KLSAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKLX0K
LQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VH
dWFyZCk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICBtX2RhdGFiYXNl
RGlyZWN0b3J5UGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFz
ZVRyYWNrZXI6OmRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzb2xhdGVkQ29weSgpOwotfQotCi1TdHJpbmcgRGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU1FM
aXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGly
ZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKSwgIkRhdGFiYXNlcy5kYiIpOwotfQotCi12b2lkIERh
dGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0KLSAgICBp
ZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGRh
dGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICBpZiAoIVNRTGl0ZUZpbGVT
eXN0ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlmRG9l
c05vdEV4aXN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4o
ZGF0YWJhc2VQYXRoKSkgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBkbyBkbyBoZXJlPwotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFz
ZVBhdGguYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0
YWJhc2UuZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOwotICAgIGlmICghbV9kYXRhYmFzZS50YWJs
ZUV4aXN0cygiT3JpZ2lucyIpKSB7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCBxdW90YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogYW5kIGhlcmUKLSAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJEYXRhYmFzZXMiKSkgewotICAgICAgICBpZiAo
IW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBEYXRhYmFzZXMgKGd1aWQg
SU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBvcmlnaW4gVEVYVCwgbmFtZSBURVhU
LCBkaXNwbGF5TmFtZSBURVhULCBlc3RpbWF0ZWRTaXplIElOVEVHRVIsIHBhdGggVEVYVCk7Iikp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBhbmQgaGVyZQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIERhdGFiYXNlcyB0YWJsZSIpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi17Ci0gICAgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgUHJvcG9z
ZWREYXRhYmFzZSBkZXRhaWxzOwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50
OwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFy
ZCk7Ci0gICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tl
cihvcmlnaW5RdW90YU1hbmFnZXIoKSk7Ci0KLSAgICAgICAgaWYgKCFjYW5DcmVhdGVEYXRhYmFz
ZShvcmlnaW4sIG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJl
Y29yZENyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLQotICAgICAgICAvLyBTaW5jZSB3
ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3aXRoaW4gdGhpcyBjb250ZXh0J3Mg
b3JpZ2luLCBtYWtlIHN1cmUgdGhpcyBvcmlnaW4gaXMgYmVpbmcgdHJhY2tlZCBieSB0aGUgUXVv
dGFUcmFja2VyCi0gICAgICAgIC8vIGJ5IGZldGNoaW5nIGl0cyBjdXJyZW50IHVzYWdlIG5vdy4K
LSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0gdXNhZ2VGb3JPcmlnaW5Ob0xvY2so
b3JpZ2luKTsKLQotICAgICAgICAvLyBJZiBhIGRhdGFiYXNlIGFscmVhZHkgZXhpc3RzLCBpZ25v
cmUgdGhlIHBhc3NlZC1pbiBlc3RpbWF0ZWQgc2l6ZSBhbmQgc2F5IGl0J3MgT0suCi0gICAgICAg
IGlmIChoYXNFbnRyeUZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQsIGFsbG93IGl0
cyBjcmVhdGlvbi4KLSAgICAgICAgcmVxdWlyZW1lbnQgPSB1c2FnZSArIG1heCgxVUwsIGVzdGlt
YXRlZFNpemUpOwotICAgICAgICBpZiAocmVxdWlyZW1lbnQgPCB1c2FnZSkgewotICAgICAgICAg
ICAgZG9uZUNyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gSWYgdGhlIGVzdGltYXRlZCBzaXplIGlzIHNvIGJpZyBpdCBjYXVzZXMgYW4g
b3ZlcmZsb3csIGRvbid0IGFsbG93IGNyZWF0aW9uLgotICAgICAgICB9Ci0gICAgICAgIGlmIChy
ZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gR2l2ZSB0aGUgY2hyb21lIGNsaWVudCBhIGNoYW5j
ZSB0byBpbmNyZWFzZSB0aGUgcXVvdGEuCi0gICAgICAgIC8vIFRlbXBvcmFyaWx5IG1ha2UgdGhl
IGRldGFpbHMgb2YgdGhlIHByb3Bvc2VkIGRhdGFiYXNlIGF2YWlsYWJsZSwgc28gdGhlIGNsaWVu
dCBjYW4gZ2V0IGF0IHRoZW0uCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGp1
c3QgcGFzcyB0aGUgZGV0YWlscyBpbnRvIHRoaXMgY2FsbCwgcmF0aGVyIHRoYW4gdXNpbmcgbV9w
cm9wb3NlZERhdGFiYXNlcy4KLSAgICAgICAgZGV0YWlscyA9IFByb3Bvc2VkRGF0YWJhc2Uob3Jp
Z2luLT5pc29sYXRlZENvcHkoKSwgRGF0YWJhc2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCks
IGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7Ci0gICAgICAg
IG1fcHJvcG9zZWREYXRhYmFzZXMuYWRkKCZkZXRhaWxzKTsKLSAgICB9Ci0gICAgLy8gRHJvcCBh
bGwgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0OyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSdsbCBk
by4KLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29udGV4dCktPmRhdGFiYXNlRXhjZWVkZWRR
dW90YShuYW1lKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOwotCi0gICAgbV9wcm9wb3NlZERhdGFiYXNlcy5yZW1vdmUoJmRldGFpbHMpOwotCi0gICAg
Ly8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0IG5vdywgYWxsb3cgaXRzIGNyZWF0aW9uLgotICAg
IGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRy
eUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewotICAgIEFTU0VSVCgh
bV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgQVNTRVJUKG1fcXVvdGFNYXApOwotICAg
IHJldHVybiBtX3F1b3RhTWFwLT5jb250YWlucyhvcmlnaW4pOwotfQotCi1ib29sIERhdGFiYXNl
VHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICByZXR1cm4g
aGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQu
dHJ5TG9jaygpKTsKLSAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKLSAgICBpZiAoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERhdGFiYXNlcyBX
SEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyIpOwotCi0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMiwgZGF0YWJhc2VJZGVudGlmaWVyKTsKLQotICAgIHJldHVybiBzdGF0ZW1l
bnQuc3RlcCgpID09IFNRTFJlc3VsdFJvdzsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25nIERhdGFi
YXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2Uq
IGRhdGFiYXNlKQotewotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIGEgZGF0YWJhc2UgaXMg
dGhlIGZ1bGwgcXVvdGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHRoZSBjdXJyZW50IHVzYWdlIHdp
dGhpbiB0aGUgb3JpZ2luLAotICAgIC8vIHBsdXMgdGhlIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGdp
dmVuIGRhdGFiYXNlCi0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFy
ZCk7Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9y
aWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZGF0YWJh
c2UtPnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgcmV0dXJuIHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9y
aWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKSArIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2UtPmZpbGVOYW1lKCkpOwotfQot
Ci12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2Uq
IGRhdGFiYXNlKQotewotICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdl
ckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7Ci0gICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCku
bWFya0RhdGFiYXNlKGRhdGFiYXNlKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVy
cnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4gb3BlbkRh
dGFiYXNlczsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2so
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0KLSAgICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1h
cCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVN
YXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOwot
ICAgICAgICBpZiAoIW5hbWVNYXApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgRGF0
YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVu
ZCgpOwotICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1l
TWFwSXQgPSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmRJdDsg
KytkYk5hbWVNYXBJdCkgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0g
ZGJOYW1lTWFwSXQtPnNlY29uZDsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVy
YXRvciBkYlNldEVuZEl0ID0gZGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChE
YXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJTZXRJdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigp
OyBkYlNldEl0ICE9IGRiU2V0RW5kSXQ7ICsrZGJTZXRJdCkgewotICAgICAgICAgICAgICAgIGlm
ICgoKmRiU2V0SXQpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gY29udGV4dCkKLSAgICAg
ICAgICAgICAgICAgICAgb3BlbkRhdGFiYXNlcy5hcHBlbmQoKmRiU2V0SXQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxBYnN0cmFjdERhdGFi
YXNlPiA+Ojpjb25zdF9pdGVyYXRvciBvcGVuRGF0YWJhc2VzRW5kSXQgPSBvcGVuRGF0YWJhc2Vz
LmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+Ojpjb25z
dF9pdGVyYXRvciBvcGVuRGF0YWJhc2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5E
YXRhYmFzZXNJdCAhPSBvcGVuRGF0YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQotICAg
ICAgICAoKm9wZW5EYXRhYmFzZXNJdCktPmludGVycnVwdCgpOwotfQotCi1TdHJpbmcgRGF0YWJh
c2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgo
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCksIG9yaWdpbi0+ZGF0YWJhc2VJ
ZGVudGlmaWVyKCkpOwotfQotCi1TdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCBjcmVhdGVJZk5vdEV4aXN0cykKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50
cnlMb2NrKCkpOwotICAgIEFTU0VSVCghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJ5TG9jaygpKTsK
LQotICAgIGZvciAoSGFzaFNldDxQcm9wb3NlZERhdGFiYXNlKj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3Byb3Bvc2VkRGF0YWJhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9wcm9wb3NlZERhdGFiYXNlcy5l
bmQoKTsgKytpdGVyKQotICAgICAgICBpZiAoKCppdGVyKS0+c2Vjb25kLm5hbWUoKSA9PSBuYW1l
ICYmICgqaXRlciktPmZpcnN0LT5lcXVhbChvcmlnaW4pKQotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBvcmlnaW4tPmRhdGFiYXNl
SWRlbnRpZmllcigpOwotICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChv
cmlnaW4pOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBwYXRoIGZvciB0aGlzIFNlY3VyaXR5T3Jp
Z2luIGV4aXN0cwotICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cyAmJiAhU1FMaXRlRmlsZVN5c3Rl
bTo6ZW5zdXJlRGF0YWJhc2VEaXJlY3RvcnlFeGlzdHMob3JpZ2luUGF0aCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGF0aCBmb3IgdGhpcyBk
YXRhYmFzZSB5ZXQKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJT
RUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyIpOwot
Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlm
aWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKLQotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQot
ICAgICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRv
UGF0aChvcmlnaW5QYXRoLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgaWYgKCFj
cmVhdGVJZk5vdEV4aXN0cykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJl
dHJpZXZlIGZpbGVuYW1lIGZyb20gRGF0YWJhc2UgVHJhY2tlciBmb3Igb3JpZ2luICVzLCBuYW1l
ICVzIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSwgbmFtZS5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgc3RhdGVtZW50LmZpbmFs
aXplKCk7Ci0KLSAgICBTdHJpbmcgZmlsZU5hbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxl
TmFtZUZvck5ld0RhdGFiYXNlKG9yaWdpblBhdGgsIG5hbWUsIG9yaWdpbklkZW50aWZpZXIsICZt
X2RhdGFiYXNlKTsKLSAgICBpZiAoIWFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZmlsZU5hbWUp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBJZiB0aGlzIG9yaWdpbidzIHF1
b3RhIGlzIGJlaW5nIHRyYWNrZWQgKG9wZW4gaGFuZGxlIHRvIGEgZGF0YWJhc2UgaW4gdGhpcyBv
cmlnaW4pLCBhZGQgdGhpcyBuZXcgZGF0YWJhc2UKLSAgICAvLyB0byB0aGUgcXVvdGEgbWFuYWdl
ciBub3cKLSAgICBTdHJpbmcgZnVsbEZpbGVQYXRoID0gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5k
RGF0YWJhc2VGaWxlTmFtZVRvUGF0aChvcmlnaW5QYXRoLCBmaWxlTmFtZSk7Ci0gICAgaWYgKG9y
aWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQotICAgICAgICBvcmlnaW5R
dW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZ1bGxGaWxlUGF0aCk7Ci0K
LSAgICByZXR1cm4gZnVsbEZpbGVQYXRoOwotfQotCi1TdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpm
dWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0cykKLXsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBx
dW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotCi0gICAgcmV0dXJuIGZ1
bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lLCBjcmVhdGVJZk5vdEV4aXN0cyku
aXNvbGF0ZWRDb3B5KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdp
bnMoKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgaWYg
KG1fcXVvdGFNYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcXVvdGFNYXAgPSBhZG9wdFB0
cihuZXcgUXVvdGFNYXApOwotCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7Ci0gICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luLCBxdW90YSBGUk9N
IE9yaWdpbnMiKTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0
YWJhc2VJZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICAgICAgbV9x
dW90YU1hcC0+c2V0KG9yaWdpbi5nZXQoKS0+aXNvbGF0ZWRDb3B5KCksIHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgxKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25l
KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIGFsbCBvcmlnaW5zIGZyb20g
dGhlIGRhdGFiYXNlLiIpOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucyhWZWN0
b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgQVNTRVJUKG1fcXVvdGFNYXApOwot
ICAgIGNvcHlLZXlzVG9WZWN0b3IoKm1fcXVvdGFNYXAsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGF0
YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiByZXN1bHRWZWN0b3IpCi17Ci0gICAgQVNTRVJUKCFt
X2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNl
KTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBuYW1l
IEZST00gRGF0YWJhc2VzIHdoZXJlIG9yaWdpbj0/OyIpOwotCi0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLQotICAg
IGludCByZXN1bHQ7Ci0gICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBT
UUxSZXN1bHRSb3cpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGFsbCBkYXRhYmFzZSBuYW1lcyBmb3Ig
b3JpZ2luICVzIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JPcmlnaW4oU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdFZlY3RvcikKLXsKLSAgICBWZWN0b3I8
U3RyaW5nPiB0ZW1wOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAgIGlmICghZGF0YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9j
ayhvcmlnaW4sIHRlbXApKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBm
b3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gdGVtcC5iZWdpbigpOyBpdGVyICE9
IHRlbXAuZW5kKCk7ICsraXRlcikKLSAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChpdGVyLT5p
c29sYXRlZENvcHkoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLURhdGFiYXNlRGV0YWlscyBE
YXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFt
ZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmll
ciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Ci0gICAgU3RyaW5nIGRpc3BsYXlOYW1l
OwotICAgIGludDY0X3QgZXhwZWN0ZWRVc2FnZTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0KLSAgICAgICAgZm9yIChIYXNoU2V0
PFByb3Bvc2VkRGF0YWJhc2UqPjo6aXRlcmF0b3IgaXRlciA9IG1fcHJvcG9zZWREYXRhYmFzZXMu
YmVnaW4oKTsgaXRlciAhPSBtX3Byb3Bvc2VkRGF0YWJhc2VzLmVuZCgpOyArK2l0ZXIpCi0gICAg
ICAgICAgICBpZiAoKCppdGVyKS0+c2Vjb25kLm5hbWUoKSA9PSBuYW1lICYmICgqaXRlciktPmZp
cnN0LT5lcXVhbChvcmlnaW4pKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCgqaXRlciktPnNl
Y29uZC50aHJlYWQoKSA9PSBjdXJyZW50VGhyZWFkKCkpOwotICAgICAgICAgICAgICAgIHJldHVy
biAoKml0ZXIpLT5zZWNvbmQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgb3BlblRyYWNrZXJE
YXRhYmFzZShmYWxzZSk7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAg
ICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
IEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgICAgICByZXR1cm4g
RGF0YWJhc2VEZXRhaWxzKCk7Ci0KLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bklkZW50aWZpZXIpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgbmFtZSk7Ci0KLSAg
ICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgICAgIGlmIChyZXN1bHQg
PT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsK
LQotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciByZXRyaWV2aW5nIGRldGFpbHMgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdp
biAlcyBmcm9tIHRyYWNrZXIgZGF0YWJhc2UiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW5J
ZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURl
dGFpbHMoKTsKLSAgICAgICAgfQotICAgICAgICBkaXNwbGF5TmFtZSA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOwotICAgICAgICBleHBlY3RlZFVzYWdlID0gc3RhdGVtZW50LmdldENvbHVt
bkludDY0KDEpOwotICAgIH0KLQotICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMobmFtZSwgZGlz
cGxheU5hbWUsIGV4cGVjdGVkVXNhZ2UsIHVzYWdlRm9yRGF0YWJhc2UobmFtZSwgb3JpZ2luKSk7
Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi17Ci0gICAgU3RyaW5nIG9yaWdpbklk
ZW50aWZpZXIgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOwotICAgIGludDY0X3QgZ3Vp
ZCA9IDA7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
LQotICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQotICAgICAgICByZXR1cm47Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiU0VMRUNUIGd1aWQgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5E
IG5hbWU9PyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwotCi0gICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0g
ICAgICAgIGd1aWQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgc3RhdGVtZW50
LmZpbmFsaXplKCk7Ci0KLSAgICBpZiAoZ3VpZCA9PSAwKSB7Ci0gICAgICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgdG8gZGV0ZXJt
aW5nIGV4aXN0ZW5jZSBvZiBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMgaW4gdHJhY2tlciBkYXRh
YmFzZSIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgbmV2
ZXIgb2NjdXIgLSB3ZSBzaG91bGQgbmV2ZXIgYmUgc2V0dGluZyBkYXRhYmFzZSBkZXRhaWxzIGZv
ciBhIGRhdGFiYXNlIHRoYXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRoZSB0cmFja2VyCi0g
ICAgICAgICAgICAvLyBCdXQgc2luY2UgdGhlIHRyYWNrZXIgZmlsZSBpcyBhbiBleHRlcm5hbCBy
ZXNvdXJjZSBub3QgdW5kZXIgY29tcGxldGUgY29udHJvbCBvZiBvdXIgY29kZSwgaXQncyBzb21l
d2hhdCBpbnZhbGlkIHRvIG1ha2UgdGhpcyBhbiBBU1NFUlQgY2FzZQotICAgICAgICAgICAgLy8g
U28gd2UnbGwgcHJpbnQgYW4gZXJyb3IgaW5zdGVhZAotICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgcmV0cmlldmUgZ3VpZCBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20g
dGhlIHRyYWNrZXIgZGF0YWJhc2UgLSBpdCBpcyBpbnZhbGlkIHRvIHNldCBkYXRhYmFzZSBkZXRh
aWxzIG9uIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyYWNr
ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW5J
ZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAi
VVBEQVRFIERhdGFiYXNlcyBTRVQgZGlzcGxheU5hbWU9PywgZXN0aW1hdGVkU2l6ZT0/IFdIRVJF
IGd1aWQ9PyIpOwotICAgIGlmICh1cGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmluZFRleHQoMSwg
ZGlzcGxheU5hbWUpOwotICAgIHVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgZXN0aW1hdGVk
U2l6ZSk7Ci0gICAgdXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgzLCBndWlkKTsKLQotICAgIGlm
ICh1cGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGRldGFpbHMgZm9yIGRhdGFiYXNlICVzIGluIG9yaWdp
biAlcyIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotfQot
Ci11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvckRhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBTdHJpbmcg
cGF0aCA9IGZ1bGxQYXRoRm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmYWxzZSk7Ci0gICAgaWYg
KHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwotfQotCi12b2lkIERhdGFiYXNl
VHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewot
ICAgIGlmICghZGF0YWJhc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLQot
ICAgICAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQotICAgICAgICAgICAgbV9vcGVuRGF0YWJh
c2VNYXAgPSBhZG9wdFB0cihuZXcgRGF0YWJhc2VPcmlnaW5NYXApOwotCi0gICAgICAgIFN0cmlu
ZyBuYW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwotICAgICAgICBEYXRhYmFzZU5h
bWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpKTsKLSAgICAgICAgaWYgKCFuYW1lTWFwKSB7Ci0gICAgICAgICAgICBuYW1lTWFw
ID0gbmV3IERhdGFiYXNlTmFtZU1hcDsKLSAgICAgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLT5z
ZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpLCBuYW1lTWFwKTsK
LSAgICAgICAgfQotCi0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAt
PmdldChuYW1lKTsKLSAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkgewotICAgICAgICAgICAgZGF0
YWJhc2VTZXQgPSBuZXcgRGF0YWJhc2VTZXQ7Ci0gICAgICAgICAgICBuYW1lTWFwLT5zZXQobmFt
ZS5pc29sYXRlZENvcHkoKSwgZGF0YWJhc2VTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGF0
YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7Ci0KLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJBZGRl
ZCBvcGVuIERhdGFiYXNlICVzICglcClcbiIsIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCku
YXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlKTsKLQotICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFN
YW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotICAgICAg
ICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihkYXRhYmFzZS0+c2VjdXJp
dHlPcmlnaW4oKSkpIHsKLSAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrT3Jp
Z2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgICAgIG9yaWdpblF1b3Rh
TWFuYWdlcigpLmFkZERhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFz
ZS0+c3RyaW5nSWRlbnRpZmllcigpLCBkYXRhYmFzZS0+ZmlsZU5hbWUoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
LSAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0
YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpy
ZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgaWYg
KCFkYXRhYmFzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tl
ciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwotCi0gICAgICAg
IGlmICghbV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIG5h
bWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci0gICAgICAgIERhdGFiYXNlTmFtZU1h
cCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3Jp
Z2luKCkpOwotICAgICAgICBpZiAoIW5hbWVNYXApIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgRGF0
YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgICAgICBpZiAo
IWRhdGFiYXNlU2V0KSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUo
ZGF0YWJhc2UpOwotCi0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiUmVtb3ZlZCBvcGVuIERhdGFi
YXNlICVzICglcClcbiIsIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRh
KCksIGRhdGFiYXNlKTsKLQotICAgICAgICBpZiAoIWRhdGFiYXNlU2V0LT5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmFtZU1hcC0+cmVtb3ZlKG5hbWUpOwotICAg
ICAgICBkZWxldGUgZGF0YWJhc2VTZXQ7Ci0KLSAgICAgICAgaWYgKCFuYW1lTWFwLT5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJl
bW92ZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgICAgIGRlbGV0ZSBuYW1lTWFw
OwotCi0gICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tl
cihvcmlnaW5RdW90YU1hbmFnZXIoKSk7Ci0gICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnJl
bW92ZU9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgfQotfQotCi12b2lk
IERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4q
IGRhdGFiYXNlcykKLXsKLSAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3Bl
bkRhdGFiYXNlTWFwR3VhcmQpOwotICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAgICAg
IHJldHVybjsKLQotICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNl
TWFwLT5nZXQob3JpZ2luKTsKLSAgICBpZiAoIW5hbWVNYXApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBp
ZiAoIWRhdGFiYXNlU2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKERhdGFiYXNlU2V0
OjppdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZVNldC0+
ZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFiYXNlcy0+YWRkKCppdCk7Ci19Ci0KLXVuc2lnbmVk
IGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFvcmlnaW5RdW90YU1hbmFnZXIoKS50cnlM
b2NrKCkpOwotCi0gICAgLy8gVXNlIHRoZSBPcmlnaW5RdW90YU1hbmFnZXIgbWVjaGFuaXNtIHRv
IGNhbGN1bGF0ZSB0aGUgdXNhZ2UKLSAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tz
T3JpZ2luKG9yaWdpbikpCi0gICAgICAgIHJldHVybiBvcmlnaW5RdW90YU1hbmFnZXIoKS5kaXNr
VXNhZ2Uob3JpZ2luKTsKLQotICAgIC8vIElmIHRoZSBPcmlnaW5RdW90YU1hbmFnZXIgZG9lc24n
dCB0cmFjayB0aGlzIG9yaWdpbiBhbHJlYWR5LCBwcmltZSBpdCB0byBkbyBzbwotICAgIG9yaWdp
blF1b3RhTWFuYWdlcigpLnRyYWNrT3JpZ2luKG9yaWdpbik7Ci0KLSAgICBWZWN0b3I8U3RyaW5n
PiBuYW1lczsKLSAgICBkYXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbiwgbmFtZXMp
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsgKytpKQotICAg
ICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWVzW2ldLCBm
dWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKG9yaWdpbiwgbmFtZXNbaV0sIGZhbHNlKSk7Ci0KLSAg
ICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gb3JpZ2luUXVvdGFNYW5hZ2VyKCkuZGlza1VzYWdlKG9y
aWdpbik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0Rh
dGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICByZXR1cm4gdXNh
Z2VGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25nIERhdGFi
YXNlVHJhY2tlcjo6cXVvdGFGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
LXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIEFTU0VSVCht
X3F1b3RhTWFwKTsKLSAgICByZXR1cm4gbV9xdW90YU1hcC0+Z2V0KG9yaWdpbik7Ci19Ci0KLXVu
c2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJh
c2VHdWFyZCk7Ci0gICAgcmV0dXJuIHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbik7Ci19Ci0K
LXZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNl
KG1fZGF0YWJhc2VHdWFyZCk7Ci0KLSAgICBpZiAocXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2lu
KSA9PSBxdW90YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0
cnVlKTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9xdW90YU1hcC0+Y29udGFpbnMob3JpZ2luKSkgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVF
UyAoPywgPykiKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4g
JXMgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCku
ZGF0YSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgcXVvdGEpOwotCi0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGVzdGFibGlzaCBvcmlnaW4gJXMgaW4gdGhlIHRyYWNrZXIiLCBvcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBPcmlnaW5z
IFNFVCBxdW90YT0/IFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGJvb2wgZXJyb3IgPSBzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rOwotICAgICAgICBpZiAoIWVycm9yKSB7Ci0g
ICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIHF1b3RhKTsKLSAgICAgICAgICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgyLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLQotICAg
ICAgICAgICAgZXJyb3IgPSAhc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZXJyb3IpCi0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHNldCBxdW90YSAlSTY0dSBpbiB0cmFja2VyIGRhdGFiYXNlIGZvciBv
cmlnaW4gJXMiLCBxdW90YSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRh
dGEoKSk7Ci0jZWxzZQotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHF1b3Rh
ICVsbHUgaW4gdHJhY2tlciBkYXRhYmFzZSBmb3Igb3JpZ2luICVzIiwgcXVvdGEsIG9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byB1cGRhdGUgdGhlIHF1b3RhIGluIG1lbW9y
eSBpZiB3ZSBmYWlsZWQgdG8gdXBkYXRlIGl0IG9uIGRpc2s/Ci0gICAgbV9xdW90YU1hcC0+c2V0
KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIHF1b3RhKTsKLQotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7Ci19Ci0KLWJv
b2wgRGF0YWJhc2VUcmFja2VyOjphZGREYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBBU1NFUlQoIW1f
ZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIEFTU0VSVChtX3F1b3RhTWFwKTsKLSAgICBv
cGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTmV3IGRhdGFiYXNlIHNob3VsZCBuZXZl
ciBiZSBhZGRlZCB1bnRpbCB0aGUgb3JpZ2luIGhhcyBiZWVuIGVzdGFibGlzaGVkCi0gICAgQVNT
RVJUKGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpOwotCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChvcmlnaW4s
IG5hbWUsIHBhdGgpIFZBTFVFUyAoPywgPywgPyk7Iik7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMywgcGF0
aCk7Ci0KLSAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGFkZCBkYXRhYmFzZSAlcyB0byBvcmlnaW4gJXM6ICVzXG4iLCBu
YW1lLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCku
ZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNo
RGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCi17Ci0gICAgVmVjdG9yPFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gPiBvcmlnaW5zQ29weTsKLSAgICBvcmlnaW5zKG9yaWdpbnNDb3B5
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5zQ29weS5zaXplKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlT3JpZ2luKG9yaWdpbnNDb3B5W2ldLmdldCgpKTsKLX0KLQotLy8g
SXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB0aGF0IG5vYm9k
eSBpcyB0cnlpbmcgdG8gY3JlYXRlLCBkZWxldGUsIG9wZW4sIG9yIGNsb3NlIGRhdGFiYXNlcyBp
biB0aGlzIG9yaWdpbiB3aGlsZSB0aGUgZGVsZXRpb24gaXMKLS8vIHRha2luZyBwbGFjZS4KLWJv
b2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
LXsKLSAgICBWZWN0b3I8U3RyaW5nPiBkYXRhYmFzZU5hbWVzOwotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAgIG9wZW5UcmFj
a2VyRGF0YWJhc2UoZmFsc2UpOwotICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFkYXRhYmFzZU5hbWVzRm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbiwgZGF0YWJhc2VOYW1lcykpIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgZGF0YWJhc2UgbmFtZXMgZm9yIG9yaWdp
biAlcyIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY2FuRGVsZXRl
T3JpZ2luKG9yaWdpbikpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVHJpZWQgdG8gZGVsZXRl
IGFuIG9yaWdpbiAoJXMpIHdoaWxlIGVpdGhlciBjcmVhdGluZyBkYXRhYmFzZSBpbiBpdCBvciBh
bHJlYWR5IGRlbGV0aW5nIGl0Iiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJlY29yZERlbGV0aW5nT3JpZ2luKG9yaWdpbik7
Ci0gICAgfQotCi0gICAgLy8gV2UgZHJvcCB0aGUgbG9jayBoZXJlIGJlY2F1c2UgaG9sZGluZyBs
b2NrcyBkdXJpbmcgYSBjYWxsIHRvIGRlbGV0ZURhdGFiYXNlRmlsZSB3aWxsIGRlYWRsb2NrLgot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhYmFzZU5hbWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmICghZGVsZXRlRGF0YWJhc2VGaWxlKG9yaWdpbiwgZGF0YWJhc2VOYW1lc1tp
XSkpIHsKLSAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIGZpbGUgY2FuJ3QgYmUgZGVsZXRlZCwg
d2Ugd2FudCB0byB0cnkgYW5kIGRlbGV0ZSB0aGUgcmVzdCwgZG9uJ3QgcmV0dXJuIGVhcmx5IGhl
cmUuCi0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkZWxldGUgZmlsZSBmb3IgZGF0
YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgZGF0YWJhc2VOYW1lc1tpXS5hc2NpaSgpLmRhdGEoKSwg
b3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFi
YXNlR3VhcmQpOwotICAgICAgICBkb25lRGVsZXRpbmdPcmlnaW4ob3JpZ2luKTsKLQotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRh
YmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBh
cmUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9y
aWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEs
IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotCi0gICAgICAgIGlmICghc3RhdGVtZW50
LmV4ZWN1dGVDb21tYW5kKCkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4
ZWN1dGUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIs
IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IG9y
aWdpblN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gT3JpZ2lucyBXSEVSRSBvcmln
aW49PyIpOwotICAgICAgICBpZiAob3JpZ2luU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlv
biBvZiBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBvcmlnaW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0KLSAgICAgICAgaWYgKCFvcmlnaW5TdGF0ZW1lbnQuZXhlY3V0ZUNvbW1h
bmQoKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlv
biBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURh
dGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2luKSk7Ci0KLSAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW5Qb3NzaWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47Ci0gICAg
ICAgIG1fcXVvdGFNYXAtPnJlbW92ZShvcmlnaW4pOwotCi0gICAgICAgIHsKLSAgICAgICAgICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90
YU1hbmFnZXIoKSk7Ci0gICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVPcmln
aW4ob3JpZ2luKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIHJlbW92ZWQgdGhlIGxh
c3Qgb3JpZ2luLCBkbyBzb21lIGFkZGl0aW9uYWwgZGVsZXRpb24uCi0gICAgICAgIGlmIChtX3F1
b3RhTWFwLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KQotICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgU1FMaXRl
RmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7Ci0g
ICAgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnko
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fY2xp
ZW50KSB7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3Jp
Z2luKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhYmFzZU5hbWVz
LnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlm
eURhdGFiYXNlKG9yaWdpbiwgZGF0YWJhc2VOYW1lc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5DcmVhdGVEYXRh
YmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
QVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICAvLyBDYW4ndCBjcmVhdGUg
YSBkYXRhYmFzZSB3aGlsZSBzb21lb25lIGVsc2UgaXMgZGVsZXRpbmcgaXQ7IHRoZXJlJ3MgYSBy
aXNrIG9mIGxlYXZpbmcgdW50cmFja2VkIGRhdGFiYXNlIGRlYnJpcyBvbiB0aGUgZGlzay4KLSAg
ICByZXR1cm4gIWRlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSAmJiAhZGVsZXRpbmdPcmln
aW4ob3JpZ2luKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlY29yZENyZWF0aW5nRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgTmFtZUNvdW50TWFwKiBu
YW1lTWFwID0gbV9iZWluZ0NyZWF0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgaWYgKCFuYW1lTWFwKSB7
Ci0gICAgICAgIG5hbWVNYXAgPSBuZXcgTmFtZUNvdW50TWFwKCk7Ci0gICAgICAgIG1fYmVpbmdD
cmVhdGVkLnNldChvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBuYW1lTWFwKTsKLSAgICB9Ci0gICAg
bG9uZyBjb3VudCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBuYW1lTWFwLT5zZXQobmFtZS5p
c29sYXRlZENvcHkoKSwgY291bnQgKyAxKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRv
bmVDcmVhdGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIE5h
bWVDb3VudE1hcCogbmFtZU1hcCA9IG1fYmVpbmdDcmVhdGVkLmdldChvcmlnaW4pOwotICAgIGlm
IChuYW1lTWFwKSB7Ci0gICAgICAgIGxvbmcgY291bnQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0g
ICAgICAgIEFTU0VSVChjb3VudCA+IDApOwotICAgICAgICBpZiAoY291bnQgPD0gMSkgewotICAg
ICAgICAgICAgbmFtZU1hcC0+cmVtb3ZlKG5hbWUpOwotICAgICAgICAgICAgaWYgKG5hbWVNYXAt
PmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fYmVpbmdDcmVhdGVkLnJlbW92ZShvcmln
aW4pOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBuYW1lTWFwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5hbWVNYXAtPnNldChuYW1lLCBjb3VudCAtIDEpOwot
ICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoZmFsc2UpOwotfQotCi1ib29sIERhdGFiYXNlVHJh
Y2tlcjo6Y3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAg
ICBOYW1lQ291bnRNYXAqIG5hbWVNYXAgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsKLSAg
ICByZXR1cm4gbmFtZU1hcCAmJiBuYW1lTWFwLT5nZXQobmFtZSk7Ci19Ci0KLWJvb2wgRGF0YWJh
c2VUcmFja2VyOjpjYW5EZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygp
KTsKLSAgICByZXR1cm4gIWNyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSAmJiAhZGVsZXRp
bmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVj
b3JkRGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBB
U1NFUlQoY2FuRGVsZXRlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSk7Ci0gICAgTmFtZVNldCogbmFt
ZVNldCA9IG1fYmVpbmdEZWxldGVkLmdldChvcmlnaW4pOwotICAgIGlmICghbmFtZVNldCkgewot
ICAgICAgICBuYW1lU2V0ID0gbmV3IE5hbWVTZXQoKTsKLSAgICAgICAgbV9iZWluZ0RlbGV0ZWQu
c2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5hbWVTZXQpOwotICAgIH0KLSAgICBBU1NFUlQo
IW5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpKTsKLSAgICBuYW1lU2V0LT5hZGQobmFtZS5pc29sYXRl
ZENvcHkoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNT
RVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBOYW1lU2V0KiBuYW1lU2V0ID0g
bV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgaWYgKG5hbWVTZXQpIHsKLSAgICAgICAg
QVNTRVJUKG5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpKTsKLSAgICAgICAgbmFtZVNldC0+cmVtb3Zl
KG5hbWUpOwotICAgICAgICBpZiAobmFtZVNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBt
X2JlaW5nRGVsZXRlZC5yZW1vdmUob3JpZ2luKTsKLSAgICAgICAgICAgIGRlbGV0ZSBuYW1lU2V0
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9
Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJh
c2VHdWFyZC50cnlMb2NrKCkpOwotICAgIE5hbWVTZXQqIG5hbWVTZXQgPSBtX2JlaW5nRGVsZXRl
ZC5nZXQob3JpZ2luKTsKLSAgICByZXR1cm4gbmFtZVNldCAmJiBuYW1lU2V0LT5jb250YWlucyhu
YW1lKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihTZWN1cml0
eU9yaWdpbiAqb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2so
KSk7Ci0gICAgcmV0dXJuICEoZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSB8fCBtX2JlaW5nQ3JlYXRl
ZC5nZXQob3JpZ2luKSk7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGluZ09yaWdp
bihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJk
LnRyeUxvY2soKSk7Ci0gICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5jb250YWlucyhv
cmlnaW4pOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVjb3JkRGVsZXRpbmdPcmlnaW4o
U2VjdXJpdHlPcmlnaW4gKm9yaWdpbikKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50
cnlMb2NrKCkpOwotICAgIEFTU0VSVCghZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7Ci0gICAgbV9v
cmlnaW5zQmVpbmdEZWxldGVkLmFkZChvcmlnaW4tPmlzb2xhdGVkQ29weSgpKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVEZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3Jp
Z2luKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgQVNT
RVJUKGRlbGV0aW5nT3JpZ2luKG9yaWdpbikpOwotICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5y
ZW1vdmUob3JpZ2luKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgICAg
ICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghY2FuRGVs
ZXRlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKEZBTFNFKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZWNvcmREZWxl
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci0gICAgfQotCi0gICAgLy8gV2UgZHJvcCB0aGUg
bG9jayBoZXJlIGJlY2F1c2UgaG9sZGluZyBsb2NrcyBkdXJpbmcgYSBjYWxsIHRvIGRlbGV0ZURh
dGFiYXNlRmlsZSB3aWxsIGRlYWRsb2NrLgotICAgIGlmICghZGVsZXRlRGF0YWJhc2VGaWxlKG9y
aWdpbiwgbmFtZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZGVsZXRlIGZpbGUg
Zm9yIGRhdGFiYXNlICVzIGluIG9yaWdpbiAlcyIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBNdXRleExv
Y2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgZG9uZURlbGV0aW5n
RGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotCi0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gRGF0YWJhc2Vz
IFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT8iKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IGRlbGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5h
bWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5k
YXRhKCkpOwotICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBu
YW1lKTsKLQotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZSAlcyBmcm9t
IG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgZG9uZURlbGV0aW5n
RGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9j
a2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCku
cmVtb3ZlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQp
IHsKLSAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7Ci0g
ICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7
Ci0gICAgfQotICAgIGRvbmVEZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGRlbGV0ZURhdGFiYXNlRmlsZSBoYXMgdG8gcmVsZWFz
ZSBsb2NrcyBiZXR3ZWVuIGxvb2tpbmcgdXAgdGhlIGxpc3Qgb2YgZGF0YWJhc2VzIHRvIGNsb3Nl
IGFuZCBjbG9zaW5nIHRoZW0uICBXaGlsZSB0aGlzIGlzIGluIHByb2dyZXNzLCB0aGUgY2FsbGVy
Ci0vLyBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgbm8gbmV3IGRhdGFiYXNlcyBhcmUg
b3BlbmVkIGluIHRoZSBmaWxlIHRvIGJlIGRlbGV0ZWQuCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6
ZGVsZXRlRGF0YWJhc2VGaWxlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBTdHJpbmcgZnVsbFBhdGggPSBmdWxsUGF0aEZvckRhdGFiYXNlKG9yaWdp
biwgbmFtZSwgZmFsc2UpOwotICAgIGlmIChmdWxsUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAgIEFTU0VSVChkZWxldGluZ0Rh
dGFiYXNlKG9yaWdpbiwgbmFtZSkgfHwgZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBWZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4gZGVsZXRlZERh
dGFiYXNlczsKLQotICAgIC8vIE1ha2Ugc3VyZSBub3QgdG8gaG9sZCB0aGUgYW55IGxvY2tzIHdo
ZW4gY2FsbGluZwotICAgIC8vIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKSwgc2lu
Y2UgdGhhdCBjYW4gY2F1c2UgYSBkZWFkbG9jawotICAgIC8vIGR1cmluZyB0aGUgc3luY2hyb25v
dXMgRGF0YWJhc2VUaHJlYWQgY2FsbCBpdCB0cmlnZ2Vycy4KLSAgICB7Ci0gICAgICAgIE11dGV4
TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0gICAg
ICAgIGlmIChtX29wZW5EYXRhYmFzZU1hcCkgewotICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNv
bWUgb3BlbiBkYXRhYmFzZXMsIGxldHMgY2hlY2sgaWYgdGhleSBhcmUgZm9yIHRoaXMgb3JpZ2lu
LgotICAgICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VN
YXAtPmdldChvcmlnaW4pOwotICAgICAgICAgICAgaWYgKG5hbWVNYXAgJiYgbmFtZU1hcC0+c2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgb3BlbiBkYXRhYmFzZXMg
Zm9yIHRoaXMgb3JpZ2luLCBsZXQncyBjaGVjawotICAgICAgICAgICAgICAgIC8vIGlmIHRoZXkg
YXJlIHRoaXMgZGF0YWJhc2UgYnkgbmFtZS4KLSAgICAgICAgICAgICAgICBEYXRhYmFzZVNldCog
ZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRh
dGFiYXNlU2V0ICYmIGRhdGFiYXNlU2V0LT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSBzb21lIGRhdGFiYXNlIG9wZW4gd2l0aCB0aGlzIG5hbWUuIE1hcmsgdGhlbSBh
cyBkZWxldGVkLgotICAgICAgICAgICAgICAgICAgICBEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKERh
dGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VzLmFw
cGVuZCgqaXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWxldGVkRGF0YWJhc2VzLnNp
emUoKTsgKytpKQotICAgICAgICBkZWxldGVkRGF0YWJhc2VzW2ldLT5tYXJrQXNEZWxldGVkQW5k
Q2xvc2UoKTsKLQotICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZp
bGUoZnVsbFBhdGgpOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0Q2xpZW50KERhdGFi
YXNlVHJhY2tlckNsaWVudCogY2xpZW50KQotewotICAgIG1fY2xpZW50ID0gY2xpZW50OwotfQot
Ci1zdGF0aWMgTXV0ZXgmIG5vdGlmaWNhdGlvbk11dGV4KCkKLXsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQotdHlwZWRl
ZiBWZWN0b3I8cGFpcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTdHJpbmc+ID4gTm90aWZpY2F0
aW9uUXVldWU7Ci0KLXN0YXRpYyBOb3RpZmljYXRpb25RdWV1ZSYgbm90aWZpY2F0aW9uUXVldWUo
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTm90aWZpY2F0aW9uUXVldWUsIHF1ZXVlLCAo
KSk7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6c2NoZWR1
bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihub3RpZmljYXRpb25NdXRleCgp
KTsKLQotICAgIG5vdGlmaWNhdGlvblF1ZXVlKCkuYXBwZW5kKHBhaXI8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgU3RyaW5nPihvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBuYW1lLmlzb2xhdGVkQ29w
eSgpKSk7Ci0gICAgc2NoZWR1bGVGb3JOb3RpZmljYXRpb24oKTsKLX0KLQotc3RhdGljIGJvb2wg
bm90aWZpY2F0aW9uU2NoZWR1bGVkID0gZmFsc2U7Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpz
Y2hlZHVsZUZvck5vdGlmaWNhdGlvbigpCi17Ci0gICAgQVNTRVJUKCFub3RpZmljYXRpb25NdXRl
eCgpLnRyeUxvY2soKSk7Ci0KLSAgICBpZiAoIW5vdGlmaWNhdGlvblNjaGVkdWxlZCkgewotICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKERhdGFiYXNlVHJhY2tlcjo6bm90aWZ5RGF0YWJhc2VzQ2hh
bmdlZCwgMCk7Ci0gICAgICAgIG5vdGlmaWNhdGlvblNjaGVkdWxlZCA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6bm90aWZ5RGF0YWJhc2VzQ2hhbmdlZCh2b2lkKikK
LXsKLSAgICAvLyBOb3RlIHRoYXQgaWYgRGF0YWJhc2VUcmFja2VyIGV2ZXIgYmVjb21lcyBub24t
c2luZ2xldG9uLCB3ZSdsbCBoYXZlIHRvIGFtZW5kIHRoaXMgbm90aWZpY2F0aW9uCi0gICAgLy8g
bWVjaGFuaXNtIHRvIGluY2x1ZGUgd2hpY2ggdHJhY2tlciB0aGUgbm90aWZpY2F0aW9uIGdvZXMg
b3V0IG9uIGFzIHdlbGwuCi0gICAgRGF0YWJhc2VUcmFja2VyJiB0aGVUcmFja2VyKHRyYWNrZXIo
KSk7Ci0KLSAgICBOb3RpZmljYXRpb25RdWV1ZSBub3RpZmljYXRpb25zOwotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG5vdGlmaWNhdGlvbk11dGV4KCkpOwotCi0gICAgICAgIG5v
dGlmaWNhdGlvbnMuc3dhcChub3RpZmljYXRpb25RdWV1ZSgpKTsKLQotICAgICAgICBub3RpZmlj
YXRpb25TY2hlZHVsZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRoZVRyYWNrZXIubV9j
bGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b3RpZmljYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICB0aGVUcmFja2VyLm1fY2xpZW50LT5k
aXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKG5vdGlmaWNhdGlvbnNbaV0uZmlyc3QuZ2V0KCksIG5v
dGlmaWNhdGlvbnNbaV0uc2Vjb25kKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaAkocmV2
aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhYmFz
ZVRyYWNrZXJfaAotI2RlZmluZSBEYXRhYmFzZVRyYWNrZXJfaAotCi0jaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KLQotI2lmICFQTEFURk9STShDSFJPTUlVTSkKLSNpbmNsdWRlICJEYXRhYmFz
ZURldGFpbHMuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNlbmRpZiAvLyAhUExBVEZPUk0oQ0hST01JVU0pCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLQotc3RydWN0IFNlY3VyaXR5T3JpZ2luSGFz
aDsKLQotI2lmICFQTEFURk9STShDSFJPTUlVTSkKLWNsYXNzIERhdGFiYXNlVHJhY2tlckNsaWVu
dDsKLQotc3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOwotI2VuZGlmIC8vICFQTEFURk9STShD
SFJPTUlVTSkKLQotY2xhc3MgRGF0YWJhc2VUcmFja2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEYXRhYmFzZVRyYWNrZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNl
UGF0aCk7Ci0gICAgc3RhdGljIERhdGFiYXNlVHJhY2tlciYgdHJhY2tlcigpOwotICAgIC8vIFRo
aXMgc2luZ2xldG9uIHdpbGwgcG90ZW50aWFsbHkgYmUgdXNlZCBmcm9tIG11bHRpcGxlIHdvcmtl
ciB0aHJlYWRzIGFuZCB0aGUgcGFnZSdzIGNvbnRleHQgdGhyZWFkIHNpbXVsdGFuZW91c2x5LiAg
VG8ga2VlcCB0aGlzIHNhZmUsIGl0J3MKLSAgICAvLyBjdXJyZW50bHkgdXNpbmcgNCBsb2Nrcy4g
IEluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHdoZW4gdGFraW5nIG11bHRpcGxlIGxvY2tzLCB5
b3UgbXVzdCB0YWtlIHRoZW0gaW4gdGhlIGNvcnJlY3Qgb3JkZXI6Ci0gICAgLy8gbV9kYXRhYmFz
ZUd1YXJkIGJlZm9yZSBxdW90YU1hbmFnZXIgaWYgYm90aCBsb2NrcyBhcmUgbmVlZGVkLgotICAg
IC8vIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgYmVmb3JlIHF1b3RhTWFuYWdlciBpZiBib3RoIGxv
Y2tzIGFyZSBuZWVkZWQuCi0gICAgLy8gbV9kYXRhYmFzZUd1YXJkIGFuZCBtX29wZW5EYXRhYmFz
ZU1hcEd1YXJkIGN1cnJlbnRseSBkb24ndCBvdmVybGFwLgotICAgIC8vIG5vdGlmaWNhdGlvbk11
dGV4KCkgaXMgY3VycmVudGx5IGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBsb2Nrcy4KLQotICAg
IGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplKTsKLSAgICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RF
eGlzdCA9IHRydWUpOwotCi0gICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFz
ZSopOwotICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKLSAg
ICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+KiBkYXRhYmFzZXMp
OwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBB
YnN0cmFjdERhdGFiYXNlKik7Ci0gICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoQWJzdHJhY3REYXRh
YmFzZSopOwotCi0gICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQotcHJpdmF0ZToKLSAgICBEYXRhYmFzZVRyYWNr
ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwotCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVN
KQotcHVibGljOgotICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmlu
ZyYpOwotICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdDsKLQotICAgIHZv
aWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpOwotICAg
IGJvb2wgZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiosIFZlY3RvcjxTdHJp
bmc+JiByZXN1bHQpOwotCi0gICAgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHNGb3JOYW1lQW5kT3Jp
Z2luKGNvbnN0IFN0cmluZyYsIFNlY3VyaXR5T3JpZ2luKik7Ci0KLSAgICB1bnNpZ25lZCBsb25n
IGxvbmcgdXNhZ2VGb3JEYXRhYmFzZShjb25zdCBTdHJpbmcmLCBTZWN1cml0eU9yaWdpbiopOwot
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwot
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwot
ICAgIHZvaWQgc2V0UXVvdGEoU2VjdXJpdHlPcmlnaW4qLCB1bnNpZ25lZCBsb25nIGxvbmcpOwot
Ci0gICAgdm9pZCBkZWxldGVBbGxEYXRhYmFzZXMoKTsKLSAgICBib29sIGRlbGV0ZU9yaWdpbihT
ZWN1cml0eU9yaWdpbiopOwotICAgIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCBzZXRDbGllbnQoRGF0YWJhc2VUcmFj
a2VyQ2xpZW50Kik7Ci0KLSAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0
aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRhCi0gICAgdm9pZCBzY2hlZHVsZU5vdGlmeURhdGFiYXNl
Q2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICBib29s
IGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Ci0KLXByaXZhdGU6Ci0gICAgYm9v
bCBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKLSAgICBT
dHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7Ci0gICAgYm9vbCBkYXRhYmFz
ZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJp
bmc+JiByZXN1bHRWZWN0b3IpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdp
bk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
cXVvdGFGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7Ci0KLSAgICBTdHJp
bmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OwotICAgIHZvaWQgb3BlblRyYWNrZXJEYXRh
YmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKLQotICAgIFN0cmluZyBvcmlnaW5QYXRo
KFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7Ci0KLSAgICBib29sIGhhc0VudHJ5Rm9yRGF0YWJhc2Uo
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7Ci0KLSAg
ICBib29sIGFkZERhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHBhdGgpOwotICAgIHZvaWQgcG9wdWxhdGVPcmlnaW5zKCk7Ci0KLSAgICBi
b29sIGRlbGV0ZURhdGFiYXNlRmlsZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFt
ZSk7Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0
OwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VOYW1l
TWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBEYXRhYmFz
ZU5hbWVNYXAqLCBTZWN1cml0eU9yaWdpbkhhc2g+IERhdGFiYXNlT3JpZ2luTWFwOwotCi0gICAg
TXV0ZXggbV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKLSAgICBtdXRhYmxlIE93blB0cjxEYXRhYmFz
ZU9yaWdpbk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7Ci0KLSAgICAvLyBUaGlzIGxvY2sgcHJvdGVj
dHMgbV9kYXRhYmFzZSwgbV9xdW90YU1hcCwgbV9wcm9wb3NlZERhdGFiYXNlcywgbV9kYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIG1fb3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0ZWQsIGFu
ZCBtX2JlaW5nRGVsZXRlZC4KLSAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7Ci0gICAgU1FMaXRl
RGF0YWJhc2UgbV9kYXRhYmFzZTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gUXVvdGFN
YXA7Ci0gICAgbXV0YWJsZSBPd25QdHI8UXVvdGFNYXA+IG1fcXVvdGFNYXA7Ci0KLSAgICBTdHJp
bmcgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGg7Ci0KLSAgICBEYXRhYmFzZVRyYWNrZXJDbGllbnQq
IG1fY2xpZW50OwotCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgRGF0YWJhc2VEZXRhaWxzPiBQcm9wb3NlZERhdGFiYXNlOwotICAgIEhhc2hTZXQ8UHJvcG9z
ZWREYXRhYmFzZSo+IG1fcHJvcG9zZWREYXRhYmFzZXM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBsb25nPiBOYW1lQ291bnRNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIE5hbWVDb3VudE1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gQ3JlYXRl
U2V0OwotICAgIENyZWF0ZVNldCBtX2JlaW5nQ3JlYXRlZDsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
U3RyaW5nPiBOYW1lU2V0OwotICAgIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgTmFt
ZVNldCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gbV9iZWluZ0RlbGV0ZWQ7Ci0gICAgSGFzaFNldDxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTZWN1cml0eU9yaWdpbkhhc2g+IG1fb3JpZ2luc0JlaW5n
RGVsZXRlZDsKLSAgICBib29sIGNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmln
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZWNvcmRDcmVhdGluZ0RhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBk
b25lQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIGJvb2wgY3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIGJvb2wgY2FuRGVsZXRlRGF0YWJhc2UoU2VjdXJp
dHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIHJlY29yZERl
bGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICB2b2lkIGRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4s
IGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgYm9vbCBkZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgYm9vbCBjYW5EZWxldGVP
cmlnaW4oU2VjdXJpdHlPcmlnaW4gKm9yaWdpbik7Ci0gICAgYm9vbCBkZWxldGluZ09yaWdpbihT
ZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsKLSAgICB2b2lkIHJlY29yZERlbGV0aW5nT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4pOwotICAgIHZvaWQgZG9uZURlbGV0aW5nT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luICpvcmlnaW4pOwotCi0gICAgc3RhdGljIHZvaWQgc2NoZWR1bGVGb3JOb3RpZmlj
YXRpb24oKTsKLSAgICBzdGF0aWMgdm9pZCBub3RpZnlEYXRhYmFzZXNDaGFuZ2VkKHZvaWQqKTsK
LSNlbHNlCi1wdWJsaWM6Ci0gICAgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotcHJpdmF0
ZToKLSAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0Owot
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VOYW1lTWFw
OwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlTmFtZU1hcCo+IERhdGFiYXNl
T3JpZ2luTWFwOwotICAgIGNsYXNzIENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s7Ci0K
LSAgICB2b2lkIGNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpOwotCi0gICAgTXV0ZXggbV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKLSAgICBtdXRhYmxlIE93
blB0cjxEYXRhYmFzZU9yaWdpbk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7Ci0jZW5kaWYgLy8gIVBM
QVRGT1JNKENIUk9NSVVNKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIERhdGFiYXNlVHJhY2tlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgJ
KHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgRGF0YWJh
c2VUcmFja2VyQ2xpZW50X2gKLSNkZWZpbmUgRGF0YWJhc2VUcmFja2VyQ2xpZW50X2gKLQotI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotCi1jbGFzcyBEYXRhYmFz
ZVRyYWNrZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlVHJhY2tlckNs
aWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihTZWN1
cml0eU9yaWdpbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlEYXRh
YmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gRGF0YWJh
c2VUcmFja2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVv
dGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdp
blF1b3RhTWFuYWdlci5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIK
LQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNl
LmgiCi0jaW5jbHVkZSAiT3JpZ2luVXNhZ2VSZWNvcmQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1PcmlnaW5RdW90YU1hbmFnZXI6Ok9yaWdpblF1b3RhTWFuYWdlcigpCi0jaWZuZGVmIE5E
RUJVRwotICAgIDogbV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKGZhbHNlKQotI2VuZGlmCi17Ci19
Ci0KLWJvb2wgT3JpZ2luUXVvdGFNYW5hZ2VyOjp0cnlMb2NrKCkKLXsKLSAgICBib29sIGxvY2tl
ZCA9IG1fdXNhZ2VSZWNvcmRHdWFyZC50cnlMb2NrKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGlm
IChsb2NrZWQpCi0gICAgICAgIG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCA9IHRydWU7Ci0gICAg
ZWxzZQotICAgICAgICBBU1NFUlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKLSNlbmRpZgot
ICAgIHJldHVybiBsb2NrZWQ7Ci19Ci0KLXZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjpsb2NrKCkK
LXsKLSAgICBtX3VzYWdlUmVjb3JkR3VhcmQubG9jaygpOwotI2lmbmRlZiBOREVCVUcKLSAgICBt
X3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQgPSB0cnVlOwotI2VuZGlmCi19Ci0KLXZvaWQgT3JpZ2lu
UXVvdGFNYW5hZ2VyOjp1bmxvY2soKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBtX3VzYWdlUmVj
b3JkR3VhcmRMb2NrZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIG1fdXNhZ2VSZWNvcmRHdWFyZC51
bmxvY2soKTsKLX0KLQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnRyYWNrT3JpZ2luKFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikKLXsKLSAgICBBU1NFUlQobV91c2FnZVJlY29y
ZEd1YXJkTG9ja2VkKTsKLSAgICBBU1NFUlQoIW1fdXNhZ2VNYXAuY29udGFpbnMob3JpZ2luLmdl
dCgpKSk7Ci0KLSAgICBtX3VzYWdlTWFwLnNldChvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBuZXcg
T3JpZ2luVXNhZ2VSZWNvcmQpOwotfQotCi1ib29sIE9yaWdpblF1b3RhTWFuYWdlcjo6dHJhY2tz
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fdXNh
Z2VSZWNvcmRHdWFyZExvY2tlZCk7Ci0gICAgcmV0dXJuIG1fdXNhZ2VNYXAuY29udGFpbnMob3Jp
Z2luKTsKLX0KLQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OmFkZERhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGZ1bGxQYXRoKQotewotICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQp
OwotCi0gICAgT3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdlUmVjb3JkID0gbV91c2FnZU1hcC5nZXQo
b3JpZ2luKTsKLSAgICBBU1NFUlQodXNhZ2VSZWNvcmQpOwotCi0gICAgdXNhZ2VSZWNvcmQtPmFk
ZERhdGFiYXNlKGRhdGFiYXNlSWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgZnVsbFBhdGguaXNv
bGF0ZWRDb3B5KCkpOwotfQotCi12b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6cmVtb3ZlRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZp
ZXIpCi17Ci0gICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7Ci0KLSAgICBpZiAo
T3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdlUmVjb3JkID0gbV91c2FnZU1hcC5nZXQob3JpZ2luKSkK
LSAgICAgICAgdXNhZ2VSZWNvcmQtPnJlbW92ZURhdGFiYXNlKGRhdGFiYXNlSWRlbnRpZmllcik7
Ci19Ci0KLXZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjpyZW1vdmVPcmlnaW4oU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKLXsKLSAgICBBU1NFUlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKLQot
ICAgIGlmIChPcmlnaW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdldChv
cmlnaW4pKSB7Ci0gICAgICAgIG1fdXNhZ2VNYXAucmVtb3ZlKG9yaWdpbik7Ci0gICAgICAgIGRl
bGV0ZSB1c2FnZVJlY29yZDsKLSAgICB9Ci19Ci0KLXZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjpt
YXJrRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKGRh
dGFiYXNlKTsKLSAgICBBU1NFUlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKLSAgICBPcmln
aW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdldChkYXRhYmFzZS0+c2Vj
dXJpdHlPcmlnaW4oKSk7Ci0gICAgQVNTRVJUKHVzYWdlUmVjb3JkKTsKLQotICAgIHVzYWdlUmVj
b3JkLT5tYXJrRGF0YWJhc2UoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci19Ci0KLXVu
c2lnbmVkIGxvbmcgbG9uZyBPcmlnaW5RdW90YU1hbmFnZXI6OmRpc2tVc2FnZShTZWN1cml0eU9y
aWdpbiogb3JpZ2luKSBjb25zdAotewotICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2Nr
ZWQpOwotCi0gICAgT3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdlUmVjb3JkID0gbV91c2FnZU1hcC5n
ZXQob3JpZ2luKTsKLSAgICBBU1NFUlQodXNhZ2VSZWNvcmQpOwotCi0gICAgcmV0dXJuIHVzYWdl
UmVjb3JkLT5kaXNrVXNhZ2UoKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
aAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90
YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE9yaWdp
blF1b3RhTWFuYWdlcl9oCi0jZGVmaW5lIE9yaWdpblF1b3RhTWFuYWdlcl9oCi0KLSNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEFic3RyYWN0RGF0YWJhc2U7Ci1jbGFzcyBPcmlnaW5Vc2FnZVJlY29yZDsKLQotY2xhc3MgT3Jp
Z2luUXVvdGFNYW5hZ2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcmlnaW5RdW90YU1h
bmFnZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPcmlnaW5RdW90
YU1hbmFnZXIoKTsKLQotICAgIGJvb2wgdHJ5TG9jaygpOwotICAgIHZvaWQgbG9jaygpOwotICAg
IHZvaWQgdW5sb2NrKCk7Ci0KLSAgICB2b2lkIHRyYWNrT3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+KTsKLSAgICBib29sIHRyYWNrc09yaWdpbihTZWN1cml0eU9yaWdpbiopIGNvbnN0
OwotICAgIHZvaWQgYWRkRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCk7Ci0gICAgdm9pZCByZW1v
dmVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlm
aWVyKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbihTZWN1cml0eU9yaWdpbiopOwotCi0gICAgdm9p
ZCBtYXJrRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOyAvLyBNYXJrIGRpcnRpbmVzcyBvZiBh
IHNwZWNpZmljIGRhdGFiYXNlLgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UoU2Vj
dXJpdHlPcmlnaW4qKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIE11dGV4IG1fdXNh
Z2VSZWNvcmRHdWFyZDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX3VzYWdlUmVjb3JkR3Vh
cmRMb2NrZWQ7Ci0jZW5kaWYKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBPcmlnaW5Vc2FnZVJlY29yZCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gT3JpZ2luVXNh
Z2VNYXA7Ci0gICAgT3JpZ2luVXNhZ2VNYXAgbV91c2FnZU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZiAv
LyBPcmlnaW5RdW90YU1hbmFnZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Pcmln
aW5Vc2FnZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk9yaWdpblVzYWdlUmVjb3JkLmgi
Ci0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3Rl
bS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU9yaWdpblVzYWdlUmVjb3JkOjpPcmlnaW5V
c2FnZVJlY29yZCgpCi0gICAgOiBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQoZmFsc2UpCi17Ci19
Ci0KLXZvaWQgT3JpZ2luVXNhZ2VSZWNvcmQ6OmFkZERhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJh
c2VNYXAuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwg
aWRlbnRpZmllci5pbXBsKCktPmhhc09uZVJlZigpIHx8IGlkZW50aWZpZXIuaXNFbXB0eSgpKTsK
LSAgICBBU1NFUlRfQVJHKGZ1bGxQYXRoLCBmdWxsUGF0aC5pbXBsKCktPmhhc09uZVJlZigpIHx8
IGZ1bGxQYXRoLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2RhdGFiYXNlTWFwLnNldChpZGVudGlmaWVy
LCBEYXRhYmFzZUVudHJ5KGZ1bGxQYXRoKSk7Ci0gICAgbV91bmtub3duU2V0LmFkZChpZGVudGlm
aWVyKTsKLQotICAgIG1fY2FjaGVkRGlza1VzYWdlSXNWYWxpZCA9IGZhbHNlOwotfQotCi12b2lk
IE9yaWdpblVzYWdlUmVjb3JkOjpyZW1vdmVEYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VNYXAuY29udGFpbnMoaWRlbnRpZmllcikpOwot
Ci0gICAgbV9kYXRhYmFzZU1hcC5yZW1vdmUoaWRlbnRpZmllcik7Ci0gICAgbV91bmtub3duU2V0
LnJlbW92ZShpZGVudGlmaWVyKTsKLSAgICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSBmYWxz
ZTsKLX0KLQotdm9pZCBPcmlnaW5Vc2FnZVJlY29yZDo6bWFya0RhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZU1hcC5jb250YWlucyhpZGVu
dGlmaWVyKSk7Ci0gICAgQVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyLmltcGwoKS0+
aGFzT25lUmVmKCkgfHwgaWRlbnRpZmllci5pc0VtcHR5KCkpOwotCi0gICAgbV91bmtub3duU2V0
LmFkZChpZGVudGlmaWVyKTsKLSAgICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSBmYWxzZTsK
LX0KLQotdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblVzYWdlUmVjb3JkOjpkaXNrVXNhZ2UoKQot
ewotICAgIC8vIFVzZSB0aGUgbGFzdCBjYWNoZWQgdXNhZ2UgdmFsdWUgaWYgd2UgaGF2ZSBpdC4K
LSAgICBpZiAobV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkKQotICAgICAgICByZXR1cm4gbV9jYWNo
ZWREaXNrVXNhZ2U7Ci0KLSAgICAvLyBzdGF0KCkgZm9yIHRoZSBzaXplcyBrbm93biB0byBiZSBk
aXJ0eS4KLSAgICBIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGlVbmtub3duID0gbV91bmtub3du
U2V0LmJlZ2luKCk7Ci0gICAgSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBlbmRVbmtub3duID0g
bV91bmtub3duU2V0LmVuZCgpOwotICAgIGZvciAoOyBpVW5rbm93biAhPSBlbmRVbmtub3duOyAr
K2lVbmtub3duKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IG1fZGF0YWJhc2VNYXAu
Z2V0KCppVW5rbm93bikuZmlsZW5hbWU7Ci0gICAgICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkp
OwotCi0gICAgICAgIC8vIFdoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBmaWxlIHNpemUsIHdl
J2xsIGp1c3QgaGF2ZSB0byBhc3N1bWUgdGhlIGZpbGUgaXMgbWlzc2luZy9pbmFjY2Vzc2libGUu
Ci0gICAgICAgIGxvbmcgbG9uZyBzaXplID0gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VG
aWxlU2l6ZShwYXRoKTsKLSAgICAgICAgbV9kYXRhYmFzZU1hcC5zZXQoKmlVbmtub3duLCBEYXRh
YmFzZUVudHJ5KHBhdGgsIHNpemUpKTsKLSAgICB9Ci0gICAgbV91bmtub3duU2V0LmNsZWFyKCk7
Ci0KLSAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgY2FjaGVkIHVzYWdlIHZhbHVlLgotICAgIG1fY2Fj
aGVkRGlza1VzYWdlID0gMDsKLSAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT46Oml0
ZXJhdG9yIGlEYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuYmVnaW4oKTsKLSAgICBIYXNoTWFwPFN0
cmluZywgRGF0YWJhc2VFbnRyeT46Oml0ZXJhdG9yIGVuZERhdGFiYXNlID0gbV9kYXRhYmFzZU1h
cC5lbmQoKTsKLSAgICBmb3IgKDsgaURhdGFiYXNlICE9IGVuZERhdGFiYXNlOyArK2lEYXRhYmFz
ZSkKLSAgICAgICAgbV9jYWNoZWREaXNrVXNhZ2UgKz0gaURhdGFiYXNlLT5zZWNvbmQuc2l6ZTsK
LQotICAgIG1fY2FjaGVkRGlza1VzYWdlSXNWYWxpZCA9IHRydWU7Ci0gICAgcmV0dXJuIG1fY2Fj
aGVkRGlza1VzYWdlOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0jaWZuZGVmIE9yaWdpblVzYWdlUmVjb3JkX2gKLSNkZWZpbmUgT3JpZ2luVXNhZ2VS
ZWNvcmRfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZyb20gbXVsdGlw
bGUgdGhyZWFkcyB3aXRoIGV4dGVybmFsIHN5bmNocm9uaXphdGlvbi4KLS8vIFN0cmluZyBhcmd1
bWVudHMgYXJlIGFsc28gc3VwcG9zZWQgdG8gYmUgZGVlcGx5IGNvcGllZCBieSB0aGUgY2FsbGVy
IHdoZW4gbmVjZXNzYXJ5LgotY2xhc3MgT3JpZ2luVXNhZ2VSZWNvcmQgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE9yaWdpblVzYWdlUmVjb3JkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgT3JpZ2luVXNhZ2VSZWNvcmQoKTsKLQotICAgIHZvaWQgYWRkRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKLSAg
ICB2b2lkIHJlbW92ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgdm9p
ZCBtYXJrRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsgLy8gU2l6ZSBtYXkgaGF2
ZSBjaGFuZ2VkLCBhbmQgd2lsbCBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZC4KLSAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgZGlza1VzYWdlKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IERhdGFiYXNl
RW50cnkgewotICAgICAgICBEYXRhYmFzZUVudHJ5KCkgeyB9Ci0gICAgICAgIERhdGFiYXNlRW50
cnkoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgOiBmaWxlbmFtZShmaWxlbmFtZSkgeyB9Ci0gICAg
ICAgIERhdGFiYXNlRW50cnkoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgdW5zaWduZWQgbG9uZyBs
b25nIHNpemUpIDogZmlsZW5hbWUoZmlsZW5hbWUpLCBzaXplKHNpemUpIHsgfQotICAgICAgICBT
dHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOyAvLyBUaGlz
IG1lbWJlciByZW1haW5zIHVuaW5pdGlhbGl6ZWQgdW50aWwgZGlzayB1c2FnZSBpcyBjYWxjdWxh
dGVkLgotICAgIH07Ci0gICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+IG1fZGF0YWJh
c2VNYXA7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fdW5rbm93blNldDsKLQotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBtX2NhY2hlZERpc2tVc2FnZTsKLSAgICBib29sIG1fY2FjaGVkRGlza1VzYWdl
SXNWYWxpZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oCShy
ZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENhbGxiYWNrV3Jh
cHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgU1FMQ2FsbGJh
Y2tXcmFwcGVyX2gKLSNkZWZpbmUgU1FMQ2FsbGJhY2tXcmFwcGVyX2gKLQotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0vLyBBIGhlbHBlciBjbGFzcyB0byBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIGNhbGxiYWNrIG9i
amVjdHMgaGVsZCBieQotLy8gU1FMU3RhdGVtZW50IGFuZCBTUUxUcmFuc2FjdGlvbiBvbiB0aGUg
cHJvcGVyIHRocmVhZC4gVGhlICd3cmFwcGVkJwotLy8gY2FsbGJhY2sgaXMgZGVyZWZlcmVuY2Vk
OgotLy8gLSBieSBkZXN0cnVjdGluZyB0aGUgZW5jbG9zaW5nIHdyYXBwZXIgLSBvbiBhbnkgdGhy
ZWFkCi0vLyAtIGJ5IGNhbGxpbmcgY2xlYXIoKSAtIG9uIGFueSB0aHJlYWQKLS8vIC0gYnkgdW53
cmFwcGluZyBhbmQgdGhlbiBkZXJlZmVyZW5jaW5nIG5vcm1hbGx5IC0gb24gY29udGV4dCB0aHJl
YWQgb25seQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgU1FMQ2FsbGJhY2tXcmFwcGVyIHsK
LXB1YmxpYzoKLSAgICBTUUxDYWxsYmFja1dyYXBwZXIoUGFzc1JlZlB0cjxUPiBjYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAg
OiBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dChtX2NhbGxiYWNrID8gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA6IDApCi0gICAgewotICAgICAg
ICBBU1NFUlQoIW1fY2FsbGJhY2sgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSAm
JiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKSk7Ci0gICAgfQot
Ci0gICAgflNRTENhbGxiYWNrV3JhcHBlcigpCi0gICAgewotICAgICAgICBjbGVhcigpOwotICAg
IH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dDsKLSAgICAgICAgVCogY2FsbGJhY2s7Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgICAgIGlmICghbV9jYWxs
YmFjaykgewotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgewotICAgICAg
ICAgICAgICAgIG1fY2FsbGJhY2sgPSAwOwotICAgICAgICAgICAgICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY29udGV4dCA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5yZWxlYXNlKCku
bGVha1JlZigpOwotICAgICAgICAgICAgY2FsbGJhY2sgPSBtX2NhbGxiYWNrLnJlbGVhc2UoKS5s
ZWFrUmVmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dC0+cG9zdFRhc2soU2FmZVJlbGVh
c2VUYXNrOjpjcmVhdGUoY2FsbGJhY2spKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFQ+IHVu
d3JhcCgpCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAg
ICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKTsKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKLSAg
ICAgICAgcmV0dXJuIG1fY2FsbGJhY2sucmVsZWFzZSgpOwotICAgIH0KLQotICAgIC8vIFVzZWZ1
bCBmb3Igb3B0aW1pemF0aW9ucyBvbmx5LCBwbGVhc2UgdGVzdCB0aGUgcmV0dXJuIHZhbHVlIG9m
IHVud3JhcCB0byBiZSBzdXJlLgotICAgIGJvb2wgaGFzQ2FsbGJhY2soKSBjb25zdCB7IHJldHVy
biBtX2NhbGxiYWNrOyB9Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgU2FmZVJlbGVhc2VUYXNrIDog
cHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8U2FmZVJlbGVhc2VUYXNrPiBjcmVhdGUoVCogY2FsbGJhY2tU
b1JlbGVhc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Fm
ZVJlbGVhc2VUYXNrKGNhbGxiYWNrVG9SZWxlYXNlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2tUb1JlbGVhc2UgJiYgY29u
dGV4dCAmJiBjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgICAgICAgICBtX2NhbGxi
YWNrVG9SZWxlYXNlLT5kZXJlZigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGVyZWYoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0NsZWFudXBUYXNrKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU2FmZVJlbGVhc2VUYXNrKFQq
IGNhbGxiYWNrVG9SZWxlYXNlKQotICAgICAgICAgICAgOiBtX2NhbGxiYWNrVG9SZWxlYXNlKGNh
bGxiYWNrVG9SZWxlYXNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUKiBtX2Nh
bGxiYWNrVG9SZWxlYXNlOwotICAgIH07Ci0KLSAgICBNdXRleCBtX211dGV4OwotICAgIFJlZlB0
cjxUPiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gU1FMQ2FsbGJhY2tXcmFw
cGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFNRTEVycm9yX2gKLSNkZWZpbmUgU1FMRXJyb3JfaAotCi0j
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgU1FMRXJyb3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMRXJy
b3I+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxFcnJvcj4gY3JlYXRlKHVu
c2lnbmVkIGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTEVycm9yKGNvZGUsIG1lc3NhZ2UpKTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTEVy
cm9yPiBjcmVhdGUodW5zaWduZWQgY29kZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0
ZUNvZGUpCi0gICAgewotICAgICAgICByZXR1cm4gY3JlYXRlKGNvZGUsIFN0cmluZzo6Zm9ybWF0
KCIlcyAoJWQpIiwgbWVzc2FnZSwgc3FsaXRlQ29kZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTUUxFcnJvcj4gY3JlYXRlKHVuc2lnbmVkIGNvZGUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIGludCBzcWxpdGVDb2RlLCBjb25zdCBjaGFyKiBzcWxpdGVNZXNzYWdlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZShjb2RlLCBTdHJpbmc6OmZvcm1hdCgiJXMgKCVkICVzKSIsIG1l
c3NhZ2UsIHNxbGl0ZUNvZGUsIHNxbGl0ZU1lc3NhZ2UpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9Ci0gICAgU3RyaW5nIG1lc3NhZ2UoKSBj
b25zdCB7IHJldHVybiBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCk7IH0KLQotICAgIGVudW0gU1FM
RXJyb3JDb2RlIHsKLSAgICAgICAgVU5LTk9XTl9FUlIgPSAwLAotICAgICAgICBEQVRBQkFTRV9F
UlIgPSAxLAotICAgICAgICBWRVJTSU9OX0VSUiA9IDIsCi0gICAgICAgIFRPT19MQVJHRV9FUlIg
PSAzLAotICAgICAgICBRVU9UQV9FUlIgPSA0LAotICAgICAgICBTWU5UQVhfRVJSID0gNSwKLSAg
ICAgICAgQ09OU1RSQUlOVF9FUlIgPSA2LAotICAgICAgICBUSU1FT1VUX0VSUiA9IDcKLSAgICB9
OwotCi1wcml2YXRlOgotICAgIFNRTEVycm9yKHVuc2lnbmVkIGNvZGUsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkgOiBtX2NvZGUoY29kZSksIG1fbWVzc2FnZShtZXNzYWdlLmlzb2xhdGVkQ29weSgp
KSB7IH0KLSAgICB1bnNpZ25lZCBtX2NvZGU7Ci0gICAgU3RyaW5nIG1fbWVzc2FnZTsKLX07Ci0K
LX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBTUUxFcnJvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTEVycm9yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTEVycm9yLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxFcnJvci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IHN0b3JhZ2UgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RB
VEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJs
ZXMKLSAgICBdIFNRTEVycm9yIHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgY29kZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdl
OwotCi0gICAgICAgIC8vIFNRTEVycm9yQ29kZTogdXNlZCBvbmx5IGluIHRoZSBhc3luYyBEQiBB
UEkKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVU5LTk9XTl9FUlIgPSAwOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQVRBQkFTRV9FUlIgPSAxOwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0VSUiA9IDI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFRPT19MQVJHRV9FUlIgPSAzOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBRVU9U
QV9FUlIgPSA0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTWU5UQVhfRVJSID0gNTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09OU1RSQUlOVF9FUlIgPSA2OwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUSU1FT1VUX0VSUiA9IDc7Ci0gICAgfTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygc3RydWN0cyB0
byBwYWlyIHRoZSBuYW1lcyBhbmQgZGVzY3JpcHRpb25zLgotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGV4Y2VwdGlvbk5hbWVzW10gPSB7Ci0gICAgIlVOS05PV05fRVJSIiwKLSAgICAiREFUQUJB
U0VfRVJSIiwKLSAgICAiVkVSU0lPTl9FUlIiLAotICAgICJUT09fTEFSR0VfRVJSIiwKLSAgICAi
UVVPVEFfRVJSIiwKLSAgICAiU1lOVEFYX0VSUiIsCi0gICAgIkNPTlNUUkFJTlRfRVJSIiwKLSAg
ICAiVElNRU9VVF9FUlIiCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXhjZXB0aW9u
RGVzY3JpcHRpb25zW10gPSB7Ci0gICAgIlRoZSBvcGVyYXRpb24gZmFpbGVkIGZvciByZWFzb25z
IHVucmVsYXRlZCB0byB0aGUgZGF0YWJhc2UuIiwKLSAgICAiVGhlIG9wZXJhdGlvbiBmYWlsZWQg
Zm9yIHNvbWUgcmVhc29uIHJlbGF0ZWQgdG8gdGhlIGRhdGFiYXNlLiIsCi0gICAgIlRoZSBhY3R1
YWwgZGF0YWJhc2UgdmVyc2lvbiBkaWQgbm90IG1hdGNoIHRoZSBleHBlY3RlZCB2ZXJzaW9uLiIs
Ci0gICAgIkRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgZGF0YWJhc2UgaXMgdG9vIGxhcmdlLiIsCi0g
ICAgIlF1b3RhIHdhcyBleGNlZWRlZC4iLAotICAgICJJbnZhbGlkIG9yIHVuYXV0aG9yaXplZCBz
dGF0ZW1lbnQ7IG9yIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGRpZCBub3QgbWF0Y2ggdGhlIG51
bWJlciBvZiA/IHBsYWNlaG9sZGVycy4iLAotICAgICJBIGNvbnN0cmFpbnQgd2FzIHZpb2xhdGVk
LiIsCi0gICAgIkEgdHJhbnNhY3Rpb24gbG9jayBjb3VsZCBub3QgYmUgYWNxdWlyZWQgaW4gYSBy
ZWFzb25hYmxlIHRpbWUuIgotfTsKLQotQ09NUElMRV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdUSChl
eGNlcHRpb25OYW1lcykgPT0gV1RGX0FSUkFZX0xFTkdUSChleGNlcHRpb25EZXNjcmlwdGlvbnMp
LCBTUUxFeGNlcHRpb25UYWJsZXNNdXN0TWF0Y2gpOwotCi1ib29sIFNRTEV4Y2VwdGlvbjo6aW5p
dGlhbGl6ZURlc2NyaXB0aW9uKEV4Y2VwdGlvbkNvZGUgZWMsIEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiogZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKGVjIDwgU1FMRXhjZXB0aW9uT2Zmc2V0IHx8
IGVjID4gU1FMRXhjZXB0aW9uTWF4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkZXNj
cmlwdGlvbi0+dHlwZU5hbWUgPSAiRE9NIFNRTCI7Ci0gICAgZGVzY3JpcHRpb24tPmNvZGUgPSBl
YyAtIFNRTEV4Y2VwdGlvbk9mZnNldDsKLSAgICBkZXNjcmlwdGlvbi0+dHlwZSA9IFNRTEV4Y2Vw
dGlvblR5cGU7Ci0KLSAgICBzaXplX3QgdGFibGVTaXplID0gV1RGX0FSUkFZX0xFTkdUSChleGNl
cHRpb25OYW1lcyk7Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBlYyAtIFVOS05PV05fRVJSOwot
Ci0gICAgZGVzY3JpcHRpb24tPm5hbWUgPSB0YWJsZUluZGV4IDwgdGFibGVTaXplID8gZXhjZXB0
aW9uTmFtZXNbdGFibGVJbmRleF0gOiAwOwotICAgIGRlc2NyaXB0aW9uLT5kZXNjcmlwdGlvbiA9
IHRhYmxlSW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25EZXNjcmlwdGlvbnNbdGFibGVJbmRl
eF0gOiAwOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTEV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMRXhjZXB0aW9uLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU1FMRXhjZXB0aW9uX2gKLSNkZWZpbmUgU1FMRXhjZXB0aW9uX2gKLQotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgU1FMRXhjZXB0aW9uIDogcHVibGljIEV4Y2VwdGlvbkJhc2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTEV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0
IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNRTEV4Y2VwdGlvbihkZXNjcmlwdGlvbikpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgU1FMRXhjZXB0aW9uT2Zmc2V0ID0gMTAwMDsKLSAgICBzdGF0
aWMgY29uc3QgaW50IFNRTEV4Y2VwdGlvbk1heCA9IDEwOTk7Ci0KLSAgICBlbnVtIFNRTEV4Y2Vw
dGlvbkNvZGUgewotICAgICAgICBVTktOT1dOX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCwKLSAg
ICAgICAgREFUQUJBU0VfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgMSwKLSAgICAgICAgVkVS
U0lPTl9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyAyLAotICAgICAgICBUT09fTEFSR0VfRVJS
ID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgMywKLSAgICAgICAgUVVPVEFfRVJSID0gU1FMRXhjZXB0
aW9uT2Zmc2V0ICsgNCwKLSAgICAgICAgU1lOVEFYX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCAr
IDUsCi0gICAgICAgIENPTlNUUkFJTlRfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgNiwKLSAg
ICAgICAgVElNRU9VVF9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA3Ci0gICAgfTsKLQotICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2RlLCBFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24qKTsKLQotcHJpdmF0ZToKLSAgICBTUUxFeGNlcHRpb24oY29uc3Qg
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAgOiBFeGNlcHRp
b25CYXNlKGRlc2NyaXB0aW9uKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gU1FM
RXhjZXB0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGwJ
KHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9u
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotCi0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAotICAgICAg
ICBKU05vU3RhdGljVGFibGVzLAotICAgICAgICBEb05vdENoZWNrQ29uc3RhbnRzCi0gICAgXSBT
UUxFeGNlcHRpb24gewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBj
b2RlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7Ci0KLSAg
ICAgICAgLy8gU1FMRXhjZXB0aW9uQ29kZTogdXNlZCBvbmx5IGluIHRoZSBzeW5jIERCIEFQSQot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9IDA7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IERBVEFCQVNFX0VSUiA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFZFUlNJT05fRVJSID0gMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
VE9PX0xBUkdFX0VSUiA9IDM7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFFVT1RBX0VS
UiA9IDQ7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNZTlRBWF9FUlIgPSA1OwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVFJBSU5UX0VSUiA9IDY7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFRJTUVPVVRfRVJSID0gNzsKLSAgICB9OwotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRT
ZXQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHVuc2lnbmVkIGNvbnN0IE1h
eEVycm9yQ29kZSA9IDI7Ci0KLVNRTFJlc3VsdFNldDo6U1FMUmVzdWx0U2V0KCkKLSAgICA6IG1f
cm93cyhTUUxSZXN1bHRTZXRSb3dMaXN0OjpjcmVhdGUoKSkKLSAgICAsIG1faW5zZXJ0SWQoMCkK
LSAgICAsIG1faW5zZXJ0SWRTZXQoZmFsc2UpCi0gICAgLCBtX3Jvd3NBZmZlY3RlZCgwKQotewot
fQotCi1pbnQ2NF90IFNRTFJlc3VsdFNldDo6aW5zZXJ0SWQoRXhjZXB0aW9uQ29kZSYgZSkgY29u
c3QKLXsKLSAgICAvLyA0LjExLjQgLSBSZXR1cm4gdGhlIGlkIG9mIHRoZSBsYXN0IHJvdyBpbnNl
cnRlZCBhcyBhIHJlc3VsdCBvZiB0aGUgcXVlcnkKLSAgICAvLyBJZiB0aGUgcXVlcnkgZGlkbid0
IHJlc3VsdCBpbiBhbnkgcm93cyBiZWluZyBhZGRlZCwgcmFpc2UgYW4gSU5WQUxJRF9BQ0NFU1Nf
RVJSIGV4Y2VwdGlvbgotICAgIGlmIChtX2luc2VydElkU2V0KQotICAgICAgICByZXR1cm4gbV9p
bnNlcnRJZDsKLQotICAgIGUgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgcmV0dXJuIC0xOwot
fQotCi1pbnQgU1FMUmVzdWx0U2V0Ojpyb3dzQWZmZWN0ZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX3Jvd3NBZmZlY3RlZDsKLX0KLQotU1FMUmVzdWx0U2V0Um93TGlzdCogU1FMUmVzdWx0U2V0
Ojpyb3dzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yb3dzLmdldCgpOwotfQotCi12b2lkIFNR
TFJlc3VsdFNldDo6c2V0SW5zZXJ0SWQoaW50NjRfdCBpZCkKLXsKLSAgICBBU1NFUlQoIW1faW5z
ZXJ0SWRTZXQpOwotCi0gICAgbV9pbnNlcnRJZCA9IGlkOwotICAgIG1faW5zZXJ0SWRTZXQgPSB0
cnVlOwotfQotCi12b2lkIFNRTFJlc3VsdFNldDo6c2V0Um93c0FmZmVjdGVkKGludCBjb3VudCkK
LXsKLSAgICBtX3Jvd3NBZmZlY3RlZCA9IGNvdW50OwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU1FMUmVzdWx0U2V0X2gKLSNkZWZpbmUgU1FMUmVzdWx0U2V0
X2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJTUUxSZXN1bHRTZXRS
b3dMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgU1FM
UmVzdWx0U2V0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFJlc3VsdFNldD4gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNRTFJlc3VsdFNldCk7IH0KLQotICAgIFNRTFJlc3VsdFNldFJv
d0xpc3QqIHJvd3MoKSBjb25zdDsKLQotICAgIGludDY0X3QgaW5zZXJ0SWQoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwotICAgIGludCByb3dzQWZmZWN0ZWQoKSBjb25zdDsKLQotLy8gRm9yIGludGVy
bmFsIChub24tSlMpIHVzZQotICAgIHZvaWQgc2V0SW5zZXJ0SWQoaW50NjRfdCk7Ci0gICAgdm9p
ZCBzZXRSb3dzQWZmZWN0ZWQoaW50KTsKLQotcHJpdmF0ZToKLSAgICBTUUxSZXN1bHRTZXQoKTsK
LQotICAgIFJlZlB0cjxTUUxSZXN1bHRTZXRSb3dMaXN0PiBtX3Jvd3M7Ci0gICAgaW50NjRfdCBt
X2luc2VydElkOwotICAgIGJvb2wgbV9pbnNlcnRJZFNldDsKLSAgICBpbnQgbV9yb3dzQWZmZWN0
ZWQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8g
U1FMUmVzdWx0U2V0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5p
ZGwJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0
U2V0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7
Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0g
ICAgICAgIE9taXRDb25zdHJ1Y3RvciwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAgIF0g
U1FMUmVzdWx0U2V0IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNRTFJlc3VsdFNldFJv
d0xpc3Qgcm93czsKLQotI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQ
UAotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBpbnNlcnRJZAotICAgICAgICAgICAg
Z2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwotI2Vsc2UKLSAgICAgICAgLy8gRXhwbGljaXRl
bHkgY2hvb3NlICdsb25nIGxvbmcnIGhlcmUgdG8gYXZvaWQgYSA2NGJpdC0+MzJiaXQgc2hvcnRl
bmluZyB3YXJuaW5nIGZvciB1cy4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbG9u
ZyBpbnNlcnRJZAotICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwotI2Vu
ZGlmCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHJvd3NBZmZlY3RlZDsKLSAgICB9
OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xp
c3QuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJl
c3VsdFNldFJvd0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCi0KLSNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVuc2lnbmVkIFNR
TFJlc3VsdFNldFJvd0xpc3Q6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVzdWx0LnNp
emUoKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChtX3Jlc3VsdC5zaXpl
KCkgJSBtX2NvbHVtbnMuc2l6ZSgpID09IDApOwotCi0gICAgcmV0dXJuIG1fcmVzdWx0LnNpemUo
KSAvIG1fY29sdW1ucy5zaXplKCk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaAkocmV2aXNpb24gMTA5ODU4KQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTUUxSZXN1bHRTZXRSb3dMaXN0X2gKLSNk
ZWZpbmUgU1FMUmVzdWx0U2V0Um93TGlzdF9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
U1FMUmVzdWx0U2V0Um93TGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFNRTFJlc3VsdFNldFJvd0xp
c3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXRSb3dMaXN0
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1FMUmVzdWx0U2V0Um93TGlzdCk7IH0K
LQotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2x1bW5OYW1lcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29sdW1uczsgfQotICAgIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdWx0OyB9Ci0KLSAgICB2b2lkIGFkZENvbHVtbihjb25zdCBTdHJpbmcm
IG5hbWUpIHsgbV9jb2x1bW5zLmFwcGVuZChuYW1lKTsgfQotICAgIHZvaWQgYWRkUmVzdWx0KGNv
bnN0IFNRTFZhbHVlJiByZXN1bHQpIHsgbV9yZXN1bHQuYXBwZW5kKHJlc3VsdCk7IH0KLQotICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFNRTFJlc3VsdFNldFJv
d0xpc3QoKSB7IH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IG1fY29sdW1uczsKLSAgICBWZWN0b3I8
U1FMVmFsdWU+IG1fcmVzdWx0OwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2Ugewot
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAotICAg
ICAgICBPbWl0Q29uc3RydWN0b3IsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKLSAgICBdIFNR
TFJlc3VsdFNldFJvd0xpc3QgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBsZW5ndGg7Ci0gICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBpdGVtKGluIHVuc2lnbmVk
IGxvbmcgaW5kZXgpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxT
dGF0ZW1lbnQuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCi0KLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiU1FMRXJyb3IuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNr
LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnQ+IFNRTFN0YXRlbWVudDo6Y3JlYXRlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQotewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KGRhdGFiYXNlLCBzdGF0ZW1lbnQsIGFy
Z3VtZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHBlcm1pc3Npb25zKSk7Ci19Ci0KLVNR
TFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0
cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQotICAgIDogbV9z
dGF0ZW1lbnQoc3RhdGVtZW50Lmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9hcmd1bWVudHMoYXJn
dW1lbnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX3N0YXRlbWVudEVycm9yQ2Fs
bGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCi0gICAgLCBtX3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQotewotfQotCi1ib29sIFNR
TFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCi17Ci0gICAgQVNTRVJUKCFtX3Jlc3Vs
dFNldCk7Ci0KLSAgICAvLyBJZiB3ZSdyZSByZS1ydW5uaW5nIHRoaXMgc3RhdGVtZW50IGFmdGVy
IGEgcXVvdGEgdmlvbGF0aW9uLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZXJyb3Igbm93Ci0gICAg
Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOwotCi0gICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBtaWdo
dCBoYXZlIGJlZW4gbWFya2VkIGJhZCB3aGlsZSBpdCB3YXMgYmVpbmcgc2V0IHVwIG9uIHRoZSBt
YWluIHRocmVhZCwKLSAgICAvLyBzbyBpZiB0aGVyZSBpcyBzdGlsbCBhbiBlcnJvciwgcmV0dXJu
IGZhbHNlLgotICAgIGlmIChtX2Vycm9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBk
Yi0+c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKG1fcGVybWlzc2lvbnMpOwotCi0gICAgU1FMaXRl
RGF0YWJhc2UqIGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgpOwotCi0gICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
T2spIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNvcnJlY3Ru
ZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5hc2NpaSgp
LmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdEludGVycnVwdCkKLSAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBz
dGF0ZW1lbnQiLCByZXN1bHQsICJpbnRlcnJ1cHRlZCIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgImNv
dWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoMSwgbV9lcnJv
ci0+Y29kZSgpLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6ICBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRl
ZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYg
ZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgotICAgIC8vIElmIHRoaXMgaXMgdGhl
IGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxp
Y2lvdXMKLSAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1l
bnRzLnNpemUoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNv
dW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7Ci0gICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKGRiLT5pc0ludGVycnVwdGVkKCkgPyBTUUxFcnJvcjo6
REFUQUJBU0VfRVJSIDogU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBz
dGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7Ci0gICAgICAg
IGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDIsIG1fZXJyb3ItPmNvZGUoKSwgMCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdGVt
ZW50LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOwotICAgICAgICBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKGRi
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFp
bGVkIHRvIGJpbmQgdmFsdWUgaW5kZXggJWkgdG8gc3RhdGVtZW50IGZvciBxdWVyeSAnJXMnIiwg
aSArIDEsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGRiLT5yZXBv
cnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDMsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCAiY291bGQgbm90IGJpbmQgdmFsdWUiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNy
ZWF0ZSgpOwotCi0gICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4K
LSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVz
dWx0Um93KSB7Ci0gICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1bW5Db3Vu
dCgpOwotICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dzID0gcmVzdWx0U2V0LT5yb3dz
KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAg
ICAgICAgICAgcm93cy0+YWRkQ29sdW1uKHN0YXRlbWVudC5nZXRDb2x1bW5OYW1lKGkpKTsKLQot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50
OyBpKyspCi0gICAgICAgICAgICAgICAgcm93cy0+YWRkUmVzdWx0KHN0YXRlbWVudC5nZXRDb2x1
bW5WYWx1ZShpKSk7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0g
ICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAgZGItPnJlcG9ydEV4ZWN1dGVT
dGF0ZW1lbnRSZXN1bHQoNCwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIs
ICJjb3VsZCBub3QgaXRlcmF0ZSByZXN1bHRzIiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAvLyBEaWRuJ3QgZmluZCBh
bnl0aGluZywgb3Igd2FzIGFuIGluc2VydAotICAgICAgICBpZiAoZGItPmxhc3RBY3Rpb25XYXNJ
bnNlcnQoKSkKLSAgICAgICAgICAgIHJlc3VsdFNldC0+c2V0SW5zZXJ0SWQoZGF0YWJhc2UtPmxh
c3RJbnNlcnRSb3dJRCgpKTsKLSAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxs
KSB7Ci0gICAgICAgIC8vIFJldHVybiB0aGUgUXVvdGEgZXJyb3IgLSB0aGUgZGVsZWdhdGUgd2ls
bCBiZSBhc2tlZCBmb3IgbW9yZSBzcGFjZSBhbmQgdGhpcyBzdGF0ZW1lbnQgbWlnaHQgYmUgcmUt
cnVuCi0gICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKGRiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVz
dWx0KDUsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIHJlc3VsdCk7Ci0gICAgICAgIG1fZXJyb3Ig
PSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgZXhl
Y3V0ZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhlIHNwZWMgYWxs
b3dzIHRyaWdnZXJzLCBhbmQgd2Ugd2FudCB0byBiZSAiYWNjdXJhdGUiIGluIGEgZGlmZmVyZW50
IHdheSwgd2UnZCB1c2UKLSAgICAvLyBzcWxpdGUzX3RvdGFsX2NoYW5nZXMoKSBoZXJlIGluc3Rl
YWQgb2Ygc3FsaXRlM19jaGFuZ2VkLCBiZWNhdXNlIHRoYXQgaW5jbHVkZXMgcm93cyBtb2RpZmll
ZCBmcm9tIHdpdGhpbiBhIHRyaWdnZXIKLSAgICAvLyBGb3Igbm93LCB0aGlzIHNlZW1zIHN1ZmZp
Y2llbnQKLSAgICByZXN1bHRTZXQtPnNldFJvd3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5n
ZXMoKSk7Ci0KLSAgICBtX3Jlc3VsdFNldCA9IHJlc3VsdFNldDsKLSAgICBkYi0+cmVwb3J0RXhl
Y3V0ZVN0YXRlbWVudFJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXREYXRhYmFzZURlbGV0ZWRFcnJvcihEYXRhYmFzZSog
ZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAg
ZGF0YWJhc2UtPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoNiwgU1FMRXJyb3I6OlVOS05P
V05fRVJSLCAwKTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ1bmFibGUgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQsIGJlY2F1c2UgdGhlIHVzZXIg
ZGVsZXRlZCB0aGUgZGF0YWJhc2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldFZlcnNp
b25NaXNtYXRjaGVkRXJyb3IoRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIEFTU0VSVCghbV9l
cnJvciAmJiAhbV9yZXN1bHRTZXQpOwotICAgIGRhdGFiYXNlLT5yZXBvcnRFeGVjdXRlU3RhdGVt
ZW50UmVzdWx0KDcsIFNRTEVycm9yOjpWRVJTSU9OX0VSUiwgMCk7Ci0gICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9m
IHRoZSBkYXRhYmFzZSBhbmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwot
fQotCi1ib29sIFNRTFN0YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwotCi0gICAgYm9vbCBjYWxs
YmFja0Vycm9yID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNh
bGxiYWNrID0gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7Ci0gICAgUmVmUHRy
PFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX3N0YXRlbWVudEVy
cm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotCi0gICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlh
dGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRlZCBpbiBhbiBlcnJv
ciwKLSAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlv
biBlcnJvciBjYWxsYmFjay4KLSAgICBpZiAobV9lcnJvcikgewotICAgICAgICBBU1NFUlQoZXJy
b3JDYWxsYmFjayk7Ci0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5k
bGVFdmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChjYWxs
YmFjaykKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodHJh
bnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsKLQotICAgIHJldHVybiBjYWxsYmFja0Vycm9y
OwotfQotCi12b2lkIFNRTFN0YXRlbWVudDo6c2V0RmFpbHVyZUR1ZVRvUXVvdGEoRGF0YWJhc2Uq
IGRhdGFiYXNlKQotewotICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQpOwotICAg
IGRhdGFiYXNlLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDgsIFNRTEVycm9yOjpRVU9U
QV9FUlIsIDApOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpRVU9U
QV9FUlIsICJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFnZSBzcGFjZSwgb3Ig
dGhlIHN0b3JhZ2UgcXVvdGEgd2FzIHJlYWNoZWQgYW5kIHRoZSB1c2VyIGRlY2xpbmVkIHRvIGFs
bG93IG1vcmUgc3BhY2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OmNsZWFyRmFpbHVyZUR1
ZVRvUXVvdGEoKQotewotICAgIGlmIChsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpKQot
ICAgICAgICBtX2Vycm9yID0gMDsKLX0KLQotYm9vbCBTUUxTdGF0ZW1lbnQ6Omxhc3RFeGVjdXRp
b25GYWlsZWREdWVUb1F1b3RhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lcnJvciAmJiBtX2Vy
cm9yLT5jb2RlKCkgPT0gU1FMRXJyb3I6OlFVT1RBX0VSUjsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotI2lmbmRlZiBTUUxTdGF0ZW1lbnRfaAotI2RlZmluZSBTUUxTdGF0ZW1lbnRfaAotCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSAiU1FMQ2FsbGJhY2tXcmFwcGVyLmgiCi0jaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0j
aW5jbHVkZSAiU1FMVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZTsK
LWNsYXNzIFNRTEVycm9yOwotY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7Ci1jbGFzcyBTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrOwotY2xhc3MgU1FMVHJhbnNhY3Rpb247Ci0KLWNsYXNzIFNR
TFN0YXRlbWVudCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxTdGF0ZW1lbnQ+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IGNyZWF0ZShEYXRh
YmFzZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrPiwgaW50IHBlcm1pc3Npb25zKTsKLQotICAgIGJvb2wgZXhlY3V0ZShEYXRhYmFzZSopOwot
ICAgIGJvb2wgbGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdDsKLQotICAgIGJv
b2wgaGFzU3RhdGVtZW50Q2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudENhbGxi
YWNrV3JhcHBlci5oYXNDYWxsYmFjaygpOyB9Ci0gICAgYm9vbCBoYXNTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci5o
YXNDYWxsYmFjaygpOyB9Ci0KLSAgICB2b2lkIHNldERhdGFiYXNlRGVsZXRlZEVycm9yKERhdGFi
YXNlKik7Ci0gICAgdm9pZCBzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKERhdGFiYXNlKik7Ci0K
LSAgICBib29sIHBlcmZvcm1DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwotCi0gICAgU1FMRXJy
b3IqIHNxbEVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvci5nZXQoKTsgfQotcHJpdmF0ZToK
LSAgICBTUUxTdGF0ZW1lbnQoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29u
c3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBlcm1p
c3Npb25zKTsKLQotICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoRGF0YWJhc2UqKTsKLSAg
ICB2b2lkIGNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKLQotICAgIFN0cmluZyBtX3N0YXRlbWVu
dDsKLSAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRzOwotICAgIFNRTENhbGxiYWNrV3Jh
cHBlcjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXI7Ci0g
ICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IG1fc3RhdGVt
ZW50RXJyb3JDYWxsYmFja1dyYXBwZXI7Ci0KLSAgICBSZWZQdHI8U1FMRXJyb3I+IG1fZXJyb3I7
Ci0gICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gbV9yZXN1bHRTZXQ7Ci0KLSAgICBpbnQgbV9wZXJt
aXNzaW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkocmV2aXNpb24gMTA5
ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNRTFN0YXRlbWVudENhbGxiYWNr
X2gKLSNkZWZpbmUgU1FMU3RhdGVtZW50Q2FsbGJhY2tfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNRTFRyYW5zYWN0aW9uOwotY2xhc3MgU1FMUmVzdWx0U2V0
OwotCi1jbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gewotcHVibGljOgotICAgIHZpcnR1YWwgflNRTFN0
YXRlbWVudENhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRy
YW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KikgPSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2Vu
ZGlmIC8vIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0gICAgaW50ZXJm
YWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAotICAgICAgICBDYWxsYmFj
awotICAgIF0gU1FMU3RhdGVtZW50Q2FsbGJhY2sgewotICAgICAgICBib29sZWFuIGhhbmRsZUV2
ZW50KGluIFNRTFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uLCBpbiBTUUxSZXN1bHRTZXQgcmVzdWx0
U2V0KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja19oCi0j
ZGVmaW5lIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNRTFRyYW5zYWN0aW9uOwotY2xhc3MgU1FMRXJyb3I7Ci0K
LWNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gewotcHVibGljOgotICAgIHZpcnR1YWwg
flNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciopID0gMDsKLX07Ci0KLX0KLQotI2VuZGlm
Ci0KLSNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbAko
cmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IHN0b3JhZ2UgewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVNRTF9EQVRB
QkFTRSwKLSAgICAgICAgQ2FsbGJhY2sKLSAgICBdIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sg
ewotICAgICAgICBbQ3VzdG9tXSBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNRTFRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uLCBpbiBTUUxFcnJvciBlcnJvcik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkocmV2aXNpb24gMTA5ODU4
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U1FMU3RhdGVtZW50U3luYy5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIkRhdGFiYXNlU3luYy5oIgotI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IlNRTFJlc3VsdFNldC5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0jaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1TUUxTdGF0ZW1lbnRTeW5jOjpTUUxTdGF0ZW1lbnRTeW5jKGNvbnN0IFN0cmluZyYg
c3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIGludCBwZXJtaXNz
aW9ucykKLSAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudCkKLSAgICAsIG1fYXJndW1lbnRzKGFy
Z3VtZW50cykKLSAgICAsIG1fcGVybWlzc2lvbnMocGVybWlzc2lvbnMpCi17Ci0gICAgQVNTRVJU
KCFtX3N0YXRlbWVudC5pc0VtcHR5KCkpOwotfQotCi1QYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4g
U1FMU3RhdGVtZW50U3luYzo6ZXhlY3V0ZShEYXRhYmFzZVN5bmMqIGRiLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBkYi0+c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKG1fcGVybWlzc2lvbnMp
OwotCi0gICAgU1FMaXRlRGF0YWJhc2UqIGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgp
OwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50
KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLSAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIGVjID0gKHJlc3VsdCA9PSBTUUxSZXN1bHRJbnRl
cnJ1cHQgPyBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiA6IFNRTEV4Y2VwdGlvbjo6U1lOVEFY
X0VSUik7Ci0gICAgICAgIGRiLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjb3VsZCBub3QgcHJlcGFy
ZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChzdGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50
KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgIGVjID0gKGRiLT5pc0ludGVycnVw
dGVkKCk/IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSIDogU1FMRXhjZXB0aW9uOjpTWU5UQVhf
RVJSKTsKLSAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoIm51bWJlciBvZiAnPydzIGlu
IHN0YXRlbWVudCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYXJndW1lbnQgY291bnQiKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFs
dWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1
bHRGdWxsKSB7Ci0gICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSOwotICAg
ICAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoInRoZXJlIHdhcyBub3QgZW5vdWdoIHJl
bWFpbmluZyBzdG9yYWdlIHNwYWNlIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgICAgIGVj
ID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Ci0gICAgICAgICAgICBkYi0+c2V0TGFzdEVy
cm9yTWVzc2FnZSgiY291bGQgbm90IGJpbmQgdmFsdWUiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRl
KCk7Ci0KLSAgICAvLyBTdGVwIHNvIHdlIGNhbiBmZXRjaCB0aGUgY29sdW1uIG5hbWVzLgotICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRS
b3cpIHsKLSAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LmNvbHVtbkNvdW50KCk7
Ci0gICAgICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAg
ICAgICByb3dzLT5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOwotCi0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkr
KykKLSAgICAgICAgICAgICAgICByb3dzLT5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZh
bHVlKGkpKTsKLQotICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICAg
ICAgfSB3aGlsZSAocmVzdWx0ID09IFNRTFJlc3VsdFJvdyk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFU
QUJBU0VfRVJSOwotICAgICAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoImNvdWxkIG5v
dCBpdGVyYXRlIHJlc3VsdHMiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAocmVzdWx0ID09
IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcsIG9yIHdh
cyBhbiBpbnNlcnQuCi0gICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQotICAg
ICAgICAgICAgcmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lE
KCkpOwotICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAg
Ly8gUXVvdGEgZXJyb3IsIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNwYWNl
IGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4uCi0gICAgICAgIGVjID0gU1FMRXhj
ZXB0aW9uOjpRVU9UQV9FUlI7Ci0gICAgICAgIGRiLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ0aGVy
ZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFnZSBzcGFjZSIpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0Vf
RVJSOwotICAgICAgICBkYi0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY291bGQgbm90IGV4ZWN1dGUg
c3RhdGVtZW50IiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXN1bHRTZXQtPnNldFJvd3NBZmZlY3RlZChkYXRhYmFz
ZS0+bGFzdENoYW5nZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdFNldC5yZWxlYXNlKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAkocmV2aXNp
b24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU1FMU3RhdGVtZW50U3luY19o
Ci0jZGVmaW5lIFNRTFN0YXRlbWVudFN5bmNfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZVN5bmM7Ci1jbGFzcyBTUUxSZXN1bHRTZXQ7
Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIFNRTFN0YXRlbWVudFN5bmMg
ewotcHVibGljOgotICAgIFNRTFN0YXRlbWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQs
IGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgaW50IHBlcm1pc3Npb25zKTsKLQot
ICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBleGVjdXRlKERhdGFiYXNlU3luYyosIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9zdGF0ZW1lbnQ7Ci0gICAgVmVj
dG9yPFNRTFZhbHVlPiBtX2FyZ3VtZW50czsKLSAgICBpbnQgbV9wZXJtaXNzaW9uczsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
Ci0KLSNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRTeW5jX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MzMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0
aW9uLmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU1FMRXJy
b3IuaCIKLSNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNRTFN0YXRl
bWVudC5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5o
IgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotLy8gVGhlcmUncyBubyB3YXkgb2Yga25vd2luZyBl
eGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSByZXF1aXJlZCB3aGVuIGEgc3RhdGVt
ZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgotLy8gRm9yIG5vdywgd2UnbGwgYXJiaXRyYXJpbHkg
Y2hvb3NlIGN1cnJlbnRRdW90YSArIDFtYi4KLS8vIEluIHRoZSBmdXR1cmUgd2UgZGVjaWRlIHRv
IHRyYWNrIGlmIGEgc2l6ZSBpbmNyZWFzZSB3YXNuJ3QgZW5vdWdoLCBhbmQgYXNrIGZvciBsYXJn
ZXItYW5kLWxhcmdlciBpbmNyZWFzZXMgdW50aWwgaXRzIGVub3VnaC4KLXN0YXRpYyBjb25zdCBp
bnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXNlID0gMTA0ODU3NjsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlvbjo6Y3JlYXRl
KERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NS
ZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNj
ZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5KSk7Ci19Ci0KLVNRTFRyYW5zYWN0aW9uOjpT
UUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25X
cmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQotICAgIDogbV9uZXh0U3RlcCgmU1FMVHJh
bnNhY3Rpb246OmFjcXVpcmVMb2NrKQotICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkK
LSAgICAsIG1fZGF0YWJhc2UoZGIpCi0gICAgLCBtX3dyYXBwZXIod3JhcHBlcikKLSAgICAsIG1f
Y2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQot
ICAgICwgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyKHN1Y2Nlc3NDYWxsYmFjaywgZGItPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JD
YWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fc2hvdWxkUmV0
cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQotICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNl
KQotICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCi0gICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5
KQotICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2goZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fZGF0
YWJhc2UpOwotfQotCi1TUUxUcmFuc2FjdGlvbjo6flNRTFRyYW5zYWN0aW9uKCkKLXsKLSAgICBB
U1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpl
eGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4
Y2VwdGlvbkNvZGUmIGUpCi17Ci0gICAgaWYgKCFtX2V4ZWN1dGVTcWxBbGxvd2VkIHx8ICFtX2Rh
dGFiYXNlLT5vcGVuZWQoKSkgewotICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhv
cml6ZXI6OlJlYWRXcml0ZU1hc2s7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRl
eHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQotICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRh
YmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsKLSAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQot
ICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsK
LQotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3Jl
YXRlKG1fZGF0YWJhc2UuZ2V0KCksIHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywg
Y2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOwotCi0gICAgaWYgKG1fZGF0YWJhc2UtPmRlbGV0
ZWQoKSkKLSAgICAgICAgc3RhdGVtZW50LT5zZXREYXRhYmFzZURlbGV0ZWRFcnJvcihtX2RhdGFi
YXNlLmdldCgpKTsKLQotICAgIGVucXVldWVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKLX0KLQotdm9p
ZCBTUUxUcmFuc2FjdGlvbjo6ZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dD4gc3RhdGVtZW50KQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4
KTsKLSAgICBtX3N0YXRlbWVudFF1ZXVlLmFwcGVuZChzdGF0ZW1lbnQpOwotfQotCi0jaWYgIUxP
R19ESVNBQkxFRAotY29uc3QgY2hhciogU1FMVHJhbnNhY3Rpb246OmRlYnVnU3RlcE5hbWUoU1FM
VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uU3RlcE1ldGhvZCBzdGVwKQotewotICAgIGlmIChzdGVw
ID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCi0gICAgICAgIHJldHVybiAiYWNxdWly
ZUxvY2siOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNh
Y3Rpb25BbmRQcmVmbGlnaHQpCi0gICAgICAgIHJldHVybiAib3BlblRyYW5zYWN0aW9uQW5kUHJl
ZmxpZ2h0IjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVt
ZW50cykKLSAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1lbnRzIjsKLSAgICBlbHNlIGlmIChzdGVw
ID09ICZTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCkKLSAgICAgICAgcmV0dXJu
ICJwb3N0ZmxpZ2h0QW5kQ29tbWl0IjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2Fj
dGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKQotICAgICAgICByZXR1
cm4gImNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayI7Ci0gICAgZWxzZSBpZiAo
c3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKQotICAg
ICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChz
dGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaykK
LSAgICAgICAgcmV0dXJuICJkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIjsKLSAgICBl
bHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNr
KQotICAgICAgICByZXR1cm4gImRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayI7Ci0gICAgZWxzZSBp
ZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sp
Ci0gICAgICAgIHJldHVybiAiZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayI7Ci0gICAgZWxz
ZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spCi0g
ICAgICAgIHJldHVybiAiZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayI7Ci0gICAgZWxzZSBpZiAoc3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaykKLSAgICAg
ICAgcmV0dXJuICJjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2siOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuICJVTktOT1dOIjsKLX0KLSNlbmRpZgotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpj
aGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpCi17Ci0gICAgaWYgKG1f
ZGF0YWJhc2UtPm9wZW5lZCgpICYmICFtX2RhdGFiYXNlLT5pc0ludGVycnVwdGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3YXMgc3RvcHBlZCwgZG9uJ3Qg
ZG8gYW55dGhpbmcgYW5kIGNhbmNlbCBxdWV1ZWQgd29yawotICAgIExPRyhTdG9yYWdlQVBJLCAi
RGF0YWJhc2Ugd2FzIHN0b3BwZWQgb3IgaW50ZXJydXB0ZWQgLSBjYW5jZWxsaW5nIHdvcmsgZm9y
IHRoaXMgdHJhbnNhY3Rpb24iKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRN
dXRleCk7Ci0gICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVhcigpOwotICAgIG1fbmV4dFN0ZXAgPSAw
OwotCi0gICAgLy8gUmVsZWFzZSB0aGUgdW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZl
cmVuY2UgY3ljbGVzLgotICAgIG1fY2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0gICAgbV9zdWNj
ZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0gICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5j
bGVhcigpOwotCi0gICAgLy8gVGhlIG5leHQgc3RlcHMgc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkg
aWYgd2UncmUgb24gdGhlIERCIHRocmVhZC4KLSAgICBpZiAoY3VycmVudFRocmVhZCgpICE9IGRh
dGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJ
RCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgY3VycmVudCBTUUxpdGUgdHJhbnNh
Y3Rpb24gc2hvdWxkIGJlIHN0b3BwZWQsIGFzIHdlbGwKLSAgICBpZiAobV9zcWxpdGVUcmFuc2Fj
dGlvbikgewotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5zdG9wKCk7Ci0gICAgICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sb2NrQWNxdWly
ZWQpCi0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFz
ZUxvY2sodGhpcyk7Ci19Ci0KLQotYm9vbCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybU5leHRTdGVw
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlN0ZXAgJXNcbiIsIGRlYnVnU3RlcE5hbWUobV9u
ZXh0U3RlcCkpOwotCi0gICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjph
Y3F1aXJlTG9jayB8fAotICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6
b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzIHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAg
PT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0IHx8Ci0gICAgICAgICAgIG1f
bmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2sg
fHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk7Ci0KLSAgICBjaGVja0FuZEhhbmRsZUNsb3NlZE9y
SW50ZXJydXB0ZWREYXRhYmFzZSgpOwotCi0gICAgaWYgKG1fbmV4dFN0ZXApCi0gICAgICAgICh0
aGlzLT4qbV9uZXh0U3RlcCkoKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIG5leHRTdGVwIGFm
dGVyIHBlcmZvcm1pbmcgdGhlIGFib3ZlIHN0ZXAsIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0
ZQotICAgIHJldHVybiAhbV9uZXh0U3RlcDsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6cGVy
Zm9ybVBlbmRpbmdDYWxsYmFjaygpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDYWxsYmFjayAl
c1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7Ci0KLSAgICBBU1NFUlQobV9uZXh0U3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIHx8Ci0gICAg
ICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrIHx8Ci0gICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sgfHwKLSAgICAgICAg
ICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2sp
OwotCi0gICAgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVycnVwdGVkRGF0YWJhc2UoKTsKLQot
ICAgIGlmIChtX25leHRTdGVwKQotICAgICAgICAodGhpcy0+Km1fbmV4dFN0ZXApKCk7Ci19Ci0K
LXZvaWQgU1FMVHJhbnNhY3Rpb246Om5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24o
KQotewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VD
b250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotCi0gICAgLy8gSWYg
dGhlIHRyYW5zYWN0aW9uIGlzIGluIHByb2dyZXNzLCB3ZSBzaG91bGQgcm9sbCBpdCBiYWNrIGhl
cmUsIHNpbmNlIHRoaXMgaXMgb3VyIGxhc3QKLSAgICAvLyBvcG9ydHVuaXR5IHRvIGRvIHNvbWV0
aGluZyByZWxhdGVkIHRvIHRoaXMgdHJhbnNhY3Rpb24gb24gdGhlIERCIHRocmVhZC4KLSAgICAv
LyBDbGVhcmluZyBtX3NxbGl0ZVRyYW5zYWN0aW9uIGludm9rZXMgU1FMaXRlVHJhbnNhY3Rpb24n
cyBkZXN0cnVjdG9yIHdoaWNoIGRvZXMganVzdCB0aGF0LgotICAgIG1fc3FsaXRlVHJhbnNhY3Rp
b24uY2xlYXIoKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2soKQotewot
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhp
cyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmxvY2tBY3F1aXJlZCgpCi17Ci0gICAgbV9s
b2NrQWNxdWlyZWQgPSB0cnVlOwotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246Om9w
ZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodDsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxp
bmcgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IGltbWVkaWF0ZWx5IGZvciB0cmFuc2FjdGlv
biAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAo
dGhpcywgdHJ1ZSk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodCgpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgp
LnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOwot
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5nIGFuZCBwcmVmbGlnaHRpbmcgdHJhbnNhY3Rp
b24gJXAiLCB0aGlzKTsKLQotICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCwganVt
cCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKLSAgICBpZiAobV9kYXRhYmFzZS0+ZGVsZXRlZCgpKSB7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FM
RXJyb3I6OlVOS05PV05fRVJSLCAwKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gb3BlbiBhIHRy
YW5zYWN0aW9uLCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFiYXNlIik7Ci0gICAg
ICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlm
IHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkKLSAgICBpZiAoIW1fcmVhZE9ubHkp
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkuc2V0TWF4aW11bVNpemUobV9k
YXRhYmFzZS0+bWF4aW11bVNpemUoKSk7Ci0KLSAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rp
b24pOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBhZG9wdFB0cihuZXcgU1FMaXRlVHJhbnNh
Y3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgbV9yZWFkT25seSkpOwotCi0gICAg
bV9kYXRhYmFzZS0+cmVzZXREZWxldGVzKCk7Ci0gICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhv
cml6ZXIoKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5iZWdpbigpOwotICAgIG1fZGF0YWJh
c2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDErMiAt
IE9wZW4gYSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0YWJhc2UsIGp1bXBpbmcgdG8gdGhlIGVycm9y
IGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKLSAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmlu
UHJvZ3Jlc3MoKSkgewotICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNl
KCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRT
dGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJh
c2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwotICAgICAgICBtX3RyYW5zYWN0aW9u
RXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFibGUg
dG8gYmVnaW4gdHJhbnNhY3Rpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBtX3Nx
bGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3Io
ZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgaW50ZW50
aW9uYWxseSByZXRyaWV2ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4
cGVjdGVkIHZlcnNpb24uCi0gICAgLy8gSW4gbXVsdGktcHJvY2VzcyBicm93c2Vycywgd2UgdGFr
ZSB0aGlzIG9wcG9ydGludXRpeSB0byB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBmb3IKLSAgICAv
LyB0aGUgYWN0dWFsIHZlcnNpb24uIEluIHNpbmdsZS1wcm9jZXNzIGJyb3dzZXJzLCB0aGlzIGlz
IGp1c3QgYSBtYXAgbG9va3VwLgotICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOwotICAgIGlmICgh
bV9kYXRhYmFzZS0+Z2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKGFjdHVhbFZlcnNpb24p
KSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMywg
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3IoKSk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInVuYWJsZSB0byByZWFkIHZlcnNpb24iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwot
ICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fZGF0YWJhc2Ut
PmVuYWJsZUF1dGhvcml6ZXIoKTsKLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9oYXNWZXJzaW9uTWlzbWF0Y2ggPSAh
bV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJzaW9uKCkuaXNFbXB0eSgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAobV9kYXRhYmFzZS0+ZXhwZWN0ZWRWZXJzaW9uKCkgIT0gYWN0dWFsVmVy
c2lvbik7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwcyAzIC0gUGVmb3JtIHByZWZsaWdodCBz
dGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhleSBmYWlsCi0gICAgaWYg
KG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUHJlZmxpZ2h0KHRoaXMpKSB7Ci0gICAg
ICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgICAgIG1fc3FsaXRlVHJh
bnNhY3Rpb24uY2xlYXIoKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigp
OwotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVycm9yKCk7Ci0g
ICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7Ci0gICAgICAgICAgICBtX2RhdGFiYXNl
LT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDQsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwg
MCk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpVTktOT1dOX0VSUiwgInVua25vd24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5z
YWN0aW9uIHByZWZsaWdodCIpOwotICAgICAgICB9Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9u
RXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVHJhbnNhY3Rp
b24gU3RlcCA0IC0gSW52b2tlIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3aXRoIHRoZSBuZXcg
U1FMVHJhbnNhY3Rpb24gb2JqZWN0Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6
ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2s7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVs
aW5nIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhp
cyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwot
fQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygpCi17
Ci0gICAgYm9vbCBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9IGZhbHNlOwotCi0gICAgUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja1dyYXBwZXIu
dW53cmFwKCk7Ci0gICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93
ZWQgPSB0cnVlOwotICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFjYWxsYmFj
ay0+aGFuZGxlRXZlbnQodGhpcyk7Ci0gICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDUgLSBJZiB0aGUgdHJhbnNhY3Rp
b24gY2FsbGJhY2sgd2FzIG51bGwgb3IgcmFpc2VkIGFuIGV4Y2VwdGlvbiwganVtcCB0byB0aGUg
ZXJyb3IgY2FsbGJhY2sKLSAgICBpZiAoc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2spIHsKLSAg
ICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCg1LCBTUUxFcnJv
cjo6VU5LTk9XTl9FUlIsIDApOwotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJv
cjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInRoZSBTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrIHdhcyBudWxsIG9yIHRocmV3IGFuIGV4Y2VwdGlvbiIpOwotICAgICAgICBkZWxpdmVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjaGVkdWxlVG9S
dW5TdGF0ZW1lbnRzKCk7Ci0KLSAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9u
UmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6c2NoZWR1
bGVUb1J1blN0YXRlbWVudHMoKQotewotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246
OnJ1blN0YXRlbWVudHM7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIHJ1blN0YXRl
bWVudHMgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zY2hl
ZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6cnVu
U3RhdGVtZW50cygpCi17Ci0gICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKLQotICAgIC8vIElm
IHRoZXJlIGlzIGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVkIHVwIHRoYXQgYXJlIGFsbCBz
dWNjZXNzZnVsIGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKLSAgICAvLyBTUUxTdGF0ZW1lbnRDYWxs
YmFjayBvYmplY3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2ggdGhlIHF1ZXVlCi0gICAgZG8g
ewotICAgICAgICBpZiAobV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgJiYgIW1fc3FsaXRl
VHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKSB7Ci0gICAgICAgICAgICBtX3No
b3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgLy8gRklYTUUg
LSBBbm90aGVyIHBsYWNlIHRoYXQgbmVlZHMgZml4aW5nIHVwIGFmdGVyIDxyZGFyOi8vcHJvYmxl
bS81NjI4NDY4PiBpcyBhZGRyZXNzZWQuCi0gICAgICAgICAgICAvLyBTZWUgOjpvcGVuVHJhbnNh
Y3Rpb25BbmRQcmVmbGlnaHQoKSBmb3IgZGlzY3Vzc2lvbgotCi0gICAgICAgICAgICAvLyBSZXNl
dCB0aGUgbWF4aW11bSBzaXplIGhlcmUsIGFzIGl0IHdhcyBpbmNyZWFzZWQgdG8gYWxsb3cgdXMg
dG8gcmV0cnkgdGhpcyBzdGF0ZW1lbnQuCi0gICAgICAgICAgICAvLyBtX3Nob3VsZFJldHJ5Q3Vy
cmVudFN0YXRlbWVudCBpcyBzZXQgdG8gdHJ1ZSBvbmx5IHdoZW4gYSBzdGF0ZW1lbnQgZXhjZWVk
cwotICAgICAgICAgICAgLy8gdGhlIHF1b3RhLCB3aGljaCBjYW4gaGFwcGVuIG9ubHkgaW4gYSBy
ZWFkLXdyaXRlIHRyYW5zYWN0aW9uLiBUaGVyZWZvcmUsIHRoZXJlCi0gICAgICAgICAgICAvLyBp
cyBubyBuZWVkIHRvIGNoZWNrIGhlcmUgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtd3JpdGUu
Ci0gICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXpl
KG1fZGF0YWJhc2UtPm1heGltdW1TaXplKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcnVuLCBmYWls
ZWQgZHVlIHRvIHF1b3RhIGNvbnN0cmFpbnRzLCBhbmQgd2UncmUgbm90IHJldHJ5aW5nIGl0LAot
ICAgICAgICAgICAgLy8gdGhhdCBtZWFucyBpdCBlbmRlZCBpbiBhbiBlcnJvci4gIEhhbmRsZSBp
dCBub3cKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQgJiYgbV9jdXJyZW50U3Rh
dGVtZW50LT5sYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYWR2YW5jZSB0byB0
aGUgbmV4dCBzdGF0ZW1lbnQKLSAgICAgICAgICAgIGdldE5leHRTdGF0ZW1lbnQoKTsKLSAgICAg
ICAgfQotICAgIH0gd2hpbGUgKHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSk7Ci0KLSAgICAvLyBJZiBy
dW5DdXJyZW50U3RhdGVtZW50KCkgcmV0dXJuZWQgZmFsc2UsIHRoYXQgbWVhbnMgZWl0aGVyIHRo
ZXJlIHdhcyBubyBjdXJyZW50IHN0YXRlbWVudCB0byBydW4sCi0gICAgLy8gb3IgdGhlIGN1cnJl
bnQgc3RhdGVtZW50IHJlcXVpcmVzIGEgY2FsbGJhY2sgdG8gY29tcGxldGUuICBJbiB0aGUgbGF0
ZXIgY2FzZSwgaXQgYWxzbyBzY2hlZHVsZWQKLSAgICAvLyB0aGUgY2FsbGJhY2sgb3IgcGVyZm9y
bWVkIGFueSBvdGhlciBhZGRpdGlvbmFsIHdvcmsgc28gd2UgY2FuIHJldHVybgotICAgIGlmICgh
bV9jdXJyZW50U3RhdGVtZW50KQotICAgICAgICBwb3N0ZmxpZ2h0QW5kQ29tbWl0KCk7Ci19Ci0K
LXZvaWQgU1FMVHJhbnNhY3Rpb246OmdldE5leHRTdGF0ZW1lbnQoKQotewotICAgIG1fY3VycmVu
dFN0YXRlbWVudCA9IDA7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRl
eCk7Ci0gICAgaWYgKCFtX3N0YXRlbWVudFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2N1
cnJlbnRTdGF0ZW1lbnQgPSBtX3N0YXRlbWVudFF1ZXVlLnRha2VGaXJzdCgpOwotICAgIH0KLX0K
LQotYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudCgpCi17Ci0gICAgaWYg
KCFtX2N1cnJlbnRTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGF0
YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwotCi0gICAgaWYgKG1faGFzVmVyc2lvbk1pc21hdGNo
KQotICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNldFZlcnNpb25NaXNtYXRjaGVkRXJyb3Io
bV9kYXRhYmFzZS5nZXQoKSk7Ci0KLSAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5leGVjdXRl
KG1fZGF0YWJhc2UuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCkpIHsKLSAgICAgICAgICAgIC8vIEZsYWcgdGhpcyB0cmFuc2FjdGlv
biBhcyBoYXZpbmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVyIGRlbGVnYXRlIG5vdGlm
aWNhdGlvbgotICAgICAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIC8vIEFsc28gZGlydHkgdGhlIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBmaWxlIGZvciBjYWxj
dWxhdGluZyBxdW90YSB1c2FnZQotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
bGllbnQoKS0+ZGlkRXhlY3V0ZVN0YXRlbWVudChkYXRhYmFzZSgpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudENhbGxiYWNrKCkpIHsK
LSAgICAgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1l
bnRDYWxsYmFjazsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxp
dmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAg
ICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5sYXN0RXhlY3V0aW9uRmFpbGVk
RHVlVG9RdW90YSgpKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2s7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2No
ZWR1bGluZyBkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxu
IiwgdGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFj
ayh0aGlzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGhhbmRsZUN1cnJl
bnRTdGF0ZW1lbnRFcnJvcigpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNRTFRy
YW5zYWN0aW9uOjpoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IoKQotewotICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXBzIDYuZXJyb3IgLSBDYWxsIHRoZSBzdGF0ZW1lbnQncyBlcnJvciBjYWxsYmFj
aywgYnV0IGlmIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjaywKLSAgICAvLyBvciB0aGUgdHJh
bnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrLCBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBj
YWxsYmFjawotICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudEVycm9yQ2Fs
bGJhY2soKSAmJiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkp
IHsKLSAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVu
dENhbGxiYWNrOwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclN0
YXRlbWVudENhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgICAgIG1f
ZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNxbEVy
cm9yKCk7Ci0gICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7Ci0gICAgICAgICAgICBt
X2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCAwKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInRoZSBzdGF0ZW1lbnQgZmFpbGVkIHRv
IGV4ZWN1dGUiKTsKLSAgICAgICAgfQotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZh
bHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRD
YWxsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVudCk7Ci0KLSAgICAvLyBU
cmFuc2FjdGlvbiBTdGVwIDYuNiBhbmQgNi4zKGVycm9yKSAtIElmIHRoZSBzdGF0ZW1lbnQgY2Fs
bGJhY2sgd2VudCB3cm9uZywganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sK
LSAgICAvLyBPdGhlcndpc2UsIGNvbnRpbnVlIHRvIGxvb3AgdGhyb3VnaCB0aGUgc3RhdGVtZW50
IHF1ZXVlCi0gICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgYm9vbCByZXN1bHQg
PSBtX2N1cnJlbnRTdGF0ZW1lbnQtPnBlcmZvcm1DYWxsYmFjayh0aGlzKTsKLSAgICBtX2V4ZWN1
dGVTcWxBbGxvd2VkID0gZmFsc2U7Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIG1fZGF0
YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVycm9yOjpVTktOT1dO
X0VSUiwgMCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQgYW4g
ZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxz
ZSIpOwotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKHRydWUpOwotICAgIH0gZWxzZQot
ICAgICAgICBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0
aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJy
ZW50U3RhdGVtZW50KTsKLSAgICBBU1NFUlQoIW1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50
KTsKLQotICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2UoKSk7Ci0KLSAgICBtX25l
eHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzOwotICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhp
cyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci19Ci0K
LXZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQoKQotewotICAgIEFTU0VS
VChtX2xvY2tBY3F1aXJlZCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDcgLSBQZWZvcm0g
cG9zdGZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhleSBm
YWlsCi0gICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUG9zdGZsaWdodCh0
aGlzKSkgewotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVycm9y
KCk7Ci0gICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKSB7Ci0gICAgICAgICAgICBtX2Rh
dGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6VU5LTk9X
Tl9FUlIsIDApOwotICAgICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNy
ZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmtub3duIGVycm9yIG9jY3VycmVkIGR1cmlu
ZyB0cmFuc2FjdGlvbiBwb3N0ZmxpZ2h0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlVHJh
bnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBU
cmFuc2FjdG9uIFN0ZXAgOCs5IC0gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiwganVtcGluZyB0byB0
aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscwotICAgIEFTU0VSVChtX3NxbGl0ZVRyYW5z
YWN0aW9uKTsKLQotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgbV9z
cWxpdGVUcmFuc2FjdGlvbi0+Y29tbWl0KCk7Ci0gICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9y
aXplcigpOwotCi0gICAgLy8gSWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlvbiB3
aWxsIHN0aWxsIGJlIG1hcmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCi0gICAgaWYgKG1fc3FsaXRlVHJh
bnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBpZiAobV93cmFwcGVyKQotICAgICAg
ICAgICAgbV93cmFwcGVyLT5oYW5kbGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQodGhpcyk7
Ci0gICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOwotICAgICAgICBtX2Rh
dGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCg0LCBTUUxFcnJvcjo6REFUQUJB
U0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKLSAgICAg
ICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJB
U0VfRVJSLCAidW5hYmxlIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2Uo
KS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1
bHQoMCwgLTEsIDApOyAvLyBPSwotCi0gICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBhbnl0
aGluZyB3YXMgZGVsZXRlZC4KLSAgICBpZiAobV9kYXRhYmFzZS0+aGFkRGVsZXRlcygpKQotICAg
ICAgICBtX2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7Ci0KLSAgICAvLyBU
aGUgY29tbWl0IHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhp
cyBkYXRhYmFzZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZXMuCi0gICAgaWYgKG1fbW9kaWZpZWREYXRh
YmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0
V3JpdGVUcmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKLQotICAgIC8vIE5vdyByZWxlYXNlIG91ciB1
bm5lZWRlZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgbV9lcnJv
ckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAt
IERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjaywgaWYgdGhlcmUgaXMgb25lCi0gICAgaWYgKG1fc3Vj
Y2Vzc0NhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAg
PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2s7Ci0gICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFuc2Fj
dGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rp
b25DYWxsYmFjayh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2xlYW51cEFmdGVyU3VjY2Vz
c0NhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2Fs
bGJhY2soKQotewotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3Mg
Y2FsbGJhY2sKLSAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1
Y2Nlc3NDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7Ci0gICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykK
LSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudCgpOwotCi0gICAgLy8gU2NoZWR1
bGUgYSAicG9zdC1zdWNjZXNzIGNhbGxiYWNrIiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRo
ZSBkYXRhYmFzZSB0aHJlYWQgaW4gY2FzZSB0aGVyZQotICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5z
YWN0aW9ucyBxdWV1ZWQgdXAgZm9yIHRoaXMgRGF0YWJhc2UKLSAgICBtX25leHRTdGVwID0gJlNR
TFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2s7Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayBmb3IgdHJhbnNh
Y3Rpb24gJXBcbiIsIHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25T
dGVwKHRoaXMpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNz
Q2FsbGJhY2soKQotewotICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7Ci0KLSAgICAvLyBUcmFu
c2FjdGlvbiBTdGVwIDExIC0gRW5kIHRyYW5zYWN0aW9uIHN0ZXBzCi0gICAgLy8gVGhlcmUgaXMg
bm8gbmV4dCBzdGVwCi0gICAgTE9HKFN0b3JhZ2VBUEksICJUcmFuc2FjdGlvbiAlcCBpcyBjb21w
bGV0ZVxuIiwgdGhpcyk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgp
LnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFy
KCk7Ci0gICAgbV9uZXh0U3RlcCA9IDA7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIG9uIHRo
aXMgZGF0YWJhc2UKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJl
bGVhc2VMb2NrKHRoaXMpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjaykKLXsKLSAgICBpZiAobV9lcnJvckNhbGxiYWNrV3Jh
cHBlci5oYXNDYWxsYmFjaygpKSB7Ci0gICAgICAgIGlmIChpbkNhbGxiYWNrKQotICAgICAgICAg
ICAgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcg
ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRo
aXMpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNr
KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBObyBl
cnJvciBjYWxsYmFjaywgc28gZmFzdC1mb3J3YXJkIHRvOgotICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgMTIgLSBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCi0gICAgaWYgKGluQ2FsbGJhY2spIHsK
LSAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrOwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcg
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxu
IiwgdGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRo
aXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaygpOwotICAgIH0KLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25FcnJvcik7
Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gSWYgZXhpc3RzLCBpbnZva2UgZXJyb3Ig
Y2FsbGJhY2sgd2l0aCB0aGUgbGFzdAotICAgIC8vIGVycm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4g
dGhpcyB0cmFuc2FjdGlvbi4KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKLSAgICBp
ZiAoZXJyb3JDYWxsYmFjaykKLSAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90
cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKLQotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rp
b246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZv
ciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFu
c2FjdGlvblN0ZXAodGhpcyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVk
KTsKLQotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxi
YWNrIHRoZSB0cmFuc2FjdGlvbi4KLSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJh
Y2soKTsKLQotICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFy
KCk7Ci0gICAgfQotICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAgIC8v
IFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBBbnkgc3RpbGwtcGVuZGluZyBzdGF0ZW1lbnRzIGluIHRo
ZSB0cmFuc2FjdGlvbiBhcmUgZGlzY2FyZGVkLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOwotICAgICAgICBtX3N0YXRlbWVudFF1ZXVlLmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgLy8gVHJhbnNhY3Rpb24gaXMgY29tcGxldGUhICBUaGVyZSBpcyBu
byBuZXh0IHN0ZXAKLSAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBs
ZXRlIHdpdGggYW4gZXJyb3JcbiIsIHRoaXMpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3Fs
aXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgbV9uZXh0U3RlcCA9
IDA7Ci0KLSAgICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCi0gICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgU1FMVHJhbnNhY3Rpb25faAot
I2RlZmluZSBTUUxUcmFuc2FjdGlvbl9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
RGF0YWJhc2U7Ci1jbGFzcyBTUUxFcnJvcjsKLWNsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwotY2xh
c3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7Ci1jbGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
OwotY2xhc3MgU1FMVHJhbnNhY3Rpb247Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOwot
Y2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwotY2xhc3MgU1FMVmFsdWU7Ci1jbGFz
cyBWb2lkQ2FsbGJhY2s7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIFNR
TFRyYW5zYWN0aW9uV3JhcHBlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFu
c2FjdGlvbldyYXBwZXI+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbldy
YXBwZXIoKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2Fj
dGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNh
Y3Rpb24qKSA9IDA7Ci0gICAgdmlydHVhbCBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxU
cmFuc2FjdGlvbiopID0gMDsKLX07Ci0KLWNsYXNzIFNRTFRyYW5zYWN0aW9uIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+
LCBib29sIHJlYWRPbmx5ID0gZmFsc2UpOwotCi0gICAgflNRTFRyYW5zYWN0aW9uKCk7Ci0KLSAg
ICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
az4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7Ci0gICAgYm9v
bCBwZXJmb3JtTmV4dFN0ZXAoKTsKLSAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsK
LQotICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0K
LSAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX3JlYWRPbmx5OyB9Ci0gICAgdm9pZCBu
b3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7Ci0KLXByaXZhdGU6Ci0gICAgU1FM
VHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+
LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCi0gICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
V3JhcHBlcj4sIGJvb2wgcmVhZE9ubHkpOwotCi0gICAgdHlwZWRlZiB2b2lkIChTUUxUcmFuc2Fj
dGlvbjo6KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCkoKTsKLSAgICBUcmFuc2FjdGlvblN0ZXBNZXRo
b2QgbV9uZXh0U3RlcDsKLQotICAgIHZvaWQgZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudD4pOwotCi0gICAgdm9pZCBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0
ZWREYXRhYmFzZSgpOwotCi0gICAgdm9pZCBhY3F1aXJlTG9jaygpOwotICAgIHZvaWQgb3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCk7Ci0gICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25DYWxs
YmFjaygpOwotICAgIHZvaWQgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKLSAgICB2b2lkIHJ1
blN0YXRlbWVudHMoKTsKLSAgICB2b2lkIGdldE5leHRTdGF0ZW1lbnQoKTsKLSAgICBib29sIHJ1
bkN1cnJlbnRTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJv
cigpOwotICAgIHZvaWQgZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKCk7Ci0gICAgdm9pZCBkZWxp
dmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKCk7Ci0gICAgdm9pZCBwb3N0ZmxpZ2h0QW5kQ29tbWl0
KCk7Ci0gICAgdm9pZCBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBjbGVhbnVw
QWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKLSAgICB2b2lkIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3Io
Ym9vbCBpbkNhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2soKTsKLSAgICB2b2lkIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwot
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z1N0ZXBOYW1l
KFRyYW5zYWN0aW9uU3RlcE1ldGhvZCk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxTUUxTdGF0ZW1l
bnQ+IG1fY3VycmVudFN0YXRlbWVudDsKLQotICAgIGJvb2wgbV9leGVjdXRlU3FsQWxsb3dlZDsK
LQotICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiBtX3dyYXBwZXI7Ci0gICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2tXcmFwcGVyOwotICAgIFNRTENhbGxiYWNrV3JhcHBl
cjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcjsKLSAgICBTUUxDYWxsYmFj
a1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tXcmFw
cGVyOwotICAgIFJlZlB0cjxTUUxFcnJvcj4gbV90cmFuc2FjdGlvbkVycm9yOwotICAgIGJvb2wg
bV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQ7Ci0gICAgYm9vbCBtX21vZGlmaWVkRGF0YWJh
c2U7Ci0gICAgYm9vbCBtX2xvY2tBY3F1aXJlZDsKLSAgICBib29sIG1fcmVhZE9ubHk7Ci0gICAg
Ym9vbCBtX2hhc1ZlcnNpb25NaXNtYXRjaDsKLQotICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7
Ci0gICAgRGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwotCi0g
ICAgT3duUHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFNRTFRyYW5zYWN0
aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCShy
ZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0K
LSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAg
ICAgIE9taXRDb25zdHJ1Y3RvciwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAgIF0gU1FM
VHJhbnNhY3Rpb24gewotICAgICAgICBbQ3VzdG9tXSB2b2lkIGV4ZWN1dGVTcWwoaW4gRE9NU3Ry
aW5nIHNxbFN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE9i
amVjdEFycmF5IGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtPcHRpb25hbCwgQ2FsbGJhY2tdIFNRTFN0YXRlbWVudENhbGxiYWNrIGNhbGxiYWNrLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKLSAgICB9OwotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJl
dmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICpUcmFuc2FjdGlvbgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrX2gKLSNkZWZpbmUgU1FMVHJhbnNhY3Rpb25DYWxs
YmFja19oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1FMVHJh
bnNhY3Rpb247Ci0KLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gewotcHVibGljOgotICAgIHZp
cnR1YWwgflNRTFRyYW5zYWN0aW9uQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gU1FMVHJhbnNhY3Rpb25DYWxsYmFja19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLSAgICBpbnRl
cmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIENhbGxi
YWNrCi0gICAgXSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIHsKLSAgICAgICAgYm9vbGVhbiBoYW5k
bGVFdmVudChpbiBTUUxUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbik7Ci0gICAgfTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCShy
ZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCi0KLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRh
dGFiYXNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENv
bW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQo
Ci0gICAgICAgIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRl
bnRpZmllcigpKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQoZGF0YWJhc2UpOwotfQotCi1ib29sIFNRTFRy
YW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFz
ZSkKLXsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEgPSBE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJp
dHlPcmlnaW4oKSk7Ci0gICAgZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZUV4
Y2VlZGVkUXVvdGEoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci0gICAgdW5zaWduZWQg
bG9uZyBsb25nIG5ld1F1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFGb3JP
cmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIHJldHVybiAobmV3UXVvdGEg
PiBjdXJyZW50UXVvdGEpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQu
aAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNRTFRy
YW5zYWN0aW9uQ2xpZW50X2gKLSNkZWZpbmUgU1FMVHJhbnNhY3Rpb25DbGllbnRfaAotCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQWJzdHJhY3REYXRhYmFzZTsKLQotLy8gQSBjbGllbnQgdG8gdGhlIFNRTFRyYW5zYWN0aW9u
IGNsYXNzLiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24gdG8gbm90aWZ5IGludGVyZXN0ZWQKLS8vIHBh
cnRpZXMgdGhhdCBjZXJ0YWluIHRoaW5ncyBoYXZlIGhhcHBlbmVkIGluIGEgdHJhbnNhY3Rpb24u
Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U1FMVHJhbnNhY3Rpb25DbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCgpIHsgfQotICAgIHZvaWQgZGlkQ29tbWl0V3JpdGVU
cmFuc2FjdGlvbihBYnN0cmFjdERhdGFiYXNlKik7Ci0gICAgdm9pZCBkaWRFeGVjdXRlU3RhdGVt
ZW50KEFic3RyYWN0RGF0YWJhc2UqKTsKLSAgICBib29sIGRpZEV4Y2VlZFF1b3RhKEFic3RyYWN0
RGF0YWJhc2UqKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0K
LSNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvbkNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9u
IDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi0jaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlm
aWVyKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBEYXRhYmFzZSogZGF0YWJh
c2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKLSAgICBBU1NFUlQoZGF0YWJhc2UpOwotICAg
IHJldHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwotfQotCi12b2lkIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5hdGlv
bkluZm8mIGluZm8pCi17Ci0gICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiB8fCBp
bmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uID0gaW5mby5w
ZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7Ci0gICAgaWYgKGZpcnN0UGVuZGluZ1RyYW5zYWN0
aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgZmlyc3RQZW5k
aW5nVHJhbnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMudGFrZUZpcnN0KCk7Ci0g
ICAgICAgICAgICBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuYWRkKGZpcnN0UGVuZGluZ1Ry
YW5zYWN0aW9uKTsKLSAgICAgICAgICAgIGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5sb2NrQWNx
dWlyZWQoKTsKLSAgICAgICAgfSB3aGlsZSAoIWluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkgJiYgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCktPmlzUmVhZE9ubHkoKSk7
Ci0gICAgfSBlbHNlIGlmIChpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgpOwotICAgICAg
ICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24gPSBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbjsK
LSAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOwotICAgIH0K
LX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERh
dGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7Ci0KLSAgICBDb29yZGluYXRpb25JbmZvTWFw
OjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9N
YXAuZmluZChkYklkZW50aWZpZXIpOwotICAgIGlmIChjb29yZGluYXRpb25JbmZvSXRlcmF0b3Ig
PT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8vIE5vIHBlbmRpbmcg
dHJhbnNhY3Rpb25zIGZvciB0aGlzIERCCi0gICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRv
ciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29yZGluYXRpb25J
bmZvKCkpLmZpcnN0OwotICAgIH0KLQotICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29y
ZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKLSAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlv
bnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKLSAgICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhp
bmZvKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgaWYgKG1fY29vcmRpbmF0aW9uSW5m
b01hcC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBkYklkZW50aWZp
ZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwotCi0gICAgQ29vcmRpbmF0
aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGlu
YXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7Ci0gICAgQ29vcmRp
bmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOwotCi0g
ICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgQVNTRVJUKGluZm8u
YWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAgICAgICBp
bmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uID09IHRyYW5z
YWN0aW9uKTsKLSAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uID0gMDsKLSAgICB9
Ci0KLSAgICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKLX0KLQotdm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCi17Ci0gICAgLy8gTm90aWZ5IGFsbCB0
cmFuc2FjdGlvbnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0
aW5nIGRvd24KLSAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwotICAgICAg
ICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQo
KTsgKytjb29yZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5m
byYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOwotICAgICAgICBpZiAo
aW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uKQotICAgICAgICAgICAgaW5mby5hY3RpdmVXcml0
ZVRyYW5zYWN0aW9uLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7Ci0gICAg
ICAgIGZvciAoSGFzaFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID46Oml0ZXJhdG9yIGFjdGl2
ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciA9Ci0gICAgICAgICAgICAgICAgICAgICBpbmZvLmFj
dGl2ZVJlYWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKLSAgICAgICAgICAgICBhY3RpdmVSZWFkVHJh
bnNhY3Rpb25zSXRlcmF0b3IgIT0gaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmVuZCgpOwot
ICAgICAgICAgICAgICsrYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yKSB7Ci0gICAgICAg
ICAgICAoKmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciktPm5vdGlmeURhdGFiYXNlVGhy
ZWFkSXNTaHV0dGluZ0Rvd24oKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENsZWFuIHVw
IGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgYWxsIGRhdGFiYXNlcwotICAgIG1fY29vcmRp
bmF0aW9uSW5mb01hcC5jbGVhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3JfaAotI2RlZmluZSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKLQotI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0gICAgY2xhc3MgU1FMVHJhbnNhY3Rpb247Ci0KLSAgICBjbGFzcyBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoK
LSAgICAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgfQotICAgICAgICB2b2lkIGFj
cXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKik7Ci0gICAgICAgIHZvaWQgcmVsZWFzZUxvY2soU1FM
VHJhbnNhY3Rpb24qKTsKLSAgICAgICAgdm9pZCBzaHV0ZG93bigpOwotICAgIHByaXZhdGU6Ci0g
ICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IFRyYW5zYWN0aW9u
c1F1ZXVlOwotICAgICAgICBzdHJ1Y3QgQ29vcmRpbmF0aW9uSW5mbyB7Ci0gICAgICAgICAgICBU
cmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwotICAgICAgICAgICAgSGFzaFNl
dDxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gYWN0aXZlUmVhZFRyYW5zYWN0aW9uczsKLSAgICAg
ICAgICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gYWN0aXZlV3JpdGVUcmFuc2FjdGlvbjsKLSAg
ICAgICAgfTsKLSAgICAgICAgLy8gTWFwcyBkYXRhYmFzZSBuYW1lcyB0byBpbmZvcm1hdGlvbiBh
Ym91dCBwZW5kaW5nIHRyYW5zYWN0aW9ucwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBDb29yZGluYXRpb25JbmZvPiBDb29yZGluYXRpb25JbmZvTWFwOwotICAgICAgICBDb29yZGlu
YXRpb25JbmZvTWFwIG1fY29vcmRpbmF0aW9uSW5mb01hcDsKLQotICAgICAgICB2b2lkIHByb2Nl
c3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5hdGlvbkluZm8mIGluZm8pOwotICAgIH07Ci19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2tfaAotI2RlZmluZSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2tfaAotCi0jaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNRTEVycm9yOwotCi1jbGFzcyBTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50
KFNRTEVycm9yKikgPSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFja19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAxMDk4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAg
IENhbGxiYWNrCi0gICAgXSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgewotICAgICAgICBi
b29sZWFuIGhhbmRsZUV2ZW50KGluIFNRTEVycm9yIGVycm9yKTsKLSAgICB9OwotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAkocmV2aXNp
b24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgotI2luY2x1ZGUgIkRhdGFiYXNl
Q29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiU1FMUmVzdWx0
U2V0LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50U3luYy5oIgotI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uQ2xpZW50LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIK
LSNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCi0j
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0
ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
PiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNR
TFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5KSk7Ci19Ci0KLVNRTFRyYW5z
YWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQot
ICAgIDogbV9kYXRhYmFzZShkYikKLSAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBt
X3JlYWRPbmx5KHJlYWRPbmx5KQotICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2goZmFsc2UpCi0g
ICAgLCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uQ2xpZW50
KGFkb3B0UHRyKG5ldyBTUUxUcmFuc2FjdGlvbkNsaWVudCgpKSkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci19
Ci0KLVNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0aW9uU3luYygpCi17Ci0gICAgQVNT
RVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOwotICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJhbnNhY3Rpb24t
PmluUHJvZ3Jlc3MoKSkKLSAgICAgICAgcm9sbGJhY2soKTsKLX0KLQotUGFzc1JlZlB0cjxTUUxS
ZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNx
bFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0KLSAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JN
ZXNzYWdlKCIiKTsKLQotICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKLSAgICAgICAg
bV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY2Fubm90IGV4ZWN1dGVTUUwgYmVjYXVz
ZSB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW4iKTsKLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OlVOS05PV05fRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9oYXNW
ZXJzaW9uTWlzbWF0Y2gpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2Fn
ZSgiY2Fubm90IGV4ZWN1dGVTUUwgYmVjYXVzZSB0aGVyZSBpcyBhIHZlcnNpb24gbWlzbWF0Y2gi
KTsKLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoc3FsU3RhdGVtZW50LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBpbnQgcGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJl
YWRXcml0ZU1hc2s7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxs
b3dEYXRhYmFzZUFjY2VzcygpKQotICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3Jp
emVyOjpOb0FjY2Vzc01hc2s7Ci0gICAgZWxzZSBpZiAobV9yZWFkT25seSkKLSAgICAgIHBlcm1p
c3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZE9ubHlNYXNrOwotCi0gICAgU1FMU3Rh
dGVtZW50U3luYyBzdGF0ZW1lbnQoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIHBlcm1pc3Npb25z
KTsKLQotICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwotICAgIGJvb2wgcmV0cnlT
dGF0ZW1lbnQgPSB0cnVlOwotICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldDsKLSAg
ICB3aGlsZSAocmV0cnlTdGF0ZW1lbnQpIHsKLSAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSBmYWxz
ZTsKLSAgICAgICAgcmVzdWx0U2V0ID0gc3RhdGVtZW50LmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQo
KSwgZWMpOwotICAgICAgICBpZiAoIXJlc3VsdFNldCkgewotICAgICAgICAgICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgICAgICBpZiAoZWMgPT0gU1FMRXhjZXB0aW9uOjpRVU9UQV9F
UlIpIHsKLSAgICAgICAgICAgICAgICBpZiAobV90cmFuc2FjdGlvbkNsaWVudC0+ZGlkRXhjZWVk
UXVvdGEoZGF0YWJhc2UoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXRyeVN0YXRlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2Fn
ZSgidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UiKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UoKSkgewotICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwotICAg
ICAgICBtX3RyYW5zYWN0aW9uQ2xpZW50LT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkp
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOwotfQotCi1FeGNlcHRp
b25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oKQotewotICAgIEFTU0VSVChtX2RhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBp
ZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0
YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgMCk7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImNhbm5vdCBiZWdpbiB0cmFu
c2FjdGlvbiBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3BlbiIpOwotICAgICAgICByZXR1
cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIW1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotCi0gICAg
Ly8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJh
bnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkuCi0gICAgaWYgKCFtX3JlYWRPbmx5KQotICAgICAg
ICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJhc2Ut
Pm1heGltdW1TaXplKCkpOwotCi0gICAgQVNTRVJUKCFtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKLSAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gYWRvcHRQdHIobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsKLQotICAgIG1fZGF0YWJh
c2UtPnJlc2V0RGVsZXRlcygpOwotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7
Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKLSAgICBtX2RhdGFiYXNlLT5lbmFi
bGVBdXRob3JpemVyKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBiZWdpbigpIHN1Y2NlZWRlZC4KLSAg
ICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwotICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNR
TEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxh
c3RFcnJvcigpKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5h
YmxlIHRvIGJlZ2luIHRyYW5zYWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9zcWxp
dGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRB
QkFTRV9FUlI7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgaW50ZW50aW9uYWxseSByZXRyaWV2
ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4cGVjdGVkIHZlcnNpb24u
Ci0gICAgLy8gSW4gbXVsdGktcHJvY2VzcyBicm93c2Vycywgd2UgdGFrZSB0aGlzIG9wcG9ydGlu
dXRpeSB0byB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBmb3IKLSAgICAvLyB0aGUgYWN0dWFsIHZl
cnNpb24uIEluIHNpbmdsZS1wcm9jZXNzIGJyb3dzZXJzLCB0aGlzIGlzIGp1c3QgYSBtYXAgbG9v
a3VwLgotICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOwotICAgIGlmICghbV9kYXRhYmFzZS0+Z2V0
QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKGFjdHVhbFZlcnNpb24pKSB7Ci0gICAgICAgIG1f
ZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMywgU1FMRXhjZXB0aW9uOjpE
QVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwot
ICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gcmVhZCB2
ZXJzaW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcm9sbGJhY2soKTsKLSAgICAgICAgcmV0
dXJuIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOwotICAgIH0KLSAgICBtX2hhc1ZlcnNpb25N
aXNtYXRjaCA9ICFtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKSAh
PSBhY3R1YWxWZXJzaW9uKTsKLSAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9u
UmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLSAgICByZXR1cm4gMDsKLX0KLQotRXhjZXB0aW9uQ29k
ZSBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAo
IW1fZGF0YWJhc2UtPm9wZW5lZCgpIHx8IChtX2NhbGxiYWNrICYmICFtX2NhbGxiYWNrLT5oYW5k
bGVFdmVudCh0aGlzKSkpIHsKLSAgICAgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RFcnJvck1lc3Nh
Z2UoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNz
YWdlKCJmYWlsZWQgdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOwotICAgICAgICBt
X2NhbGxiYWNrID0gMDsKLSAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7
Ci0gICAgfQotCi0gICAgbV9jYWxsYmFjayA9IDA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUV4Y2Vw
dGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQoKQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAg
ICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9y
dENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDEsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIDAp
OwotICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY29t
bWl0IHRyYW5zYWN0aW9uIGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuLiIpOwotICAg
ICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQobV9zcWxpdGVUcmFuc2FjdGlvbik7Ci0KLSAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9y
aXplcigpOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fZGF0YWJh
c2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAgIC8vIElmIHRoZSBjb21taXQgZmFpbGVkLCB0
aGUgdHJhbnNhY3Rpb24gd2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMgImluIHByb2dyZXNzIgotICAg
IGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAgICAgbV9kYXRh
YmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXhjZXB0aW9uOjpEQVRB
QkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwotICAg
ICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY29tbWl0IHRy
YW5zYWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6
REFUQUJBU0VfRVJSOwotICAgIH0KLQotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsK
LQotICAgIC8vIFZhY3V1bSB0aGUgZGF0YWJhc2UgaWYgYW55dGhpbmcgd2FzIGRlbGV0ZWQuCi0g
ICAgaWYgKG1fZGF0YWJhc2UtPmhhZERlbGV0ZXMoKSkKLSAgICAgICAgbV9kYXRhYmFzZS0+aW5j
cmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwotCi0gICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vz
c2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9uIG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0
aGUgZGVsZWdhdGVzLgotICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCi0gICAgICAgIG1fdHJh
bnNhY3Rpb25DbGllbnQtPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7Ci0K
LSAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7
IC8vIE9LCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25TeW5jOjpyb2xs
YmFjaygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVy
KCk7Ci0gICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigp
OwotICAgIH0KLSAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7Ci0KLSAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3lu
Yy5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNRTFRy
YW5zYWN0aW9uU3luY19oCi0jZGVmaW5lIFNRTFRyYW5zYWN0aW9uU3luY19oCi0KLSNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlU3lu
YzsKLWNsYXNzIFNRTFJlc3VsdFNldDsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50OwotY2xh
c3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7Ci1jbGFzcyBTUUxWYWx1ZTsKLWNsYXNzIFNR
TGl0ZVRyYW5zYWN0aW9uOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBJbnN0
YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRo
ZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIFNRTFRyYW5zYWN0aW9uU3luYyA6IHB1
YmxpYyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luYz4gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERhdGFiYXNlU3luYyosIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5ID0gZmFs
c2UpOwotCi0gICAgflNRTFRyYW5zYWN0aW9uU3luYygpOwotCi0gICAgUGFzc1JlZlB0cjxTUUxS
ZXN1bHRTZXQ+IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgRGF0YWJh
c2VTeW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KLSAgICBib29s
IGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9Ci0KLSAgICBFeGNlcHRp
b25Db2RlIGJlZ2luKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBleGVjdXRlKCk7Ci0gICAgRXhjZXB0
aW9uQ29kZSBjb21taXQoKTsKLSAgICB2b2lkIHJvbGxiYWNrKCk7Ci0KLXByaXZhdGU6Ci0gICAg
U1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsKLQotICAgIFJlZlB0cjxEYXRhYmFzZVN5
bmM+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBt
X2NhbGxiYWNrOwotICAgIGJvb2wgbV9yZWFkT25seTsKLSAgICBib29sIG1faGFzVmVyc2lvbk1p
c21hdGNoOwotCi0gICAgYm9vbCBtX21vZGlmaWVkRGF0YWJhc2U7Ci0gICAgT3duUHRyPFNRTFRy
YW5zYWN0aW9uQ2xpZW50PiBtX3RyYW5zYWN0aW9uQ2xpZW50OwotICAgIE93blB0cjxTUUxpdGVU
cmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvblN5bmNfaApJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAkocmV2aXNp
b24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAg
IE9taXRDb25zdHJ1Y3RvciwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAgIF0gU1FMVHJh
bnNhY3Rpb25TeW5jIHsKLSAgICAgICAgW0N1c3RvbV0gU1FMUmVzdWx0U2V0IGV4ZWN1dGVTcWwo
aW4gRE9NU3RyaW5nIHNxbFN0YXRlbWVudCwgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRzKTsKLSAg
ICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrX2gKLSNkZWZpbmUg
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2tfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwotCi0vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBz
aG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRo
cmVhZC4KLWNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrIDogcHVibGljIFJlZkNvdW50
ZWQ8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5T
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVF
dmVudChTUUxUcmFuc2FjdGlvblN5bmMqKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFn
ZSB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAot
ICAgICAgICBDYWxsYmFjawotICAgIF0gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgewotICAg
ICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNRTFRyYW5zYWN0aW9uU3luYyB0cmFuc2FjdGlv
bik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dv
cmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIldvcmtlckNvbnRleHRT
UUxEYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgotI2luY2x1ZGUgIkRh
dGFiYXNlU3luYy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YWJhc2U+IFdvcmtlckNvbnRleHRTUUxEYXRhYmFz
ZTo6b3BlbkRhdGFiYXNlKFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFjb250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8ICFBYnN0cmFjdERhdGFiYXNl
Ojppc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShjb250
ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25D
YWxsYmFjaywgZWMpOwotfQotCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8ICFB
YnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gRGF0YWJhc2VTeW5j
OjpvcGVuRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICov
Ci0KLSNpZm5kZWYgV29ya2VyQ29udGV4dFNRTERhdGFiYXNlX2gKLSNkZWZpbmUgV29ya2VyQ29u
dGV4dFNRTERhdGFiYXNlX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNl
OwotY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIERhdGFiYXNlU3luYzsKLWNsYXNzIFdv
cmtlckNvbnRleHQ7Ci0KLWNsYXNzIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShXb3JrZXJDb250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5jKFdvcmtl
ckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUm
KTsKLQotcHJpdmF0ZToKLSAgICBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UoKSB7IH07Ci0gICAg
fldvcmtlckNvbnRleHRTUUxEYXRhYmFzZSgpIHsgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBXb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Xb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotbW9kdWxlIHdpbmRvdyB7
Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0g
ICAgICAgIFN1cHBsZW1lbnRhbD1Xb3JrZXJDb250ZXh0Ci0gICAgXSBXb3JrZXJDb250ZXh0U1FM
RGF0YWJhc2UgewotICAgICAgICBbVjhFbmFibGVkQXRSdW50aW1lXSBEYXRhYmFzZSBvcGVuRGF0
YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJp
bmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gW0NhbGxi
YWNrLCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQotICAgICAg
ICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0KLSAgICAgICAgW1Y4RW5hYmxlZEF0UnVudGlt
ZV0gRGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERP
TVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFj
ayBjcmVhdGlvbkNhbGxiYWNrKQotICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0g
ICAgfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFz
ZU9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1
bS9EYXRhYmFzZU9ic2VydmVyLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIERhdGFiYXNlT2JzZXJ2ZXJfaAotI2RlZmluZSBEYXRhYmFzZU9i
c2VydmVyX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFic3RyYWN0RGF0YWJhc2U7
Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi0vLyBUaGUgaW1wbGVtZW50YXRpb24g
b2YgdGhpcyBjbGFzcyBpcyBpbiB0aGUgV2ViS2l0IEFQSSAoQ2hyb21pdW0gc291cmNlIHRyZWUp
Ci0vLyBpbiBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwLgotY2xhc3Mg
RGF0YWJhc2VPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgY2FuRXN0YWJsaXNo
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIGxvbmcpOwotICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3BlbmVkKEFi
c3RyYWN0RGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZU1vZGlmaWVkKEFic3Ry
YWN0RGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZUNsb3NlZChBYnN0cmFjdERh
dGFiYXNlKik7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoQWJz
dHJhY3REYXRhYmFzZSosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3Vs
dChBYnN0cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRTdGFydFRyYW5zYWN0
aW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJv
ckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydENvbW1p
dFRyYW5zYWN0aW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3
ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJl
cG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGludCBjYWxsc2l0
ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgc3RhdGlj
IHZvaWQgcmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGludCBz
cWxpdGVFcnJvckNvZGUpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKLQotI2VuZGlmIC8vIERhdGFiYXNlT2JzZXJ2ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21p
dW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgot
Ci0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUXVvdGFUcmFja2Vy
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCi0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURhdGFiYXNl
VHJhY2tlciYgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkKLXsKLSAgICBBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWMoRGF0YWJhc2VUcmFja2VyJiwgdHJhY2tlciA9ICpuZXcgRGF0YWJhc2VU
cmFja2VyKCIiKSk7Ci0gICAgcmV0dXJuIHRyYWNrZXI7Ci19Ci0KLURhdGFiYXNlVHJhY2tlcjo6
RGF0YWJhc2VUcmFja2VyKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgU1FMaXRlRmlsZVN5c3RlbTo6
cmVnaXN0ZXJTUUxpdGVWRlMoKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIHJldHVybiBEYXRhYmFzZU9ic2VydmVyOjpj
YW5Fc3RhYmxpc2hEYXRhYmFzZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuYW1lLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRh
YmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBsb25nKQotewotICAgIC8vIENocm9taXVtIHNldHMgdGhlIGRhdGFiYXNlIGRl
dGFpbHMgd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkCi19Ci0KLVN0cmluZyBEYXRhYmFzZVRy
YWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKQotewotICAgIHJldHVybiBvcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpICsgIi8iICsgbmFtZSArICIjIjsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFk
ZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQo
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwot
ICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFy
ZCk7Ci0gICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKLSAgICAgICAgbV9vcGVuRGF0YWJhc2VN
YXAgPSBhZG9wdFB0cihuZXcgRGF0YWJhc2VPcmlnaW5NYXApOwotCi0gICAgU3RyaW5nIG9yaWdp
bklkZW50aWZpZXIgPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlm
aWVyKCk7Ci0gICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAt
PmdldChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAoIW5hbWVNYXApIHsKLSAgICAgICAgbmFt
ZU1hcCA9IG5ldyBEYXRhYmFzZU5hbWVNYXAoKTsKLSAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAt
PnNldChvcmlnaW5JZGVudGlmaWVyLCBuYW1lTWFwKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFt
ZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKLSAgICBEYXRhYmFzZVNldCogZGF0YWJh
c2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFzZVNldCkgewotICAg
ICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldCgpOwotICAgICAgICBuYW1lTWFwLT5z
ZXQobmFtZSwgZGF0YWJhc2VTZXQpOwotICAgIH0KLQotICAgIGRhdGFiYXNlU2V0LT5hZGQoZGF0
YWJhc2UpOwotCi0gICAgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQoZGF0YWJhc2Up
OwotfQotCi1jbGFzcyBOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8Tm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrPiBjcmVhdGUoUGFzc1JlZlB0
cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKGRhdGFiYXNlKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZUNs
b3NlZChtX2RhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDbGVh
bnVwVGFzaygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKFBhc3NSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4gZGF0YWJhc2UpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFz
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJh
c2U7Ci19OwotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFic3Ry
YWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0g
ZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNlSWRlbnRpZmllcigpOwotICAgIE11
dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0g
ICAgQVNTRVJUKG1fb3BlbkRhdGFiYXNlTWFwKTsKLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVN
YXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICgh
bmFtZU1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0
cmluZ0lkZW50aWZpZXIoKSk7Ci0gICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1h
cC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VTZXQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBmb3VuZCA9IGRhdGFiYXNlU2V0LT5maW5kKGRhdGFi
YXNlKTsKLSAgICBpZiAoZm91bmQgPT0gZGF0YWJhc2VTZXQtPmVuZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkYXRhYmFzZVNldC0+cmVtb3ZlKGZvdW5kKTsKLSAgICBpZiAoZGF0YWJhc2VT
ZXQtPmlzRW1wdHkoKSkgewotICAgICAgICBuYW1lTWFwLT5yZW1vdmUobmFtZSk7Ci0gICAgICAg
IGRlbGV0ZSBkYXRhYmFzZVNldDsKLSAgICAgICAgaWYgKG5hbWVNYXAtPmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJlbW92ZShvcmlnaW5JZGVudGlmaWVyKTsK
LSAgICAgICAgICAgIGRlbGV0ZSBuYW1lTWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSkK
LSAgICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90
aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrOjpjcmVhdGUoZGF0YWJhc2UpKTsKLSAgICBl
bHNlCi0gICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKGRhdGFiYXNlKTsK
LX0KLQotdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRh
dGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBzcGFjZUF2YWlsYWJsZSA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIGRh
dGFiYXNlU2l6ZSA9IDA7Ci0gICAgUXVvdGFUcmFja2VyOjppbnN0YW5jZSgpLmdldERhdGFiYXNl
U2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCi0gICAgICAgIGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwKLSAgICAgICAgZGF0YWJhc2UtPnN0cmlu
Z0lkZW50aWZpZXIoKSwgJmRhdGFiYXNlU2l6ZSwgJnNwYWNlQXZhaWxhYmxlKTsKLSAgICByZXR1
cm4gZGF0YWJhc2VTaXplICsgc3BhY2VBdmFpbGFibGU7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFj
a2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9j
ayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLQotICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXAp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3Bl
bkRhdGFiYXNlTWFwLT5nZXQoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwotICAgIGlmICghbmFtZU1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGF0
YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVu
ZCgpOwotICAgIGZvciAoRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJ
dCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2Ri
TmFtZU1hcEl0KSB7Ci0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1h
cEl0LT5zZWNvbmQ7Ci0gICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBk
YXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCgqaXQpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gY29udGV4dCkKLSAg
ICAgICAgICAgICAgICAoKml0KS0+aW50ZXJydXB0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LWNsYXNzIERhdGFiYXNlVHJhY2tlcjo6Q2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5VGFzayA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIEFic3RyYWN0
RGF0YWJhc2UqIGRhdGFiYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
bG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrKG9yaWdpbklkZW50aWZpZXIsIG5hbWUsIGRh
dGFiYXNlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5jbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHkobV9vcmlnaW5JZGVudGlmaWVy
LCBtX25hbWUsIG1fZGF0YWJhc2UpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDbG9zZU9uZURh
dGFiYXNlSW1tZWRpYXRlbHlUYXNrKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuYW1lLCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKLSAgICAgICAgOiBt
X29yaWdpbklkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKLSAgICAg
ICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKLSAgICAgICAgLCBtX2RhdGFiYXNlKGRh
dGFiYXNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9vcmlnaW5JZGVudGlmaWVyOwot
ICAgIFN0cmluZyBtX25hbWU7Ci0gICAgQWJzdHJhY3REYXRhYmFzZSogbV9kYXRhYmFzZTsgIC8v
IEludGVudGlvbmFsbHkgYSByYXcgcG9pbnRlci4KLX07Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lKSB7Ci0gICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFw
TG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29w
ZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICghbmFtZU1hcCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1h
cC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VTZXQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFdlIGhhdmUgdG8gY2FsbCBjbG9zZUltbWVkaWF0ZWx5KCkgb24gdGhlIGNvbnRleHQg
dGhyZWFkIGFuZCB3ZSBjYW5ub3Qgc2FmZWx5IGFkZCBhIHJlZmVyZW5jZSB0bwotICAgIC8vIHRo
ZSBkYXRhYmFzZSBpbiBvdXIgY29sbGVjdGlvbiB3aGVuIG5vdCBvbiB0aGUgY29udGV4dCB0aHJl
YWQgKHdoaWNoIGlzIGFsd2F5cyB0aGUgY2FzZSBnaXZlbgotICAgIC8vIGN1cnJlbnQgdXNhZ2Up
LgotICAgIGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2lu
KCk7IGl0ICE9IGRhdGFiYXNlU2V0LT5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soQ2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5
VGFzazo6Y3JlYXRlKG9yaWdpbklkZW50aWZpZXIsIG5hbWUsICppdCkpOwotfQotCi12b2lkIERh
dGFiYXNlVHJhY2tlcjo6Y2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKLXsKLSAgICAvLyBGaXJzdCB3ZSBoYXZlIHRvIGNvbmZpcm0gdGhlICdkYXRhYmFz
ZScgaXMgc3RpbGwgaW4gb3VyIGNvbGxlY3Rpb24uCi0gICAgewotICAgICAgICBNdXRleExvY2tl
ciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwotICAgICAgICBp
ZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIERh
dGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRl
bnRpZmllcik7Ci0gICAgICAgIGlmICghbmFtZU1hcCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0g
ICAgICAgIGlmICghZGF0YWJhc2VTZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
RGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGZvdW5kID0gZGF0YWJhc2VTZXQtPmZpbmQoZGF0YWJhc2Up
OwotICAgICAgICBpZiAoZm91bmQgPT0gZGF0YWJhc2VTZXQtPmVuZCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFuZCB3ZSBoYXZlIHRvIGNhbGwgY2xvc2VJbW1lZGlh
dGVseSgpIHdpdGhvdXQgb3VyIGNvbGxlY3Rpb24gbG9jayBiZWluZyBoZWxkLgotICAgIGRhdGFi
YXNlLT5jbG9zZUltbWVkaWF0ZWx5KCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3RhVHJh
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdW90YVRyYWNrZXIuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUXVv
dGFUcmFja2VyJiBRdW90YVRyYWNrZXI6Omluc3RhbmNlKCkKLXsKLSAgICBBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWMoUXVvdGFUcmFja2VyJiwgdHJhY2tlciA9ICpuZXcgUXVvdGFUcmFja2Vy
KTsKLSAgICByZXR1cm4gdHJhY2tlcjsKLX0KLQotdm9pZCBRdW90YVRyYWNrZXI6OmdldERhdGFi
YXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCi0gICAgY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwKLSAgICB1bnNpZ25lZCBs
b25nIGxvbmcqIGRhdGFiYXNlU2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nKiBzcGFjZUF2YWlsYWJs
ZSkKLXsKLSAgICAvLyBFeHRyYSBzY29wZSB0byB1bmxvY2sgcHJpb3IgdG8gcG90ZW50aWFsbHkg
Y2FsbGluZyBQbGF0Zm9ybVN1cHBvcnQuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
RGF0YShtX2RhdGFHdWFyZCk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFiYXNlU2l6ZXMuY29udGFp
bnMob3JpZ2luSWRlbnRpZmllcikpOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNpemVzLmZpbmQob3JpZ2luSWRlbnRpZmll
cik7Ci0gICAgICAgIEFTU0VSVChpdC0+c2Vjb25kLmNvbnRhaW5zKGRhdGFiYXNlTmFtZSkpOwot
ICAgICAgICAqZGF0YWJhc2VTaXplID0gaXQtPnNlY29uZC5nZXQoZGF0YWJhc2VOYW1lKTsKLQot
ICAgICAgICBpZiAobV9zcGFjZUF2YWlsYWJsZVRvT3JpZ2lucy5jb250YWlucyhvcmlnaW5JZGVu
dGlmaWVyKSkgewotICAgICAgICAgICAgKnNwYWNlQXZhaWxhYmxlID0gbV9zcGFjZUF2YWlsYWJs
ZVRvT3JpZ2lucy5nZXQob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZW1iZWRkZXIgaGFzbid0IHB1c2hlZCB0aGlz
IHZhbHVlIHRvIHVzLCBzbyB3ZSBwdWxsIGl0IGFzIG5lZWRlZC4KLSAgICAqc3BhY2VBdmFpbGFi
bGUgPSBQbGF0Zm9ybVN1cHBvcnQ6OmRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4o
b3JpZ2luSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgUXVvdGFUcmFja2VyOjp1cGRhdGVEYXRhYmFz
ZVNpemUoCi0gICAgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplKQotewot
ICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgU2l6ZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVNpemVzLmFkZChvcmlnaW5JZGVu
dGlmaWVyLCBTaXplTWFwKCkpLmZpcnN0OwotICAgIGl0LT5zZWNvbmQuc2V0KGRhdGFiYXNlTmFt
ZSwgZGF0YWJhc2VTaXplKTsKLX0KLQotdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZVNwYWNlQXZh
aWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1bnNpZ25lZCBs
b25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9k
YXRhR3VhcmQpOwotICAgIG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuc2V0KG9yaWdpbklkZW50
aWZpZXIsIHNwYWNlQXZhaWxhYmxlKTsKLX0KLQotdm9pZCBRdW90YVRyYWNrZXI6OnJlc2V0U3Bh
Y2VBdmFpbGFibGVUb09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3VhcmQpOwotICAgIG1fc3BhY2VBdmFpbGFi
bGVUb09yaWdpbnMucmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5oCShyZXZpc2lvbiAx
MDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFF1b3RhVHJhY2tlcl9oCi0j
ZGVmaW5lIFF1b3RhVHJhY2tlcl9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFF1b3RhVHJhY2tlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFF1b3RhVHJhY2tlciYgaW5zdGFuY2UoKTsKLQotICAgIHZvaWQgZ2V0RGF0YWJh
c2VTaXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigKLSAgICAgICAgY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwKLSAgICAgICAgdW5z
aWduZWQgbG9uZyBsb25nKiBkYXRhYmFzZVNpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyogc3BhY2VB
dmFpbGFibGUpOwotICAgIHZvaWQgdXBkYXRlRGF0YWJhc2VTaXplKAotICAgICAgICBjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAotICAg
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplKTsKLSAgICB2b2lkIHVwZGF0ZVNw
YWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1bnNp
Z25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpOwotICAgIHZvaWQgcmVzZXRTcGFjZUF2YWls
YWJsZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7Ci0KLXByaXZhdGU6
Ci0gICAgUXVvdGFUcmFja2VyKCkgeyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCB1
bnNpZ25lZCBsb25nIGxvbmc+IFNpemVNYXA7Ci0gICAgU2l6ZU1hcCBtX3NwYWNlQXZhaWxhYmxl
VG9PcmlnaW5zOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPiBtX2RhdGFiYXNlU2l6ZXM7
Ci0gICAgTXV0ZXggbV9kYXRhR3VhcmQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gUXVvdGFUcmFja2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlv
bkNsaWVudENocm9taXVtLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uQ2xpZW50LmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIK
LSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxOb3Rp
ZnlEYXRhYmFzZUNoYW5nZWRUYXNrPiBjcmVhdGUoQWJzdHJhY3REYXRhYmFzZSAqZGF0YWJhc2Up
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE5vdGlmeURhdGFiYXNlQ2hhbmdl
ZFRhc2soZGF0YWJhc2UpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCi0gICAgewotICAgICAgICBXZWJDb3JlOjpEYXRhYmFz
ZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKG1fZGF0YWJhc2UuZ2V0KCkpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrKFBhc3NSZWZQdHI8QWJzdHJh
Y3REYXRhYmFzZT4gZGF0YWJhc2UpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci19
OwotCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9u
KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIGlmICghZGF0YWJhc2UtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKLSAgICAgICAgZGF0YWJh
c2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VDaGFu
Z2VkVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKGRhdGFiYXNlKTsK
LX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChBYnN0
cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
YWZ0ZXIgZXhlY3V0aW5nIGV2ZXJ5IHN0YXRlbWVudCB0aGF0IGNoYW5nZXMgdGhlIERCLgotICAg
IC8vIENocm9taXVtIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhdCB0aGF0IHBvaW50Lgot
fQotCi1ib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERh
dGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICAvLyBDaHJvbWl1bSBkb2VzIG5vdCBhbGxvdyB1c2Vy
cyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIHF1b3RhIGZvciBhbiBvcmlnaW4gKGZvciBub3csIGF0
IGxlYXN0KS4KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZy4KLSAgICBBU1NFUlQoZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130324</attachid>
            <date>2012-03-06 00:50:20 -0800</date>
            <delta_ts>2012-03-06 00:53:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80393-20120306005018.patch</filename>
            <type>text/plain</type>
            <size>968849</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTg3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBAQAorMjAxMi0wMy0wNiAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgU1FMRGF0YWJhc2UgY29k
ZSBpbnRvIE1vZHVsZXMvd2ViZGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgwMzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHN0aWxsIGEgY291cGxlIChtaW5vcikgU1FMRGF0
YWJhc2UgcmVmZXJlbmNlcyBmcm9tIFdlYkNvcmUKKyAgICAgICAgcHJvcGVyLCBidXQgd2UndmUg
Z290dGVuIHRoaXMgY29kZSB0byB0aGUgcG9pbnQgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8KKyAg
ICAgICAgbW92ZSBpdCBpbnRvIHRoZSBNb2R1bGVzIGRpcmVjdG9yeS4gIChUaGlzIHBhdGNoIGp1
c3QgbW92ZXMgY29kZS0tLW5vCisgICAgICAgIGJlaGF2aW9yIGNoYW5nZS4pCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2U6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5j
cHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RPTVdpbmRvd1NRTERhdGFiYXNl
LmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5p
ZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJh
c2UuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwu
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAu
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmguCisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQ29udGV4dC5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VEZXRhaWxzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VEZXRhaWxzLmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5
bmMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5j
cHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGFzay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUYXNrLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVGFzay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFz
ay5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9Pcmln
aW5Vc2FnZVJlY29yZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdp
blVzYWdlUmVjb3JkLmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxDYWxsYmFj
a1dyYXBwZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxDYWxsYmFj
a1dyYXBwZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEVycm9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTEVycm9yLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxFcnJvci5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxFeGNlcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEV4
Y2VwdGlvbi5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24u
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5pZGw6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFJlc3VsdFNldC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFJlc3VsdFNldC5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0
LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRs
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5j
cHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5o
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGw6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5p
ZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwuCisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oLgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGw6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5p
ZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmguCisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAuCisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmguCisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcC4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2suaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oLgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlk
bC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFz
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dvcmtl
ckNvbnRleHRTUUxEYXRhYmFzZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvV29y
a2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvY2hyb21pdW06IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1
bS5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNr
ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3Rh
VHJhY2tlci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90
YVRyYWNrZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9R
dW90YVRyYWNrZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NR
TFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwLgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmVDb21tb24udnNwcm9wczoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9jb3B5Rm9y
d2FyZGluZ0hlYWRlcnMuY21kOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L0RPTVdpbmRvd1NRTERhdGFiYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9ET01X
aW5kb3dTUUxEYXRhYmFzZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlQXV0aG9yaXplci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VD
YWxsYmFjay5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5p
ZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9EYXRhYmFzZURldGFpbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlU3luYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVN5bmMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZVRocmVhZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9P
cmlnaW5Vc2FnZVJlY29yZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMQ2FsbGJh
Y2tXcmFwcGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxFcnJvci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXJyb3IuaWRsOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NR
TEV4Y2VwdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFJlc3VsdFNldC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL1NRTFJlc3VsdFNldC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXRSb3dMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFJlc3Vs
dFNldFJvd0xpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFJlc3VsdFNldFJv
d0xpc3QuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRTeW5jLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IFJlbW92ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3RvcmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN0b3JhZ2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcDogUmVtb3Zl
ZC4KKwogMjAxMi0wMy0wNSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBzdG9wIHVzaW5nIFJhd1NvdXJjZUNvZGUgaW4g
QnJlYWtwb2ludE1hbmFnZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTA5
ODU4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIsNiArMiw3IEBAIFNFVChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJD
T1JFX0RJUn0iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kZXhlZGRiIgorICAgICIke1dFQkNPUkVfRElSfS9N
b2R1bGVzL3dlYmRhdGFiYXNlIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dlYnNvY2tl
dHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzIgpAQCAtOTMsNiArOTQsNyBAQCBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiBTRVQoV2ViQ29yZV9JRExfSU5DTFVERVMKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlCiAgICAgTW9k
dWxlcy93ZWJzb2NrZXRzCiAgICAgYmluZGluZ3MvZ2VuZXJpYwogICAgIGNzcwpAQCAtNDM0LDYg
KzQzNiwyOSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvUGFn
ZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuY3BwCiAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNw
cAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUNvbnRleHQuY3BwCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMu
Y3BwCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCisgICAgTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3Rh
TWFuYWdlci5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNw
cAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmNwcAorICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
UmVzdWx0U2V0Um93TGlzdC5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVu
dC5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwCisgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKKyAgICBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZS5jcHAKKwogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCkBAIC0xNDAzLDI5ICsxNDI4LDgg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVRyYW5zZm9y
bURhdGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlzdWFsRGF0YS5jcHAKIAotICAg
IHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAKLSAgICBzdG9yYWdlL0NoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcAotICAgIHN0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwCi0gICAgc3Rv
cmFnZS9EYXRhYmFzZS5jcHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKLSAg
ICBzdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5jcHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlU3luYy5j
cHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKLSAgICBzdG9yYWdlL0RhdGFiYXNlVGhy
ZWFkLmNwcAotICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAogICAgIHN0b3JhZ2UvU3Rv
cmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAotICAgIHN0b3JhZ2Uv
T3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAotICAgIHN0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
Ci0gICAgc3RvcmFnZS9TUUxFeGNlcHRpb24uY3BwCi0gICAgc3RvcmFnZS9TUUxSZXN1bHRTZXQu
Y3BwCi0gICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcAotICAgIHN0b3JhZ2UvU1FM
U3RhdGVtZW50LmNwcAotICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKLSAgICBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcAotICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQu
Y3BwCi0gICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAotICAgIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZS5jcHAKICAgICBz
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5j
cHAKQEAgLTE0MzcsNyArMTQ0MSw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCi0gICAgc3RvcmFnZS9Xb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuY3BwCiAKICAgICB4bWwvRE9NUGFyc2VyLmNwcAogICAgIHhtbC9O
YXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwCkBAIC0xNTEwLDIyICsxNTEzLDIyIEBAIEVORElGICgp
CiAKIElGIChFTkFCTEVfU1FMX0RBVEFCQVNFKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSURM
X0ZJTEVTCi0gICAgICAgIHN0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsCi0gICAgICAg
IHN0b3JhZ2UvRGF0YWJhc2UuaWRsCi0gICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5p
ZGwKLSAgICAgICAgc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FM
RXJyb3IuaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbAotICAgICAgICBzdG9y
YWdlL1NRTFJlc3VsdFNldC5pZGwKLSAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbAotICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbAotICAgICAgICBz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uaWRsCi0gICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5p
ZGwKLSAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsCi0gICAg
ICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAotICAgICAgICBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbAotICAgICAgICBzdG9yYWdlL1dvcmtlckNvbnRleHRT
UUxEYXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxE
YXRhYmFzZS5pZGwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5pZGwKKyAg
ICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbAorICAgICAgICBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGwKKyAgICAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxFcnJvci5pZGwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNl
cHRpb24uaWRsCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbAor
ICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCisgICAg
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsCisgICAgICAg
IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwKKyAgICAg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbAorICAgICAgICBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwKKyAgICAgICAgTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCisgICAgICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCisgICAgICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAogICAgICkKIEVORElG
ICgpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTA5ODU4
KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpIFwKICAgICAkKFdlYkNv
cmUpL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVk
ZGIgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJpYyBc
CiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCkBAIC03Niw2ICs3NywyMiBAQCBCSU5ESU5H
X0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmlk
bCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwg
XAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWRE
YXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5k
b3dTUUxEYXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUNhbGxiYWNrLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlU3luYy5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJv
ci5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24u
aWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Lmlk
bCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xp
c3QuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
Q2FsbGJhY2suaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAorICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKKyAgICAk
KFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VF
dmVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzL0RPTVdpbmRvd1dl
YlNvY2tldC5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5pZGwgXApAQCAtMzY1LDI4ICszODIsMTIgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9wbHVn
aW5zL0RPTVBsdWdpbi5pZGwgXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwg
XAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFzZS5pZGwgXAotICAgICQoV2ViQ29yZSkv
c3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL0Rh
dGFiYXNlU3luYy5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxFcnJvci5pZGwgXAot
ICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwKLSAgICAkKFdlYkNvcmUp
L3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCi0gICAgJChXZWJDb3JlKS9zdG9yYWdlL1NRTFJl
c3VsdFNldFJvd0xpc3QuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVtZW50
Q2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGwgXAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwg
XAotICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAot
ICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsIFwKICAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZS9TdG9y
YWdlRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU3RvcmFnZUluZm8uaWRsIFwK
ICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UvU3RvcmFnZUluZm9FcnJvckNhbGxiYWNrLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9zdG9yYWdlL1N0b3JhZ2VJbmZvUXVvdGFDYWxsYmFjay5pZGwgXAogICAg
ICQoV2ViQ29yZSkvc3RvcmFnZS9TdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2suaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9zdmcvRWxlbWVudFRpbWVDb250cm9sLmlkbCBcCiAgICAgJChXZWJDb3JlKS9zdmcv
U1ZHQUVsZW1lbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL3N2Zy9TVkdBbHRHbHlwaERlZkVsZW1l
bnQuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHJldmlzaW9uIDEwOTg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDYgKzEwNiwyMiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VD
YWxsYmFjay5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5j
LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5pZGwgXAorICAg
ICQkUFdEL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbCBcCisgICAgJCRQV0QvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwgXAorICAgICQkUFdEL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwgXAorICAgICQkUFdEL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbCBcCisgICAg
JCRQV0QvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKKyAgICAk
JFBXRC9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2Uu
aWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5pZGwgXAogICAg
ICQkUFdEL01vZHVsZXMvd2Vic29ja2V0cy9ET01XaW5kb3dXZWJTb2NrZXQuaWRsIFwKICAgICAk
JFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCBcCkBAIC0zODcsMjggKzQwMywx
MiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL3BsdWdpbnMvRE9NTWltZVR5cGUuaWRs
IFwKICAgICAkJFBXRC9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmlkbCBcCiAgICAgJCRQV0QvcGx1
Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9ET01XaW5kb3dT
UUxEYXRhYmFzZS5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvRGF0YWJhc2UuaWRsIFwKLSAgICAk
JFBXRC9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL0Rh
dGFiYXNlU3luYy5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZS5pZGwgXAogICAgICQk
UFdEL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdl
SW5mby5pZGwgXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZUluZm9FcnJvckNhbGxiYWNrLmlk
bCBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5mb1F1b3RhQ2FsbGJhY2suaWRsIFwKICAg
ICAkJFBXRC9zdG9yYWdlL1N0b3JhZ2VJbmZvVXNhZ2VDYWxsYmFjay5pZGwgXAotICAgICQkUFdE
L3N0b3JhZ2UvU1FMRXJyb3IuaWRsIFwKLSAgICAkJFBXRC9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5p
ZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCi0gICAgJCRQV0Qvc3Rv
cmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9TUUxTdGF0
ZW1lbnRDYWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsIFwKLSAg
ICAkJFBXRC9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsIFwKLSAgICAkJFBXRC9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbCBcCi0gICAgJCRQV0Qvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5pZGwgXAotICAgICQkUFdEL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmlkbCBcCiAgICAgJCRQV0QvdGVzdGluZy9JbnRlcm5hbHMuaWRsIFwKICAgICAk
JFBXRC90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsIFwKICAgICAkJFBXRC93ZWJhdWRpby9B
dWRpb0J1ZmZlci5pZGwgXApAQCAtNjkzLDYgKzY5Myw3IEBAIGdlbmVyYXRlQmluZGluZ3MuY29t
bWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWdlbmVy
YXRvciAkJGdlbmVyYXRvciBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRl
ICQkUFdEL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYiBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMvd2ViZGF0YWJhc2UgXAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL3dlYnNvY2tldHMgXAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9kb20gXAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9maWxlYXBpIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCB3ZWJjb3JlX2NwcGZs
YWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbSBcCisJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cyBcCkBAIC03ODAsNiArNzgxLDcgQEAgSURMX1BBVEggOj0gXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtIFwKKyAgICAkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViZGF0YWJhc2UgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzIFwKICAg
ICAkKFdlYkNvcmUpL2JpbmRpbmdzL2pzIFwKICAgICAkKFdlYkNvcmUpL2NzcyBcCkBAIC05MjIs
NiArOTI0LDcgQEAgRVhUUkFfRElTVCArPSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiLyouaWRsKSBcCiAJJChzaGVsbCBs
cyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS8qLmlkbCkgXAor
CSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Ki5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9j
c3MvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9kb20vKi5p
ZGwpIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTA5ODYx
KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTA1OCw2ICsxMDU4LDYwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVy
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9u
V3JhcHBlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRv
d1NRTERhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
T01XaW5kb3dTUUxEYXRhYmFzZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QXV0aG9yaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VBdXRob3JpemVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VDYWxsYmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VDb250ZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VEZXRhaWxzLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VTeW5jLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVN5bmMuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRhc2suY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGFzay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVGhyZWFkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlckNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUcmFja2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxSZXN1bHRTZXQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggXAorCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25T
eW5jLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9X
b3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL0Nsb3NlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXIuaCBcCkBAIC0zOTIyLDYyICszOTc2LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9D
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdl
VmVyc2lvbldyYXBwZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxE
YXRhYmFzZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJh
c2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZUF1dGhvcml6ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaCBc
Ci0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlRGV0YWlscy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
U3luYy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmggXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRhc2suaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCBc
Ci0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUYXNrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGFzay5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9P
cmlnaW5RdW90YU1hbmFnZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1
b3RhTWFuYWdlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTEVycm9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhj
ZXB0aW9uLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaCBcCi0J
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJl
c3VsdFNldFJvd0xpc3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNl
dFJvd0xpc3QuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudFN5bmMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudFN5bmMuaCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmggXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrLmggXAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25TeW5jLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmMuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmggXApAQCAtNDAwNSw4ICs0MDA3LDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmggXAotCVNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZS5jcHAgXApAQCAtNDczNSwyMiArNDczNSwyMiBAQCB3ZWJjb3JlX2J1aWx0
X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjay5oCiAKIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAotCSQoV2ViQ29yZSkvc3RvcmFn
ZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFz
ZS5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCi0JJChX
ZWJDb3JlKS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9T
UUxFcnJvci5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwKLQkk
KFdlYkNvcmUpL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCi0JJChXZWJDb3JlKS9zdG9yYWdl
L1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGwgXAotCSQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwgXAot
CSQoV2ViQ29yZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCBcCi0JJChXZWJD
b3JlKS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAotCSQoV2ViQ29y
ZSkvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL3N0b3JhZ2UvV29y
a2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUNhbGxiYWNrLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlU3luYy5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvblN5bmMuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0
YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbAogZW5kaWYgIyBFTkQgRU5BQkxFX1NR
TF9EQVRBQkFTRQogCiAjIC0tLS0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA5ODU4KQor
KysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTMwMCwxMiAr
MTMwMCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVN1cnJvdW5k
RGF0YS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVRyYW5zZm9ybURhdGEuY3BwIFwK
ICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmNwcCBcCi0gICAgc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmNwcCBcCi0gICAgc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5j
cHAgXAotICAgIHN0b3JhZ2UvRGF0YWJhc2UuY3BwIFwKLSAgICBzdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5jcHAgXAotICAgIHN0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmNwcCBcCi0gICAgc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuY3BwIFwKICAgICBzdG9yYWdlL1N0b3JhZ2VUYXNrLmNwcCBcCiAg
ICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlLmNwcCBc
CkBAIC0xMzE4LDcgKzEzMTIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwK
ICAgICBzdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBcCi0gICAgc3RvcmFnZS9Xb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UuY3BwIFwKICAgICB0ZXN0aW5nL0ludGVybmFscy5jcHAgXAogICAgIHRl
c3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAgXAogICAgIHhtbC9ET01QYXJzZXIuY3BwIFwKQEAg
LTE1MzIsNiArMTUyNSwzMCBAQCBIRUFERVJTICs9IFwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oIFwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0
aW9uT3B0aW9ucy5oIFwKICAgICBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIu
aCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oIFwKKyAg
ICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5oIFwKKyAgICBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VDYWxsYmFjay5oIFwKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oIFwK
KyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oIFwKKyAgICBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5h
Z2VyLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCBcCisg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaCBcCisgICAgTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxSZXN1bHRTZXRSb3dMaXN0LmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oIFwKKyAg
ICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmggXAorICAgIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25TeW5jLmggXAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UuaCBcCisgICAgXAogICAgIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmgg
XAogICAgIGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBcCiAgICAgY3NzL0NTU0JvcmRl
ckltYWdlLmggXApAQCAtMjUxMyw0MyArMjUzMCwyMCBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmggXAotICAgIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oIFwKLSAgICBzdG9yYWdlL0No
YW5nZVZlcnNpb25XcmFwcGVyLmggXAotICAgIHN0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2Uu
aCBcCi0gICAgc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaCBcCi0gICAgc3RvcmFnZS9EYXRh
YmFzZS5oIFwKLSAgICBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaCBcCi0gICAgc3RvcmFnZS9E
YXRhYmFzZVN5bmMuaCBcCi0gICAgc3RvcmFnZS9EYXRhYmFzZVRhc2suaCBcCi0gICAgc3RvcmFn
ZS9EYXRhYmFzZVRocmVhZC5oIFwKLSAgICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oIFwKLSAg
ICBzdG9yYWdlL1N0b3JhZ2VUYXNrLmggXAotICAgIHN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oIFwK
LSAgICBzdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5oIFwKLSAgICBzdG9yYWdlL09yaWdpblVz
YWdlUmVjb3JkLmggXAotICAgIHN0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmggXAotICAgIHN0
b3JhZ2UvU1FMUmVzdWx0U2V0LmggXAotICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5o
IFwKLSAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKLSAgICBzdG9yYWdlL1NRTFN0YXRlbWVu
dFN5bmMuaCBcCi0gICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKLSAgICBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ2xpZW50LmggXAotICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIFwKLSAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oIFwKLSAgICBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggXAorICAgIHN0b3JhZ2UvU3RvcmFnZS5oIFwK
ICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhLmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXAogICAgIHN0b3JhZ2UvU3RvcmFn
ZUV2ZW50LmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIFwKLSAgICBz
dG9yYWdlL1N0b3JhZ2UuaCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmggXAogICAgIHN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZS5oIFwKICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmggXAogICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmggXAorICAgIHN0b3JhZ2UvU3Rv
cmFnZVRhc2suaCBcCisgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggXAogICAgIHN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuaCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oIFwK
LSAgICBzdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oIFwKICAgICBzdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaCBc
CiAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oIFwKQEAgLTI5NTAsMjEgKzI5NDQs
MjggQEAgcGx1Z2luX2JhY2tlbmRfeGxpYiB7CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9T
UUxfREFUQUJBU0U9MSkgewogICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBzdG9yYWdlL0NoYW5n
ZVZlcnNpb25XcmFwcGVyLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcCBc
Ci0gICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9E
YXRhYmFzZVRyYWNrZXIuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIu
Y3BwIFwKLSAgICAgICAgc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgXAotICAgICAgICBz
dG9yYWdlL1NRTEV4Y2VwdGlvbi5jcHAgXAotICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5j
cHAgXAotICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIFwKLSAgICAgICAg
c3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnRT
eW5jLmNwcCBcCi0gICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKLSAgICAgICAg
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgXAotICAgICAgICBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKLSAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmMuY3BwCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAgXAorICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwIFwKKyAgICAgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwIFwKKyAgICAgICAgTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRhc2suY3BwIFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5jcHAgXAorICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5jcHAgXAorICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNl
LmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNw
cCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIFwK
KyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uY3BwIFwKKyAgICAgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMU3RhdGVtZW50U3luYy5jcHAgXAorICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uLmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25DbGllbnQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmNwcCBcCisgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlLmNwcAogCiAgICAgIXY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc2Myw2ICs3NjMsMjIgQEAKICAgICAgICAgICAg
ICdNb2R1bGVzL21lZGlhc3RyZWFtL05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5p
ZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaWRs
JywKICAgICAgICAgICAgICdNb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGwnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXJyb3IuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaWRsJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2Uv
V29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJz
b2NrZXRzL0Nsb3NlRXZlbnQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYnNvY2tldHMv
RE9NV2luZG93V2ViU29ja2V0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldC5pZGwnLApAQCAtMTA1OCwyOCArMTA3NCwxMiBAQAogICAgICAgICAgICAgJ3Bs
dWdpbnMvRE9NTWltZVR5cGVBcnJheS5pZGwnLAogICAgICAgICAgICAgJ3BsdWdpbnMvRE9NUGx1
Z2luLmlkbCcsCiAgICAgICAgICAgICAncGx1Z2lucy9ET01QbHVnaW5BcnJheS5pZGwnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0RhdGFiYXNlLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZUNh
bGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL1NRTEVycm9yLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9T
UUxFeGNlcHRpb24uaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwn
LAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICdz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICdzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3lu
Yy5pZGwnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2UuaWRsJywKICAgICAgICAgICAgICdz
dG9yYWdlL1N0b3JhZ2VFdmVudC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUlu
Zm8uaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VJbmZvRXJyb3JDYWxsYmFjay5p
ZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUluZm9RdW90YUNhbGxiYWNrLmlkbCcs
CiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2suaWRsJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9CdWZmZXJDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyU291cmNlTm9kZS5pZGwnLApAQCAtMTQwMiw2ICsxNDAyLDUxIEBACiAgICAgICAgICAgICAn
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRhc2suY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVGFzay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVGhyZWFkLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FM
RGF0YWJhc2UuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRv
d1NRTERhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9Pcmln
aW5RdW90YU1hbmFnZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9Pcmln
aW5Vc2FnZVJlY29yZC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxD
YWxsYmFja1dyYXBwZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxF
eGNlcHRpb24uY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEV4Y2Vw
dGlvbi5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5j
cHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmgn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVu
dC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvblN5bmMuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uU3luYy5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
ZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1
b3RhVHJhY2tlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21p
dW0vUXVvdGFUcmFja2VyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvY2hy
b21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvd2Vic29ja2V0cy9DbG9zZUV2ZW50LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oJywKQEAgLTQ3MDYs
NDggKzQ3NTEsNiBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAnLAotICAg
ICAgICAgICAgJ3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2Uv
RE9NV2luZG93U1FMRGF0YWJhc2UuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0RPTVdpbmRv
d1NRTERhdGFiYXNlLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2UuY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAnLAotICAgICAgICAgICAg
J3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0
YWJhc2VDYWxsYmFjay5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlQ29udGV4dC5j
cHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmgnLAotICAgICAgICAg
ICAgJ3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRh
YmFzZVN5bmMuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwJywKLSAg
ICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVGFzay5oJywKLSAgICAgICAgICAgICdzdG9yYWdl
L0RhdGFiYXNlVGhyZWFkLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9EYXRhYmFzZVRocmVh
ZC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL1N0
b3JhZ2VUYXNrLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oJywKLSAgICAgICAgICAgICdzdG9y
YWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2lu
UXVvdGFNYW5hZ2VyLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQu
Y3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmgnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgnLAotICAgICAgICAgICAgJ3N0b3Jh
Z2UvU1FMRXhjZXB0aW9uLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24u
aCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdl
L1NRTFN0YXRlbWVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50U3lu
Yy5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oJywKLSAgICAg
ICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DbGllbnQuaCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaCcsCi0gICAgICAgICAg
ICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL1N0b3JhZ2UuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2UuaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlQXJlYS5oJywKQEAgLTQ3NzIsMTYgKzQ3NzUsMTMg
QEAKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdl
VGFzay5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRhc2suaCcsCisgICAgICAg
ICAgICAnc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9T
dG9yYWdlVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3Bw
JywKLSAgICAgICAgICAgICdzdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHAnLAot
ICAgICAgICAgICAgJ3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgnLAotICAgICAg
ICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oJywKLSAgICAgICAgICAg
ICdzdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcCcs
Ci0gICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwJywKLSAgICAg
ICAgICAgICdzdG9yYWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5oJywKLSAgICAgICAgICAgICdz
dG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuY3BwJywKICAgICAgICAg
ICAgICdzdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS93aW5jZS9TdG9yYWdlVGhyZWFkV2luQ0UuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
CShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0Vf
RElSIFwKICAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgJCRTT1VS
Q0VfRElSL01vZHVsZXMvaW5kZXhlZGRiIFwKKyAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy93ZWJk
YXRhYmFzZSBcCiAgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvd2Vic29ja2V0cyBcCiAgICAgJCRT
T1VSQ0VfRElSL2FjY2Vzc2liaWxpdHkgXAogICAgICQkU09VUkNFX0RJUi9iaW5kaW5ncyBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNl
LmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRo
b3JpemVyLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1
ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9yIHJlcG9ydGluZy4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25LZXlbXSA9
ICJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiOworc3RhdGljIGNvbnN0IGNoYXIgaW5mb1RhYmxl
TmFtZVtdID0gIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyI7CisKK3N0YXRpYyBTdHJpbmcg
Zm9ybWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBzcWxpdGVFcnJvckNv
ZGUsIGNvbnN0IGNoYXIqIHNxbGl0ZUVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiVzICglZCAlcykiLCBtZXNzYWdlLCBzcWxpdGVFcnJvckNvZGUsIHNxbGl0ZUVy
cm9yTWVzc2FnZSk7Cit9CisKK3N0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRh
YmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmluZyYgcmVz
dWx0U3RyaW5nKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmlu
ZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1
bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdERvbmUpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSByZWFkaW5n
IHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5k
YXRhKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgc2V0VGV4dFZhbHVl
SW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVl
cnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCB2YWx1ZSk7CisKKyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwor
ICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzdGVwIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVkIGZ1bmN0
aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCitzdGF0aWMgTXV0ZXgmIGd1
aWRNdXRleCgpCit7CisgICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4JiwgbXV0
ZXggPSAqbmV3IE11dGV4KTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKK3R5cGVkZWYgSGFzaE1h
cDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7CitzdGF0aWMgR3VpZFZlcnNpb25NYXAmIGd1
aWRUb1ZlcnNpb25NYXAoKQoreworICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tl
ZC4KKyAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKwor
Ly8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KK3N0YXRpYyBpbmxpbmUgdm9p
ZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCit7Cisg
ICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11
dGV4KCkudHJ5TG9jaygpKTsKKworICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBh
biBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KKyAgICAvLyBU
aGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3Mg
YXJlIHBlci10aHJlYWQuCisgICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNp
b24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAorICAgIC8vIHRocmVh
ZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0
YSBzdHJ1Y3R1cmUuCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3Ry
aWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgorCisgICAgLy8gTWFwIG51bGwgc3RyaW5n
IHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAgIGd1aWRUb1ZlcnNpb25N
YXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNp
b24uaXNvbGF0ZWRDb3B5KCkpOworfQorCit0eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PEFi
c3RyYWN0RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKK3N0YXRpYyBHdWlkRGF0YWJhc2VN
YXAmIGd1aWRUb0RhdGFiYXNlTWFwKCkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBp
cyBsb2NrZWQuCisgICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoR3VpZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFw
OworfQorCitzdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXgg
aXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKKworICAgIFN0
cmluZyBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3Vp
ZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOworICAgIGludCBndWlkID0gc3Ry
aW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOworICAgIGlmICghZ3VpZCkgewor
ICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKKyAgICAgICAgZ3VpZCA9IGN1
cnJlbnROZXdHVUlEKys7CisgICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0
cmluZ0lELCBndWlkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ3VpZDsKK30KKworc3RhdGljIGJv
b2wgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRydWU7CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6
aXNBdmFpbGFibGUoKQoreworICAgIHJldHVybiBpc0RhdGFiYXNlQXZhaWxhYmxlOworfQorCit2
b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQorewor
ICAgIGlzRGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7Cit9CisKKy8vIHN0YXRpYworY29u
c3QgY2hhciogQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKK3sKKyAg
ICByZXR1cm4gaW5mb1RhYmxlTmFtZTsKK30KKworQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3RE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCisgICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZGF0YWJhc2VDb250ZXh0KERhdGFiYXNl
Q29udGV4dDo6ZnJvbShjb250ZXh0KSkKKyAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgp
KQorICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmlzb2xhdGVkQ29weSgp
KQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAs
IG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9ndWlkKDApCisgICAgLCBt
X29wZW5lZChmYWxzZSkKKyAgICAsIG1fbmV3KGZhbHNlKQorICAgICwgbV9pc1N5bmNEYXRhYmFz
ZShkYXRhYmFzZVR5cGUgPT0gU3luY0RhdGFiYXNlKQoreworICAgIEFTU0VSVChjb250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBtX2RhdGFi
YXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGluZm9UYWJsZU5hbWUp
OworCisgICAgaWYgKG1fbmFtZS5pc051bGwoKSkKKyAgICAgICAgbV9uYW1lID0gIiI7CisKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgICAgIG1f
Z3VpZCA9IGd1aWRGb3JPcmlnaW5BbmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCks
IG5hbWUpOworICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1
aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAgIGlmICghaGFzaFNldCkgewor
ICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPjsKKyAg
ICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7CisgICAg
ICAgIH0KKworICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7CisgICAgfQorCisgICAgbV9maWxl
bmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2Vj
dXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5h
ZGRPcGVuRGF0YWJhc2UodGhpcyk7Cit9CisKK0Fic3RyYWN0RGF0YWJhc2U6On5BYnN0cmFjdERh
dGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoIW1fb3BlbmVkKTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpjbG9zZURhdGFiYXNlKCkKK3sKKyAgICBpZiAoIW1fb3BlbmVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgbV9vcGVuZWQgPSBm
YWxzZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisK
KyAgICAgICAgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRh
YmFzZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBBU1NFUlQoaGFzaFNldCk7CisgICAgICAg
IEFTU0VSVChoYXNoU2V0LT5jb250YWlucyh0aGlzKSk7CisgICAgICAgIGhhc2hTZXQtPnJlbW92
ZSh0aGlzKTsKKyAgICAgICAgaWYgKGhhc2hTZXQtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
Z3VpZFRvRGF0YWJhc2VNYXAoKS5yZW1vdmUobV9ndWlkKTsKKyAgICAgICAgICAgIGRlbGV0ZSBo
YXNoU2V0OworICAgICAgICAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnJlbW92ZShtX2d1aWQpOwor
ICAgICAgICB9CisgICAgfQorfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigp
IGNvbnN0Cit7CisgICAgLy8gTm90ZTogSW4gbXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUgY2Fj
aGVkIHZhbHVlIG1heSBiZSBhY2N1cmF0ZSwgYnV0IHdlIGNhbm5vdCByZWFkIHRoZQorICAgIC8v
IGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkgaW5k
dWNpbmcgYSBkZWFkbG9jay4KKyAgICAvLyBGSVhNRTogQWRkIGFuIGFzeW5jIHZlcnNpb24gZ2V0
dGVyIHRvIHRoZSBEYXRhYmFzZUFQSS4KKyAgICByZXR1cm4gZ2V0Q2FjaGVkVmVyc2lvbigpOwor
fQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hv
dWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoZXJyb3JNZXNzYWdlLmlzRW1wdHkoKSk7CisKKyAg
ICBjb25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7CisKKyAgICBpZiAoIW1f
c3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgeworICAgICAgICByZXBvcnRP
cGVuRGF0YWJhc2VSZXN1bHQoMSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCkpOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2Uo
InVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFtX3NxbGl0
ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQorICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtICglZCAlcykiLCBt
X3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVz
eVdhaXRUaW1lKTsKKworICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAgICAgICAgR3VpZFZlcnNpb25N
YXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKKyAg
ICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgeworICAgICAgICAg
ICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJz
aW9uTWFwKCkpLgorICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlz
TnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7CisgICAg
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQg
JWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKworI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICAgICAgLy8gTm90ZTogSW4gbXVsdGktcHJvY2Vz
cyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBpbmFjY3VyYXRlLCBidXQKKyAgICAg
ICAgICAgIC8vIHdlIGNhbm5vdCByZWFkIHRoZSBhY3R1YWwgdmVyc2lvbiBmcm9tIHRoZSBkYXRh
YmFzZSB3aXRob3V0IHBvdGVudGlhbGx5CisgICAgICAgICAgICAvLyBpbmR1Y2luZyBhIGZvcm0g
b2YgZGVhZGxvY2ssIGEgYnVzeXRpbWVvdXQgZXJyb3Igd2hlbiB0cnlpbmcgdG8KKyAgICAgICAg
ICAgIC8vIGFjY2VzcyB0aGUgZGF0YWJhc2UuIFNvIHdlJ2xsIHVzZSB0aGUgY2FjaGVkIHZhbHVl
IGlmIHdlJ3JlIHVuYWJsZSB0byByZWFkCisgICAgICAgICAgICAvLyB0aGUgdmFsdWUgZnJvbSB0
aGUgZGF0YWJhc2UgZmlsZSB3aXRob3V0IHdhaXRpbmcuCisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIGFuIGFzeW5jIG9wZW5EYXRhYmFzZSBtZXRob2QgdG8gdGhlIERhdGFiYXNlQVBJLgorICAg
ICAgICAgICAgY29uc3QgaW50IG5vU3FsaXRlQnVzeVdhaXRUaW1lID0gMDsKKyAgICAgICAgICAg
IG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobm9TcWxpdGVCdXN5V2FpdFRpbWUpOwor
ICAgICAgICAgICAgU3RyaW5nIHZlcnNpb25Gcm9tRGF0YWJhc2U7CisgICAgICAgICAgICBpZiAo
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSh2ZXJzaW9uRnJvbURhdGFiYXNlLCBmYWxzZSkpIHsKKyAg
ICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IHZlcnNpb25Gcm9tRGF0YWJhc2U7CisgICAg
ICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1l
b3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWki
LCBtX2d1aWQpOworCisgICAgICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiht
X3NxbGl0ZURhdGFiYXNlKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAg
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkgeworICAgICAgICAgICAgICAg
IHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgyLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVE
YXRhYmFzZS5sYXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9y
bWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHN0YXJ0
IHRyYW5zYWN0aW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKKyAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJp
bmcgdGFibGVOYW1lKGluZm9UYWJsZU5hbWUpOworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBtX25ldyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBUQUJMRSAiICsgdGFibGVOYW1lICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5P
VCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdCgzLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFz
ZS5sYXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1h
dEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBjcmVhdGUg
J2luZm8nIHRhYmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24sIGZhbHNlKSkg
eworICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg0LCBJTlZBTElEX1NU
QVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFz
ZSwgZmFpbGVkIHRvIHJlYWQgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5y
b2xsYmFjaygpOworICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwg
Y3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgc2hvdWxkU2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UpIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNl
dHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBt
X2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZSht
X2V4cGVjdGVkVmVyc2lvbiwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydE9w
ZW5EYXRhYmFzZVJlc3VsdCg1LCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVy
cm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byB3cml0ZSBjdXJy
ZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGN1cnJlbnRWZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAg
ICAgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
RGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY3VycmVudFZlcnNpb24gPSAiIjsKKyAg
ICB9CisKKyAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUgZW1wdHkgc3Ry
aW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdlIGhhdmUgbWF0
Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4KKyAgICAvLyBJ
ZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFsd2F5
cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZlLgor
ICAgIGlmICgoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSAmJiBtX2V4
cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVy
c2lvbikgeworICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoNiwgSU5WQUxJRF9TVEFU
RV9FUlIsIDApOworICAgICAgICBlcnJvck1lc3NhZ2UgPSAidW5hYmxlIHRvIG9wZW4gZGF0YWJh
c2UsIHZlcnNpb24gbWlzbWF0Y2gsICciICsgbV9leHBlY3RlZFZlcnNpb24gKyAiJyBkb2VzIG5v
dCBtYXRjaCB0aGUgY3VycmVudFZlcnNpb24gb2YgJyIgKyBjdXJyZW50VmVyc2lvbiArICInIjsK
KyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgbV9zcWxpdGVEYXRhYmFz
ZS5jbG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOworCisgICAgbV9vcGVuZWQgPSB0cnVlOworCisgICAgaWYg
KG1fbmV3ICYmICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKKyAgICAgICAgbV9leHBl
Y3RlZFZlcnNpb24gPSAiIjsgLy8gVGhlIGNhbGxlciBwcm92aWRlZCBhIGNyZWF0aW9uQ2FsbGJh
Y2sgd2hpY2ggd2lsbCBzZXQgdGhlIGV4cGVjdGVkIHZlcnNpb24uCisKKyAgICByZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoMCwgLTEsIDApOyAvLyBPSworICAgIHJldHVybiB0cnVlOworfQorCitT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpOworfQorCitTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5n
ZXQoKTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBj
b25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVh
ZCBzYWZldHkKKyAgICByZXR1cm4gbV9uYW1lLmlzb2xhdGVkQ29weSgpOworfQorCitTdHJpbmcg
QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAoreworICAgIC8vIFJldHVybiBh
IGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKKyAgICByZXR1cm4gbV9k
aXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKTsKK30KKwordW5zaWduZWQgbG9uZyBBYnN0cmFjdERh
dGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lc3RpbWF0ZWRT
aXplOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZmlsZU5hbWUoKSBjb25zdAorewor
ICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkK
KyAgICByZXR1cm4gbV9maWxlbmFtZS5pc29sYXRlZENvcHkoKTsKK30KKworYm9vbCBBYnN0cmFj
dERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBz
aG91bGRDYWNoZVZlcnNpb24pCit7CisgICAgU3RyaW5nIHF1ZXJ5KFN0cmluZygiU0VMRUNUIHZh
bHVlIEZST00gIikgKyBpbmZvVGFibGVOYW1lICsgICIgV0hFUkUga2V5ID0gJyIgKyB2ZXJzaW9u
S2V5ICsgIic7Iik7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworCisg
ICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVE
YXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYg
KHNob3VsZENhY2hlVmVyc2lvbikKKyAgICAgICAgICAgIHNldENhY2hlZFZlcnNpb24odmVyc2lv
bik7CisgICAgfSBlbHNlCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIHZl
cnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRh
KCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQoreworICAg
IC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0
YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBD
T05GTElDVCBSRVBMQUNFCisgICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChz
ZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgorICAgIFN0cmluZyBxdWVyeShT
dHJpbmcoIklOU0VSVCBJTlRPICIpICsgaW5mb1RhYmxlTmFtZSArICAiIChrZXksIHZhbHVlKSBW
QUxVRVMgKCciICsgdmVyc2lvbktleSArICInLCA/KTsiKTsKKworICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5kaXNhYmxlKCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0
YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOworICAgIGlmIChyZXN1bHQp
IHsKKyAgICAgICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKKyAgICAgICAgICAgIHNldENhY2hl
ZFZlcnNpb24odmVyc2lvbik7CisgICAgfSBlbHNlCisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0
YSgpLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZW5hYmxlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEFic3RyYWN0RGF0YWJh
c2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgbV9l
eHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmlzb2xhdGVkQ29weSgpOworfQorCitTdHJpbmcgQWJz
dHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdl
dChtX2d1aWQpLmlzb2xhdGVkQ29weSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNl
dENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxWZXJzaW9uKQoreworICAgIC8vIFVw
ZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgorICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBh
Y3R1YWxWZXJzaW9uKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpnZXRBY3R1YWxWZXJz
aW9uRm9yVHJhbnNhY3Rpb24oU3RyaW5nICZhY3R1YWxWZXJzaW9uKQoreworICAgIEFTU0VSVCht
X3NxbGl0ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzIHRoZSBjYWNo
ZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUuCisgICAgLy8gU28gd2UgcmV0cmlldmUgdGhlIHZh
bHVlIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBoZXJlLgor
ICAgIHJldHVybiBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24sIHRydWUpOwor
I2Vsc2UKKyAgICBhY3R1YWxWZXJzaW9uID0gZ2V0Q2FjaGVkVmVyc2lvbigpOworICAgIHJldHVy
biB0cnVlOworI2VuZGlmCit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJsZUF1dGhv
cml6ZXIoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpl
bmFibGVBdXRob3JpemVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwor
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7Cit9
CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKGludCBw
ZXJtaXNzaW9ucykKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5zZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7Cit9CisKK2Jv
b2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCit7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9vbCBBYnN0cmFjdERh
dGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldh
c0luc2VydCgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCit7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+cmVzZXREZWxldGVzKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVs
ZXRlcygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4g
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpyZXNldEF1dGhvcml6ZXIoKQoreworICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXpl
cikKKyAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Cit9CisKK3Vuc2lnbmVk
IGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0
aGlzKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVl
ZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZy
ZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2Uu
dG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUpIHsK
KyAgICAgICAgaW50IHJlc3VsdCA9IG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1
dW1Db21tYW5kKCk7CisgICAgICAgIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHJlc3VsdCk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICBsb2dFcnJv
ck1lc3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1pbmcgZGF0YWJhc2UiLCBy
ZXN1bHQsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsKKyAgICB9Cit9CisKK3Zv
aWQgQWJzdHJhY3REYXRhYmFzZTo6aW50ZXJydXB0KCkKK3sKKyAgICBtX3NxbGl0ZURhdGFiYXNl
LmludGVycnVwdCgpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OmlzSW50ZXJydXB0ZWQo
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NxbGl0ZURhdGFiYXNlLmRhdGFiYXNlTXV0
ZXgoKSk7CisgICAgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2UuaXNJbnRlcnJ1cHRlZCgpOworfQor
Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmxvZ0Vycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2Fn
ZShPdGhlck1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
bWVzc2FnZSk7Cit9CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKy8vIFRoZXNlIGFyZSB1c2Vk
IHRvIGdlbmVyYXRlIGhpc3RvZ3JhbXMgb2YgZXJyb3JzIHNlZW4gd2l0aCB3ZWJzcWwuCisvLyBT
ZWUgYWJvdXQ6aGlzdG9ncmFtcyBpbiBjaHJvbWl1bS4KK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNv
ZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit7CisgICAgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0
T3BlbkRhdGFiYXNlUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxp
dGVFcnJvckNvZGUpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENoYW5nZVZl
cnNpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0
ZUVycm9yQ29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9u
UmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUp
OworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1
bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29k
ZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0
KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOworfQor
Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGlu
dCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit7
CisgICAgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQodGhp
cywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisKK3Zv
aWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJy
b3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAg
IERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQodGhpcywgZXJy
b3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisKK3ZvaWQgQWJz
dHJhY3REYXRhYmFzZTo6cmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50IHNxbGl0ZUVycm9y
Q29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3Vs
dCh0aGlzLCBzcWxpdGVFcnJvckNvZGUpOworfQorCisjZWxzZQordm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Cit2b2lkIEFi
c3RyYWN0RGF0YWJhc2U6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50LCBpbnQsIGludCkg
eyB9Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQo
aW50LCBpbnQsIGludCkgeyB9Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENvbW1pdFRy
YW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQordm9pZCBBYnN0cmFjdERhdGFiYXNl
OjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQordm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQpIHsgfQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0
RGF0YWJhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFic3Ry
YWN0RGF0YWJhc2VfaAorI2RlZmluZSBBYnN0cmFjdERhdGFiYXNlX2gKKworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNR
TGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpZiAhTE9HX0RJU0FCTEVEIHx8ICFFUlJPUl9ESVNB
QkxFRAorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7CitjbGFzcyBEYXRhYmFzZUNvbnRl
eHQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWJzdHJhY3REYXRhYmFzZT4geworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgc3RhdGljIHZvaWQgc2V0SXNB
dmFpbGFibGUoYm9vbCBhdmFpbGFibGUpOworCisgICAgdmlydHVhbCB+QWJzdHJhY3REYXRhYmFz
ZSgpOworCisgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworCisgICAgYm9vbCBv
cGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQorICAgIGJvb2wgaXNOZXcoKSBjb25z
dCB7IHJldHVybiBtX25ldzsgfQorICAgIGJvb2wgaXNTeW5jRGF0YWJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX2lzU3luY0RhdGFiYXNlOyB9CisKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0
cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKKyAgICBTUUxpdGVEYXRhYmFz
ZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9CisKKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVu
dGFsVmFjdXVtSWZOZWVkZWQoKTsKKyAgICB2b2lkIGludGVycnVwdCgpOworICAgIGJvb2wgaXNJ
bnRlcnJ1cHRlZCgpOworCisgICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQg
ZW5hYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7Cisg
ICAgdm9pZCBzZXRBdXRob3JpemVyUGVybWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKTsKKyAgICBi
b29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKKyAgICBib29sIGxhc3RBY3Rpb25XYXNJ
bnNlcnQoKTsKKyAgICB2b2lkIHJlc2V0RGVsZXRlcygpOworICAgIGJvb2wgaGFkRGVsZXRlcygp
OworICAgIHZvaWQgcmVzZXRBdXRob3JpemVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0Fz
RGVsZXRlZEFuZENsb3NlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5
KCkgPSAwOworCisgICAgRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dDsgfQorCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNs
YXNzIENoYW5nZVZlcnNpb25XcmFwcGVyOworICAgIGZyaWVuZCBjbGFzcyBTUUxTdGF0ZW1lbnQ7
CisgICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVudFN5bmM7CisgICAgZnJpZW5kIGNsYXNzIFNR
TFRyYW5zYWN0aW9uU3luYzsKKyAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb247CisKKyAg
ICBlbnVtIERhdGFiYXNlVHlwZSB7CisgICAgICAgIEFzeW5jRGF0YWJhc2UsCisgICAgICAgIFN5
bmNEYXRhYmFzZQorICAgIH07CisKKyAgICBBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZVR5cGUpOworCisgICAgdm9pZCBjbG9z
ZURhdGFiYXNlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9v
bCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKKworICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcm
IHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uID0gdHJ1ZSk7CisgICAgYm9vbCBzZXRW
ZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVW
ZXJzaW9uID0gdHJ1ZSk7CisgICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5n
Jik7CisgICAgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24oKSBjb25zdCB7IHJldHVybiBt
X2V4cGVjdGVkVmVyc2lvbjsgfQorICAgIFN0cmluZyBnZXRDYWNoZWRWZXJzaW9uKCljb25zdDsK
KyAgICB2b2lkIHNldENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBnZXRB
Y3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oU3RyaW5nJiB2ZXJzaW9uKTsKKworICAgIHZvaWQg
bG9nRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICB2b2lkIHJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICB2b2lkIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQo
aW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7
CisgICAgdm9pZCByZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGlu
dCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHZvaWQgcmVwb3J0
Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29k
ZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CisgICAgdm9pZCByZXBvcnRFeGVjdXRlU3RhdGVtZW50
UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJv
ckNvZGUpOworICAgIHZvaWQgcmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50IHNxbGl0ZUVy
cm9yQ29kZSk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGF0YWJhc2VJbmZvVGFibGVOYW1l
KCk7CisKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fY29udGV4dFRocmVhZFNlY3VyaXR5
T3JpZ2luOworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CisgICAgRGF0YWJhc2VDb250ZXh0KiBtX2RhdGFiYXNlQ29udGV4dDsgLy8g
T3duZWQgYnkgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgU3RyaW5nIG1fbmFtZTsK
KyAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247CisgICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7
CisgICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7CisgICAgU3RyaW5nIG1fZmlsZW5h
bWU7CisKKyNpZiAhTE9HX0RJU0FCTEVEIHx8ICFFUlJPUl9ESVNBQkxFRAorICAgIFN0cmluZyBk
YXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5
T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgaW50IG1fZ3VpZDsKKyAgICBib29sIG1fb3BlbmVkOworICAgIGJvb2wgbV9uZXc7Cisg
ICAgY29uc3QgYm9vbCBtX2lzU3luY0RhdGFiYXNlOworCisgICAgU1FMaXRlRGF0YWJhc2UgbV9z
cWxpdGVEYXRhYmFzZTsKKworICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJh
c2VBdXRob3JpemVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIEFic3RyYWN0RGF0YWJhc2VfaAoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0
cmFjdERhdGFiYXNlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2
ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2hh
bmdlVmVyc2lvbldyYXBwZXIuaCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ2hhbmdlVmVyc2lvbldyYXBwZXI6OkNoYW5nZVZlcnNpb25XcmFwcGVyKGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKQorICAgIDogbV9vbGRW
ZXJzaW9uKG9sZFZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX25ld1ZlcnNpb24obmV3
VmVyc2lvbi5pc29sYXRlZENvcHkoKSkKK3sKK30KKworYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBl
cjo6cGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAg
QVNTRVJUKHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKTsKKworICAgIERh
dGFiYXNlKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworCisgICAgU3RyaW5n
IGFjdHVhbFZlcnNpb247CisgICAgaWYgKCFkYXRhYmFzZS0+Z2V0VmVyc2lvbkZyb21EYXRhYmFz
ZShhY3R1YWxWZXJzaW9uKSkgeworICAgICAgICBpbnQgc3FsaXRlRXJyb3IgPSBkYXRhYmFzZS0+
c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKTsKKyAgICAgICAgZGF0YWJhc2UtPnJlcG9ydENo
YW5nZVZlcnNpb25SZXN1bHQoMSwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCBzcWxpdGVFcnJvcik7
CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dO
X0VSUiwgInVuYWJsZSB0byByZWFkIHRoZSBjdXJyZW50IHZlcnNpb24iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxpdGVFcnJvciwgZGF0YWJhc2UtPnNxbGl0ZURh
dGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKGFjdHVhbFZlcnNpb24gIT0gbV9vbGRWZXJzaW9uKSB7CisgICAgICAgIGRhdGFi
YXNlLT5yZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDIsIFNRTEVycm9yOjpWRVJTSU9OX0VSUiwg
MCk7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJT
SU9OX0VSUiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9u
YCBhcmd1bWVudCBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENoYW5nZVZlcnNpb25XcmFwcGVyOjpwZXJm
b3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJU
KHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKTsKKworICAgIERhdGFiYXNl
KiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworCisgICAgaWYgKCFkYXRhYmFz
ZS0+c2V0VmVyc2lvbkluRGF0YWJhc2UobV9uZXdWZXJzaW9uKSkgeworICAgICAgICBpbnQgc3Fs
aXRlRXJyb3IgPSBkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKTsKKyAgICAg
ICAgZGF0YWJhc2UtPnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoMywgU1FMRXJyb3I6OlVOS05P
V05fRVJSLCBzcWxpdGVFcnJvcik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3Jl
YXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBzZXQgbmV3IHZlcnNpb24gaW4g
ZGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxpdGVF
cnJvciwgZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZGF0YWJhc2UtPnNldEV4cGVjdGVkVmVyc2lv
bihtX25ld1ZlcnNpb24pOworCisgICAgZGF0YWJhc2UtPnJlcG9ydENoYW5nZVZlcnNpb25SZXN1
bHQoMCwgLTEsIDApOyAvLyBPSworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENoYW5nZVZl
cnNpb25XcmFwcGVyOjpoYW5kbGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zZXRD
YWNoZWRWZXJzaW9uKG1fb2xkVmVyc2lvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVy
c2lvbldyYXBwZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKyNpZm5kZWYgQ2hhbmdlVmVyc2lvbldyYXBwZXJfaAorI2RlZmluZSBDaGFuZ2VWZXJzaW9u
V3JhcHBlcl9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMRXJyb3I7CisKK2Ns
YXNzIENoYW5nZVZlcnNpb25XcmFwcGVyIDogcHVibGljIFNRTFRyYW5zYWN0aW9uV3JhcHBlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hhbmdlVmVyc2lvbldyYXBwZXI+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikg
eyByZXR1cm4gYWRvcHRSZWYobmV3IENoYW5nZVZlcnNpb25XcmFwcGVyKG9sZFZlcnNpb24sIG5l
d1ZlcnNpb24pKTsgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm1QcmVmbGlnaHQoU1FMVHJh
bnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNh
Y3Rpb24qKTsKKyAgICB2aXJ0dWFsIFNRTEVycm9yKiBzcWxFcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc3FsRXJyb3IuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ29tbWl0RmFpbGVk
QWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKik7CisKK3ByaXZhdGU6CisgICAgQ2hhbmdl
VmVyc2lvbldyYXBwZXIoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5l
d1ZlcnNpb24pOworCisgICAgU3RyaW5nIG1fb2xkVmVyc2lvbjsKKyAgICBTdHJpbmcgbV9uZXdW
ZXJzaW9uOworICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9zcWxFcnJvcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBDaGFuZ2VWZXJzaW9uV3JhcHBl
cl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RE9NV2luZG93U1FMRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRE9NV2luZG93U1FMRGF0YWJhc2UuaCIKKworI2luY2x1
ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRl
ICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPERhdGFiYXNlPiBET01XaW5k
b3dTUUxEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERPTVdpbmRvdyogd2luZG93LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghd2lu
ZG93LT5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gMDsKKyAgICBpZiAoQWJzdHJhY3REYXRh
YmFzZTo6aXNBdmFpbGFibGUoKSAmJiB3aW5kb3ctPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpCisgICAgICAgIGRhdGFiYXNlID0gRGF0YWJhc2U6Om9w
ZW5EYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCksIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7CisKKyAgICBpZiAoIWRhdGFi
YXNlICYmICFlYykKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisKKyAgICByZXR1cm4gZGF0
YWJhc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RP
TVdpbmRvd1NRTERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBET01XaW5kb3dTUUxEYXRhYmFzZV9oCisjZGVmaW5lIERPTVdp
bmRvd1NRTERhdGFiYXNlX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBET01XaW5kb3c7
CitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CitjbGFzcyBGcmFtZTsK
KworY2xhc3MgRE9NV2luZG93U1FMRGF0YWJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoRE9NV2luZG93KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBj
cmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgRE9NV2lu
ZG93U1FMRGF0YWJhc2UoKSB7IH07CisgICAgfkRPTVdpbmRvd1NRTERhdGFiYXNlKCkgeyB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2VuZGlmIC8vIERPTVdpbmRvd1NRTERhdGFiYXNlX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FM
RGF0YWJhc2UuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBp
bnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIFN1
cHBsZW1lbnRhbD1ET01XaW5kb3cKKyAgICBdIERPTVdpbmRvd1NRTERhdGFiYXNlIHsKKyAgICAg
ICAgW1Y4RW5hYmxlZEF0UnVudGltZV0gRGF0YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmlu
ZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBp
biB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIERh
dGFiYXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxsYmFjaykKKyAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOworI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAor
ICAgICAgICBhdHRyaWJ1dGUgU1FMRXhjZXB0aW9uQ29uc3RydWN0b3IgU1FMRXhjZXB0aW9uOwor
I2VuZGlmCisgICAgfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgor
CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFw
cGVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VD
YWxsYmFjay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVGFzay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JE
YXRhYmFzZUluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTUUxFcnJv
ci5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
aCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJT
UUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVTRShKU0MpCisjaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFi
YXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNh
bGxiYWNrVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2Us
IGNyZWF0aW9uQ2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRh
c2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgeworICAgICAgICBtX2NyZWF0aW9uQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRh
dGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgICAgICA6
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNhbGxi
YWNrKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7Cisg
ICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKK307CisKK1Bh
c3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGUpCit7CisgICAgaWYgKCFEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1l
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVk
IiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwg
bmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworCisg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5
VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZSwgZXJyb3JNZXNzYWdlKSkgeworICAgICAgICBk
YXRhYmFzZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAgIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LnNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisKKyAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29u
dGV4dCktPnNldEhhc09wZW5EYXRhYmFzZXMoKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7CisKKyAgICBpZiAoZGF0
YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3Ig
ZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgZGF0YWJhc2UtPm1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFz
azo6Y3JlYXRlKGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7CisgICAgfQorCisgICAgcmV0
dXJuIGRhdGFiYXNlOworfQorCitEYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKQorICAgIDogQWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZl
cnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBBc3luY0RhdGFiYXNlKQorICAgICwg
bV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1
ZUVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fZGVsZXRlZChmYWxzZSkKK3sKKyAgICBtX2RhdGFiYXNl
VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+aXNv
bGF0ZWRDb3B5KCk7CisKKyAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CisgICAgQVNTRVJUKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKTsKK30K
KworY2xhc3MgRGVyZWZDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZXJlZkNvbnRleHRUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBjb250ZXh0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZXJlZkNvbnRleHRUYXNrKGNvbnRleHQp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwg
Y29udGV4dCA9PSBtX2NvbnRleHQpOworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworcHJpdmF0ZToKKyAgICBEZXJlZkNvbnRleHRUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dD4gY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2Nv
bnRleHQ7Cit9OworCitEYXRhYmFzZTo6fkRhdGFiYXNlKCkKK3sKKyAgICAvLyBUaGUgcmVmZXJl
bmNlIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG5lZWRzIHRvIGJlIGNsZWFyZWQgb24g
dGhlIEphdmFTY3JpcHQgdGhyZWFkLiAgSWYgd2UncmUgb24gdGhhdCB0aHJlYWQgYWxyZWFkeSwg
d2UgY2FuIGp1c3QgbGV0IHRoZSBSZWZQdHIncyBkZXN0cnVjdGlvbiBkbyB0aGUgZGVyZWZmaW5n
LgorICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkg
eworICAgICAgICAvLyBHcmFiIGEgcG9pbnRlciB0byB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBoZXJl
IGJlY2F1c2Ugd2UncmUgcmVsZWFzaW5nIGl0IHdoZW4gd2UgcGFzcyBpdCB0bworICAgICAgICAv
LyBEZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUuCisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0
KCk7CisgICAgICAgIAorICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhE
ZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2Uo
KSkpOworICAgIH0KK30KKworU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9kZWxldGVkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIEFi
c3RyYWN0RGF0YWJhc2U6OnZlcnNpb24oKTsKK30KKworYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZl
cmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYg
ZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
IHN5bmNocm9uaXplcjsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpIHx8IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJl
cXVlc3RlZCgmc3luY2hyb25pemVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCBzdWNjZXNzID0gZmFsc2U7CisgICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBE
YXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZz
eW5jaHJvbml6ZXIsIGUsIGVycm9yTWVzc2FnZSwgc3VjY2Vzcyk7CisgICAgZGF0YWJhc2VDb250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVh
c2UoKSk7CisgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOworCisgICAg
cmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3ZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpCit7CisgICAgaWYgKG1fZGVsZXRlZCB8fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhTdG9yYWdlQVBJLCAiTWFya2lu
ZyAlcyAoJXApIGFzIGRlbGV0ZWQiLCBzdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCks
IHRoaXMpOworICAgIG1fZGVsZXRlZCA9IHRydWU7CisKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXIgc3luY2hyb25pemVyOworICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpIHsKKyAgICAgICAg
TE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSBoYW5kbGUgJXAgaXMgb24gYSB0ZXJtaW5hdGVkIERh
dGFiYXNlVGhyZWFkLCBjYW5ub3QgYmUgbWFya2VkIGZvciBub3JtYWwgY2xvc3VyZVxuIiwgdGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBPd25QdHI8RGF0YWJhc2VDbG9zZVRh
c2s+IHRhc2sgPSBEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIp
OworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVk
aWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOworICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0Nv
bXBsZXRpb24oKTsKK30KKwordm9pZCBEYXRhYmFzZTo6Y2xvc2UoKQoreworICAgIEFTU0VSVChk
YXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFk
SUQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzc011dGV4KTsKKyAgICAgICAgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0g
ZmFsc2U7CisgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgICAg
IG1fdHJhbnNhY3Rpb25RdWV1ZS5jbGVhcigpOworICAgIH0KKworICAgIGNsb3NlRGF0YWJhc2Uo
KTsKKworICAgIC8vIE11c3QgcmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+
cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KKyAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0
aGlzOworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRh
YmFzZUNsb3NlZCh0aGlzKTsKKyAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOworfQorCit2b2lkIERhdGFiYXNlOjpj
bG9zZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFk
ID0gZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCk7CisgICAgaWYgKGRhdGFiYXNl
VGhyZWFkICYmICFkYXRhYmFzZVRocmVhZC0+dGVybWluYXRpb25SZXF1ZXN0ZWQoKSAmJiBvcGVu
ZWQoKSkgeworICAgICAgICBsb2dFcnJvck1lc3NhZ2UoImZvcmNpYmx5IGNsb3NpbmcgZGF0YWJh
c2UiKTsKKyAgICAgICAgZGF0YWJhc2VUaHJlYWQtPnNjaGVkdWxlSW1tZWRpYXRlVGFzayhEYXRh
YmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsIDApKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGxv
bmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7Cit9CisK
K2Jvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAg
IGlmIChBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgZSwgZXJyb3JNZXNzYWdlKSkgeworICAgICAgICBpZiAoZGF0YWJhc2VDb250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCisgICAgICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBEYXRhYmFz
ZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYg
bmV3VmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAgcnVuVHJh
bnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgQ2hhbmdl
VmVyc2lvbldyYXBwZXI6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKSwgZmFsc2UpOwor
fQorCit2b2lkIERhdGFiYXNlOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aykKK3sKKyAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vz
c0NhbGxiYWNrLCAwLCBmYWxzZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlv
bihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBydW5UcmFuc2FjdGlvbihjYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCB0cnVlKTsKK30KKworc3Rh
dGljIHZvaWQgY2FsbFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTEVycm9yPiBlcnJvcikKK3sKKyAgICBjYWxsYmFjay0+aGFuZGxlRXZlbnQo
ZXJyb3IuZ2V0KCkpOworfQorCit2b2lkIERhdGFiYXNlOjpydW5UcmFuc2FjdGlvbihQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQorewor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKyAg
ICBpZiAoIW1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCkgeworICAgICAgICBpZiAoZXJyb3JD
YWxsYmFjaykgeworICAgICAgICAgICAgUmVmUHRyPFNRTEVycm9yPiBlcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAiZGF0YWJhc2UgaGFzIGJlZW4gY2xvc2Vk
Iik7CisgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmY2FsbFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywgZXJyb3JDYWxsYmFj
aywgZXJyb3IucmVsZWFzZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb246
OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3
cmFwcGVyLCByZWFkT25seSk7CisgICAgbV90cmFuc2FjdGlvblF1ZXVlLmFwcGVuZCh0cmFuc2Fj
dGlvbi5yZWxlYXNlKCkpOworICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MpCisgICAg
ICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKK30KKwordm9pZCBEYXRhYmFzZTo6aW5Qcm9ncmVz
c1RyYW5zYWN0aW9uQ29tcGxldGVkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CisgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBm
YWxzZTsKKyAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnNj
aGVkdWxlVHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkluUHJvZ3Jl
c3NNdXRleC50cnlMb2NrKCkpOyAvLyBMb2NrZWQgYnkgY2FsbGVyLgorICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb247CisKKyAgICBpZiAobV9pc1RyYW5zYWN0aW9uUXVldWVF
bmFibGVkICYmICFtX3RyYW5zYWN0aW9uUXVldWUuaXNFbXB0eSgpKQorICAgICAgICB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS50YWtlRmlyc3QoKTsKKworICAgIGlmICh0cmFuc2Fj
dGlvbiAmJiBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkgeworICAgICAgICBP
d25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9u
VGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hl
ZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwg
dGFzay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rpb24oKSk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25J
blByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJlbGVhc2UoKSk7CisgICAgfSBlbHNlCisgICAgICAg
IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnNj
aGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBp
bW1lZGlhdGVseSkKK3sKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsK
KyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sg
JXAgZm9yIHRoZSB0cmFuc2FjdGlvbiBzdGVwXG4iLCB0YXNrLmdldCgpKTsKKyAgICBpZiAoaW1t
ZWRpYXRlbHkpCisgICAgICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5z
Y2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOworICAgIGVsc2UKKyAgICAgICAg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJl
bGVhc2UoKSk7Cit9CisKK2NsYXNzIERlbGl2ZXJQZW5kaW5nQ2FsbGJhY2tUYXNrIDogcHVibGlj
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPERlbGl2ZXJQZW5kaW5nQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlbGl2ZXJQZW5kaW5nQ2FsbGJhY2tUYXNrKHRyYW5zYWN0aW9uKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAg
IHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBEZWxpdmVyUGVuZGluZ0NhbGxiYWNrVGFzayhQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247Cit9OworCit2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uQ2Fs
bGJhY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soRGVsaXZlclBlbmRpbmdDYWxsYmFja1Rhc2s6OmNyZWF0ZSh0
cmFuc2FjdGlvbikpOworfQorCitWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRh
YmxlTmFtZXMoKQoreworICAgIGRpc2FibGVBdXRob3JpemVyKCk7CisKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJp
ZXZlIGxpc3Qgb2YgdGFibGVzIGZvciBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICBlbmFibGVBdXRob3JpemVyKCk7CisgICAgICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgIH0KKworICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxl
TmFtZXM7CisgICAgaW50IHJlc3VsdDsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCkpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBpZiAobmFtZSAhPSBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUoKSkKKyAgICAgICAgICAgIHRhYmxlTmFtZXMuYXBwZW5kKG5hbWUpOworICAgIH0KKwor
ICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9u
ZSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yIGdldHRpbmcgdGFibGVzIGZvciBkYXRhYmFz
ZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGFibGVOYW1lczsKK30K
KworU1FMVHJhbnNhY3Rpb25DbGllbnQqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50
cmFuc2FjdGlvbkNsaWVudCgpOworfQorCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRh
YmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGFi
YXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKK3sKKyAgICAvLyBG
SVhNRTogTm90IHVzaW5nIGlzb2xhdGVkQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNp
bmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKKyAgICAvLyBpbiBkZWFsaW5nIHdpdGggdGhl
bS4gSG93ZXZlciwgaWYgdGhlIGNvZGUgY2hhbmdlcywgdGhpcyBtYXkgbm90IGJlIHRydWUgYW55
bW9yZS4KKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyIHN5bmNocm9uaXplcjsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFz
ZVRocmVhZCgpIHx8IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5h
dGlvblJlcXVlc3RlZCgmc3luY2hyb25pemVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgIE93blB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiB0YXNrID0gRGF0YWJhc2VUYWJsZU5h
bWVzVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIsIHJlc3VsdCk7CisgICAgZGF0YWJh
c2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNr
LnJlbGVhc2UoKSk7CisgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1
cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNDb250ZXh0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0
eU9yaWdpbi5nZXQoKTsKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKQorICAgICAgICByZXR1cm4gbV9k
YXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpOworICAgIHJldHVybiAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFi
YXNlX2gKKyNkZWZpbmUgRGF0YWJhc2VfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKwor
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3MgU1FMVHJh
bnNhY3Rpb247CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNh
Y3Rpb25DbGllbnQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOworY2xhc3MgU1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25XcmFwcGVyOwor
Y2xhc3MgVm9pZENhbGxiYWNrOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFz
cyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5EYXRhYmFzZSgpOworCisgICAgLy8gRGlyZWN0IHN1cHBvcnQgZm9yIHRoZSBET00gQVBJ
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFz
c1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
U3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3Ry
aW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaz4sCisgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjayk7CisgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4s
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spOworICAgIHZvaWQgcmVh
ZFRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjayk7CisKKyAgICAvLyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAorICAg
IFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKKworICAgIHZpcnR1YWwgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVs
ZXRlZEFuZENsb3NlKCk7CisgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxl
dGVkOyB9CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRp
YXRlbHkoKTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKKworICAgIHZvaWQg
c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CisgICAgdm9pZCBz
Y2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkg
PSBmYWxzZSk7CisKKyAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQo
KSBjb25zdDsKKyAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgRGF0YWJhc2VPcGVuVGFzazsK
KyAgICBjbGFzcyBEYXRhYmFzZUNsb3NlVGFzazsKKyAgICBjbGFzcyBEYXRhYmFzZVRyYW5zYWN0
aW9uVGFzazsKKyAgICBjbGFzcyBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOworCisgICAgRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICB2b2lkIHJ1blRyYW5zYWN0
aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CisKKyAgICBib29sIG9wZW5BbmRWZXJpZnlWZXJz
aW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcm
IGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJv
b2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSk7CisKKyAgICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwor
ICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbigpOworCisgICAgVmVjdG9yPFN0cmluZz4gcGVy
Zm9ybUdldFRhYmxlTmFtZXMoKTsKKworICAgIHN0YXRpYyB2b2lkIGRlbGl2ZXJQZW5kaW5nQ2Fs
bGJhY2sodm9pZCopOworCisgICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IG1fdHJh
bnNhY3Rpb25RdWV1ZTsKKyAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4Owor
ICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgYm9vbCBtX2lzVHJhbnNhY3Rp
b25RdWV1ZUVuYWJsZWQ7CisKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fZGF0YWJhc2VU
aHJlYWRTZWN1cml0eU9yaWdpbjsKKworICAgIGJvb2wgbV9kZWxldGVkOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2Vu
ZGlmIC8vIERhdGFiYXNlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9u
YWw9U1FMX0RBVEFCQVNFLAorICAgICAgICBPbWl0Q29uc3RydWN0b3IsCisgICAgICAgIEpTTm9T
dGF0aWNUYWJsZXMKKyAgICBdIERhdGFiYXNlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyB2ZXJzaW9uOworICAgICAgICB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3Ry
aW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdWZXJzaW9uLCBpbiBbQ2FsbGJhY2ssIE9w
dGlvbmFsXSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9w
dGlvbmFsXSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gW0Nh
bGxiYWNrLCBPcHRpb25hbF0gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAg
IHZvaWQgdHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNh
bGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2sgZXJyb3JDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gVm9pZENhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgIHZvaWQgcmVhZFRyYW5zYWN0aW9uKGluIFtDYWxsYmFj
a10gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25h
bF0gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFtDYWxsYmFj
aywgT3B0aW9uYWxdIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOworICAgIH07CisKK30K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuaWRsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUK
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNl
QXV0aG9yaXplci5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0
YWJhc2VBdXRob3JpemVyPiBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFi
YXNlQXV0aG9yaXplcihkYXRhYmFzZUluZm9UYWJsZU5hbWUpKTsKK30KKworRGF0YWJhc2VBdXRo
b3JpemVyOjpEYXRhYmFzZUF1dGhvcml6ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUpCisgICAgOiBtX3NlY3VyaXR5RW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkKK3sKKyAgICByZXNldCgpOworICAg
IGFkZFdoaXRlbGlzdGVkRnVuY3Rpb25zKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VBdXRob3JpemVy
OjpyZXNldCgpCit7CisgICAgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0ID0gZmFsc2U7CisgICAgbV9s
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gZmFsc2U7CisgICAgbV9wZXJtaXNzaW9ucyA9IFJl
YWRXcml0ZU1hc2s7Cit9CisKK3ZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpyZXNldERlbGV0ZXMo
KQoreworICAgIG1faGFkRGVsZXRlcyA9IGZhbHNlOworfQorCit2b2lkIERhdGFiYXNlQXV0aG9y
aXplcjo6YWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKQoreworICAgIC8vIFNRTGl0ZSBmdW5jdGlv
bnMgdXNlZCB0byBoZWxwIGltcGxlbWVudCBzb21lIG9wZXJhdGlvbnMKKyAgICAvLyBBTFRFUiBU
QUJMRSBoZWxwZXJzCisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInNxbGl0ZV9yZW5h
bWVfdGFibGUiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic3FsaXRlX3JlbmFt
ZV90cmlnZ2VyIik7CisgICAgLy8gR0xPQiBoZWxwZXJzCisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0
aW9ucy5hZGQoImdsb2IiKTsKKworICAgIC8vIFNRTGl0ZSBjb3JlIGZ1bmN0aW9ucworICAgIG1f
d2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJhYnMiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rp
b25zLmFkZCgiY2hhbmdlcyIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJjb2Fs
ZXNjZSIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJnbG9iIik7CisgICAgbV93
aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImlmbnVsbCIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJoZXgiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibGFzdF9p
bnNlcnRfcm93aWQiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibGVuZ3RoIik7
CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImxpa2UiKTsKKyAgICBtX3doaXRlbGlz
dGVkRnVuY3Rpb25zLmFkZCgibG93ZXIiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFk
ZCgibHRyaW0iKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibWF4Iik7CisgICAg
bV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoIm1pbiIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJudWxsaWYiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgicXVv
dGUiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgicmVwbGFjZSIpOworICAgIG1f
d2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJyb3VuZCIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJydHJpbSIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzb3Vu
ZGV4Iik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInNxbGl0ZV9zb3VyY2VfaWQi
KTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic3FsaXRlX3ZlcnNpb24iKTsKKyAg
ICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic3Vic3RyIik7CisgICAgbV93aGl0ZWxpc3Rl
ZEZ1bmN0aW9ucy5hZGQoInRvdGFsX2NoYW5nZXMiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rp
b25zLmFkZCgidHJpbSIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJ0eXBlb2Yi
KTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgidXBwZXIiKTsKKyAgICBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zLmFkZCgiemVyb2Jsb2IiKTsKKworICAgIC8vIFNRTGl0ZSBkYXRlIGFu
ZCB0aW1lIGZ1bmN0aW9ucworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJkYXRlIik7
CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInRpbWUiKTsKKyAgICBtX3doaXRlbGlz
dGVkRnVuY3Rpb25zLmFkZCgiZGF0ZXRpbWUiKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25z
LmFkZCgianVsaWFuZGF5Iik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInN0cmZ0
aW1lIik7CisKKyAgICAvLyBTUUxpdGUgYWdncmVnYXRlIGZ1bmN0aW9ucworICAgIC8vIG1heCgp
IGFuZCBtaW4oKSBhcmUgYWxyZWFkeSBpbiB0aGUgbGlzdAorICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJhdmciKTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiY291bnQi
KTsKKyAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiZ3JvdXBfY29uY2F0Iik7CisgICAg
bV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInN1bSIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5j
dGlvbnMuYWRkKCJ0b3RhbCIpOworCisgICAgLy8gU1FMaXRlIEZUUyBmdW5jdGlvbnMKKyAgICBt
X3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibWF0Y2giKTsKKyAgICBtX3doaXRlbGlzdGVkRnVu
Y3Rpb25zLmFkZCgic25pcHBldCIpOworICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJv
ZmZzZXRzIik7CisgICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoIm9wdGltaXplIik7CisK
KyAgICAvLyBTUUxpdGUgSUNVIGZ1bmN0aW9ucworICAgIC8vIGxpa2UoKSwgbG93ZXIoKSBhbmQg
dXBwZXIoKSBhcmUgYWxyZWFkeSBpbiB0aGUgbGlzdAorICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlv
bnMuYWRkKCJyZWdleHAiKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGFi
bGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRh
YmFzZSA9IHRydWU7CisgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7
Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZShjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSkKK3sKKyAgICAvLyBTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgcmVzdWx0
cyBpbiBhIFVQREFURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4g
cmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBh
cworICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIGluIHRoZXNl
IGNhc2VzCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVu
eTsKKworICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQorCitp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
Cit7CisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
KworICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwor
fQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQoreworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVEFCTEUgcmVzdWx0cyBpbiBh
IERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1v
bmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcworICAg
IC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBpbiB0aGVzZSBjYXNlcwor
ICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAg
ICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKwor
aW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBbHRlclRhYmxlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2Ug
PSB0cnVlOworICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQor
CitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0g
dHJ1ZTsKKyAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKwor
aW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcEluZGV4KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9JTkRF
WCBzaG91bGQgcmVzdWx0IGluIGEgVVBEQVRFIG9yIElOU0VSVCBvcGVyYXRpb24sCisgICAgLy8g
d2hpY2ggaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRl
IGJyb3dzaW5nLAorICAgIC8vIHNvIHdlIG1pZ2h0IGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NS
RUFURV9URU1QX0lOREVYIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wSW5kZXgo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgaWYgKCFhbGxv
d1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIHJldHVybiB1cGRh
dGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworfQorCitpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpkcm9wVGVtcEluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQoreworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBp
biBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzCisgICAgLy8gbm90IGFsbG93ZWQgaW4gcmVh
ZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodAorICAg
IC8vIGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9JTkRFWCBpbiB0aGVzZSBjYXNl
cworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisK
KyAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30K
KworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVHJpZ2dlcihjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAg
ICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNl
ID0gdHJ1ZTsKKyAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30K
KworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgLy8gU1FMSVRFX0NSRUFURV9URU1Q
X1RSSUdHRVIgcmVzdWx0cyBpbiBhIElOU0VSVCBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAorICAg
IC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5n
LCBzbyB3ZSBtaWdodCBhcworICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1Q
X1RSSUdHRVIgaW4gdGhlc2UgY2FzZXMKKyAgICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0
ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICByZXR1cm4gdXBkYXRlRGVs
ZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQoreworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiByZXN1bHRzIGluIGEgREVM
RVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkg
dHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCisgICAgLy8g
d2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgaW4gdGhlc2UgY2FzZXMKKyAg
ICBpZiAoIWFsbG93V3JpdGUoKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAg
cmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2lu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcoY29uc3QgU3RyaW5nJikKK3sKKyAgICBy
ZXR1cm4gKCFhbGxvd1dyaXRlKCkgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisK
K2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCit7
CisgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIFVQREFURSBvcGVy
YXRpb24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0
aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcworICAgIC8vIHdlbGwgZGlz
YWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKKyAgICByZXR1cm4g
KCFhbGxvd1dyaXRlKCkgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisKK2ludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KGNvbnN0IFN0cmluZyYpCit7CisgICAgaWYgKCFh
bGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIG1faGFkRGVs
ZXRlcyA9IHRydWU7CisgICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKK30KKworaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gU1FMSVRF
X0RST1BfVEVNUF9WSUVXIHJlc3VsdHMgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3aGljaCBpcyBu
b3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBi
cm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9EUk9Q
X1RFTVBfVklFVyBpbiB0aGVzZSBjYXNlcworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOworICAgIHJl
dHVybiBTUUxBdXRoQWxsb3c7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZU
YWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQor
eworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisK
KyAgICAvLyBBbGxvdyBvbmx5IHRoZSBGVFMzIGV4dGVuc2lvbgorICAgIGlmICghZXF1YWxJZ25v
cmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55
OworCisgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKKyAgICByZXR1cm4g
ZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBt
b2R1bGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAgICByZXR1cm4gU1FM
QXV0aERlbnk7CisKKyAgICAvLyBBbGxvdyBvbmx5IHRoZSBGVFMzIGV4dGVuc2lvbgorICAgIGlm
ICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKKyAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OworCisgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGlmICghYWxsb3dXcml0ZSgpKQorICAgICAg
ICByZXR1cm4gU1FMQXV0aERlbnk7CisKKyAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25U
YWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dJ
bnNlcnQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgaWYgKCFhbGxvd1dyaXRlKCkp
CisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIG1fbGFzdEFjdGlvbkNoYW5nZWRE
YXRhYmFzZSA9IHRydWU7CisgICAgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0ID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6YWxsb3dVcGRhdGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0
cmluZyYpCit7CisgICAgaWYgKCFhbGxvd1dyaXRlKCkpCisgICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKKworICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CisgICAgcmV0
dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93VHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBtX3NlY3VyaXR5RW5h
YmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93OworfQorCitpbnQgRGF0YWJhc2VBdXRo
b3JpemVyOjphbGxvd1JlYWQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYp
Cit7CisgICAgaWYgKG1fcGVybWlzc2lvbnMgJiBOb0FjY2Vzc01hc2sgJiYgbV9zZWN1cml0eUVu
YWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKyAgICAKKyAgICByZXR1cm4gZGVu
eUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6YWxsb3dSZWluZGV4KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuICghYWxsb3dXcml0
ZSgpID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQgRGF0YWJhc2VBdXRo
b3JpemVyOjphbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgcmV0
dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cit9CisKK2ludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93UHJhZ21hKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7Cisg
ICAgcmV0dXJuIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3c7
Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QXR0YWNoKGNvbnN0IFN0cmluZyYp
Cit7CisgICAgcmV0dXJuIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRo
QWxsb3c7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGV0YWNoKGNvbnN0IFN0
cmluZyYpCit7CisgICAgcmV0dXJuIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBT
UUxBdXRoQWxsb3c7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RnVuY3Rpb24o
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKG1fc2VjdXJpdHlFbmFibGVk
ICYmICFtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpCisgICAg
ICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIHJldHVybiBTUUxBdXRoQWxsb3c7Cit9CisK
K3ZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpkaXNhYmxlKCkKK3sKKyAgICBtX3NlY3VyaXR5RW5h
YmxlZCA9IGZhbHNlOworfQorCit2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6ZW5hYmxlKCkKK3sK
KyAgICBtX3NlY3VyaXR5RW5hYmxlZCA9IHRydWU7Cit9CisKK2Jvb2wgRGF0YWJhc2VBdXRob3Jp
emVyOjphbGxvd1dyaXRlKCkKK3sKKyAgICByZXR1cm4gIShtX3NlY3VyaXR5RW5hYmxlZCAmJiAo
bV9wZXJtaXNzaW9ucyAmIFJlYWRPbmx5TWFzayB8fCBtX3Blcm1pc3Npb25zICYgTm9BY2Nlc3NN
YXNrKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpzZXRSZWFkT25seSgpCit7Cisg
ICAgbV9wZXJtaXNzaW9ucyB8PSBSZWFkT25seU1hc2s7Cit9CisgICAKK3ZvaWQgRGF0YWJhc2VB
dXRob3JpemVyOjpzZXRQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpCit7CisgICAgbV9wZXJt
aXNzaW9ucyA9IHBlcm1pc3Npb25zOworfQorCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55
QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1cm4gU1FMQXV0aEFsbG93OworCisg
ICAgLy8gU2FkbHksIG5vcm1hbCBjcmVhdGVzIGFuZCBkcm9wcyBlbmQgdXAgYWZmZWN0aW5nIHNx
bGl0ZV9tYXN0ZXIgaW4gYW4gYXV0aG9yaXplciBjYWxsYmFjaywgc28KKyAgICAvLyBpdCB3aWxs
IGJlIHRvdWdoIHRvIGVuZm9yY2UgYWxsIG9mIHRoZSBmb2xsb3dpbmcgcG9saWNpZXMKKyAgICAv
L2lmIChlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsICJzcWxpdGVfbWFzdGVyIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCAic3FsaXRlX3RlbXBfbWFzdGVyIikgfHwKKyAgICAv
LyAgICBlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsICJzcWxpdGVfc2VxdWVuY2UiKSB8fCBl
cXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5h
bWUoKSkpCisgICAgLy8gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lKSkKKyAgICAg
ICAgcmV0dXJuIFNRTEF1dGhEZW55OworCisgICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKK30KKwor
aW50IERhdGFiYXNlQXV0aG9yaXplcjo6dXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgaW50IGFsbG93ID0gZGVueUJhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKKyAgICBpZiAoYWxsb3cpCisgICAgICAgIG1faGFkRGVsZXRlcyA9
IHRydWU7CisgICAgcmV0dXJuIGFsbG93OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQXV0aG9yaXplci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBEYXRhYmFzZUF1dGhvcml6ZXJfaAorI2RlZmluZSBE
YXRhYmFzZUF1dGhvcml6ZXJfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2V4dGVybiBjb25zdCBpbnQgU1FMQXV0aEFs
bG93OworZXh0ZXJuIGNvbnN0IGludCBTUUxBdXRoSWdub3JlOworZXh0ZXJuIGNvbnN0IGludCBT
UUxBdXRoRGVueTsKKworY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPERhdGFiYXNlQXV0aG9yaXplcj4geworcHVibGljOgorCisgICAgZW51bSBQ
ZXJtaXNzaW9ucyB7CisgICAgICAgIFJlYWRXcml0ZU1hc2sgPSAwLAorICAgICAgICBSZWFkT25s
eU1hc2sgPSAxIDw8IDEsCisgICAgICAgIE5vQWNjZXNzTWFzayA9IDEgPDwgMgorICAgIH07CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CisKKyAgICBpbnQgY3JlYXRlVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpOworICAgIGludCBjcmVhdGVUZW1wVGFibGUoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpOworICAgIGludCBkcm9wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5h
bWUpOworICAgIGludCBkcm9wVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKyAg
ICBpbnQgYWxsb3dBbHRlclRhYmxlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSk7CisKKyAgICBpbnQgY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKyAgICBpbnQgY3JlYXRlVGVtcElu
ZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Cisg
ICAgaW50IGRyb3BJbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUpOworICAgIGludCBkcm9wVGVtcEluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
LCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CisKKyAgICBpbnQgY3JlYXRlVHJpZ2dlcihjb25z
dCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CisgICAgaW50
IGNyZWF0ZVRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmlu
ZyYgdGFibGVOYW1lKTsKKyAgICBpbnQgZHJvcFRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2Vy
TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOworICAgIGludCBkcm9wVGVtcFRyaWdnZXIo
Y29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOworCisg
ICAgaW50IGNyZWF0ZVZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGNyZWF0
ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpOworICAgIGludCBkcm9wVmlldyhjb25z
dCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAgICBpbnQgZHJvcFRlbXBWaWV3KGNvbnN0IFN0cmluZyYg
dmlld05hbWUpOworCisgICAgaW50IGNyZWF0ZVZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKTsKKyAgICBpbnQgZHJvcFZUYWJsZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKTsKKworICAgIGludCBh
bGxvd0RlbGV0ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CisgICAgaW50IGFsbG93SW5zZXJ0
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKKyAgICBpbnQgYWxsb3dVcGRhdGUoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29sdW1uTmFtZSk7CisgICAgaW50IGFsbG93
VHJhbnNhY3Rpb24oKTsKKworICAgIGludCBhbGxvd1NlbGVjdCgpIHsgcmV0dXJuIFNRTEF1dGhB
bGxvdzsgfQorICAgIGludCBhbGxvd1JlYWQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgY29sdW1uTmFtZSk7CisKKyAgICBpbnQgYWxsb3dSZWluZGV4KGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lKTsKKyAgICBpbnQgYWxsb3dBbmFseXplKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKTsKKyAgICBpbnQgYWxsb3dGdW5jdGlvbihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSk7
CisgICAgaW50IGFsbG93UHJhZ21hKGNvbnN0IFN0cmluZyYgcHJhZ21hTmFtZSwgY29uc3QgU3Ry
aW5nJiBmaXJzdEFyZ3VtZW50KTsKKworICAgIGludCBhbGxvd0F0dGFjaChjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKTsKKyAgICBpbnQgYWxsb3dEZXRhY2goY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5h
bWUpOworCisgICAgdm9pZCBkaXNhYmxlKCk7CisgICAgdm9pZCBlbmFibGUoKTsKKyAgICB2b2lk
IHNldFJlYWRPbmx5KCk7CisgICAgdm9pZCBzZXRQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMp
OworCisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgcmVzZXREZWxldGVzKCk7CisKKyAgICBi
b29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RBY3Rpb25XYXNJ
bnNlcnQ7IH0KKyAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2U7IH0KKyAgICBib29sIGhhZERlbGV0ZXMo
KSBjb25zdCB7IHJldHVybiBtX2hhZERlbGV0ZXM7IH0KKworcHJpdmF0ZToKKyAgICBEYXRhYmFz
ZUF1dGhvcml6ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpOworICAgIHZv
aWQgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKKyAgICBpbnQgZGVueUJhc2VkT25UYWJsZU5h
bWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgaW50IHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFi
bGVOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgYWxsb3dXcml0ZSgpOworCisgICAgaW50
IG1fcGVybWlzc2lvbnM7CisgICAgYm9vbCBtX3NlY3VyaXR5RW5hYmxlZCA6IDE7CisgICAgYm9v
bCBtX2xhc3RBY3Rpb25XYXNJbnNlcnQgOiAxOworICAgIGJvb2wgbV9sYXN0QWN0aW9uQ2hhbmdl
ZERhdGFiYXNlIDogMTsKKyAgICBib29sIG1faGFkRGVsZXRlcyA6IDE7CisKKyAgICBjb25zdCBT
dHJpbmcgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWU7CisKKyAgICBIYXNoU2V0PFN0cmluZywgQ2Fz
ZUZvbGRpbmdIYXNoPiBtX3doaXRlbGlzdGVkRnVuY3Rpb25zOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGF0YWJhc2VBdXRob3JpemVyX2gKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRo
b3JpemVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VDYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERhdGFiYXNlQ2FsbGJhY2tfaAorI2RlZmluZSBEYXRhYmFzZUNhbGxiYWNrX2gKKwor
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZTsKK2NsYXNz
IERhdGFiYXNlU3luYzsKKworY2xhc3MgRGF0YWJhc2VDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxEYXRhYmFzZUNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
RGF0YWJhc2VDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChEYXRh
YmFzZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoRGF0YWJhc2VTeW5jKikg
PSAwOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIERhdGFiYXNlQ2FsbGJhY2tfaAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUNhbGxiYWNrLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VD
YWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5pZGwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAorICAgICAgICBDYWxsYmFjaworICAgIF0gRGF0
YWJhc2VDYWxsYmFjayB7CisgICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gRGF0YWJhc2Ug
ZGF0YWJhc2UpOworICAgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIERhdGFiYXNlU3luYyBk
YXRhYmFzZSk7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY2hlbWVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgRGF0YWJhc2VDb250ZXh0KiBleGlz
dGluZ0RhdGFiYXNlQ29udGV4dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Pjo6ZnJvbShjb250ZXh0LCAiRGF0YWJhc2VDb250ZXh0Iikp
OworfQorCitEYXRhYmFzZUNvbnRleHQ6OkRhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQp
CisgICAgLCBtX2hhc09wZW5EYXRhYmFzZXMoZmFsc2UpCit7Cit9CisKK0RhdGFiYXNlQ29udGV4
dDo6fkRhdGFiYXNlQ29udGV4dCgpCit7CisgICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQpIHsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpOwor
ICAgICAgICBtX2RhdGFiYXNlVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK0RhdGFiYXNlQ29udGV4
dCogRGF0YWJhc2VDb250ZXh0Ojpmcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgRGF0YWJhc2VDb250ZXh0KiBzdXBwbGVtZW50ID0gZXhpc3RpbmdEYXRhYmFzZUNv
bnRleHRGcm9tKGNvbnRleHQpOworICAgIGlmICghc3VwcGxlbWVudCkgeworICAgICAgICBzdXBw
bGVtZW50ID0gbmV3IERhdGFiYXNlQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgcHJvdmlkZVRv
KGNvbnRleHQsICJEYXRhYmFzZUNvbnRleHQiLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAg
ICAgIEFTU0VSVChzdXBwbGVtZW50ID09IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250
ZXh0KSk7CisgICAgfQorICAgIHJldHVybiBzdXBwbGVtZW50OworfQorCitEYXRhYmFzZVRocmVh
ZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzZVRocmVhZCgpCit7CisgICAgaWYgKCFtX2RhdGFi
YXNlVGhyZWFkICYmICFtX2hhc09wZW5EYXRhYmFzZXMpIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRo
ZSBkYXRhYmFzZSB0aHJlYWQgb24gZmlyc3QgcmVxdWVzdCAtIGJ1dCBub3QgaWYgYXQgbGVhc3Qg
b25lIGRhdGFiYXNlIHdhcyBhbHJlYWR5IG9wZW5lZCwKKyAgICAgICAgLy8gYmVjYXVzZSBpbiB0
aGF0IGNhc2Ugd2UgYWxyZWFkeSBoYWQgYSBkYXRhYmFzZSB0aHJlYWQgYW5kIHRlcm1pbmF0ZWQg
aXQgYW5kIHNob3VsZCBub3QgY3JlYXRlIGFub3RoZXIuCisgICAgICAgIG1fZGF0YWJhc2VUaHJl
YWQgPSBEYXRhYmFzZVRocmVhZDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZVRo
cmVhZC0+c3RhcnQoKSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSAwOworICAgIH0K
KworICAgIHJldHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOworfQorCitib29sIERhdGFiYXNl
Q29udGV4dDo6aGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQoreworICAgIC8vIFdlIGRvbid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJlIGFsbG9j
YXRlZCBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgorICAgIERhdGFiYXNlQ29udGV4dCog
ZGF0YWJhc2VDb250ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQpOwor
ICAgIGlmICghZGF0YWJhc2VDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGRhdGFiYXNlQ29udGV4dC0+bV9oYXNPcGVuRGF0YWJhc2VzOworfQorCit2b2lkIERhdGFi
YXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jKQoreworICAgIC8vIFdlIGRv
bid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNh
dXNlCisgICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBo
YXZlIG9uZSBhbHJlYWR5LgorICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0ID0g
ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQpOworCisgICAgaWYgKGRhdGFiYXNl
Q29udGV4dCAmJiBkYXRhYmFzZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQpCisgICAgICAgIGRh
dGFiYXNlQ29udGV4dC0+bV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9uKGNsZWFu
dXBTeW5jKTsKKyAgICBlbHNlIGlmIChjbGVhbnVwU3luYykKKyAgICAgICAgY2xlYW51cFN5bmMt
PnRhc2tDb21wbGV0ZWQoKTsKK30KKworYm9vbCBEYXRhYmFzZUNvbnRleHQ6OmFsbG93RGF0YWJh
c2VBY2Nlc3MoKSBjb25zdAoreworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIGlmICghZG9jdW1l
bnQtPnBhZ2UoKSB8fCAoZG9jdW1lbnQtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCgpICYmICFTY2hlbWVSZWdpc3RyeTo6YWxsb3dzRGF0YWJhc2VBY2Nlc3NJblBy
aXZhdGVCcm93c2luZyhkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSkpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwor
ICAgIC8vIGFsbG93RGF0YWJhc2VBY2Nlc3MgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3Igd29y
a2Vycy4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEYXRhYmFzZUNvbnRleHQ6OmRhdGFi
YXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAg
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5leGNlZWRlZERhdGFiYXNlUXVvdGEoZG9jdW1lbnQt
PmZyYW1lKCksIG5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyNpZiAhUExBVEZPUk0o
Q0hST01JVU0pCisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgYSByZWFsIGltcGxlbWVudGF0aW9u
OyB0aGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGZvciB0ZXN0aW5nLgorICAgIGNvbnN0IHVu
c2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAgRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5zZWN1cml0eU9yaWdpbigpLCBkZWZhdWx0UXVvdGEpOworI2VuZGlmCit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250
ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisg
Ki8KKworI2lmbmRlZiBEYXRhYmFzZUNvbnRleHRfaAorI2RlZmluZSBEYXRhYmFzZUNvbnRleHRf
aAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXI7CitjbGFzcyBEYXRhYmFzZVRocmVhZDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIERhdGFiYXNlQ29udGV4dCA6IHB1YmxpYyBTdXBw
bGVtZW50PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5E
YXRhYmFzZUNvbnRleHQoKTsKKyAgICBzdGF0aWMgRGF0YWJhc2VDb250ZXh0KiBmcm9tKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVh
ZCgpOworCisgICAgdm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFz
ZXMgPSB0cnVlOyB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIC8vIFdoZW4gdGhlIGRhdGFiYXNlIGNsZWFudXAgaXMg
ZG9uZSwgY2xlYW51cFN5bmMgd2lsbCBiZSBzaWduYWxsZWQuCisgICAgc3RhdGljIHZvaWQgc3Rv
cERhdGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKik7CisKKyAgICBib29sIGFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdDsKKyAgICB2b2lk
IGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmIG5hbWUpOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IERhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisK
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cisg
ICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX2RhdGFiYXNlVGhyZWFkOworICAgIGJvb2wgbV9o
YXNPcGVuRGF0YWJhc2VzOyAvLyBUaGlzIG5ldmVyIGNoYW5nZXMgYmFjayB0byBmYWxzZSwgZXZl
biBhZnRlciB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIGNsb3NlZC4KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAv
LyBEYXRhYmFzZUNvbnRleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZURldGFpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlRGV0YWlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZURldGFpbHMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRhYmFzZURldGFpbHNfaAorI2Rl
ZmluZSBEYXRhYmFzZURldGFpbHNfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlRGV0YWlscyB7CitwdWJsaWM6Cisg
ICAgRGF0YWJhc2VEZXRhaWxzKCkKKyAgICAgICAgOiBtX2V4cGVjdGVkVXNhZ2UoMCkKKyAgICAg
ICAgLCBtX2N1cnJlbnRVc2FnZSgwKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1f
dGhyZWFkID0gY3VycmVudFRocmVhZCgpOworI2VuZGlmCisgICAgfQorCisgICAgRGF0YWJhc2VE
ZXRhaWxzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25n
IGN1cnJlbnRVc2FnZSkKKyAgICAgICAgOiBtX25hbWUoZGF0YWJhc2VOYW1lKQorICAgICAgICAs
IG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUpCisgICAgICAgICwgbV9leHBlY3RlZFVzYWdlKGV4
cGVjdGVkVXNhZ2UpCisgICAgICAgICwgbV9jdXJyZW50VXNhZ2UoY3VycmVudFVzYWdlKQorICAg
IHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fdGhyZWFkID0gY3VycmVudFRocmVhZCgpOwor
I2VuZGlmCisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheU5hbWU7IH0KKyAgICB1aW50NjRfdCBleHBlY3RlZFVzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBlY3RlZFVzYWdlOyB9CisgICAgdWludDY0X3QgY3VycmVudFVzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50VXNhZ2U7IH0KKyNpZm5kZWYgTkRFQlVHCisgICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZDsgfQorI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsK
KyAgICB1aW50NjRfdCBtX2V4cGVjdGVkVXNhZ2U7CisgICAgdWludDY0X3QgbV9jdXJyZW50VXNh
Z2U7CisjaWZuZGVmIE5ERUJVRworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQ7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBE
YXRhYmFzZURldGFpbHNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZURldGFpbHMuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VTeW5jLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJh
c2VDYWxsYmFjay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvblN5bmMuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5j
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBj
cmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoY29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOworCisgICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Ig
b3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRh
dGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+
IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1lLCBleHBl
Y3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisKKyAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOworICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCFj
cmVhdGlvbkNhbGxiYWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgeworICAgICAgICBkYXRhYmFzZS0+
bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFi
YXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSk7CisKKyAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25D
YWxsYmFjay5nZXQoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRoZSBj
cmVhdGlvbiBjYWxsYmFjayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKKyAg
ICAgICAgY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YWJhc2UuZ2V0KCkpOworICAg
IH0KKworICAgIHJldHVybiBkYXRhYmFzZTsKK30KKworRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5
bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkK
KyAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgU3luY0RhdGFiYXNlKQoreworfQorCitEYXRhYmFz
ZVN5bmM6On5EYXRhYmFzZVN5bmMoKQoreworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKworICAgIGlmIChvcGVuZWQoKSkgeworICAgICAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7Cisg
ICAgICAgIGNsb3NlRGF0YWJhc2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpj
aGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdW
ZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjaGFuZ2VWZXJz
aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKworICAgIGlmIChzcWxpdGVEYXRh
YmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIHJlcG9ydENoYW5nZVZl
cnNpb25SZXN1bHQoMSwgU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIDApOworICAgICAgICBz
ZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY2hhbmdlVmVyc2lvbiBmcm9tIHdpdGhpbiBh
IHRyYW5zYWN0aW9uIik7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
PiB0cmFuc2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNoYW5nZVZl
cnNpb25DYWxsYmFjaywgZmFsc2UpOworICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+YmVnaW4o
KSkpIHsKKyAgICAgICAgQVNTRVJUKCFsYXN0RXJyb3JNZXNzYWdlKCkuaXNFbXB0eSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAgIGlm
ICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgeworICAgICAgICByZXBv
cnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIHNxbGl0
ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOworICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdlKCJ1
bmFibGUgdG8gcmVhZCB0aGUgY3VycmVudCB2ZXJzaW9uIiwgc3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIGVjID0g
U1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhY3R1YWxWZXJzaW9uICE9IG9sZFZlcnNpb24pIHsKKyAgICAgICAgcmVwb3J0Q2hhbmdl
VmVyc2lvblJlc3VsdCgzLCBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSLCAwKTsKKyAgICAgICAg
c2V0TGFzdEVycm9yTWVzc2FnZSgiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBhbmQg
YG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOworICAgICAgICBlYyA9IFNRTEV4
Y2VwdGlvbjo6VkVSU0lPTl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
KGVjID0gdHJhbnNhY3Rpb24tPmV4ZWN1dGUoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFsYXN0RXJy
b3JNZXNzYWdlKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghc2V0VmVyc2lvbkluRGF0YWJhc2UobmV3VmVyc2lvbikpIHsKKyAgICAgICAgcmVwb3J0Q2hh
bmdlVmVyc2lvblJlc3VsdCg0LCBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSLCBzcWxpdGVEYXRh
YmFzZSgpLmxhc3RFcnJvcigpKTsKKyAgICAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxl
IHRvIHNldCB0aGUgbmV3IHZlcnNpb24iLCBzcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBz
cWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRp
b246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKChlYyA9
IHRyYW5zYWN0aW9uLT5jb21taXQoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFsYXN0RXJyb3JNZXNz
YWdlKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0Q2FjaGVkVmVyc2lvbihvbGRWZXJzaW9uKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQo
MCwgLTEsIDApOyAvLyBPSworCisgICAgc2V0RXhwZWN0ZWRWZXJzaW9uKG5ld1ZlcnNpb24pOwor
ICAgIHNldExhc3RFcnJvck1lc3NhZ2UoIiIpOworfQorCit2b2lkIERhdGFiYXNlU3luYzo6dHJh
bnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ss
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNrLCBmYWxz
ZSwgZWMpOworfQorCit2b2lkIERhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgdHJ1ZSwgZWMpOworfQorCit2b2lk
IERhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KTsKKworICAgIGlmIChzcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7
CisgICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBzdGFydCBhIHRyYW5zYWN0
aW9uIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rpb24iKTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRp
b246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxT
UUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb25TeW5jOjpjcmVh
dGUodGhpcywgY2FsbGJhY2ssIHJlYWRPbmx5KTsKKyAgICBpZiAoKGVjID0gdHJhbnNhY3Rpb24t
PmJlZ2luKCkpIHx8IChlYyA9IHRyYW5zYWN0aW9uLT5leGVjdXRlKCkpIHx8IChlYyA9IHRyYW5z
YWN0aW9uLT5jb21taXQoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFsYXN0RXJyb3JNZXNzYWdlKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgfQorCisg
ICAgc2V0TGFzdEVycm9yTWVzc2FnZSgiIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjptYXJr
QXNEZWxldGVkQW5kQ2xvc2UoKQoreworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRvIHNvbWV0aGlu
ZyBzaW1pbGFyIHRvIGNsb3NlSW1tZWRpYXRlbHkoKSwgYnV0IGluIGEgc3luYyB3YXkKK30KKwor
Y2xhc3MgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrIDogcHVibGljIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKGRhdGFiYXNlKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KQorICAgIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+Y2xvc2VJbW1lZGlhdGVseSgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2soUGFz
c1JlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0
YWJhc2UpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IG1fZGF0YWJh
c2U7Cit9OworCit2b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSgpCit7CisgICAg
QVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworCisg
ICAgaWYgKCFvcGVuZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbG9nRXJyb3JNZXNzYWdl
KCJmb3JjaWJseSBjbG9zaW5nIGRhdGFiYXNlIik7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOworICAgIGNsb3NlRGF0YWJhc2UoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VTeW5jLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGF0YWJhc2VTeW5jX2gKKyNkZWZpbmUgRGF0YWJhc2VTeW5jX2gKKworI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lmbmRlZiBO
REVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5zYWN0aW9u
U3luYzsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOworY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCit0eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOworCisvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRl
ZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KK2NsYXNzIERh
dGFiYXNlU3luYyA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5EYXRhYmFzZVN5bmMoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3lu
Yz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdHJh
bnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCB2b2lkIG1h
cmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5
KCk7CisKKyAgICBjb25zdCBTdHJpbmcmIGxhc3RFcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RFcnJvck1lc3NhZ2U7IH0KKyAgICB2b2lkIHNldExhc3RFcnJvck1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSB7IG1fbGFzdEVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7IH0KKyAg
ICB2b2lkIHNldExhc3RFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0
ZUNvZGUpCisgICAgeworICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdlKFN0cmluZzo6Zm9ybWF0
KCIlcyAoJWQpIiwgbWVzc2FnZSwgc3FsaXRlQ29kZSkpOworICAgIH0KKyAgICB2b2lkIHNldExh
c3RFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0ZUNvZGUsIGNvbnN0
IGNoYXIqIHNxbGl0ZU1lc3NhZ2UpCisgICAgeworICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdl
KFN0cmluZzo6Zm9ybWF0KCIlcyAoJWQsICVzKSIsIG1lc3NhZ2UsIHNxbGl0ZUNvZGUsIHNxbGl0
ZU1lc3NhZ2UpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VTeW5jKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIFN0cmluZyBtX2xhc3RFcnJvck1lc3NhZ2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisj
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VTeW5jLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VTeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU3luYy5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgSlNO
b1N0YXRpY1RhYmxlcworICAgIF0gRGF0YWJhc2VTeW5jIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGxhc3RFcnJvck1lc3NhZ2U7CisgICAgICAgIHZvaWQgY2hhbmdlVmVyc2lvbihpbiBE
T01TdHJpbmcgb2xkVmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFtDYWxsYmFj
aywgT3B0aW9uYWxdIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrIGNhbGxiYWNrKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB0cmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrIGNhbGxiYWNrKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgdm9pZCByZWFkVHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjayBjYWxsYmFjaykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisKKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyOjpEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIoKQorICAgIDogbV90YXNrQ29tcGxldGVk
KGZhbHNlKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9u
KGZhbHNlKQorI2VuZGlmCit7Cit9CisKK3ZvaWQgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOjp3
YWl0Rm9yVGFza0NvbXBsZXRpb24oKQoreworICAgIG1fc3luY2hyb25vdXNNdXRleC5sb2NrKCk7
CisgICAgd2hpbGUgKCFtX3Rhc2tDb21wbGV0ZWQpCisgICAgICAgIG1fc3luY2hyb25vdXNDb25k
aXRpb24ud2FpdChtX3N5bmNocm9ub3VzTXV0ZXgpOworICAgIG1fc3luY2hyb25vdXNNdXRleC51
bmxvY2soKTsKK30KKwordm9pZCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI6OnRhc2tDb21wbGV0
ZWQoKQoreworICAgIG1fc3luY2hyb25vdXNNdXRleC5sb2NrKCk7CisgICAgbV90YXNrQ29tcGxl
dGVkID0gdHJ1ZTsKKyAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLnNpZ25hbCgpOworICAgIG1f
c3luY2hyb25vdXNNdXRleC51bmxvY2soKTsKK30KKworRGF0YWJhc2VUYXNrOjpEYXRhYmFzZVRh
c2soRGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9u
aXplcikKKyAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgLCBtX3N5bmNocm9uaXplcihz
eW5jaHJvbml6ZXIpCisjaWYgIUxPR19ESVNBQkxFRAorICAgICwgbV9jb21wbGV0ZShmYWxzZSkK
KyNlbmRpZgoreworfQorCitEYXRhYmFzZVRhc2s6On5EYXRhYmFzZVRhc2soKQoreworI2lmICFM
T0dfRElTQUJMRUQKKyAgICBBU1NFUlQobV9jb21wbGV0ZSB8fCAhbV9zeW5jaHJvbml6ZXIpOwor
I2VuZGlmCit9CisKK3ZvaWQgRGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzaygpCit7CisgICAgLy8g
RGF0YWJhc2UgdGFza3MgYXJlIG1lYW50IHRvIGJlIHVzZWQgb25seSBvbmNlLCBzbyBtYWtlIHN1
cmUgdGhpcyBvbmUgaGFzbid0IGJlZW4gcGVyZm9ybWVkIGJlZm9yZS4KKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsKKyNlbmRpZgorCisgICAgTE9HKFN0b3JhZ2VB
UEksICJQZXJmb3JtaW5nICVzICVwXG4iLCBkZWJ1Z1Rhc2tOYW1lKCksIHRoaXMpOworCisgICAg
bV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CisgICAgZG9QZXJmb3JtVGFzaygpOworCisg
ICAgaWYgKG1fc3luY2hyb25pemVyKQorICAgICAgICBtX3N5bmNocm9uaXplci0+dGFza0NvbXBs
ZXRlZCgpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIG1fY29tcGxldGUgPSB0cnVlOworI2Vu
ZGlmCit9CisKKy8vICoqKiBEYXRhYmFzZU9wZW5UYXNrICoqKgorLy8gT3BlbnMgdGhlIGRhdGFi
YXNlIGZpbGUgYW5kIHZlcmlmaWVzIHRoZSB2ZXJzaW9uIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZl
cnNpb24uCisKK0RhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERh
dGFiYXNlKiBkYXRhYmFzZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VU
YXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKQorICAgIDogRGF0YWJhc2VUYXNrKGRhdGFi
YXNlLCBzeW5jaHJvbml6ZXIpCisgICAgLCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlKHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKQorICAgICwgbV9jb2RlKGNvZGUpCisgICAgLCBtX2Vycm9yTWVz
c2FnZShlcnJvck1lc3NhZ2UpCisgICAgLCBtX3N1Y2Nlc3Moc3VjY2VzcykKK3sKKyAgICBBU1NF
UlQoc3luY2hyb25pemVyKTsgLy8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3Vw
cG9zZWQgdG8gYmUgc3luY2hyb25vdXMuCit9CisKK3ZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlT3Bl
blRhc2s6OmRvUGVyZm9ybVRhc2soKQoreworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAg
bV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkobV9zZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgbV9jb2RlLCBlcnJvck1lc3NhZ2UpOworICAgIGlmICghbV9zdWNjZXNz
KQorICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZS5pc29sYXRlZENvcHkoKTsK
K30KKworI2lmICFMT0dfRElTQUJMRUQKK2NvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFzZU9w
ZW5UYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIkRhdGFiYXNlT3Bl
blRhc2siOworfQorI2VuZGlmCisKKy8vICoqKiBEYXRhYmFzZUNsb3NlVGFzayAqKioKKy8vIENs
b3NlcyB0aGUgZGF0YWJhc2UuCisKK0RhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6RGF0YWJh
c2VDbG9zZVRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
IHN5bmNocm9uaXplcikKKyAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25pemVy
KQoreworfQorCit2b2lkIERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFz
aygpCit7CisgICAgZGF0YWJhc2UoKS0+Y2xvc2UoKTsKK30KKworI2lmICFMT0dfRElTQUJMRUQK
K2NvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6ZGVidWdUYXNrTmFtZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICJEYXRhYmFzZUNsb3NlVGFzayI7Cit9CisjZW5kaWYKKwor
Ly8gKioqIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICoqKgorLy8gU3RhcnRzIGEgdHJhbnNhY3Rp
b24gdGhhdCB3aWxsIHJlcG9ydCBpdHMgcmVzdWx0cyB2aWEgYSBjYWxsYmFjay4KKworRGF0YWJh
c2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayhQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKKyAgICA6IERhdGFiYXNlVGFzayh0
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSwgMCkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24pCit7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1Bl
cmZvcm1UYXNrKCkKK3sKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+cGVyZm9ybU5leHRTdGVwKCkp
CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmluUHJvZ3Jlc3NUcmFuc2FjdGlv
bkNvbXBsZXRlZCgpOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorY29uc3QgY2hhciogRGF0YWJh
c2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIjsKK30KKyNlbmRpZgorCisvLyAqKiog
RGF0YWJhc2VUYWJsZU5hbWVzVGFzayAqKioKKy8vIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIHRh
YmxlcyBpbiB0aGUgZGF0YWJhc2UgLSBmb3IgV2ViSW5zcGVjdG9yIHN1cHBvcnQuCisKK0RhdGFi
YXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKERhdGFi
YXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIFZl
Y3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hy
b25pemVyKQorICAgICwgbV90YWJsZU5hbWVzKG5hbWVzKQoreworICAgIEFTU0VSVChzeW5jaHJv
bml6ZXIpOyAvLyBBIHRhc2sgd2l0aCBvdXRwdXQgcGFyYW1ldGVycyBpcyBzdXBwb3NlZCB0byBi
ZSBzeW5jaHJvbm91cy4KK30KKwordm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFz
azo6ZG9QZXJmb3JtVGFzaygpCit7CisgICAgbV90YWJsZU5hbWVzID0gZGF0YWJhc2UoKS0+cGVy
Zm9ybUdldFRhYmxlTmFtZXMoKTsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK2NvbnN0IGNoYXIq
IERhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIkRhdGFiYXNlVGFibGVOYW1lc1Rhc2siOworfQorI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBEYXRhYmFzZVRhc2tfaAor
I2RlZmluZSBEYXRhYmFzZVRhc2tfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisvLyBDYW4gYmUgdXNlZCB0
byB3YWl0IHVudGlsIERhdGFiYXNlVGFzayBpcyBjb21wbGV0ZWQuCisvLyBIYXMgdG8gYmUgcGFz
c2VkIGludG8gRGF0YWJhc2VUYXNrOjpjcmVhdGUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0
YXNrLgorY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIpOworcHVibGljOgorICAgIERhdGFiYXNl
VGFza1N5bmNocm9uaXplcigpOworCisgICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgdG8g
d2FpdCB1bnRpbCB0YXNrIGlzIGNvbXBsZXRlZC4KKyAgICB2b2lkIHdhaXRGb3JUYXNrQ29tcGxl
dGlvbigpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSB0YXNrLgorICAgIHZvaWQgdGFza0NvbXBs
ZXRlZCgpOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaGFzQ2hlY2tlZEZvclRlcm1pbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja2VkRm9yVGVybWluYXRpb247IH0KKyAgICB2
b2lkIHNldEhhc0NoZWNrZWRGb3JUZXJtaW5hdGlvbigpIHsgbV9oYXNDaGVja2VkRm9yVGVybWlu
YXRpb24gPSB0cnVlOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBib29sIG1fdGFza0NvbXBs
ZXRlZDsKKyAgICBNdXRleCBtX3N5bmNocm9ub3VzTXV0ZXg7CisgICAgVGhyZWFkQ29uZGl0aW9u
IG1fc3luY2hyb25vdXNDb25kaXRpb247CisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9oYXND
aGVja2VkRm9yVGVybWluYXRpb247CisjZW5kaWYKK307CisKK2NsYXNzIERhdGFiYXNlVGFzayB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VUYXNrKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RGF0YWJhc2VUYXNrKCk7CisKKyAgICB2
b2lkIHBlcmZvcm1UYXNrKCk7CisKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGFiYXNlOyB9CisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaGFzU3luY2hyb25p
emVyKCkgY29uc3QgeyByZXR1cm4gbV9zeW5jaHJvbml6ZXI7IH0KKyAgICBib29sIGhhc0NoZWNr
ZWRGb3JUZXJtaW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3luY2hyb25pemVyLT5oYXNDaGVj
a2VkRm9yVGVybWluYXRpb24oKTsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBEYXRhYmFz
ZVRhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpID0gMDsKKworICAgIERhdGFiYXNlKiBt
X2RhdGFiYXNlOworICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogbV9zeW5jaHJvbml6ZXI7
CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tO
YW1lKCkgY29uc3QgPSAwOworICAgIGJvb2wgbV9jb21wbGV0ZTsKKyNlbmRpZgorfTsKKworY2xh
c3MgRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0
YWJhc2UqIGRiLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJv
bml6ZXIsIGNvZGUsIGVycm9yTWVzc2FnZSwgc3VjY2VzcykpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKTsKKworICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZv
cm1UYXNrKCk7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVi
dWdUYXNrTmFtZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBib29sIG1fc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2U7CisgICAgRXhjZXB0aW9uQ29kZSYgbV9jb2RlOworICAgIFN0cmluZyYgbV9lcnJv
ck1lc3NhZ2U7CisgICAgYm9vbCYgbV9zdWNjZXNzOworfTsKKworY2xhc3MgRGF0YWJhc2U6OkRh
dGFiYXNlQ2xvc2VUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERh
dGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBEYXRhYmFzZUNsb3NlVGFzayhkYiwgc3luY2hyb25pemVyKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIERhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiwgRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygp
OworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05h
bWUoKSBjb25zdDsKKyNlbmRpZgorfTsKKworY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CitwdWJsaWM6CisgICAgLy8gVHJhbnNh
Y3Rpb24gdGFzayBpcyBuZXZlciBzeW5jaHJvbm91cywgc28gbm8gJ3N5bmNocm9uaXplcicgcGFy
YW1ldGVyLgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKHRyYW5zYWN0
aW9uKSk7CisgICAgfQorCisgICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIERhdGFiYXNl
VHJhbnNhY3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+KTsKKworICAgIHZpcnR1
YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBSZWZQdHI8
U1FMVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Cit9OworCitjbGFzcyBEYXRhYmFzZTo6RGF0
YWJhc2VUYWJsZU5hbWVzVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVGFibGVOYW1lc1Rhc2s+IGNyZWF0ZShEYXRhYmFz
ZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3Ry
aW5nPiYgbmFtZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNl
VGFibGVOYW1lc1Rhc2soZGIsIHN5bmNocm9uaXplciwgbmFtZXMpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgRGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5
bmNocm9uaXplciosIFZlY3RvcjxTdHJpbmc+JiBuYW1lcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZG9QZXJmb3JtVGFzaygpOworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKKyNlbmRpZgorCisgICAgVmVjdG9yPFN0cmluZz4m
IG1fdGFibGVOYW1lczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBEYXRhYmFzZVRhc2tfaAoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRhc2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgor
CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkF1dG9kcmFpbmVkUG9vbC5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCisjaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RhdGFiYXNlVGhyZWFkOjpEYXRhYmFz
ZVRocmVhZCgpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3RyYW5zYWN0aW9uQ2xpZW50
KGFkb3B0UHRyKG5ldyBTUUxUcmFuc2FjdGlvbkNsaWVudCgpKSkKKyAgICAsIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvcihhZG9wdFB0cihuZXcgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpKSkK
KyAgICAsIG1fY2xlYW51cFN5bmMoMCkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlzOworfQorCitE
YXRhYmFzZVRocmVhZDo6fkRhdGFiYXNlVGhyZWFkKCkKK3sKKyAgICAvLyBGSVhNRTogQW55IGNs
ZWFudXAgcmVxdWlyZWQgaGVyZT8gIFNpbmNlIHRoZSB0aHJlYWQgZGVsZXRlcyBpdHNlbGYgYWZ0
ZXIgcnVubmluZyBpdHMgZGV0YWNoZWQgY291cnNlLCBJIGRvbid0IHRoaW5rIHNvLiAgTGV0cyBi
ZSBzdXJlLgorICAgIEFTU0VSVCh0ZXJtaW5hdGlvblJlcXVlc3RlZCgpKTsKK30KKworYm9vbCBE
YXRhYmFzZVRocmVhZDo6c3RhcnQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRD
cmVhdGlvbk11dGV4KTsKKworICAgIGlmIChtX3RocmVhZElEKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoRGF0YWJhc2VUaHJlYWQ6OmRhdGFi
YXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIpOworCisgICAgcmV0dXJu
IG1fdGhyZWFkSUQ7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlv
bihEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgKmNsZWFudXBTeW5jKQoreworICAgIEFTU0VSVCgh
bV9jbGVhbnVwU3luYyk7CisgICAgbV9jbGVhbnVwU3luYyA9IGNsZWFudXBTeW5jOworICAgIExP
RyhTdG9yYWdlQVBJLCAiRGF0YWJhc2VUaHJlYWQgJXAgd2FzIGFza2VkIHRvIHRlcm1pbmF0ZVxu
IiwgdGhpcyk7CisgICAgbV9xdWV1ZS5raWxsKCk7Cit9CisKK2Jvb2wgRGF0YWJhc2VUaHJlYWQ6
OnRlcm1pbmF0aW9uUmVxdWVzdGVkKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogdGFza1N5bmNo
cm9uaXplcikgY29uc3QKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKHRhc2tTeW5jaHJvbml6
ZXIpCisgICAgICAgIHRhc2tTeW5jaHJvbml6ZXItPnNldEhhc0NoZWNrZWRGb3JUZXJtaW5hdGlv
bigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFza1N5bmNocm9uaXplcik7CisjZW5kaWYK
KworICAgIHJldHVybiBtX3F1ZXVlLmtpbGxlZCgpOworfQorCit2b2lkIERhdGFiYXNlVGhyZWFk
OjpkYXRhYmFzZVRocmVhZFN0YXJ0KHZvaWQqIHZEYXRhYmFzZVRocmVhZCkKK3sKKyAgICBEYXRh
YmFzZVRocmVhZCogZGJUaHJlYWQgPSBzdGF0aWNfY2FzdDxEYXRhYmFzZVRocmVhZCo+KHZEYXRh
YmFzZVRocmVhZCk7CisgICAgZGJUaHJlYWQtPmRhdGFiYXNlVGhyZWFkKCk7Cit9CisKK3ZvaWQg
RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKK3sKKyAgICB7CisgICAgICAgIC8vIFdh
aXQgZm9yIERhdGFiYXNlVGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlLgorICAgICAgICBNdXRl
eExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU3RhcnRlZCBEYXRhYmFzZVRocmVhZCAlcCIsIHRoaXMpOworICAgIH0KKworICAgIEF1
dG9kcmFpbmVkUG9vbCBwb29sOworICAgIHdoaWxlIChPd25QdHI8RGF0YWJhc2VUYXNrPiB0YXNr
ID0gbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSgpKSB7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNr
KCk7CisgICAgICAgIHBvb2wuY3ljbGUoKTsKKyAgICB9CisKKyAgICAvLyBDbGVhbiB1cCB0aGUg
bGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgb24gdGhpcyBkYXRhYmFzZSB0aHJlYWQK
KyAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3ItPnNodXRkb3duKCk7CisKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8g
RGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJl
YWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CisKKyAgICAvLyBDbG9zZSB0aGUgZGF0YWJhc2VzIHRo
YXQgd2UgcmFuIHRyYW5zYWN0aW9ucyBvbi4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgYW55IHRyYW5z
YWN0aW9ucyBhcmUgc3RpbGwgb3BlbiwgdGhleSBhcmUgcm9sbGVkIGJhY2sgYW5kIHdlIGRvbid0
IGxlYXZlIHRoZSBkYXRhYmFzZSBpbiBhbgorICAgIC8vIGluY29uc2lzdGVudCBvciBsb2NrZWQg
c3RhdGUuCisgICAgaWYgKG1fb3BlbkRhdGFiYXNlU2V0LnNpemUoKSA+IDApIHsKKyAgICAgICAg
Ly8gQXMgdGhlIGNhbGwgdG8gY2xvc2Ugd2lsbCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNldCwgd2Ug
bXVzdCB0YWtlIGEgY29weSB0byBpdGVyYXRlIG92ZXIuCisgICAgICAgIERhdGFiYXNlU2V0IG9w
ZW5TZXRDb3B5OworICAgICAgICBvcGVuU2V0Q29weS5zd2FwKG1fb3BlbkRhdGFiYXNlU2V0KTsK
KyAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG9wZW5TZXRDb3B5LmVuZCgpOwor
ICAgICAgICBmb3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IG9wZW5TZXRDb3B5LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5jbG9zZSgpOworICAgIH0K
KworICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdl
ciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQorICAgIGRldGFjaFRocmVhZChtX3RocmVh
ZElEKTsKKworICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMgPSBtX2Ns
ZWFudXBTeW5jOworCisgICAgLy8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1
bHRpbmcgaW4gZGVsZXRpb24KKyAgICBtX3NlbGZSZWYgPSAwOworCisgICAgaWYgKGNsZWFudXBT
eW5jKSAvLyBTb21lb25lIHdhbnRlZCB0byBrbm93IHdoZW4gd2Ugd2VyZSBkb25lIGNsZWFuaW5n
IHVwLgorICAgICAgICBjbGVhbnVwU3luYy0+dGFza0NvbXBsZXRlZCgpOworfQorCit2b2lkIERh
dGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqIGRhdGFiYXNlKQorewor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGRh
dGFiYXNlKTsKKyAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKGRhdGFiYXNl
KSk7CisgICAgbV9vcGVuRGF0YWJhc2VTZXQuYWRkKGRhdGFiYXNlKTsKK30KKwordm9pZCBEYXRh
YmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqIGRhdGFiYXNlKQorewor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGRh
dGFiYXNlKTsKKyAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFzZVNl
dC5jb250YWlucyhkYXRhYmFzZSkpOworICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZShkYXRh
YmFzZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRy
PERhdGFiYXNlVGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQoIXRhc2stPmhhc1N5bmNocm9uaXpl
cigpIHx8IHRhc2stPmhhc0NoZWNrZWRGb3JUZXJtaW5hdGlvbigpKTsKKyAgICBtX3F1ZXVlLmFw
cGVuZCh0YXNrKTsKK30KKwordm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVJbW1lZGlhdGVU
YXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQoreworICAgIEFTU0VSVCghdGFzay0+
aGFzU3luY2hyb25pemVyKCkgfHwgdGFzay0+aGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uKCkpOwor
ICAgIG1fcXVldWUucHJlcGVuZCh0YXNrKTsKK30KKworY2xhc3MgU2FtZURhdGFiYXNlUHJlZGlj
YXRlIHsKK3B1YmxpYzoKKyAgICBTYW1lRGF0YWJhc2VQcmVkaWNhdGUoY29uc3QgRGF0YWJhc2Uq
IGRhdGFiYXNlKSA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpIHsgfQorICAgIGJvb2wgb3BlcmF0b3Io
KShEYXRhYmFzZVRhc2sqIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2stPmRhdGFiYXNlKCkgPT0g
bV9kYXRhYmFzZTsgfQorcHJpdmF0ZToKKyAgICBjb25zdCBEYXRhYmFzZSogbV9kYXRhYmFzZTsK
K307CisKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFi
YXNlKiBkYXRhYmFzZSkKK3sKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRocmVhZCBsb29wIGlzIHJ1
bm5pbmcsIHNvIHNvbWUgdGFza3MgZm9yIHRoZSBkYXRhYmFzZQorICAgIC8vIG1heSBzdGlsbCBi
ZSBleGVjdXRlZC4gVGhpcyBpcyB1bmF2b2lkYWJsZS4KKyAgICBTYW1lRGF0YWJhc2VQcmVkaWNh
dGUgcHJlZGljYXRlKGRhdGFiYXNlKTsKKyAgICBtX3F1ZXVlLnJlbW92ZUlmKHByZWRpY2F0ZSk7
Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBEYXRh
YmFzZVRocmVhZF9oCisjZGVmaW5lIERhdGFiYXNlVGhyZWFkX2gKKworI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlVGFzazsKK2NsYXNzIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGllbnQ7Citj
bGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOworCitjbGFzcyBEYXRhYmFzZVRocmVhZCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgRGF0YWJhc2VUaHJlYWQpOyB9CisgICAgfkRhdGFiYXNlVGhyZWFkKCk7CisK
KyAgICBib29sIHN0YXJ0KCk7CisgICAgdm9pZCByZXF1ZXN0VGVybWluYXRpb24oRGF0YWJhc2VU
YXNrU3luY2hyb25pemVyKiBjbGVhbnVwU3luYyk7CisgICAgYm9vbCB0ZXJtaW5hdGlvblJlcXVl
c3RlZChEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHRhc2tTeW5jaHJvbml6ZXIgPSAwKSBjb25z
dDsKKworICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNrPik7Cisg
ICAgdm9pZCBzY2hlZHVsZUltbWVkaWF0ZVRhc2soUGFzc093blB0cjxEYXRhYmFzZVRhc2s+KTsg
Ly8gVGhpcyBqdXN0IGFkZHMgdGhlIHRhc2sgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZSAtIHRo
ZSBjYWxsZXIgbmVlZHMgdG8gYmUgZXh0cmVtZWx5IGNhcmVmdWwgbm90IHRvIGNyZWF0ZSBkZWFk
bG9ja3Mgd2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uLgorICAgIHZvaWQgdW5zY2hlZHVsZURh
dGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKKworICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERh
dGFiYXNlKik7CisgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSopOworICAg
IFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9CisK
KyAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSB7IHJldHVybiBt
X3RyYW5zYWN0aW9uQ2xpZW50LmdldCgpOyB9CisgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIERhdGFiYXNlVGhyZWFkKCk7CisKKyAgICBz
dGF0aWMgdm9pZCBkYXRhYmFzZVRocmVhZFN0YXJ0KHZvaWQqKTsKKyAgICB2b2lkIGRhdGFiYXNl
VGhyZWFkKCk7CisKKyAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CisgICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9zZWxm
UmVmOworCisgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKKworICAgIC8v
IFRoaXMgc2V0IGtlZXBzIHRyYWNrIG9mIHRoZSBvcGVuIGRhdGFiYXNlcyB0aGF0IGhhdmUgYmVl
biB1c2VkIG9uIHRoaXMgdGhyZWFkLgorICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RGF0YWJh
c2U+ID4gRGF0YWJhc2VTZXQ7CisgICAgRGF0YWJhc2VTZXQgbV9vcGVuRGF0YWJhc2VTZXQ7CisK
KyAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25DbGllbnQ+IG1fdHJhbnNhY3Rpb25DbGllbnQ7Cisg
ICAgT3duUHRyPFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvcjsKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIG1fY2xlYW51cFN5bmM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorI2VuZGlmIC8vIERhdGFiYXNlVGhyZWFkX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRhdGFiYXNl
Q29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk9yaWdp
blF1b3RhTWFuYWdlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgV2ViQ29yZTo6T3JpZ2luUXVvdGFN
YW5hZ2VyJiBvcmlnaW5RdW90YU1hbmFnZXIoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
V2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyLCBxdW90YU1hbmFnZXIsICgpKTsKKyAgICByZXR1
cm4gcXVvdGFNYW5hZ2VyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBEYXRh
YmFzZVRyYWNrZXIqIHN0YXRpY1RyYWNrZXIgPSAwOworCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6
aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCit7CisgICAgQVNT
RVJUKCFzdGF0aWNUcmFja2VyKTsKKyAgICBpZiAoc3RhdGljVHJhY2tlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3RhdGljVHJhY2tlciA9IG5ldyBEYXRhYmFzZVRyYWNrZXIoZGF0YWJhc2VQ
YXRoKTsKK30KKworRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKQor
eworICAgIGlmICghc3RhdGljVHJhY2tlcikKKyAgICAgICAgc3RhdGljVHJhY2tlciA9IG5ldyBE
YXRhYmFzZVRyYWNrZXIoIiIpOworCisgICAgcmV0dXJuICpzdGF0aWNUcmFja2VyOworfQorCitE
YXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0
aCkKKyAgICA6IG1fY2xpZW50KDApCit7CisgICAgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRh
dGFiYXNlUGF0aCk7CisgICAgCisgICAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVW
RlMoKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwor
ICAgIHBvcHVsYXRlT3JpZ2lucygpOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0
YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpOworICAgIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gcGF0aC5pc29sYXRlZENv
cHkoKTsKK30KKworU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRD
b3B5KCk7Cit9CisKK1N0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgo
KSBjb25zdAoreworICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZp
bGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzb2xhdGVkQ29weSgpLCAiRGF0
YWJhc2VzLmRiIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFi
YXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKKworICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0
aCgpOworICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3Rz
KGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBXaGF0IGRvIGRvIGhlcmU/CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4g
ZGF0YWJhc2VQYXRoICVzLiIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7
CisgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikpIHsKKyAgICAgICAg
aWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3Jp
Z2luIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHF1b3RhIElOVEVHRVIgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhbmQgaGVy
ZQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFibGUi
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkRh
dGFiYXNlcyIpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JF
QVRFIFRBQkxFIERhdGFiYXNlcyAoZ3VpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1F
TlQsIG9yaWdpbiBURVhULCBuYW1lIFRFWFQsIGRpc3BsYXlOYW1lIFRFWFQsIGVzdGltYXRlZFNp
emUgSU5URUdFUiwgcGF0aCBURVhUKTsiKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IGFuZCBo
ZXJlCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgRGF0YWJhc2VzIHRh
YmxlIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5F
c3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSkKK3sKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKTsKKyAgICBQcm9wb3NlZERhdGFiYXNlIGRldGFpbHM7CisKKyAgICB1bnNp
Z25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQ7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1b3Rh
TWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKworICAg
ICAgICBpZiAoIWNhbkNyZWF0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5h
bWUpOworCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGltbWluZW50bHkgb3BlbmluZyBhIGRhdGFi
YXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4sIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBp
cyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIKKyAgICAgICAgLy8gYnkgZmV0Y2hp
bmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LgorICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNh
Z2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworCisgICAgICAgIC8vIElmIGEgZGF0
YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWluIGVzdGltYXRlZCBzaXpl
IGFuZCBzYXkgaXQncyBPSy4KKyAgICAgICAgaWYgKGhhc0VudHJ5Rm9yRGF0YWJhc2Uob3JpZ2lu
LCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIElmIHRoZSBk
YXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9uLgorICAgICAgICByZXF1aXJlbWVu
dCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6ZSk7CisgICAgICAgIGlmIChyZXF1aXJl
bWVudCA8IHVzYWdlKSB7CisgICAgICAgICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4s
IG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiB0aGUgZXN0aW1hdGVkIHNp
emUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdywgZG9uJ3QgYWxsb3cgY3JlYXRpb24u
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9M
b2NrKG9yaWdpbikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBHaXZl
IHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGluY3JlYXNlIHRoZSBxdW90YS4KKyAgICAg
ICAgLy8gVGVtcG9yYXJpbHkgbWFrZSB0aGUgZGV0YWlscyBvZiB0aGUgcHJvcG9zZWQgZGF0YWJh
c2UgYXZhaWxhYmxlLCBzbyB0aGUgY2xpZW50IGNhbiBnZXQgYXQgdGhlbS4KKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFsbHkganVzdCBwYXNzIHRoZSBkZXRhaWxzIGludG8gdGhpcyBj
YWxsLCByYXRoZXIgdGhhbiB1c2luZyBtX3Byb3Bvc2VkRGF0YWJhc2VzLgorICAgICAgICBkZXRh
aWxzID0gUHJvcG9zZWREYXRhYmFzZShvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBEYXRhYmFzZURl
dGFpbHMobmFtZS5pc29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVz
dGltYXRlZFNpemUsIDApKTsKKyAgICAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5hZGQoJmRldGFp
bHMpOworICAgIH0KKyAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQ7IHdl
IGRvbid0IGtub3cgd2hhdCB0aGV5J2xsIGRvLgorICAgIERhdGFiYXNlQ29udGV4dDo6ZnJvbShj
b250ZXh0KS0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUpOworCisgICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisKKyAgICBtX3Byb3Bvc2VkRGF0YWJhc2Vz
LnJlbW92ZSgmZGV0YWlscyk7CisKKyAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQgbm93
LCBhbGxvdyBpdHMgY3JlYXRpb24uCisgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3Jp
Z2luTm9Mb2NrKG9yaWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZG9uZUNyZWF0
aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAg
ICBBU1NFUlQobV9xdW90YU1hcCk7CisgICAgcmV0dXJuIG1fcXVvdGFNYXAtPmNvbnRhaW5zKG9y
aWdpbik7Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbihTZWN1
cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOworICAgIHJldHVybiBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhvcmlnaW4p
OworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzZShTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIG9wZW5UcmFja2VyRGF0
YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisK
KyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJ
ZGVudGlmaWVyKCkpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZp
ZXIpOworCisgICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OworfQor
Cit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJh
c2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgLy8gVGhlIG1heGlt
dW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwg
bWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCisgICAgLy8gcGx1cyB0
aGUgY3VycmVudCB1c2FnZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UKKyAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5h
Z2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgIFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICByZXR1
cm4gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSAtIG9yaWdpblF1b3RhTWFuYWdlcigpLmRp
c2tVc2FnZShvcmlnaW4pICsgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShk
YXRhYmFzZS0+ZmlsZU5hbWUoKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFz
ZUNoYW5nZWQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgTG9ja2VyPE9yaWdp
blF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsK
KyAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5tYXJrRGF0YWJhc2UoZGF0YWJhc2UpOworfQorCit2
b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25z
dCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIFZlY3RvcjxSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4gPiBvcGVuRGF0YWJhc2VzOworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKKworICAg
ICAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGlmICghbmFtZU1hcCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRi
TmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoRGF0YWJhc2VOYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFt
ZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7CisgICAgICAgICAgICBE
YXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOworICAgICAgICAg
ICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+
ZW5kKCk7CisgICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNl
dEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNl
dEl0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFw
cGVuZCgqZGJTZXRJdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBW
ZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRh
YmFzZXNFbmRJdCA9IG9wZW5EYXRhYmFzZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRy
PEFic3RyYWN0RGF0YWJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRhYmFzZXNJdCA9IG9w
ZW5EYXRhYmFzZXMuYmVnaW4oKTsgb3BlbkRhdGFiYXNlc0l0ICE9IG9wZW5EYXRhYmFzZXNFbmRJ
dDsgKytvcGVuRGF0YWJhc2VzSXQpCisgICAgICAgICgqb3BlbkRhdGFiYXNlc0l0KS0+aW50ZXJy
dXB0KCk7Cit9CisKK1N0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbikgY29uc3QKK3sKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBw
ZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29sYXRl
ZENvcHkoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Cit9CisKK1N0cmluZyBEYXRh
YmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQoreworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFvcmlnaW5R
dW90YU1hbmFnZXIoKS50cnlMb2NrKCkpOworCisgICAgZm9yIChIYXNoU2V0PFByb3Bvc2VkRGF0
YWJhc2UqPjo6aXRlcmF0b3IgaXRlciA9IG1fcHJvcG9zZWREYXRhYmFzZXMuYmVnaW4oKTsgaXRl
ciAhPSBtX3Byb3Bvc2VkRGF0YWJhc2VzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGlmICgoKml0
ZXIpLT5zZWNvbmQubmFtZSgpID09IG5hbWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdp
bikpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgb3JpZ2luSWRl
bnRpZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisgICAgU3RyaW5nIG9yaWdp
blBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhl
IHBhdGggZm9yIHRoaXMgU2VjdXJpdHlPcmlnaW4gZXhpc3RzCisgICAgaWYgKGNyZWF0ZUlmTm90
RXhpc3RzICYmICFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0
cyhvcmlnaW5QYXRoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gU2VlIGlm
IHdlIGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAorICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CisKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgy
LCBuYW1lKTsKKworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworCisgICAgaWYg
KHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVt
OjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKTsKKyAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3RzKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBU
cmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCku
ZGF0YSgpLCBuYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIH0KKyAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKworICAgIFN0cmluZyBmaWxlTmFtZSA9
IFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uob3JpZ2luUGF0aCwg
bmFtZSwgb3JpZ2luSWRlbnRpZmllciwgJm1fZGF0YWJhc2UpOworICAgIGlmICghYWRkRGF0YWJh
c2Uob3JpZ2luLCBuYW1lLCBmaWxlTmFtZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIC8vIElmIHRoaXMgb3JpZ2luJ3MgcXVvdGEgaXMgYmVpbmcgdHJhY2tlZCAob3BlbiBoYW5k
bGUgdG8gYSBkYXRhYmFzZSBpbiB0aGlzIG9yaWdpbiksIGFkZCB0aGlzIG5ldyBkYXRhYmFzZQor
ICAgIC8vIHRvIHRoZSBxdW90YSBtYW5hZ2VyIG5vdworICAgIFN0cmluZyBmdWxsRmlsZVBhdGgg
PSBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBh
dGgsIGZpbGVOYW1lKTsKKyAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2lu
KG9yaWdpbikpCisgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdp
biwgbmFtZSwgZnVsbEZpbGVQYXRoKTsKKworICAgIHJldHVybiBmdWxsRmlsZVBhdGg7Cit9CisK
K1N0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQor
eworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CisKKyAgICByZXR1cm4gZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhvcmlnaW4s
IG5hbWUsIGNyZWF0ZUlmTm90RXhpc3RzKS5pc29sYXRlZENvcHkoKTsKK30KKwordm9pZCBEYXRh
YmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKKyAgICBpZiAobV9xdW90YU1hcCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9xdW90YU1hcCA9IGFkb3B0UHRyKG5ldyBRdW90YU1hcCk7CisKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBvcmlnaW4sIHF1b3RhIEZST00gT3JpZ2lucyIpOworCisgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
bnQgcmVzdWx0OworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
UmVzdWx0Um93KSB7CisgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCkpOworICAgICAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLmdldCgpLT5pc29s
YXRlZENvcHkoKSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpKTsKKyAgICB9CisKKyAgICBp
ZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7Cit9CisKK3ZvaWQgRGF0
YWJhc2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJl
c3VsdCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
KyAgICBBU1NFUlQobV9xdW90YU1hcCk7CisgICAgY29weUtleXNUb1ZlY3RvcigqbV9xdW90YU1h
cCwgcmVzdWx0KTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JP
cmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dFZlY3RvcikKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAg
IG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87
Iik7CisKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkpOworCisgICAgaW50IHJlc3VsdDsKKyAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmVzdWx0VmVj
dG9yLmFwcGVuZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CisKKyAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmll
dmUgYWxsIGRhdGFiYXNlIG5hbWVzIGZvciBvcmlnaW4gJXMiLCBvcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VO
YW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVz
dWx0VmVjdG9yKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHRlbXA7CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgaWYgKCFk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbiwgdGVtcCkpCisgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0
ZXIgPSB0ZW1wLmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytpdGVyKQorICAgICAgICBy
ZXN1bHRWZWN0b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVB
bmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorewor
ICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KTsKKyAgICBTdHJpbmcgZGlzcGxheU5hbWU7CisgICAgaW50NjRfdCBleHBlY3RlZFVzYWdlOwor
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJk
KTsKKworICAgICAgICBmb3IgKEhhc2hTZXQ8UHJvcG9zZWREYXRhYmFzZSo+OjppdGVyYXRvciBp
dGVyID0gbV9wcm9wb3NlZERhdGFiYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fcHJvcG9zZWREYXRh
YmFzZXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIGlmICgoKml0ZXIpLT5zZWNvbmQubmFt
ZSgpID09IG5hbWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdpbikpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2Vjb25kLnRocmVhZCgpID09IGN1cnJlbnRUaHJlYWQo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgqaXRlciktPnNlY29uZDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygp
OworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8g
QU5EIG5hbWU9PyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKKyAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKKworICAgICAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgyLCBuYW1lKTsKKworICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAg
cmV0dXJuIERhdGFiYXNlRGV0YWlscygpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0Um93KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWls
cyBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5h
bWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygpOworICAgICAgICB9CisgICAgICAgIGRp
c3BsYXlOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGV4cGVjdGVk
VXNhZ2UgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgfQorCisgICAgcmV0dXJu
IERhdGFiYXNlRGV0YWlscyhuYW1lLCBkaXNwbGF5TmFtZSwgZXhwZWN0ZWRVc2FnZSwgdXNhZ2VG
b3JEYXRhYmFzZShuYW1lLCBvcmlnaW4pKTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNl
dERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSkKK3sKKyAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCk7CisgICAgaW50NjRfdCBndWlkID0gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0cnVl
KTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERh
dGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7CisgICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MiwgbmFtZSk7CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgZ3VpZCA9IHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQ2NCgwKTsKKyAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKKworICAgIGlmIChndWlkID09
IDApIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGlu
IG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgLy8gVGhpcyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBz
ZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVh
ZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIKKyAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJh
Y2tlciBmaWxlIGlzIGFuIGV4dGVybmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250
cm9sIG9mIG91ciBjb2RlLCBpdCdzIHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFT
U0VSVCBjYXNlCisgICAgICAgICAgICAvLyBTbyB3ZSdsbCBwcmludCBhbiBlcnJvciBpbnN0ZWFk
CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRh
YmFzZSAlcyBpbiBvcmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGlu
dmFsaWQgdG8gc2V0IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3Qg
YWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlciIsCisgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFt
ZT0/LCBlc3RpbWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Iik7CisgICAgaWYgKHVwZGF0ZVN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKworICAgIHVw
ZGF0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7CisgICAgdXBkYXRlU3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKKyAgICB1cGRhdGVTdGF0ZW1lbnQuYmlu
ZEludDY0KDMsIGd1aWQpOworCisgICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
UmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgZGV0YWls
cyBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeURh
dGFiYXNlKG9yaWdpbiwgbmFtZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRy
YWNrZXI6OnVzYWdlRm9yRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdp
biogb3JpZ2luKQoreworICAgIFN0cmluZyBwYXRoID0gZnVsbFBhdGhGb3JEYXRhYmFzZShvcmln
aW4sIG5hbWUsIGZhbHNlKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
cGF0aCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJh
Y3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgaWYgKCFkYXRhYmFzZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1f
b3BlbkRhdGFiYXNlTWFwR3VhcmQpOworCisgICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXAp
CisgICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcCA9IGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9y
aWdpbk1hcCk7CisKKyAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZp
ZXIoKSk7CisgICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNl
TWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBpZiAoIW5hbWVN
YXApIHsKKyAgICAgICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwOworICAgICAg
ICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnNldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+
aXNvbGF0ZWRDb3B5KCksIG5hbWVNYXApOworICAgICAgICB9CisKKyAgICAgICAgRGF0YWJhc2VT
ZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOworICAgICAgICBpZiAoIWRhdGFi
YXNlU2V0KSB7CisgICAgICAgICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldDsKKyAg
ICAgICAgICAgIG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBkYXRhYmFzZVNldCk7
CisgICAgICAgIH0KKworICAgICAgICBkYXRhYmFzZVNldC0+YWRkKGRhdGFiYXNlKTsKKworICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0
YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworCisg
ICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmln
aW5RdW90YU1hbmFnZXIoKSk7CisgICAgICAgIGlmICghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJh
Y2tzT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKSkgeworICAgICAgICAgICAgb3Jp
Z2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkp
OworICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2UoZGF0YWJhc2Ut
PnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCksIGRhdGFiYXNl
LT5maWxlTmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFi
YXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKK30K
Kwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFi
YXNlKiBkYXRhYmFzZSkKK3sKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAgICByZXR1cm47CisK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0
YWJhc2VNYXBHdWFyZCk7CisKKyAgICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgeworICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigp
KTsKKyAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAt
PmdldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGlmICghbmFtZU1hcCkg
eworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFw
LT5nZXQobmFtZSk7CisgICAgICAgIGlmICghZGF0YWJhc2VTZXQpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZGF0YWJhc2VTZXQtPnJlbW92ZShkYXRhYmFzZSk7CisKKyAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJSZW1vdmVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmlu
Z0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworCisgICAgICAgIGlmICgh
ZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBu
YW1lTWFwLT5yZW1vdmUobmFtZSk7CisgICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKKworICAg
ICAgICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigp
KTsKKyAgICAgICAgZGVsZXRlIG5hbWVNYXA7CisKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1b3Rh
TWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAg
ICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9y
aWdpbigpKTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJh
c2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxS
ZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKQoreworICAgIE11dGV4TG9ja2Vy
IG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgaWYgKCFt
X29wZW5EYXRhYmFzZU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VOYW1lTWFw
KiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChvcmlnaW4pOworICAgIGlmICghbmFt
ZU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0g
bmFtZU1hcC0+Z2V0KG5hbWUpOworICAgIGlmICghZGF0YWJhc2VTZXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJl
Z2luKCk7IGl0ICE9IGRhdGFiYXNlU2V0LT5lbmQoKTsgKytpdCkKKyAgICAgICAgZGF0YWJhc2Vz
LT5hZGQoKml0KTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNh
Z2VGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQo
IW9yaWdpblF1b3RhTWFuYWdlcigpLnRyeUxvY2soKSk7CisKKyAgICAvLyBVc2UgdGhlIE9yaWdp
blF1b3RhTWFuYWdlciBtZWNoYW5pc20gdG8gY2FsY3VsYXRlIHRoZSB1c2FnZQorICAgIGlmIChv
cmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKKyAgICAgICAgcmV0dXJu
IG9yaWdpblF1b3RhTWFuYWdlcigpLmRpc2tVc2FnZShvcmlnaW4pOworCisgICAgLy8gSWYgdGhl
IE9yaWdpblF1b3RhTWFuYWdlciBkb2Vzbid0IHRyYWNrIHRoaXMgb3JpZ2luIGFscmVhZHksIHBy
aW1lIGl0IHRvIGRvIHNvCisgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4ob3Jp
Z2luKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIGRhdGFiYXNlTmFtZXNGb3JP
cmlnaW5Ob0xvY2sob3JpZ2luLCBuYW1lcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERh
dGFiYXNlKG9yaWdpbiwgbmFtZXNbaV0sIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2lu
LCBuYW1lc1tpXSwgZmFsc2UpKTsKKworICAgIGlmICghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJh
Y2tzT3JpZ2luKG9yaWdpbikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBvcmlnaW5R
dW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25n
IERhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBM
b2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFN
YW5hZ2VyKCkpOworICAgIHJldHVybiB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworfQor
Cit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdpbk5vTG9j
ayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJk
LnRyeUxvY2soKSk7CisgICAgQVNTRVJUKG1fcXVvdGFNYXApOworICAgIHJldHVybiBtX3F1b3Rh
TWFwLT5nZXQob3JpZ2luKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tl
cjo6cXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICByZXR1cm4gcXVvdGFGb3JP
cmlnaW5Ob0xvY2sob3JpZ2luKTsKK30KKwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3Rh
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKworICAgIGlmIChx
dW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pID09IHF1b3RhKQorICAgICAgICByZXR1cm47CisK
KyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3F1b3RhTWFwLT5jb250YWlucyhv
cmlnaW4pKSB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOworICAgICAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVy
KCkpOworICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBxdW90YSk7CisKKyAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJh
Y2tlciIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iKTsK
KyAgICAgICAgYm9vbCBlcnJvciA9IHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2s7
CisgICAgICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgcXVvdGEpOworICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkpOworCisgICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhl
Y3V0ZUNvbW1hbmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvcikKKyNpZiBPUyhX
SU5ET1dTKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHF1b3RhICVJNjR1
IGluIHRyYWNrZXIgZGF0YWJhc2UgZm9yIG9yaWdpbiAlcyIsIHF1b3RhLCBvcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlCisgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBzZXQgcXVvdGEgJWxsdSBpbiB0cmFja2VyIGRhdGFiYXNlIGZvciBv
cmlnaW4gJXMiLCBxdW90YSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRh
dGEoKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRv
IHVwZGF0ZSB0aGUgcXVvdGEgaW4gbWVtb3J5IGlmIHdlIGZhaWxlZCB0byB1cGRhdGUgaXQgb24g
ZGlzaz8KKyAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgcXVvdGEp
OworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW4ob3JpZ2luKTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmFkZERhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAg
QVNTRVJUKG1fcXVvdGFNYXApOworICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7CisgICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBOZXcgZGF0YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHVudGlsIHRoZSBvcmlnaW4gaGFz
IGJlZW4gZXN0YWJsaXNoZWQKKyAgICBBU1NFUlQoaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/KTsi
KTsKKworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgzLCBwYXRoKTsKKworICAgIGlmICghc3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWRkIGRhdGFiYXNl
ICVzIHRvIG9yaWdpbiAlczogJXNcbiIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJh
c2VzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IG9yaWdpbnNDb3B5
OworICAgIG9yaWdpbnMob3JpZ2luc0NvcHkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG9yaWdpbnNDb3B5LnNpemUoKTsgKytpKQorICAgICAgICBkZWxldGVPcmlnaW4ob3JpZ2lu
c0NvcHlbaV0uZ2V0KCkpOworfQorCisvLyBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxp
dHkgdG8gbWFrZSBzdXJlIHRoYXQgbm9ib2R5IGlzIHRyeWluZyB0byBjcmVhdGUsIGRlbGV0ZSwg
b3Blbiwgb3IgY2xvc2UgZGF0YWJhc2VzIGluIHRoaXMgb3JpZ2luIHdoaWxlIHRoZSBkZWxldGlv
biBpcworLy8gdGFraW5nIHBsYWNlLgorYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdp
bihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNl
TmFtZXM7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFz
ZUd1YXJkKTsKKyAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAoIWRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCBkYXRhYmFzZU5h
bWVzKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlzdCBv
ZiBkYXRhYmFzZSBuYW1lcyBmb3Igb3JpZ2luICVzIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4ob3JpZ2luKSkgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJUcmllZCB0byBkZWxldGUgYW4gb3JpZ2luICglcykgd2hpbGUgZWl0aGVyIGNy
ZWF0aW5nIGRhdGFiYXNlIGluIGl0IG9yIGFscmVhZHkgZGVsZXRpbmcgaXQiLCBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChm
YWxzZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmVj
b3JkRGVsZXRpbmdPcmlnaW4ob3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBXZSBkcm9wIHRoZSBs
b2NrIGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0
YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2suCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZp
bGUob3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldKSkgeworICAgICAgICAgICAgLy8gRXZlbiBpZiB0
aGUgZmlsZSBjYW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVsZXRlIHRoZSBy
ZXN0LCBkb24ndCByZXR1cm4gZWFybHkgaGVyZS4KKyAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBkYXRhYmFz
ZU5hbWVzW2ldLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIGRvbmVEZWxldGlu
Z09yaWdpbihvcmlnaW4pOworCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOworICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBv
cmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CisKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJv
bSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7CisgICAgICAgIGlmIChvcmlnaW5TdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBv
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG9yaWdpblN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKworICAgICAgICBpZiAoIW9y
aWdpblN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBm
cm9tIHRyYWNrZXIiLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmln
aW4pKTsKKworICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFz
dFJlZmVyZW5jZSA9IG9yaWdpbjsKKyAgICAgICAgbV9xdW90YU1hcC0+cmVtb3ZlKG9yaWdpbik7
CisKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVv
dGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAgICAgICAgIG9yaWdp
blF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihvcmlnaW4pOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4sIGRvIHNvbWUgYWRkaXRpb25hbCBk
ZWxldGlvbi4KKyAgICAgICAgaWYgKG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUo
dHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKKyAgICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVs
ZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5k
aXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW4pOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAg
bV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZU5hbWVz
W2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEYXRh
YmFzZVRyYWNrZXI6OmNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2Nr
KCkpOworICAgIC8vIENhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIHdoaWxlIHNvbWVvbmUgZWxzZSBp
cyBkZWxldGluZyBpdDsgdGhlcmUncyBhIHJpc2sgb2YgbGVhdmluZyB1bnRyYWNrZWQgZGF0YWJh
c2UgZGVicmlzIG9uIHRoZSBkaXNrLgorICAgIHJldHVybiAhZGVsZXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpICYmICFkZWxldGluZ09yaWdpbihvcmlnaW4pOworfQorCit2b2lkIERhdGFiYXNl
VHJhY2tlcjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9j
aygpKTsKKyAgICBOYW1lQ291bnRNYXAqIG5hbWVNYXAgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3Jp
Z2luKTsKKyAgICBpZiAoIW5hbWVNYXApIHsKKyAgICAgICAgbmFtZU1hcCA9IG5ldyBOYW1lQ291
bnRNYXAoKTsKKyAgICAgICAgbV9iZWluZ0NyZWF0ZWQuc2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5
KCksIG5hbWVNYXApOworICAgIH0KKyAgICBsb25nIGNvdW50ID0gbmFtZU1hcC0+Z2V0KG5hbWUp
OworICAgIG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBjb3VudCArIDEpOworfQor
Cit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVCghbV9kYXRhYmFz
ZUd1YXJkLnRyeUxvY2soKSk7CisgICAgTmFtZUNvdW50TWFwKiBuYW1lTWFwID0gbV9iZWluZ0Ny
ZWF0ZWQuZ2V0KG9yaWdpbik7CisgICAgaWYgKG5hbWVNYXApIHsKKyAgICAgICAgbG9uZyBjb3Vu
dCA9IG5hbWVNYXAtPmdldChuYW1lKTsKKyAgICAgICAgQVNTRVJUKGNvdW50ID4gMCk7CisgICAg
ICAgIGlmIChjb3VudCA8PSAxKSB7CisgICAgICAgICAgICBuYW1lTWFwLT5yZW1vdmUobmFtZSk7
CisgICAgICAgICAgICBpZiAobmFtZU1hcC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
bV9iZWluZ0NyZWF0ZWQucmVtb3ZlKG9yaWdpbik7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5h
bWVNYXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmFtZU1h
cC0+c2V0KG5hbWUsIGNvdW50IC0gMSk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChmYWxz
ZSk7Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjcmVhdGluZ0RhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0
YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIE5hbWVDb3VudE1hcCogbmFtZU1hcCA9IG1fYmVp
bmdDcmVhdGVkLmdldChvcmlnaW4pOworICAgIHJldHVybiBuYW1lTWFwICYmIG5hbWVNYXAtPmdl
dChuYW1lKTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKFNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOworICAgIHJldHVybiAhY3JlYXRpbmdEYXRhYmFz
ZShvcmlnaW4sIG5hbWUpICYmICFkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Cit9CisK
K3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJh
c2VHdWFyZC50cnlMb2NrKCkpOworICAgIEFTU0VSVChjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4s
IG5hbWUpKTsKKyAgICBOYW1lU2V0KiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdp
bik7CisgICAgaWYgKCFuYW1lU2V0KSB7CisgICAgICAgIG5hbWVTZXQgPSBuZXcgTmFtZVNldCgp
OworICAgICAgICBtX2JlaW5nRGVsZXRlZC5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgbmFt
ZVNldCk7CisgICAgfQorICAgIEFTU0VSVCghbmFtZVNldC0+Y29udGFpbnMobmFtZSkpOworICAg
IG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKK30KKwordm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkp
OworICAgIE5hbWVTZXQqIG5hbWVTZXQgPSBtX2JlaW5nRGVsZXRlZC5nZXQob3JpZ2luKTsKKyAg
ICBpZiAobmFtZVNldCkgeworICAgICAgICBBU1NFUlQobmFtZVNldC0+Y29udGFpbnMobmFtZSkp
OworICAgICAgICBuYW1lU2V0LT5yZW1vdmUobmFtZSk7CisgICAgICAgIGlmIChuYW1lU2V0LT5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fYmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW4pOwor
ICAgICAgICAgICAgZGVsZXRlIG5hbWVTZXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQoZmFsc2UpOworICAgIH0KK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRl
bGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgTmFtZVNl
dCogbmFtZVNldCA9IG1fYmVpbmdEZWxldGVkLmdldChvcmlnaW4pOworICAgIHJldHVybiBuYW1l
U2V0ICYmIG5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpOworfQorCitib29sIERhdGFiYXNlVHJhY2tl
cjo6Y2FuRGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCit7CisgICAgQVNTRVJU
KCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICByZXR1cm4gIShkZWxldGluZ09yaWdp
bihvcmlnaW4pIHx8IG1fYmVpbmdDcmVhdGVkLmdldChvcmlnaW4pKTsKK30KKworYm9vbCBEYXRh
YmFzZVRyYWNrZXI6OmRlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCit7Cisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKKyAgICByZXR1cm4gbV9vcmln
aW5zQmVpbmdEZWxldGVkLmNvbnRhaW5zKG9yaWdpbik7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpyZWNvcmREZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKQoreworICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFkZWxldGlu
Z09yaWdpbihvcmlnaW4pKTsKKyAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi0+
aXNvbGF0ZWRDb3B5KCkpOworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5n
T3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKKyAgICBBU1NFUlQoZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7Cisg
ICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW4pOworfQorCitib29sIERhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNl
KG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwor
ICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKCFjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoRkFMU0UpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJlY29yZERlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKKyAg
ICB9CisKKyAgICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tz
IGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2suCisgICAg
aWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1lKSkgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBkZWxldGUgZmlsZSBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwg
bmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyIpOwor
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgZGF0YWJhc2UgJXMgZnJvbSBv
cmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGRvbmVEZWxldGluZ0Rh
dGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Cisg
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOworCisgICAgaWYgKCFzdGF0ZW1lbnQuZXhl
Y3V0ZUNvbW1hbmQoKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRl
bGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUu
YXNjaWkoKS5kYXRhKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAg
ICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwor
ICAgIH0KKworICAgIGlmIChtX2NsaWVudCkgeworICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hE
aWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9k
aWZ5RGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKKyAgICB9CisgICAgZG9uZURlbGV0aW5nRGF0YWJh
c2Uob3JpZ2luLCBuYW1lKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gZGVsZXRl
RGF0YWJhc2VGaWxlIGhhcyB0byByZWxlYXNlIGxvY2tzIGJldHdlZW4gbG9va2luZyB1cCB0aGUg
bGlzdCBvZiBkYXRhYmFzZXMgdG8gY2xvc2UgYW5kIGNsb3NpbmcgdGhlbS4gIFdoaWxlIHRoaXMg
aXMgaW4gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIKKy8vIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcg
c3VyZSBubyBuZXcgZGF0YWJhc2VzIGFyZSBvcGVuZWQgaW4gdGhlIGZpbGUgdG8gYmUgZGVsZXRl
ZC4KK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFN0cmluZyBmdWxsUGF0aCA9
IGZ1bGxQYXRoRm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmYWxzZSk7CisgICAgaWYgKGZ1bGxQ
YXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
KyAgICAgICAgQVNTRVJUKGRlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSB8fCBkZWxldGlu
Z09yaWdpbihvcmlnaW4pKTsKKyAgICB9CisjZW5kaWYKKworICAgIFZlY3RvcjxSZWZQdHI8QWJz
dHJhY3REYXRhYmFzZT4gPiBkZWxldGVkRGF0YWJhc2VzOworCisgICAgLy8gTWFrZSBzdXJlIG5v
dCB0byBob2xkIHRoZSBhbnkgbG9ja3Mgd2hlbiBjYWxsaW5nCisgICAgLy8gRGF0YWJhc2U6Om1h
cmtBc0RlbGV0ZWRBbmRDbG9zZSgpLCBzaW5jZSB0aGF0IGNhbiBjYXVzZSBhIGRlYWRsb2NrCisg
ICAgLy8gZHVyaW5nIHRoZSBzeW5jaHJvbm91cyBEYXRhYmFzZVRocmVhZCBjYWxsIGl0IHRyaWdn
ZXJzLgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29w
ZW5EYXRhYmFzZU1hcEd1YXJkKTsKKyAgICAgICAgaWYgKG1fb3BlbkRhdGFiYXNlTWFwKSB7Cisg
ICAgICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBvcGVuIGRhdGFiYXNlcywgbGV0cyBjaGVjayBp
ZiB0aGV5IGFyZSBmb3IgdGhpcyBvcmlnaW4uCisgICAgICAgICAgICBEYXRhYmFzZU5hbWVNYXAq
IG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbik7CisgICAgICAgICAgICBp
ZiAobmFtZU1hcCAmJiBuYW1lTWFwLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVy
ZSBhcmUgc29tZSBvcGVuIGRhdGFiYXNlcyBmb3IgdGhpcyBvcmlnaW4sIGxldCdzIGNoZWNrCisg
ICAgICAgICAgICAgICAgLy8gaWYgdGhleSBhcmUgdGhpcyBkYXRhYmFzZSBieSBuYW1lLgorICAg
ICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1l
KTsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0YWJhc2VTZXQtPnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUgZGF0YWJhc2Ugb3BlbiB3
aXRoIHRoaXMgbmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCisgICAgICAgICAgICAgICAgICAg
IERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
ZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRlbGV0ZWREYXRh
YmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworCisgICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxsUGF0aCk7Cit9CisKK3ZvaWQgRGF0YWJh
c2VUcmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3N0YXRpYyBNdXRleCYgbm90aWZpY2F0aW9uTXV0
ZXgoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7CisgICAg
cmV0dXJuIG11dGV4OworfQorCit0eXBlZGVmIFZlY3RvcjxwYWlyPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFN0cmluZz4gPiBOb3RpZmljYXRpb25RdWV1ZTsKKworc3RhdGljIE5vdGlmaWNhdGlv
blF1ZXVlJiBub3RpZmljYXRpb25RdWV1ZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChO
b3RpZmljYXRpb25RdWV1ZSwgcXVldWUsICgpKTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisKK3Zv
aWQgRGF0YWJhc2VUcmFja2VyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG5vdGlmaWNhdGlvbk11dGV4KCkpOworCisgICAgbm90aWZpY2F0aW9uUXVldWUoKS5h
cHBlbmQocGFpcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTdHJpbmc+KG9yaWdpbi0+aXNvbGF0
ZWRDb3B5KCksIG5hbWUuaXNvbGF0ZWRDb3B5KCkpKTsKKyAgICBzY2hlZHVsZUZvck5vdGlmaWNh
dGlvbigpOworfQorCitzdGF0aWMgYm9vbCBub3RpZmljYXRpb25TY2hlZHVsZWQgPSBmYWxzZTsK
Kwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNjaGVkdWxlRm9yTm90aWZpY2F0aW9uKCkKK3sKKyAg
ICBBU1NFUlQoIW5vdGlmaWNhdGlvbk11dGV4KCkudHJ5TG9jaygpKTsKKworICAgIGlmICghbm90
aWZpY2F0aW9uU2NoZWR1bGVkKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoRGF0YWJhc2VU
cmFja2VyOjpub3RpZnlEYXRhYmFzZXNDaGFuZ2VkLCAwKTsKKyAgICAgICAgbm90aWZpY2F0aW9u
U2NoZWR1bGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpub3Rp
ZnlEYXRhYmFzZXNDaGFuZ2VkKHZvaWQqKQoreworICAgIC8vIE5vdGUgdGhhdCBpZiBEYXRhYmFz
ZVRyYWNrZXIgZXZlciBiZWNvbWVzIG5vbi1zaW5nbGV0b24sIHdlJ2xsIGhhdmUgdG8gYW1lbmQg
dGhpcyBub3RpZmljYXRpb24KKyAgICAvLyBtZWNoYW5pc20gdG8gaW5jbHVkZSB3aGljaCB0cmFj
a2VyIHRoZSBub3RpZmljYXRpb24gZ29lcyBvdXQgb24gYXMgd2VsbC4KKyAgICBEYXRhYmFzZVRy
YWNrZXImIHRoZVRyYWNrZXIodHJhY2tlcigpKTsKKworICAgIE5vdGlmaWNhdGlvblF1ZXVlIG5v
dGlmaWNhdGlvbnM7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobm90aWZpY2F0
aW9uTXV0ZXgoKSk7CisKKyAgICAgICAgbm90aWZpY2F0aW9ucy5zd2FwKG5vdGlmaWNhdGlvblF1
ZXVlKCkpOworCisgICAgICAgIG5vdGlmaWNhdGlvblNjaGVkdWxlZCA9IGZhbHNlOworICAgIH0K
KworICAgIGlmICghdGhlVHJhY2tlci5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vdGlmaWNhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIHRoZVRyYWNrZXIubV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uobm90aWZp
Y2F0aW9uc1tpXS5maXJzdC5nZXQoKSwgbm90aWZpY2F0aW9uc1tpXS5zZWNvbmQpOworfQorCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBE
YXRhYmFzZVRyYWNrZXJfaAorI2RlZmluZSBEYXRhYmFzZVRyYWNrZXJfaAorCisjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJE
YXRhYmFzZURldGFpbHMuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNlbmRpZiAvLyAhUExBVEZPUk0oQ0hST01JVU0pCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworc3RydWN0IFNlY3VyaXR5T3Jp
Z2luSGFzaDsKKworI2lmICFQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIERhdGFiYXNlVHJhY2tl
ckNsaWVudDsKKworc3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOworI2VuZGlmIC8vICFQTEFU
Rk9STShDSFJPTUlVTSkKKworY2xhc3MgRGF0YWJhc2VUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRhYmFzZVRyYWNrZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVHJhY2tlcihjb25zdCBTdHJpbmcmIGRh
dGFiYXNlUGF0aCk7CisgICAgc3RhdGljIERhdGFiYXNlVHJhY2tlciYgdHJhY2tlcigpOworICAg
IC8vIFRoaXMgc2luZ2xldG9uIHdpbGwgcG90ZW50aWFsbHkgYmUgdXNlZCBmcm9tIG11bHRpcGxl
IHdvcmtlciB0aHJlYWRzIGFuZCB0aGUgcGFnZSdzIGNvbnRleHQgdGhyZWFkIHNpbXVsdGFuZW91
c2x5LiAgVG8ga2VlcCB0aGlzIHNhZmUsIGl0J3MKKyAgICAvLyBjdXJyZW50bHkgdXNpbmcgNCBs
b2Nrcy4gIEluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHdoZW4gdGFraW5nIG11bHRpcGxlIGxv
Y2tzLCB5b3UgbXVzdCB0YWtlIHRoZW0gaW4gdGhlIGNvcnJlY3Qgb3JkZXI6CisgICAgLy8gbV9k
YXRhYmFzZUd1YXJkIGJlZm9yZSBxdW90YU1hbmFnZXIgaWYgYm90aCBsb2NrcyBhcmUgbmVlZGVk
LgorICAgIC8vIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgYmVmb3JlIHF1b3RhTWFuYWdlciBpZiBi
b3RoIGxvY2tzIGFyZSBuZWVkZWQuCisgICAgLy8gbV9kYXRhYmFzZUd1YXJkIGFuZCBtX29wZW5E
YXRhYmFzZU1hcEd1YXJkIGN1cnJlbnRseSBkb24ndCBvdmVybGFwLgorICAgIC8vIG5vdGlmaWNh
dGlvbk11dGV4KCkgaXMgY3VycmVudGx5IGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBsb2Nrcy4K
KworICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRh
YmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRv
ZXNOb3RFeGlzdCA9IHRydWUpOworCisgICAgdm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3RE
YXRhYmFzZSopOworICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2Uq
KTsKKyAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+KiBkYXRh
YmFzZXMpOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShj
b25zdCBBYnN0cmFjdERhdGFiYXNlKik7CisgICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoQWJzdHJh
Y3REYXRhYmFzZSopOworCisgICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0
KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworcHJpdmF0ZToKKyAgICBEYXRhYmFz
ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOworCisjaWYgIVBMQVRGT1JNKENI
Uk9NSVVNKQorcHVibGljOgorICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0
IFN0cmluZyYpOworICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdDsKKwor
ICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQp
OworICAgIGJvb2wgZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiosIFZlY3Rv
cjxTdHJpbmc+JiByZXN1bHQpOworCisgICAgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHNGb3JOYW1l
QW5kT3JpZ2luKGNvbnN0IFN0cmluZyYsIFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgdXNhZ2VGb3JEYXRhYmFzZShjb25zdCBTdHJpbmcmLCBTZWN1cml0eU9yaWdp
biopOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdp
biopOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdp
biopOworICAgIHZvaWQgc2V0UXVvdGEoU2VjdXJpdHlPcmlnaW4qLCB1bnNpZ25lZCBsb25nIGxv
bmcpOworCisgICAgdm9pZCBkZWxldGVBbGxEYXRhYmFzZXMoKTsKKyAgICBib29sIGRlbGV0ZU9y
aWdpbihTZWN1cml0eU9yaWdpbiopOworICAgIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlP
cmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBzZXRDbGllbnQoRGF0YWJh
c2VUcmFja2VyQ2xpZW50Kik7CisKKyAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVz
dCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRhCisgICAgdm9pZCBzY2hlZHVsZU5vdGlmeURh
dGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAg
ICBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsK
KyAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7CisgICAgYm9vbCBk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3Rv
cjxTdHJpbmc+JiByZXN1bHRWZWN0b3IpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZv
ck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGFGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7CisKKyAg
ICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgb3BlblRyYWNr
ZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKworICAgIFN0cmluZyBvcmln
aW5QYXRoKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CisKKyAgICBib29sIGhhc0VudHJ5Rm9yRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7
CisKKyAgICBib29sIGFkZERhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgcG9wdWxhdGVPcmlnaW5zKCk7CisK
KyAgICBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFi
YXNlU2V0OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJh
c2VOYW1lTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBE
YXRhYmFzZU5hbWVNYXAqLCBTZWN1cml0eU9yaWdpbkhhc2g+IERhdGFiYXNlT3JpZ2luTWFwOwor
CisgICAgTXV0ZXggbV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKKyAgICBtdXRhYmxlIE93blB0cjxE
YXRhYmFzZU9yaWdpbk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7CisKKyAgICAvLyBUaGlzIGxvY2sg
cHJvdGVjdHMgbV9kYXRhYmFzZSwgbV9xdW90YU1hcCwgbV9wcm9wb3NlZERhdGFiYXNlcywgbV9k
YXRhYmFzZURpcmVjdG9yeVBhdGgsIG1fb3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0
ZWQsIGFuZCBtX2JlaW5nRGVsZXRlZC4KKyAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CisgICAg
U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4g
UXVvdGFNYXA7CisgICAgbXV0YWJsZSBPd25QdHI8UXVvdGFNYXA+IG1fcXVvdGFNYXA7CisKKyAg
ICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGg7CisKKyAgICBEYXRhYmFzZVRyYWNrZXJD
bGllbnQqIG1fY2xpZW50OworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRGF0YWJhc2VEZXRhaWxzPiBQcm9wb3NlZERhdGFiYXNlOworICAgIEhhc2hTZXQ8
UHJvcG9zZWREYXRhYmFzZSo+IG1fcHJvcG9zZWREYXRhYmFzZXM7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBsb25nPiBOYW1lQ291bnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIE5hbWVDb3VudE1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4g
Q3JlYXRlU2V0OworICAgIENyZWF0ZVNldCBtX2JlaW5nQ3JlYXRlZDsKKyAgICB0eXBlZGVmIEhh
c2hTZXQ8U3RyaW5nPiBOYW1lU2V0OworICAgIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgTmFtZVNldCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gbV9iZWluZ0RlbGV0ZWQ7CisgICAgSGFz
aFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTZWN1cml0eU9yaWdpbkhhc2g+IG1fb3JpZ2lu
c0JlaW5nRGVsZXRlZDsKKyAgICBib29sIGNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2lu
ICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCByZWNvcmRDcmVhdGluZ0Rh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAg
dm9pZCBkb25lQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUpOworICAgIGJvb2wgY3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAq
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIGJvb2wgY2FuRGVsZXRlRGF0YWJhc2Uo
U2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJl
Y29yZERlbGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKyAgICB2b2lkIGRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBkZWxldGluZ0RhdGFiYXNlKFNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBjYW5E
ZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4gKm9yaWdpbik7CisgICAgYm9vbCBkZWxldGluZ09y
aWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsKKyAgICB2b2lkIHJlY29yZERlbGV0aW5nT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOworICAgIHZvaWQgZG9uZURlbGV0aW5nT3JpZ2lu
KFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOworCisgICAgc3RhdGljIHZvaWQgc2NoZWR1bGVGb3JO
b3RpZmljYXRpb24oKTsKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlEYXRhYmFzZXNDaGFuZ2VkKHZv
aWQqKTsKKyNlbHNlCitwdWJsaWM6CisgICAgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5
KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKwor
cHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNl
U2V0OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VO
YW1lTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlTmFtZU1hcCo+IERh
dGFiYXNlT3JpZ2luTWFwOworICAgIGNsYXNzIENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRh
c2s7CisKKyAgICB2b2lkIGNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseShjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgQWJzdHJhY3REYXRhYmFzZSog
ZGF0YWJhc2UpOworCisgICAgTXV0ZXggbV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKKyAgICBtdXRh
YmxlIE93blB0cjxEYXRhYmFzZU9yaWdpbk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKENIUk9NSVVNKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERhdGFiYXNlVHJhY2tl
cl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVHJhY2tlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
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
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBEYXRhYmFzZVRyYWNrZXJDbGllbnRf
aAorI2RlZmluZSBEYXRhYmFzZVRyYWNrZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIERhdGFiYXNlVHJhY2tlckNsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+RGF0YWJhc2VUcmFja2VyQ2xpZW50KCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBEYXRhYmFzZVRyYWNrZXJDbGllbnRf
aAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9P
cmlnaW5RdW90YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisj
aW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIk9yaWdpblVzYWdlUmVjb3Jk
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3JpZ2luUXVvdGFNYW5hZ2VyOjpPcmlnaW5R
dW90YU1hbmFnZXIoKQorI2lmbmRlZiBOREVCVUcKKyAgICA6IG1fdXNhZ2VSZWNvcmRHdWFyZExv
Y2tlZChmYWxzZSkKKyNlbmRpZgoreworfQorCitib29sIE9yaWdpblF1b3RhTWFuYWdlcjo6dHJ5
TG9jaygpCit7CisgICAgYm9vbCBsb2NrZWQgPSBtX3VzYWdlUmVjb3JkR3VhcmQudHJ5TG9jaygp
OworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAobG9ja2VkKQorICAgICAgICBtX3VzYWdlUmVjb3Jk
R3VhcmRMb2NrZWQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKG1fdXNhZ2VSZWNv
cmRHdWFyZExvY2tlZCk7CisjZW5kaWYKKyAgICByZXR1cm4gbG9ja2VkOworfQorCit2b2lkIE9y
aWdpblF1b3RhTWFuYWdlcjo6bG9jaygpCit7CisgICAgbV91c2FnZVJlY29yZEd1YXJkLmxvY2so
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV91c2FnZVJlY29yZEd1YXJkTG9ja2VkID0gdHJ1ZTsK
KyNlbmRpZgorfQorCit2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6dW5sb2NrKCkKK3sKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV91c2FnZVJlY29yZEd1YXJkTG9ja2VkID0gZmFsc2U7CisjZW5kaWYK
KyAgICBtX3VzYWdlUmVjb3JkR3VhcmQudW5sb2NrKCk7Cit9CisKK3ZvaWQgT3JpZ2luUXVvdGFN
YW5hZ2VyOjp0cmFja09yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCit7
CisgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7CisgICAgQVNTRVJUKCFtX3Vz
YWdlTWFwLmNvbnRhaW5zKG9yaWdpbi5nZXQoKSkpOworCisgICAgbV91c2FnZU1hcC5zZXQob3Jp
Z2luLT5pc29sYXRlZENvcHkoKSwgbmV3IE9yaWdpblVzYWdlUmVjb3JkKTsKK30KKworYm9vbCBP
cmlnaW5RdW90YU1hbmFnZXI6OnRyYWNrc09yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKSBj
b25zdAoreworICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOworICAgIHJldHVy
biBtX3VzYWdlTWFwLmNvbnRhaW5zKG9yaWdpbik7Cit9CisKK3ZvaWQgT3JpZ2luUXVvdGFNYW5h
Z2VyOjphZGREYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKK3sKKyAgICBBU1NFUlQo
bV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKKworICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1c2Fn
ZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbik7CisgICAgQVNTRVJUKHVzYWdlUmVjb3Jk
KTsKKworICAgIHVzYWdlUmVjb3JkLT5hZGREYXRhYmFzZShkYXRhYmFzZUlkZW50aWZpZXIuaXNv
bGF0ZWRDb3B5KCksIGZ1bGxQYXRoLmlzb2xhdGVkQ29weSgpKTsKK30KKwordm9pZCBPcmlnaW5R
dW90YU1hbmFnZXI6OnJlbW92ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3VzYWdlUmVjb3Jk
R3VhcmRMb2NrZWQpOworCisgICAgaWYgKE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9
IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHVzYWdlUmVjb3JkLT5yZW1vdmVEYXRh
YmFzZShkYXRhYmFzZUlkZW50aWZpZXIpOworfQorCit2b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6
cmVtb3ZlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKG1fdXNh
Z2VSZWNvcmRHdWFyZExvY2tlZCk7CisKKyAgICBpZiAoT3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdl
UmVjb3JkID0gbV91c2FnZU1hcC5nZXQob3JpZ2luKSkgeworICAgICAgICBtX3VzYWdlTWFwLnJl
bW92ZShvcmlnaW4pOworICAgICAgICBkZWxldGUgdXNhZ2VSZWNvcmQ7CisgICAgfQorfQorCit2
b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6bWFya0RhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRh
dGFiYXNlKQoreworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgQVNTRVJUKG1fdXNhZ2VSZWNv
cmRHdWFyZExvY2tlZCk7CisgICAgT3JpZ2luVXNhZ2VSZWNvcmQqIHVzYWdlUmVjb3JkID0gbV91
c2FnZU1hcC5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIEFTU0VSVCh1c2Fn
ZVJlY29yZCk7CisKKyAgICB1c2FnZVJlY29yZC0+bWFya0RhdGFiYXNlKGRhdGFiYXNlLT5zdHJp
bmdJZGVudGlmaWVyKCkpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luUXVvdGFNYW5h
Z2VyOjpkaXNrVXNhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKK3sKKyAgICBBU1NF
UlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKKworICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1
c2FnZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbik7CisgICAgQVNTRVJUKHVzYWdlUmVj
b3JkKTsKKworICAgIHJldHVybiB1c2FnZVJlY29yZC0+ZGlza1VzYWdlKCk7Cit9CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFn
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
T3JpZ2luUXVvdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
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
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgT3JpZ2luUXVvdGFNYW5hZ2VyX2gKKyNkZWZpbmUgT3JpZ2luUXVvdGFNYW5hZ2VyX2gKKwor
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2gu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIE9yaWdpblVzYWdlUmVjb3JkOworCitj
bGFzcyBPcmlnaW5RdW90YU1hbmFnZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9yaWdp
blF1b3RhTWFuYWdlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9y
aWdpblF1b3RhTWFuYWdlcigpOworCisgICAgYm9vbCB0cnlMb2NrKCk7CisgICAgdm9pZCBsb2Nr
KCk7CisgICAgdm9pZCB1bmxvY2soKTsKKworICAgIHZvaWQgdHJhY2tPcmlnaW4oUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4pOworICAgIGJvb2wgdHJhY2tzT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
KikgY29uc3Q7CisgICAgdm9pZCBhZGREYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKKyAgICB2
b2lkIHJlbW92ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVtb3ZlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisK
KyAgICB2b2lkIG1hcmtEYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7IC8vIE1hcmsgZGlydGlu
ZXNzIG9mIGEgc3BlY2lmaWMgZGF0YWJhc2UuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGRpc2tV
c2FnZShTZWN1cml0eU9yaWdpbiopIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgTXV0
ZXggbV91c2FnZVJlY29yZEd1YXJkOworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fdXNhZ2VS
ZWNvcmRHdWFyZExvY2tlZDsKKyNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIE9yaWdpblVzYWdlUmVjb3JkKiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBP
cmlnaW5Vc2FnZU1hcDsKKyAgICBPcmlnaW5Vc2FnZU1hcCBtX3VzYWdlTWFwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKwor
I2VuZGlmIC8vIE9yaWdpblF1b3RhTWFuYWdlcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
T3JpZ2luVXNhZ2VSZWNvcmQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
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
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcmlnaW5Vc2FnZVJlY29yZC5oIgorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitPcmlnaW5Vc2FnZVJlY29yZDo6T3JpZ2luVXNhZ2VSZWNvcmQo
KQorICAgIDogbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkKGZhbHNlKQoreworfQorCit2b2lkIE9y
aWdpblVzYWdlUmVjb3JkOjphZGREYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgZnVsbFBhdGgpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlTWFwLmNvbnRh
aW5zKGlkZW50aWZpZXIpKTsKKyAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIu
aW1wbCgpLT5oYXNPbmVSZWYoKSB8fCBpZGVudGlmaWVyLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
X0FSRyhmdWxsUGF0aCwgZnVsbFBhdGguaW1wbCgpLT5oYXNPbmVSZWYoKSB8fCBmdWxsUGF0aC5p
c0VtcHR5KCkpOworCisgICAgbV9kYXRhYmFzZU1hcC5zZXQoaWRlbnRpZmllciwgRGF0YWJhc2VF
bnRyeShmdWxsUGF0aCkpOworICAgIG1fdW5rbm93blNldC5hZGQoaWRlbnRpZmllcik7CisKKyAg
ICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBPcmlnaW5Vc2Fn
ZVJlY29yZDo6cmVtb3ZlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAg
IEFTU0VSVChtX2RhdGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1fZGF0
YWJhc2VNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworICAgIG1fdW5rbm93blNldC5yZW1vdmUoaWRl
bnRpZmllcik7CisgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7Cit9CisKK3Zv
aWQgT3JpZ2luVXNhZ2VSZWNvcmQ6Om1hcmtEYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VNYXAuY29udGFpbnMoaWRlbnRpZmllcikpOwor
ICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBsKCktPmhhc09uZVJlZigp
IHx8IGlkZW50aWZpZXIuaXNFbXB0eSgpKTsKKworICAgIG1fdW5rbm93blNldC5hZGQoaWRlbnRp
Zmllcik7CisgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7Cit9CisKK3Vuc2ln
bmVkIGxvbmcgbG9uZyBPcmlnaW5Vc2FnZVJlY29yZDo6ZGlza1VzYWdlKCkKK3sKKyAgICAvLyBV
c2UgdGhlIGxhc3QgY2FjaGVkIHVzYWdlIHZhbHVlIGlmIHdlIGhhdmUgaXQuCisgICAgaWYgKG1f
Y2FjaGVkRGlza1VzYWdlSXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkRGlza1VzYWdl
OworCisgICAgLy8gc3RhdCgpIGZvciB0aGUgc2l6ZXMga25vd24gdG8gYmUgZGlydHkuCisgICAg
SGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBpVW5rbm93biA9IG1fdW5rbm93blNldC5iZWdpbigp
OworICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgZW5kVW5rbm93biA9IG1fdW5rbm93blNl
dC5lbmQoKTsKKyAgICBmb3IgKDsgaVVua25vd24gIT0gZW5kVW5rbm93bjsgKytpVW5rbm93bikg
eworICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBtX2RhdGFiYXNlTWFwLmdldCgqaVVua25v
d24pLmZpbGVuYW1lOworICAgICAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKworICAgICAg
ICAvLyBXaGVuIHdlIGNhbid0IGRldGVybWluZSB0aGUgZmlsZSBzaXplLCB3ZSdsbCBqdXN0IGhh
dmUgdG8gYXNzdW1lIHRoZSBmaWxlIGlzIG1pc3NpbmcvaW5hY2Nlc3NpYmxlLgorICAgICAgICBs
b25nIGxvbmcgc2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUocGF0
aCk7CisgICAgICAgIG1fZGF0YWJhc2VNYXAuc2V0KCppVW5rbm93biwgRGF0YWJhc2VFbnRyeShw
YXRoLCBzaXplKSk7CisgICAgfQorICAgIG1fdW5rbm93blNldC5jbGVhcigpOworCisgICAgLy8g
UmVjYWxjdWxhdGUgdGhlIGNhY2hlZCB1c2FnZSB2YWx1ZS4KKyAgICBtX2NhY2hlZERpc2tVc2Fn
ZSA9IDA7CisgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+OjppdGVyYXRvciBpRGF0
YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFi
YXNlRW50cnk+OjppdGVyYXRvciBlbmREYXRhYmFzZSA9IG1fZGF0YWJhc2VNYXAuZW5kKCk7Cisg
ICAgZm9yICg7IGlEYXRhYmFzZSAhPSBlbmREYXRhYmFzZTsgKytpRGF0YWJhc2UpCisgICAgICAg
IG1fY2FjaGVkRGlza1VzYWdlICs9IGlEYXRhYmFzZS0+c2Vjb25kLnNpemU7CisKKyAgICBtX2Nh
Y2hlZERpc2tVc2FnZUlzVmFsaWQgPSB0cnVlOworICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2Fn
ZTsKK30KKworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJl
Y29yZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBPcmlnaW5Vc2FnZVJl
Y29yZF9oCisjZGVmaW5lIE9yaWdpblVzYWdlUmVjb3JkX2gKKworI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4gCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE9iamVjdHMgb2YgdGhpcyBj
bGFzcyBjYW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgd2l0aCBleHRlcm5hbCBzeW5j
aHJvbml6YXRpb24uCisvLyBTdHJpbmcgYXJndW1lbnRzIGFyZSBhbHNvIHN1cHBvc2VkIHRvIGJl
IGRlZXBseSBjb3BpZWQgYnkgdGhlIGNhbGxlciB3aGVuIG5lY2Vzc2FyeS4KK2NsYXNzIE9yaWdp
blVzYWdlUmVjb3JkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcmlnaW5Vc2FnZVJlY29y
ZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9yaWdpblVzYWdlUmVj
b3JkKCk7CisKKyAgICB2b2lkIGFkZERhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBmdWxsUGF0aCk7CisgICAgdm9pZCByZW1vdmVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIpOworICAgIHZvaWQgbWFya0RhdGFiYXNlKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllcik7IC8vIFNpemUgbWF5IGhhdmUgY2hhbmdlZCwgYW5kIHdpbGwgbmVlZCB0byBi
ZSByZWNhbGN1bGF0ZWQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGRpc2tVc2FnZSgpOworCitw
cml2YXRlOgorICAgIHN0cnVjdCBEYXRhYmFzZUVudHJ5IHsKKyAgICAgICAgRGF0YWJhc2VFbnRy
eSgpIHsgfQorICAgICAgICBEYXRhYmFzZUVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIDog
ZmlsZW5hbWUoZmlsZW5hbWUpIHsgfQorICAgICAgICBEYXRhYmFzZUVudHJ5KGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKSA6IGZpbGVuYW1lKGZpbGVuYW1l
KSwgc2l6ZShzaXplKSB7IH0KKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lOworICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgc2l6ZTsgLy8gVGhpcyBtZW1iZXIgcmVtYWlucyB1bmluaXRpYWxpemVk
IHVudGlsIGRpc2sgdXNhZ2UgaXMgY2FsY3VsYXRlZC4KKyAgICB9OworICAgIEhhc2hNYXA8U3Ry
aW5nLCBEYXRhYmFzZUVudHJ5PiBtX2RhdGFiYXNlTWFwOworICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3Vua25vd25TZXQ7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9jYWNoZWREaXNrVXNhZ2U7
CisgICAgYm9vbCBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTENhbGxiYWNrV3JhcHBlci5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxD
YWxsYmFja1dyYXBwZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBT
UUxDYWxsYmFja1dyYXBwZXJfaAorI2RlZmluZSBTUUxDYWxsYmFja1dyYXBwZXJfaAorCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIEEgaGVscGVyIGNsYXNzIHRvIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgY2Fs
bGJhY2sgb2JqZWN0cyBoZWxkIGJ5CisvLyBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9u
IG9uIHRoZSBwcm9wZXIgdGhyZWFkLiBUaGUgJ3dyYXBwZWQnCisvLyBjYWxsYmFjayBpcyBkZXJl
ZmVyZW5jZWQ6CisvLyAtIGJ5IGRlc3RydWN0aW5nIHRoZSBlbmNsb3Npbmcgd3JhcHBlciAtIG9u
IGFueSB0aHJlYWQKKy8vIC0gYnkgY2FsbGluZyBjbGVhcigpIC0gb24gYW55IHRocmVhZAorLy8g
LSBieSB1bndyYXBwaW5nIGFuZCB0aGVuIGRlcmVmZXJlbmNpbmcgbm9ybWFsbHkgLSBvbiBjb250
ZXh0IHRocmVhZCBvbmx5Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTUUxDYWxsYmFja1dy
YXBwZXIgeworcHVibGljOgorICAgIFNRTENhbGxiYWNrV3JhcHBlcihQYXNzUmVmUHRyPFQ+IGNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQor
ICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgICwgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KG1fY2FsbGJhY2sgPyBzY3JpcHRFeGVjdXRpb25Db250ZXh0IDogMCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LmdldCgpICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpKTsK
KyAgICB9CisKKyAgICB+U1FMQ2FsbGJhY2tXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIGNsZWFy
KCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0OworICAgICAgICBUKiBjYWxsYmFjazsKKyAgICAgICAgewor
ICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICAgICAgaWYg
KCFtX2NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKSB7
CisgICAgICAgICAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgICAgICAgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb250ZXh0ID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJl
bGVhc2UoKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBjYWxsYmFjayA9IG1fY2FsbGJhY2sucmVs
ZWFzZSgpLmxlYWtSZWYoKTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5wb3N0VGFzayhT
YWZlUmVsZWFzZVRhc2s6OmNyZWF0ZShjYWxsYmFjaykpOworICAgIH0KKworICAgIFBhc3NSZWZQ
dHI8VD4gdW53cmFwKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4
KTsKKyAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrIHx8IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
PSAwOworICAgICAgICByZXR1cm4gbV9jYWxsYmFjay5yZWxlYXNlKCk7CisgICAgfQorCisgICAg
Ly8gVXNlZnVsIGZvciBvcHRpbWl6YXRpb25zIG9ubHksIHBsZWFzZSB0ZXN0IHRoZSByZXR1cm4g
dmFsdWUgb2YgdW53cmFwIHRvIGJlIHN1cmUuCisgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBTYWZlUmVsZWFz
ZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxTYWZlUmVsZWFzZVRhc2s+IGNyZWF0ZShUKiBj
YWxsYmFja1RvUmVsZWFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBTYWZlUmVsZWFzZVRhc2soY2FsbGJhY2tUb1JlbGVhc2UpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jYWxsYmFja1RvUmVsZWFz
ZSAmJiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAgICAg
IG1fY2FsbGJhY2tUb1JlbGVhc2UtPmRlcmVmKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kZXJl
ZigpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTYWZlUmVsZWFz
ZVRhc2soVCogY2FsbGJhY2tUb1JlbGVhc2UpCisgICAgICAgICAgICA6IG1fY2FsbGJhY2tUb1Jl
bGVhc2UoY2FsbGJhY2tUb1JlbGVhc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IFQqIG1fY2FsbGJhY2tUb1JlbGVhc2U7CisgICAgfTsKKworICAgIE11dGV4IG1fbXV0ZXg7Cisg
ICAgUmVmUHRyPFQ+IG1fY2FsbGJhY2s7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxDYWxs
YmFja1dyYXBwZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMRXJyb3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXJyb3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTUUxFcnJvcl9oCisjZGVmaW5lIFNRTEVycm9yX2gKKworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNRTEVycm9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTEVycm9yPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2Rl
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxFcnJvcihj
b2RlLCBtZXNzYWdlKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxFcnJvcj4gY3JlYXRl
KHVuc2lnbmVkIGNvZGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBzcWxpdGVDb2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShjb2RlLCBTdHJpbmc6OmZvcm1hdCgiJXMgKCVkKSIs
IG1lc3NhZ2UsIHNxbGl0ZUNvZGUpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FM
RXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2RlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgc3Fs
aXRlQ29kZSwgY29uc3QgY2hhciogc3FsaXRlTWVzc2FnZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjcmVhdGUoY29kZSwgU3RyaW5nOjpmb3JtYXQoIiVzICglZCAlcykiLCBtZXNzYWdlLCBzcWxp
dGVDb2RlLCBzcWxpdGVNZXNzYWdlKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgY29kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZTsgfQorICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9tZXNzYWdlLmlzb2xhdGVkQ29weSgpOyB9CisKKyAgICBlbnVtIFNRTEVycm9yQ29kZSB7
CisgICAgICAgIFVOS05PV05fRVJSID0gMCwKKyAgICAgICAgREFUQUJBU0VfRVJSID0gMSwKKyAg
ICAgICAgVkVSU0lPTl9FUlIgPSAyLAorICAgICAgICBUT09fTEFSR0VfRVJSID0gMywKKyAgICAg
ICAgUVVPVEFfRVJSID0gNCwKKyAgICAgICAgU1lOVEFYX0VSUiA9IDUsCisgICAgICAgIENPTlNU
UkFJTlRfRVJSID0gNiwKKyAgICAgICAgVElNRU9VVF9FUlIgPSA3CisgICAgfTsKKworcHJpdmF0
ZToKKyAgICBTUUxFcnJvcih1bnNpZ25lZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIDog
bV9jb2RlKGNvZGUpLCBtX21lc3NhZ2UobWVzc2FnZS5pc29sYXRlZENvcHkoKSkgeyB9CisgICAg
dW5zaWduZWQgbV9jb2RlOworICAgIFN0cmluZyBtX21lc3NhZ2U7Cit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gU1FMRXJyb3JfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTEVycm9yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTEVycm9yLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXJyb3IuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBD
b25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAg
ICAgSlNOb1N0YXRpY1RhYmxlcworICAgIF0gU1FMRXJyb3IgeworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2RlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG1lc3NhZ2U7CisKKyAgICAgICAgLy8gU1FMRXJyb3JDb2RlOiB1c2VkIG9ubHkg
aW4gdGhlIGFzeW5jIERCIEFQSQorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dO
X0VSUiA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERBVEFCQVNFX0VSUiA9IDE7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFZFUlNJT05fRVJSID0gMjsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgVE9PX0xBUkdFX0VSUiA9IDM7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IFFVT1RBX0VSUiA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IFNZTlRBWF9FUlIgPSA1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVFJBSU5U
X0VSUiA9IDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRJTUVPVVRfRVJSID0gNzsK
KyAgICB9OworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxFcnJvci5pZGwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBhcnJheSBvZiBzdHJ1Y3RzIHRvIHBhaXIgdGhl
IG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMuCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXhjZXB0
aW9uTmFtZXNbXSA9IHsKKyAgICAiVU5LTk9XTl9FUlIiLAorICAgICJEQVRBQkFTRV9FUlIiLAor
ICAgICJWRVJTSU9OX0VSUiIsCisgICAgIlRPT19MQVJHRV9FUlIiLAorICAgICJRVU9UQV9FUlIi
LAorICAgICJTWU5UQVhfRVJSIiwKKyAgICAiQ09OU1RSQUlOVF9FUlIiLAorICAgICJUSU1FT1VU
X0VSUiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25EZXNjcmlwdGlv
bnNbXSA9IHsKKyAgICAiVGhlIG9wZXJhdGlvbiBmYWlsZWQgZm9yIHJlYXNvbnMgdW5yZWxhdGVk
IHRvIHRoZSBkYXRhYmFzZS4iLAorICAgICJUaGUgb3BlcmF0aW9uIGZhaWxlZCBmb3Igc29tZSBy
ZWFzb24gcmVsYXRlZCB0byB0aGUgZGF0YWJhc2UuIiwKKyAgICAiVGhlIGFjdHVhbCBkYXRhYmFz
ZSB2ZXJzaW9uIGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZlcnNpb24uIiwKKyAgICAiRGF0
YSByZXR1cm5lZCBmcm9tIHRoZSBkYXRhYmFzZSBpcyB0b28gbGFyZ2UuIiwKKyAgICAiUXVvdGEg
d2FzIGV4Y2VlZGVkLiIsCisgICAgIkludmFsaWQgb3IgdW5hdXRob3JpemVkIHN0YXRlbWVudDsg
b3IgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgZGlkIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mID8g
cGxhY2Vob2xkZXJzLiIsCisgICAgIkEgY29uc3RyYWludCB3YXMgdmlvbGF0ZWQuIiwKKyAgICAi
QSB0cmFuc2FjdGlvbiBsb2NrIGNvdWxkIG5vdCBiZSBhY3F1aXJlZCBpbiBhIHJlYXNvbmFibGUg
dGltZS4iCit9OworCitDT01QSUxFX0FTU0VSVChXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5h
bWVzKSA9PSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbkRlc2NyaXB0aW9ucyksIFNRTEV4Y2Vw
dGlvblRhYmxlc011c3RNYXRjaCk7CisKK2Jvb2wgU1FMRXhjZXB0aW9uOjppbml0aWFsaXplRGVz
Y3JpcHRpb24oRXhjZXB0aW9uQ29kZSBlYywgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKiBkZXNj
cmlwdGlvbikKK3sKKyAgICBpZiAoZWMgPCBTUUxFeGNlcHRpb25PZmZzZXQgfHwgZWMgPiBTUUxF
eGNlcHRpb25NYXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlc2NyaXB0aW9uLT50
eXBlTmFtZSA9ICJET00gU1FMIjsKKyAgICBkZXNjcmlwdGlvbi0+Y29kZSA9IGVjIC0gU1FMRXhj
ZXB0aW9uT2Zmc2V0OworICAgIGRlc2NyaXB0aW9uLT50eXBlID0gU1FMRXhjZXB0aW9uVHlwZTsK
KworICAgIHNpemVfdCB0YWJsZVNpemUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVz
KTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7CisKKyAgICBkZXNj
cmlwdGlvbi0+bmFtZSA9IHRhYmxlSW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25OYW1lc1t0
YWJsZUluZGV4XSA6IDA7CisgICAgZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9uID0gdGFibGVJbmRl
eCA8IHRhYmxlU2l6ZSA/IGV4Y2VwdGlvbkRlc2NyaXB0aW9uc1t0YWJsZUluZGV4XSA6IDA7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNRTEV4Y2VwdGlvbl9oCisjZGVmaW5lIFNRTEV4Y2VwdGlv
bl9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQmFz
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNRTEV4Y2VwdGlvbiA6IHB1Ymxp
YyBFeGNlcHRpb25CYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxFeGNl
cHRpb24+IGNyZWF0ZShjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxFeGNlcHRpb24oZGVzY3Jp
cHRpb24pKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50IFNRTEV4Y2VwdGlvbk9mZnNl
dCA9IDEwMDA7CisgICAgc3RhdGljIGNvbnN0IGludCBTUUxFeGNlcHRpb25NYXggPSAxMDk5Owor
CisgICAgZW51bSBTUUxFeGNlcHRpb25Db2RlIHsKKyAgICAgICAgVU5LTk9XTl9FUlIgPSBTUUxF
eGNlcHRpb25PZmZzZXQsCisgICAgICAgIERBVEFCQVNFX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNl
dCArIDEsCisgICAgICAgIFZFUlNJT05fRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgMiwKKyAg
ICAgICAgVE9PX0xBUkdFX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDMsCisgICAgICAgIFFV
T1RBX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDQsCisgICAgICAgIFNZTlRBWF9FUlIgPSBT
UUxFeGNlcHRpb25PZmZzZXQgKyA1LAorICAgICAgICBDT05TVFJBSU5UX0VSUiA9IFNRTEV4Y2Vw
dGlvbk9mZnNldCArIDYsCisgICAgICAgIFRJTUVPVVRfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0
ICsgNworICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplRGVzY3JpcHRpb24oRXhj
ZXB0aW9uQ29kZSwgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKik7CisKK3ByaXZhdGU6CisgICAg
U1FMRXhjZXB0aW9uKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
CisgICAgICAgIDogRXhjZXB0aW9uQmFzZShkZXNjcmlwdGlvbikKKyAgICB7CisgICAgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2VuZGlmIC8vIFNRTEV4Y2VwdGlvbl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTEV4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uaWRsCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uaWRs
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50
ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAorICAgICAgICBKU05v
U3RhdGljVGFibGVzLAorICAgICAgICBEb05vdENoZWNrQ29uc3RhbnRzCisgICAgXSBTUUxFeGNl
cHRpb24geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2RlOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CisKKyAgICAgICAg
Ly8gU1FMRXhjZXB0aW9uQ29kZTogdXNlZCBvbmx5IGluIHRoZSBzeW5jIERCIEFQSQorICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9IDA7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IERBVEFCQVNFX0VSUiA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFZFUlNJT05fRVJSID0gMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVE9PX0xB
UkdFX0VSUiA9IDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFFVT1RBX0VSUiA9IDQ7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNZTlRBWF9FUlIgPSA1OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVFJBSU5UX0VSUiA9IDY7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IFRJTUVPVVRfRVJSID0gNzsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0
U2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgdW5zaWduZWQgY29uc3QgTWF4RXJyb3JDb2RlID0gMjsKKworU1FMUmVzdWx0U2V0OjpT
UUxSZXN1bHRTZXQoKQorICAgIDogbV9yb3dzKFNRTFJlc3VsdFNldFJvd0xpc3Q6OmNyZWF0ZSgp
KQorICAgICwgbV9pbnNlcnRJZCgwKQorICAgICwgbV9pbnNlcnRJZFNldChmYWxzZSkKKyAgICAs
IG1fcm93c0FmZmVjdGVkKDApCit7Cit9CisKK2ludDY0X3QgU1FMUmVzdWx0U2V0OjppbnNlcnRJ
ZChFeGNlcHRpb25Db2RlJiBlKSBjb25zdAoreworICAgIC8vIDQuMTEuNCAtIFJldHVybiB0aGUg
aWQgb2YgdGhlIGxhc3Qgcm93IGluc2VydGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBxdWVyeQorICAg
IC8vIElmIHRoZSBxdWVyeSBkaWRuJ3QgcmVzdWx0IGluIGFueSByb3dzIGJlaW5nIGFkZGVkLCBy
YWlzZSBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uCisgICAgaWYgKG1faW5zZXJ0SWRT
ZXQpCisgICAgICAgIHJldHVybiBtX2luc2VydElkOworCisgICAgZSA9IElOVkFMSURfQUNDRVNT
X0VSUjsKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBTUUxSZXN1bHRTZXQ6OnJvd3NBZmZlY3Rl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm93c0FmZmVjdGVkOworfQorCitTUUxSZXN1bHRT
ZXRSb3dMaXN0KiBTUUxSZXN1bHRTZXQ6OnJvd3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jv
d3MuZ2V0KCk7Cit9CisKK3ZvaWQgU1FMUmVzdWx0U2V0OjpzZXRJbnNlcnRJZChpbnQ2NF90IGlk
KQoreworICAgIEFTU0VSVCghbV9pbnNlcnRJZFNldCk7CisKKyAgICBtX2luc2VydElkID0gaWQ7
CisgICAgbV9pbnNlcnRJZFNldCA9IHRydWU7Cit9CisKK3ZvaWQgU1FMUmVzdWx0U2V0OjpzZXRS
b3dzQWZmZWN0ZWQoaW50IGNvdW50KQoreworICAgIG1fcm93c0FmZmVjdGVkID0gY291bnQ7Cit9
CisKK30KKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMUmVzdWx0U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU1FMUmVzdWx0U2V0X2gKKyNkZWZpbmUgU1FMUmVzdWx0U2V0
X2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJTUUxSZXN1bHRTZXRS
b3dMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgU1FM
UmVzdWx0U2V0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFJlc3VsdFNldD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNRTFJlc3VsdFNldCk7IH0KKworICAgIFNRTFJlc3VsdFNldFJv
d0xpc3QqIHJvd3MoKSBjb25zdDsKKworICAgIGludDY0X3QgaW5zZXJ0SWQoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OworICAgIGludCByb3dzQWZmZWN0ZWQoKSBjb25zdDsKKworLy8gRm9yIGludGVy
bmFsIChub24tSlMpIHVzZQorICAgIHZvaWQgc2V0SW5zZXJ0SWQoaW50NjRfdCk7CisgICAgdm9p
ZCBzZXRSb3dzQWZmZWN0ZWQoaW50KTsKKworcHJpdmF0ZToKKyAgICBTUUxSZXN1bHRTZXQoKTsK
KworICAgIFJlZlB0cjxTUUxSZXN1bHRTZXRSb3dMaXN0PiBtX3Jvd3M7CisgICAgaW50NjRfdCBt
X2luc2VydElkOworICAgIGJvb2wgbV9pbnNlcnRJZFNldDsKKyAgICBpbnQgbV9yb3dzQWZmZWN0
ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
U1FMUmVzdWx0U2V0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMUmVzdWx0U2V0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5pZGwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKKyAgICAgICAgT21pdENvbnN0cnVjdG9yLAor
ICAgICAgICBKU05vU3RhdGljVGFibGVzCisgICAgXSBTUUxSZXN1bHRTZXQgeworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgU1FMUmVzdWx0U2V0Um93TGlzdCByb3dzOworCisjaWYgIWRlZmlu
ZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBsb25nIGluc2VydElkCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisjZWxzZQorICAgICAgICAvLyBFeHBsaWNpdGVseSBjaG9vc2UgJ2xvbmcgbG9uZycgaGVy
ZSB0byBhdm9pZCBhIDY0Yml0LT4zMmJpdCBzaG9ydGVuaW5nIHdhcm5pbmcgZm9yIHVzLgorICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsb25nIGluc2VydElkCisgICAgICAgICAgICBn
ZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgcm93c0FmZmVjdGVkOworICAgIH07Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5pZGwKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRS
b3dMaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
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
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0Lmgi
CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vu
c2lnbmVkIFNRTFJlc3VsdFNldFJvd0xpc3Q6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1f
cmVzdWx0LnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChtX3Jl
c3VsdC5zaXplKCkgJSBtX2NvbHVtbnMuc2l6ZSgpID09IDApOworCisgICAgcmV0dXJuIG1fcmVz
dWx0LnNpemUoKSAvIG1fY29sdW1ucy5zaXplKCk7Cit9CisKK30KKworI2VuZGlmCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3Vs
dFNldFJvd0xpc3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRp
dmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNl
dFJvd0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFJlc3VsdFNldFJvd0xpc3RfaAorI2RlZmluZSBT
UUxSZXN1bHRTZXRSb3dMaXN0X2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSAiU1FMVmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTUUxSZXN1
bHRTZXRSb3dMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8U1FMUmVzdWx0U2V0Um93TGlzdD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldFJvd0xpc3Q+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxSZXN1bHRTZXRSb3dMaXN0KTsgfQorCisgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGNvbHVtbk5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1
bW5zOyB9CisgICAgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgdmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV9yZXN1bHQ7IH0KKworICAgIHZvaWQgYWRkQ29sdW1uKGNvbnN0IFN0cmluZyYgbmFtZSkg
eyBtX2NvbHVtbnMuYXBwZW5kKG5hbWUpOyB9CisgICAgdm9pZCBhZGRSZXN1bHQoY29uc3QgU1FM
VmFsdWUmIHJlc3VsdCkgeyBtX3Jlc3VsdC5hcHBlbmQocmVzdWx0KTsgfQorCisgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU1FMUmVzdWx0U2V0Um93TGlzdCgp
IHsgfQorCisgICAgVmVjdG9yPFN0cmluZz4gbV9jb2x1bW5zOworICAgIFZlY3RvcjxTUUxWYWx1
ZT4gbV9yZXN1bHQ7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93
TGlzdC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3Qu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
UmVzdWx0U2V0Um93TGlzdC5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAg
ICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgIF0gU1FMUmVzdWx0U2V0Um93TGlzdCB7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAgW0N1
c3RvbV0gRE9NT2JqZWN0IGl0ZW0oaW4gdW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgfTsKK30K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMUmVzdWx0U2V0Um93TGlzdC5pZGwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
U3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgor
CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxT
dGF0ZW1lbnRDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShEYXRhYmFzZSogZGF0
YWJhc2UsIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBh
cmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNz
UmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJt
aXNzaW9ucykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFN0YXRlbWVudChkYXRhYmFz
ZSwgc3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNz
aW9ucykpOworfQorCitTUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChEYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNz
aW9ucykKKyAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5pc29sYXRlZENvcHkoKSkKKyAgICAs
IG1fYXJndW1lbnRzKGFyZ3VtZW50cykKKyAgICAsIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVy
KGNhbGxiYWNrLCBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9z
dGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlcihlcnJvckNhbGxiYWNrLCBkYXRhYmFzZS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykK
K3sKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQoreworICAg
IEFTU0VSVCghbV9yZXN1bHRTZXQpOworCisgICAgLy8gSWYgd2UncmUgcmUtcnVubmluZyB0aGlz
IHN0YXRlbWVudCBhZnRlciBhIHF1b3RhIHZpb2xhdGlvbiwgd2UgbmVlZCB0byBjbGVhciB0aGF0
IGVycm9yIG5vdworICAgIGNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKKworICAgIC8vIFRoaXMg
dHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIG1hcmtlZCBiYWQgd2hpbGUgaXQgd2FzIGJlaW5n
IHNldCB1cCBvbiB0aGUgbWFpbiB0aHJlYWQsCisgICAgLy8gc28gaWYgdGhlcmUgaXMgc3RpbGwg
YW4gZXJyb3IsIHJldHVybiBmYWxzZS4KKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZGItPnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhtX3Blcm1pc3Npb25z
KTsKKworICAgIFNRTGl0ZURhdGFiYXNlKiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2Uo
KTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVu
dCk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRv
IHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9z
dGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRJbnRlcnJ1cHQpCisgICAgICAgICAg
ICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291
bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6
OlNZTlRBWF9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFi
YXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50
UmVzdWx0KDEsIG1fZXJyb3ItPmNvZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIC8vIEZJWE1FOiAgSWYgdGhlIHN0YXRlbWVudCB1c2VzIHRoZSA/IyMj
IHN5bnRheCBzdXBwb3J0ZWQgYnkgc3FsaXRlLCB0aGUgYmluZCBwYXJhbWV0ZXIgY291bnQgaXMg
dmVyeSBsaWtlbHkgb2ZmIGZyb20gdGhlIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcy4KKyAgICAv
LyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGV5IG1pZ2h0IGJlIHRyeWluZyB0byBkbyBzb21ldGhp
bmcgZmlzaHkgb3IgbWFsaWNpb3VzCisgICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291
bnQoKSAhPSBtX2FyZ3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJC
aW5kIHBhcmFtZXRlciBjb3VudCBkb2Vzbid0IG1hdGNoIG51bWJlciBvZiBxdWVzdGlvbiBtYXJr
cyIpOworICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShkYi0+aXNJbnRlcnJ1cHRl
ZCgpID8gU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiA6IFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVt
YmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBj
b3VudCIpOworICAgICAgICBkYi0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCgyLCBtX2Vy
cm9yLT5jb2RlKCksIDApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7CisgICAgICAgICAgICBzZXRGYWls
dXJlRHVlVG9RdW90YShkYik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIkZhaWxlZCB0byBiaW5kIHZhbHVlIGluZGV4ICVpIHRvIHN0YXRlbWVudCBm
b3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBtX3N0YXRlbWVudC5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBkYi0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCgzLCBTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCByZXN1bHQpOworICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgImNvdWxkIG5vdCBiaW5kIHZhbHVlIiwgcmVzdWx0
LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0ID0g
U1FMUmVzdWx0U2V0OjpjcmVhdGUoKTsKKworICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZldGNoIHRo
ZSBjb2x1bW4gbmFtZXMuCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0
ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cyA9
IHJlc3VsdFNldC0+cm93cygpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1u
Q291bnQ7IGkrKykKKyAgICAgICAgICAgIHJvd3MtPmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29s
dW1uTmFtZShpKSk7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb2x1bW5Db3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHJvd3MtPmFkZFJlc3VsdChz
dGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoaSkpOworCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0
ZW1lbnQuc3RlcCgpOworICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsK
KworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIGRi
LT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDQsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIs
IHJlc3VsdCk7CisgICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJv
cjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IGl0ZXJhdGUgcmVzdWx0cyIsIHJlc3VsdCwgZGF0
YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAg
Ly8gRGlkbid0IGZpbmQgYW55dGhpbmcsIG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgaWYgKGRi
LT5sYXN0QWN0aW9uV2FzSW5zZXJ0KCkpCisgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2Vy
dElkKGRhdGFiYXNlLT5sYXN0SW5zZXJ0Um93SUQoKSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQg
PT0gU1FMUmVzdWx0RnVsbCkgeworICAgICAgICAvLyBSZXR1cm4gdGhlIFF1b3RhIGVycm9yIC0g
dGhlIGRlbGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVt
ZW50IG1pZ2h0IGJlIHJlLXJ1bgorICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YShkYik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYi0+cmVwb3J0RXhl
Y3V0ZVN0YXRlbWVudFJlc3VsdCg1LCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCByZXN1bHQpOwor
ICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCAiY291bGQgbm90IGV4ZWN1dGUgc3RhdGVtZW50IiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6
IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3VyYXRl
IiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNlCisgICAgLy8gc3FsaXRlM190b3RhbF9jaGFu
Z2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGluY2x1
ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyCisgICAgLy8gRm9yIG5vdywg
dGhpcyBzZWVtcyBzdWZmaWNpZW50CisgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0
YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOworCisgICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7Cisg
ICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoMCwgLTEsIDApOyAvLyBPSworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTFN0YXRlbWVudDo6c2V0RGF0YWJhc2VEZWxldGVk
RXJyb3IoRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9y
ZXN1bHRTZXQpOworICAgIGRhdGFiYXNlLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDYs
IFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBi
ZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFiYXNlIik7Cit9CisKK3ZvaWQgU1FMU3Rh
dGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sK
KyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKKyAgICBkYXRhYmFzZS0+cmVw
b3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg3LCBTUUxFcnJvcjo6VkVSU0lPTl9FUlIsIDApOwor
ICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VSUiwgImN1
cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVudCBk
byBub3QgbWF0Y2giKTsKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsK
KworICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOworCisgICAgUmVmUHRyPFNRTFN0YXRl
bWVudENhbGxiYWNrPiBjYWxsYmFjayA9IG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyLnVud3Jh
cCgpOworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
ID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKworICAgIC8vIENh
bGwgdGhlIGFwcHJvcHJpYXRlIHN0YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVz
dWx0ZWQgaW4gYW4gZXJyb3IsCisgICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0
byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2suCisgICAgaWYgKG1fZXJyb3IpIHsKKyAg
ICAgICAgQVNTRVJUKGVycm9yQ2FsbGJhY2spOworICAgICAgICBjYWxsYmFja0Vycm9yID0gZXJy
b3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOworICAg
IH0gZWxzZSBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhY2FsbGJhY2st
PmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CisKKyAgICByZXR1
cm4gY2FsbGJhY2tFcnJvcjsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNldEZhaWx1cmVEdWVU
b1F1b3RhKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1f
cmVzdWx0U2V0KTsKKyAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg4
LCBTUUxFcnJvcjo6UVVPVEFfRVJSLCAwKTsKKyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZShTUUxFcnJvcjo6UVVPVEFfRVJSLCAidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0
b3JhZ2Ugc3BhY2UsIG9yIHRoZSBzdG9yYWdlIHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNl
ciBkZWNsaW5lZCB0byBhbGxvdyBtb3JlIHNwYWNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50
OjpjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCkKK3sKKyAgICBpZiAobGFzdEV4ZWN1dGlvbkZhaWxl
ZER1ZVRvUXVvdGEoKSkKKyAgICAgICAgbV9lcnJvciA9IDA7Cit9CisKK2Jvb2wgU1FMU3RhdGVt
ZW50OjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZXJyb3IgJiYgbV9lcnJvci0+Y29kZSgpID09IFNRTEVycm9yOjpRVU9UQV9FUlI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFN0YXRlbWVudC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxTdGF0ZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMU3RhdGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZu
ZGVmIFNRTFN0YXRlbWVudF9oCisjZGVmaW5lIFNRTFN0YXRlbWVudF9oCisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
UUxDYWxsYmFja1dyYXBwZXIuaCIKKyNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRl
ICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlOworY2xhc3Mg
U1FMRXJyb3I7CitjbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFjazsKK2NsYXNzIFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s7CitjbGFzcyBTUUxUcmFuc2FjdGlvbjsKKworY2xhc3MgU1FMU3RhdGVt
ZW50IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFN0YXRlbWVudD4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKERhdGFiYXNlKiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBp
bnQgcGVybWlzc2lvbnMpOworCisgICAgYm9vbCBleGVjdXRlKERhdGFiYXNlKik7CisgICAgYm9v
bCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0OworCisgICAgYm9vbCBoYXNT
dGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFw
cGVyLmhhc0NhbGxiYWNrKCk7IH0KKyAgICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2so
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxi
YWNrKCk7IH0KKworICAgIHZvaWQgc2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoRGF0YWJhc2UqKTsK
KyAgICB2b2lkIHNldFZlcnNpb25NaXNtYXRjaGVkRXJyb3IoRGF0YWJhc2UqKTsKKworICAgIGJv
b2wgcGVyZm9ybUNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CisKKyAgICBTUUxFcnJvciogc3Fs
RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9Citwcml2YXRlOgorICAgIFNR
TFN0YXRlbWVudChEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMp
OworCisgICAgdm9pZCBzZXRGYWlsdXJlRHVlVG9RdW90YShEYXRhYmFzZSopOworICAgIHZvaWQg
Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOworCisgICAgU3RyaW5nIG1fc3RhdGVtZW50OworICAg
IFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxD
YWxsYmFja1dyYXBwZXI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrV3JhcHBlcjsKKworICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsKKyAgICBS
ZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsKKworICAgIGludCBtX3Blcm1pc3Npb25z
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKKworI2VuZGlmIC8vIFNRTFN0YXRlbWVudF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxs
YmFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lm
bmRlZiBTUUxTdGF0ZW1lbnRDYWxsYmFja19oCisjZGVmaW5lIFNRTFN0YXRlbWVudENhbGxiYWNr
X2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTUUxUcmFuc2Fj
dGlvbjsKK2NsYXNzIFNRTFJlc3VsdFNldDsKKworY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCopID0gMDsK
K307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNr
LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
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
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKyAg
ICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAg
IENhbGxiYWNrCisgICAgXSBTUUxTdGF0ZW1lbnRDYWxsYmFjayB7CisgICAgICAgIGJvb2xlYW4g
aGFuZGxlRXZlbnQoaW4gU1FMVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24sIGluIFNRTFJlc3VsdFNl
dCByZXN1bHRTZXQpOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tfaAorI2RlZmluZSBTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTUUxUcmFuc2FjdGlvbjsKK2NsYXNzIFNRTEVycm9yOworCitjbGFzcyBTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9u
KiwgU1FMRXJyb3IqKSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFja19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIENhbGxiYWNrCisgICAgXSBT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIHsKKyAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBoYW5k
bGVFdmVudChpbiBTUUxUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiwgaW4gU1FMRXJyb3IgZXJyb3Ip
OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudFN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FM
U3RhdGVtZW50U3luYy5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNR
TFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTUUxTdGF0ZW1lbnRTeW5jOjpTUUxTdGF0ZW1lbnRTeW5jKGNvbnN0IFN0cmluZyYgc3Rh
dGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIGludCBwZXJtaXNzaW9u
cykKKyAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudCkKKyAgICAsIG1fYXJndW1lbnRzKGFyZ3Vt
ZW50cykKKyAgICAsIG1fcGVybWlzc2lvbnMocGVybWlzc2lvbnMpCit7CisgICAgQVNTRVJUKCFt
X3N0YXRlbWVudC5pc0VtcHR5KCkpOworfQorCitQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FM
U3RhdGVtZW50U3luYzo6ZXhlY3V0ZShEYXRhYmFzZVN5bmMqIGRiLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBkYi0+c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKG1fcGVybWlzc2lvbnMpOwor
CisgICAgU1FMaXRlRGF0YWJhc2UqIGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgpOwor
CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKyAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIGVjID0gKHJlc3VsdCA9PSBTUUxSZXN1bHRJbnRlcnJ1
cHQgPyBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiA6IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VS
Uik7CisgICAgICAgIGRiLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjb3VsZCBub3QgcHJlcGFyZSBz
dGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGlmIChzdGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkg
IT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7CisgICAgICAgIGVjID0gKGRiLT5pc0ludGVycnVwdGVk
KCk/IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSIDogU1FMRXhjZXB0aW9uOjpTWU5UQVhfRVJS
KTsKKyAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoIm51bWJlciBvZiAnPydzIGluIHN0
YXRlbWVudCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1l
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFsdWUo
aSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRG
dWxsKSB7CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSOworICAgICAg
ICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoInRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFp
bmluZyBzdG9yYWdlIHNwYWNlIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIGVjID0g
U1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgICAgICBkYi0+c2V0TGFzdEVycm9y
TWVzc2FnZSgiY291bGQgbm90IGJpbmQgdmFsdWUiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRlKCk7
CisKKyAgICAvLyBTdGVwIHNvIHdlIGNhbiBmZXRjaCB0aGUgY29sdW1uIG5hbWVzLgorICAgIHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cp
IHsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LmNvbHVtbkNvdW50KCk7Cisg
ICAgICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCisgICAgICAgICAg
ICByb3dzLT5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworCisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykK
KyAgICAgICAgICAgICAgICByb3dzLT5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KGkpKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAg
fSB3aGlsZSAocmVzdWx0ID09IFNRTFJlc3VsdFJvdyk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJB
U0VfRVJSOworICAgICAgICAgICAgZGItPnNldExhc3RFcnJvck1lc3NhZ2UoImNvdWxkIG5vdCBp
dGVyYXRlIHJlc3VsdHMiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdERvbmUpIHsKKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcsIG9yIHdhcyBh
biBpbnNlcnQuCisgICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQorICAgICAg
ICAgICAgcmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lEKCkp
OworICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgLy8g
UXVvdGEgZXJyb3IsIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNwYWNlIGFu
ZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4uCisgICAgICAgIGVjID0gU1FMRXhjZXB0
aW9uOjpRVU9UQV9FUlI7CisgICAgICAgIGRiLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ0aGVyZSB3
YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFnZSBzcGFjZSIpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJS
OworICAgICAgICBkYi0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY291bGQgbm90IGV4ZWN1dGUgc3Rh
dGVtZW50IiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICByZXN1bHRTZXQtPnNldFJvd3NBZmZlY3RlZChkYXRhYmFzZS0+
bGFzdENoYW5nZXMoKSk7CisgICAgcmV0dXJuIHJlc3VsdFNldC5yZWxlYXNlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudFN5bmMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBu
YXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRl
bWVudFN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFN0YXRlbWVudFN5bmMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTUUxTdGF0ZW1lbnRTeW5jX2gKKyNkZWZpbmUgU1FMU3RhdGVtZW50
U3luY19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERhdGFiYXNlU3luYzsKK2NsYXNzIFNRTFJlc3VsdFNldDsKKwordHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKKworY2xhc3MgU1FMU3RhdGVtZW50U3luYyB7CitwdWJsaWM6CisgICAgU1FMU3Rh
dGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVl
PiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpOworCisgICAgUGFzc1JlZlB0cjxTUUxSZXN1
bHRTZXQ+IGV4ZWN1dGUoRGF0YWJhc2VTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRl
OgorICAgIFN0cmluZyBtX3N0YXRlbWVudDsKKyAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1l
bnRzOworICAgIGludCBtX3Blcm1pc3Npb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIFNRTFN0YXRl
bWVudFN5bmNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
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
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb24uaCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNs
dWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgorI2luY2x1
ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlICJTUUxFcnJvci5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5j
bHVkZSAiU1FMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCisj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAi
Vm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisvLyBUaGVyZSdzIG5vIHdh
eSBvZiBrbm93aW5nIGV4YWN0bHkgaG93IG11Y2ggbW9yZSBzcGFjZSB3aWxsIGJlIHJlcXVpcmVk
IHdoZW4gYSBzdGF0ZW1lbnQgaGl0cyB0aGUgcXVvdGEgbGltaXQuCisvLyBGb3Igbm93LCB3ZSds
bCBhcmJpdHJhcmlseSBjaG9vc2UgY3VycmVudFF1b3RhICsgMW1iLgorLy8gSW4gdGhlIGZ1dHVy
ZSB3ZSBkZWNpZGUgdG8gdHJhY2sgaWYgYSBzaXplIGluY3JlYXNlIHdhc24ndCBlbm91Z2gsIGFu
ZCBhc2sgZm9yIGxhcmdlci1hbmQtbGFyZ2VyIGluY3JlYXNlcyB1bnRpbCBpdHMgZW5vdWdoLgor
c3RhdGljIGNvbnN0IGludCBEZWZhdWx0UXVvdGFTaXplSW5jcmVhc2UgPSAxMDQ4NTc2OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IFNRTFRyYW5z
YWN0aW9uOjpjcmVhdGUoRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsKK30KKworU1FM
VHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX25l
eHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCisgICAgLCBtX2V4ZWN1dGVTcWxB
bGxvd2VkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZShkYikKKyAgICAsIG1fd3JhcHBlcih3cmFw
cGVyKQorICAgICwgbV9jYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCisgICAgLCBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIoc3VjY2Vzc0NhbGxi
YWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9lcnJvckNhbGxiYWNr
V3JhcHBlcihlcnJvckNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICwgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCisgICAgLCBtX21vZGlmaWVk
RGF0YWJhc2UoZmFsc2UpCisgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKKyAgICAsIG1fcmVh
ZE9ubHkocmVhZE9ubHkpCisgICAgLCBtX2hhc1ZlcnNpb25NaXNtYXRjaChmYWxzZSkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZSk7Cit9CisKK1NRTFRyYW5zYWN0aW9uOjp+U1FMVHJhbnNhY3Rp
b24oKQoreworICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7Cit9CisKK3ZvaWQgU1FM
VHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0
IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxs
YmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY2Fs
bGJhY2tFcnJvciwgRXhjZXB0aW9uQ29kZSYgZSkKK3sKKyAgICBpZiAoIW1fZXhlY3V0ZVNxbEFs
bG93ZWQgfHwgIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CisgICAgICAgIGUgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBwZXJtaXNzaW9ucyA9
IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2Ut
PmRhdGFiYXNlQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNzKCkpCisgICAgICAgIHBlcm1p
c3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6Tm9BY2Nlc3NNYXNrOworICAgIGVsc2UgaWYg
KG1fcmVhZE9ubHkpCisgICAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6
UmVhZE9ubHlNYXNrOworCisgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50ID0gU1FM
U3RhdGVtZW50OjpjcmVhdGUobV9kYXRhYmFzZS5nZXQoKSwgc3FsU3RhdGVtZW50LCBhcmd1bWVu
dHMsIGNhbGxiYWNrLCBjYWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7CisKKyAgICBpZiAobV9k
YXRhYmFzZS0+ZGVsZXRlZCgpKQorICAgICAgICBzdGF0ZW1lbnQtPnNldERhdGFiYXNlRGVsZXRl
ZEVycm9yKG1fZGF0YWJhc2UuZ2V0KCkpOworCisgICAgZW5xdWV1ZVN0YXRlbWVudChzdGF0ZW1l
bnQpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uOjplbnF1ZXVlU3RhdGVtZW50KFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
c3RhdGVtZW50TXV0ZXgpOworICAgIG1fc3RhdGVtZW50UXVldWUuYXBwZW5kKHN0YXRlbWVudCk7
Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitjb25zdCBjaGFyKiBTUUxUcmFuc2FjdGlvbjo6ZGVi
dWdTdGVwTmFtZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0ZXApCit7
CisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaykKKyAgICAgICAg
cmV0dXJuICJhY3F1aXJlTG9jayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rp
b246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICAgICAgcmV0dXJuICJvcGVuVHJh
bnNhY3Rpb25BbmRQcmVmbGlnaHQiOworICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0
aW9uOjpydW5TdGF0ZW1lbnRzKQorICAgICAgICByZXR1cm4gInJ1blN0YXRlbWVudHMiOworICAg
IGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KQor
ICAgICAgICByZXR1cm4gInBvc3RmbGlnaHRBbmRDb21taXQiOworICAgIGVsc2UgaWYgKHN0ZXAg
PT0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sp
CisgICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIjsK
KyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9u
Q2FsbGJhY2spCisgICAgICAgIHJldHVybiAiZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2siOwor
ICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKQorICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2siOworICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3Rh
dGVtZW50Q2FsbGJhY2spCisgICAgICAgIHJldHVybiAiZGVsaXZlclN0YXRlbWVudENhbGxiYWNr
IjsKKyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5j
cmVhc2VDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuICJkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxi
YWNrIjsKKyAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nl
c3NDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIjsKKyAg
ICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0Nh
bGxiYWNrKQorICAgICAgICByZXR1cm4gImNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayI7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gIlVOS05PV04iOworfQorI2VuZGlmCisKK3ZvaWQgU1FM
VHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCkK
K3sKKyAgICBpZiAobV9kYXRhYmFzZS0+b3BlbmVkKCkgJiYgIW1fZGF0YWJhc2UtPmlzSW50ZXJy
dXB0ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdhcyBz
dG9wcGVkLCBkb24ndCBkbyBhbnl0aGluZyBhbmQgY2FuY2VsIHF1ZXVlZCB3b3JrCisgICAgTE9H
KFN0b3JhZ2VBUEksICJEYXRhYmFzZSB3YXMgc3RvcHBlZCBvciBpbnRlcnJ1cHRlZCAtIGNhbmNl
bGxpbmcgd29yayBmb3IgdGhpcyB0cmFuc2FjdGlvbiIpOworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3N0YXRlbWVudE11dGV4KTsKKyAgICBtX3N0YXRlbWVudFF1ZXVlLmNsZWFyKCk7CisgICAg
bV9uZXh0U3RlcCA9IDA7CisKKyAgICAvLyBSZWxlYXNlIHRoZSB1bm5lZWRlZCBjYWxsYmFja3Ms
IHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisgICAgbV9jYWxsYmFja1dyYXBwZXIuY2xlYXIo
KTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2Fs
bGJhY2tXcmFwcGVyLmNsZWFyKCk7CisKKyAgICAvLyBUaGUgbmV4dCBzdGVwcyBzaG91bGQgYmUg
ZXhlY3V0ZWQgb25seSBpZiB3ZSdyZSBvbiB0aGUgREIgdGhyZWFkLgorICAgIGlmIChjdXJyZW50
VGhyZWFkKCkgIT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCktPmdldFRocmVhZElEKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBjdXJyZW50
IFNRTGl0ZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgc3RvcHBlZCwgYXMgd2VsbAorICAgIGlmICht
X3NxbGl0ZVRyYW5zYWN0aW9uKSB7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnN0b3Ao
KTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgIH0KKworICAgIGlm
IChtX2xvY2tBY3F1aXJlZCkKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKK30KKworCitib29sIFNRTFRyYW5zYWN0aW9uOjpw
ZXJmb3JtTmV4dFN0ZXAoKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAlc1xuIiwgZGVi
dWdTdGVwTmFtZShtX25leHRTdGVwKSk7CisKKyAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FM
VHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrIHx8CisgICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNR
TFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgfHwKKyAgICAgICAgICAg
bV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMgfHwKKyAgICAgICAg
ICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQgfHwK
KyAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1
Y2Nlc3NDYWxsYmFjayB8fAorICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKTsKKworICAgIGNoZWNrQW5k
SGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCk7CisKKyAgICBpZiAobV9uZXh0U3Rl
cCkKKyAgICAgICAgKHRoaXMtPiptX25leHRTdGVwKSgpOworCisgICAgLy8gSWYgdGhlcmUgaXMg
bm8gbmV4dFN0ZXAgYWZ0ZXIgcGVyZm9ybWluZyB0aGUgYWJvdmUgc3RlcCwgdGhlIHRyYW5zYWN0
aW9uIGlzIGNvbXBsZXRlCisgICAgcmV0dXJuICFtX25leHRTdGVwOworfQorCit2b2lkIFNRTFRy
YW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiYWNrKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQ
SSwgIkNhbGxiYWNrICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKKworICAgIEFT
U0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2Fs
bGJhY2sgfHwKKyAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2
ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgfHwKKyAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayB8fAorICAgICAgICAgICBt
X25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFj
ayB8fAorICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1
Y2Nlc3NDYWxsYmFjayk7CisKKyAgICBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWRE
YXRhYmFzZSgpOworCisgICAgaWYgKG1fbmV4dFN0ZXApCisgICAgICAgICh0aGlzLT4qbV9uZXh0
U3RlcCkoKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bm90aWZ5RGF0YWJhc2VUaHJlYWRJ
c1NodXR0aW5nRG93bigpCit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFz
ZSgpLT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7
CisKKyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBy
b2xsIGl0IGJhY2sgaGVyZSwgc2luY2UgdGhpcyBpcyBvdXIgbGFzdAorICAgIC8vIG9wb3J0dW5p
dHkgdG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgREIg
dGhyZWFkLgorICAgIC8vIENsZWFyaW5nIG1fc3FsaXRlVHJhbnNhY3Rpb24gaW52b2tlcyBTUUxp
dGVUcmFuc2FjdGlvbidzIGRlc3RydWN0b3Igd2hpY2ggZG9lcyBqdXN0IHRoYXQuCisgICAgbV9z
cWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1
aXJlTG9jaygpCit7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5h
Y3F1aXJlTG9jayh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVk
KCkKK3sKKyAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7CisgICAgbV9uZXh0U3RlcCA9ICZTUUxU
cmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0OworICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkg
Zm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRy
YW5zYWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6b3Bl
blRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2xv
Y2tBY3F1aXJlZCk7CisKKyAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5pbmcgYW5kIHByZWZsaWdo
dGluZyB0cmFuc2FjdGlvbiAlcCIsIHRoaXMpOworCisgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdh
cyBkZWxldGVkLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjaworICAgIGlmIChtX2RhdGFiYXNl
LT5kZWxldGVkKCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdCgxLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOworICAgICAgICBtX3RyYW5zYWN0
aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJs
ZSB0byBvcGVuIGEgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdGhlIHVzZXIgZGVsZXRlZCB0aGUgZGF0
YWJhc2UiKTsKKyAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRoaXMg
dHJhbnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seQorICAgIGlm
ICghbV9yZWFkT25seSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRN
YXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKKworICAgIEFTU0VSVCghbV9z
cWxpdGVUcmFuc2FjdGlvbik7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9IGFkb3B0UHRyKG5l
dyBTUUxpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCBtX3JlYWRP
bmx5KSk7CisKKyAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKKyAgICBtX2RhdGFiYXNl
LT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7
CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAgLy8gVHJhbnNhY3Rp
b24gU3RlcHMgMSsyIC0gT3BlbiBhIHRyYW5zYWN0aW9uIHRvIHRoZSBkYXRhYmFzZSwganVtcGlu
ZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscworICAgIGlmICghbV9zcWxpdGVU
cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+
c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisgICAgICAgIG1fZGF0
YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7CisgICAgICAg
IG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgInVuYWJsZSB0byBiZWdpbiB0cmFuc2FjdGlvbiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICAgICAgaGFuZGxlVHJh
bnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBO
b3RlOiBXZSBpbnRlbnRpb25hbGx5IHJldHJpZXZlIHRoZSBhY3R1YWwgdmVyc2lvbiBldmVuIHdp
dGggYW4gZW1wdHkgZXhwZWN0ZWQgdmVyc2lvbi4KKyAgICAvLyBJbiBtdWx0aS1wcm9jZXNzIGJy
b3dzZXJzLCB3ZSB0YWtlIHRoaXMgb3Bwb3J0aW51dGl5IHRvIHVwZGF0ZSB0aGUgY2FjaGVkIHZh
bHVlIGZvcgorICAgIC8vIHRoZSBhY3R1YWwgdmVyc2lvbi4gSW4gc2luZ2xlLXByb2Nlc3MgYnJv
d3NlcnMsIHRoaXMgaXMganVzdCBhIG1hcCBsb29rdXAuCisgICAgU3RyaW5nIGFjdHVhbFZlcnNp
b247CisgICAgaWYgKCFtX2RhdGFiYXNlLT5nZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24o
YWN0dWFsVmVyc2lvbikpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2Fj
dGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxlIHRvIHJlYWQgdmVy
c2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9k
YXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRl
RGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVB
dXRob3JpemVyKCk7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICAg
ICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworICAgICAgICBoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2hhc1ZlcnNp
b25NaXNtYXRjaCA9ICFtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24o
KSAhPSBhY3R1YWxWZXJzaW9uKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDMgLSBQZWZv
cm0gcHJlZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5
IGZhaWwKKyAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZvcm1QcmVmbGlnaHQo
dGhpcykpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICAg
ICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgICAgICBtX2RhdGFiYXNlLT5lbmFi
bGVBdXRob3JpemVyKCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fd3JhcHBlci0+
c3FsRXJyb3IoKTsKKyAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uRXJyb3IpIHsKKyAgICAgICAg
ICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoNCwgU1FMRXJyb3I6
OlVOS05PV05fRVJSLCAwKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5rbm93biBlcnJvciBvY2N1cnJl
ZCBkdXJpbmcgdHJhbnNhY3Rpb24gcHJlZmxpZ2h0Iik7CisgICAgICAgIH0KKyAgICAgICAgaGFu
ZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBUcmFuc2FjdGlvbiBTdGVwIDQgLSBJbnZva2UgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNr
IHdpdGggdGhlIG5ldyBTUUxUcmFuc2FjdGlvbiBvYmplY3QKKyAgICBtX25leHRTdGVwID0gJlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjazsKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgZm9yIHRyYW5zYWN0
aW9uICVwXG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2Fs
bGJhY2sodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlv
bkNhbGxiYWNrKCkKK3sKKyAgICBib29sIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gZmFs
c2U7CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2Nh
bGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgbV9l
eGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7CisgICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxi
YWNrID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKTsKKyAgICAgICAgbV9leGVjdXRlU3Fs
QWxsb3dlZCA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNSAtIElm
IHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgbnVsbCBvciByYWlzZWQgYW4gZXhjZXB0aW9u
LCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjaworICAgIGlmIChzaG91bGREZWxpdmVyRXJyb3JD
YWxsYmFjaykgeworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVz
dWx0KDUsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb25F
cnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2sgd2FzIG51bGwgb3IgdGhyZXcgYW4gZXhjZXB0aW9uIik7CisgICAg
ICAgIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKKworICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0
YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSworfQorCit2b2lkIFNRTFRyYW5z
YWN0aW9uOjpzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpCit7CisgICAgbV9uZXh0U3RlcCA9ICZT
UUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50czsKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVk
dWxpbmcgcnVuU3RhdGVtZW50cyBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOworICAgIG1f
ZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOworfQorCit2b2lkIFNRTFRy
YW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQp
OworCisgICAgLy8gSWYgdGhlcmUgaXMgYSBzZXJpZXMgb2Ygc3RhdGVtZW50cyBxdWV1ZWQgdXAg
dGhhdCBhcmUgYWxsIHN1Y2Nlc3NmdWwgYW5kIGhhdmUgbm8gYXNzb2NpYXRlZAorICAgIC8vIFNR
TFN0YXRlbWVudENhbGxiYWNrIG9iamVjdHMsIHRoZW4gd2UgY2FuIGJ1cm4gdGhyb3VnaCB0aGUg
cXVldWUKKyAgICBkbyB7CisgICAgICAgIGlmIChtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVu
dCAmJiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpIHsKKyAg
ICAgICAgICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gZmFsc2U7CisgICAgICAg
ICAgICAvLyBGSVhNRSAtIEFub3RoZXIgcGxhY2UgdGhhdCBuZWVkcyBmaXhpbmcgdXAgYWZ0ZXIg
PHJkYXI6Ly9wcm9ibGVtLzU2Mjg0Njg+IGlzIGFkZHJlc3NlZC4KKyAgICAgICAgICAgIC8vIFNl
ZSA6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpIGZvciBkaXNjdXNzaW9uCisKKyAgICAg
ICAgICAgIC8vIFJlc2V0IHRoZSBtYXhpbXVtIHNpemUgaGVyZSwgYXMgaXQgd2FzIGluY3JlYXNl
ZCB0byBhbGxvdyB1cyB0byByZXRyeSB0aGlzIHN0YXRlbWVudC4KKyAgICAgICAgICAgIC8vIG1f
c2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50IGlzIHNldCB0byB0cnVlIG9ubHkgd2hlbiBhIHN0
YXRlbWVudCBleGNlZWRzCisgICAgICAgICAgICAvLyB0aGUgcXVvdGEsIHdoaWNoIGNhbiBoYXBw
ZW4gb25seSBpbiBhIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSwgdGhlcmUKKyAg
ICAgICAgICAgIC8vIGlzIG5vIG5lZWQgdG8gY2hlY2sgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24g
aXMgcmVhZC13cml0ZS4KKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
c2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgaGFzIGFscmVhZHkg
YmVlbiBydW4sIGZhaWxlZCBkdWUgdG8gcXVvdGEgY29uc3RyYWludHMsIGFuZCB3ZSdyZSBub3Qg
cmV0cnlpbmcgaXQsCisgICAgICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IGVuZGVkIGluIGFuIGVy
cm9yLiAgSGFuZGxlIGl0IG5vdworICAgICAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudCAm
JiBtX2N1cnJlbnRTdGF0ZW1lbnQtPmxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpIHsK
KyAgICAgICAgICAgICAgICBoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNl
LCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN0YXRlbWVudAorICAgICAgICAgICAgZ2V0TmV4dFN0YXRl
bWVudCgpOworICAgICAgICB9CisgICAgfSB3aGlsZSAocnVuQ3VycmVudFN0YXRlbWVudCgpKTsK
KworICAgIC8vIElmIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSByZXR1cm5lZCBmYWxzZSwgdGhhdCBt
ZWFucyBlaXRoZXIgdGhlcmUgd2FzIG5vIGN1cnJlbnQgc3RhdGVtZW50IHRvIHJ1biwKKyAgICAv
LyBvciB0aGUgY3VycmVudCBzdGF0ZW1lbnQgcmVxdWlyZXMgYSBjYWxsYmFjayB0byBjb21wbGV0
ZS4gIEluIHRoZSBsYXRlciBjYXNlLCBpdCBhbHNvIHNjaGVkdWxlZAorICAgIC8vIHRoZSBjYWxs
YmFjayBvciBwZXJmb3JtZWQgYW55IG90aGVyIGFkZGl0aW9uYWwgd29yayBzbyB3ZSBjYW4gcmV0
dXJuCisgICAgaWYgKCFtX2N1cnJlbnRTdGF0ZW1lbnQpCisgICAgICAgIHBvc3RmbGlnaHRBbmRD
b21taXQoKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6Z2V0TmV4dFN0YXRlbWVudCgpCit7
CisgICAgbV9jdXJyZW50U3RhdGVtZW50ID0gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3N0YXRlbWVudE11dGV4KTsKKyAgICBpZiAoIW1fc3RhdGVtZW50UXVldWUuaXNFbXB0eSgpKSB7
CisgICAgICAgIG1fY3VycmVudFN0YXRlbWVudCA9IG1fc3RhdGVtZW50UXVldWUudGFrZUZpcnN0
KCk7CisgICAgfQorfQorCitib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50
KCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CisKKyAgICBpZiAobV9oYXNW
ZXJzaW9uTWlzbWF0Y2gpCisgICAgICAgIG1fY3VycmVudFN0YXRlbWVudC0+c2V0VmVyc2lvbk1p
c21hdGNoZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKKworICAgIGlmIChtX2N1cnJlbnRTdGF0
ZW1lbnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG1fZGF0YWJh
c2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgeworICAgICAgICAgICAgLy8gRmxhZyB0
aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBkYXRhYmFzZSBmb3IgbGF0ZXIg
ZGVsZWdhdGUgbm90aWZpY2F0aW9uCisgICAgICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0
cnVlOworICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0aGlzIGRhdGFiYXNl
IGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCisgICAgICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50
Q2FsbGJhY2soKSkgeworICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6
ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOworICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJT
Y2hlZHVsaW5nIGRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIs
IHRoaXMpOworICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxi
YWNrKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmxhc3RF
eGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpIHsKKyAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjazsKKyAgICAgICAgTE9HKFN0
b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sgZm9yIHRy
YW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFu
c2FjdGlvbkNhbGxiYWNrKHRoaXMpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpCit7
CisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgNi5lcnJvciAtIENhbGwgdGhlIHN0YXRlbWVudCdz
IGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVycm9yIGNhbGxiYWNrLAorICAg
IC8vIG9yIHRoZSB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2ssIGp1bXAgdG8gdGhlIHRyYW5z
YWN0aW9uIGVycm9yIGNhbGxiYWNrCisgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3Rh
dGVtZW50RXJyb3JDYWxsYmFjaygpICYmICFtX3NxbGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xsZWRC
YWNrQnlTcWxpdGUoKSkgeworICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpk
ZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1
bGluZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlz
KTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fY3VycmVudFN0
YXRlbWVudC0+c3FsRXJyb3IoKTsKKyAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uRXJyb3IpIHsK
KyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDEs
IFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIDApOworICAgICAgICAgICAgbV90cmFuc2FjdGlvbkVy
cm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidGhlIHN0YXRl
bWVudCBmYWlsZWQgdG8gZXhlY3V0ZSIpOworICAgICAgICB9CisgICAgICAgIGhhbmRsZVRyYW5z
YWN0aW9uRXJyb3IoZmFsc2UpOworICAgIH0KK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclN0YXRlbWVudENhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50
KTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNi42IGFuZCA2LjMoZXJyb3IpIC0gSWYgdGhl
IHN0YXRlbWVudCBjYWxsYmFjayB3ZW50IHdyb25nLCBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBl
cnJvciBjYWxsYmFjaworICAgIC8vIE90aGVyd2lzZSwgY29udGludWUgdG8gbG9vcCB0aHJvdWdo
IHRoZSBzdGF0ZW1lbnQgcXVldWUKKyAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKKyAg
ICBib29sIHJlc3VsdCA9IG1fY3VycmVudFN0YXRlbWVudC0+cGVyZm9ybUNhbGxiYWNrKHRoaXMp
OworICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKKworICAgIGlmIChyZXN1bHQpIHsK
KyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FM
RXJyb3I6OlVOS05PV05fRVJSLCAwKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUgc3RhdGVtZW50IGNhbGxi
YWNrIHJhaXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIGRpZCBu
b3QgcmV0dXJuIGZhbHNlIik7CisgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IodHJ1ZSk7
CisgICAgfSBlbHNlCisgICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7Cit9CisKK3Zv
aWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2soKQoreworICAg
IEFTU0VSVChtX2N1cnJlbnRTdGF0ZW1lbnQpOworICAgIEFTU0VSVCghbV9zaG91bGRSZXRyeUN1
cnJlbnRTdGF0ZW1lbnQpOworCisgICAgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgp
KTsKKworICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHM7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIHJ1blN0YXRlbWVudHMgZm9yIHRyYW5zYWN0
aW9uICVwXG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3Rl
cCh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCgp
Cit7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxs
YmFjayBpZiB0aGV5IGZhaWwKKyAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZv
cm1Qb3N0ZmxpZ2h0KHRoaXMpKSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fd3Jh
cHBlci0+c3FsRXJyb3IoKTsKKyAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uRXJyb3IpIHsKKyAg
ICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDMsIFNR
TEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3Ig
PSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVua25vd24gZXJyb3Ig
b2NjdXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9uIHBvc3RmbGlnaHQiKTsKKyAgICAgICAgfQorICAg
ICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFRyYW5zYWN0b24gU3RlcCA4KzkgLSBDb21taXQgdGhlIHRyYW5zYWN0aW9u
LCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGF0IGZhaWxzCisgICAgQVNTRVJU
KG1fc3FsaXRlVHJhbnNhY3Rpb24pOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6
ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX2RhdGFiYXNl
LT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhl
IHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKKyAgICBp
ZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIGlmIChtX3dy
YXBwZXIpCisgICAgICAgICAgICBtX3dyYXBwZXItPmhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9z
dGZsaWdodCh0aGlzKTsKKyAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7
CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDQsIFNR
TEVycm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVy
cm9yKCkpOworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFibGUgdG8gY29tbWl0IHRyYW5zYWN0aW9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLT5z
cWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgp
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRU
cmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCisKKyAgICAvLyBWYWN1dW0gdGhlIGRh
dGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxldGVkLgorICAgIGlmIChtX2RhdGFiYXNlLT5oYWRE
ZWxldGVzKCkpCisgICAgICAgIG1fZGF0YWJhc2UtPmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQo
KTsKKworICAgIC8vIFRoZSBjb21taXQgd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlv
biBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3RpZnkgdGhlIGRlbGVnYXRlcy4KKyAgICBpZiAo
bV9tb2RpZmllZERhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVu
dCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNlKCkpOworCisgICAgLy8gTm93
IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xl
cy4KKyAgICBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CisKKyAgICAvLyBUcmFuc2Fj
dGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNrLCBpZiB0aGVyZSBpcyBvbmUK
KyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKKyAgICAg
ICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsK
KyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJTdWNjZXNzQ2FsbGJh
Y2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2No
ZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBjbGVh
bnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclN1Y2Nlc3NDYWxsYmFjaygpCit7CisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERl
bGl2ZXIgc3VjY2VzcyBjYWxsYmFjaworICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoc3Vj
Y2Vzc0NhbGxiYWNrKQorICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CisK
KyAgICAvLyBTY2hlZHVsZSBhICJwb3N0LXN1Y2Nlc3MgY2FsbGJhY2siIHN0ZXAgdG8gcmV0dXJu
IGNvbnRyb2wgdG8gdGhlIGRhdGFiYXNlIHRocmVhZCBpbiBjYXNlIHRoZXJlCisgICAgLy8gYXJl
IGZ1cnRoZXIgdHJhbnNhY3Rpb25zIHF1ZXVlZCB1cCBmb3IgdGhpcyBEYXRhYmFzZQorICAgIG1f
bmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjazsK
KyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxi
YWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2NoZWR1
bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFu
dXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCit7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsK
KworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEgLSBFbmQgdHJhbnNhY3Rpb24gc3RlcHMKKyAg
ICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKKyAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0
aW9uICVwIGlzIGNvbXBsZXRlXG4iLCB0aGlzKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIG1fc3FsaXRlVHJh
bnNhY3Rpb24uY2xlYXIoKTsKKyAgICBtX25leHRTdGVwID0gMDsKKworICAgIC8vIFJlbGVhc2Ug
dGhlIGxvY2sgb24gdGhpcyBkYXRhYmFzZQorICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246
OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQoreworICAgIGlmIChtX2Vy
cm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGluQ2FsbGJh
Y2spCisgICAgICAgICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2Fj
dGlvbiAlcFxuIiwgdGhpcyk7CisgICAgICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5z
YWN0aW9uQ2FsbGJhY2sodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIE5vIGVycm9yIGNhbGxiYWNrLCBzbyBmYXN0LWZvcndhcmQgdG86CisgICAgLy8g
VHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi4KKyAgICBpZiAo
aW5DYWxsYmFjaykgeworICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpjbGVh
bnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CisgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRy
YW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFu
c2FjdGlvblN0ZXAodGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2xlYW51cEFmdGVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CisgICAgfQorfQorCit2b2lkIFNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV90cmFu
c2FjdGlvbkVycm9yKTsKKworICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBJZiBleGlzdHMs
IGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0CisgICAgLy8gZXJyb3IgdG8gaGF2
ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgorICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVu
d3JhcCgpOworICAgIGlmIChlcnJvckNhbGxiYWNrKQorICAgICAgICBlcnJvckNhbGxiYWNrLT5o
YW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOworCisgICAgbV9uZXh0U3RlcCA9
ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwor
ICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNl
LT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlv
bjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQo
bV9sb2NrQWNxdWlyZWQpOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsK
KyAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgeworICAgICAgICAvLyBUcmFuc2FjdGlvbiBT
dGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLgorICAgICAgICBtX3NxbGl0ZVRyYW5z
YWN0aW9uLT5yb2xsYmFjaygpOworCisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRl
RGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisgICAgICAgIG1fc3FsaXRlVHJh
bnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXpl
cigpOworCisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIEFueSBzdGlsbC1wZW5kaW5nIHN0
YXRlbWVudHMgaW4gdGhlIHRyYW5zYWN0aW9uIGFyZSBkaXNjYXJkZWQuCisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7CisgICAgICAgIG1fc3RhdGVt
ZW50UXVldWUuY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBUcmFuc2FjdGlvbiBpcyBjb21wbGV0
ZSEgIFRoZXJlIGlzIG5vIG5leHQgc3RlcAorICAgIExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rp
b24gJXAgaXMgY29tcGxldGUgd2l0aCBhbiBlcnJvclxuIiwgdGhpcyk7CisgICAgQVNTRVJUKCFt
X2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAg
ICBtX25leHRTdGVwID0gMDsKKworICAgIC8vIE5vdyByZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMg
ZGF0YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVh
c2VMb2NrKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBTUUxUcmFuc2FjdGlvbl9oCisjZGVmaW5l
IFNRTFRyYW5zYWN0aW9uX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRl
ICJTUUxTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFz
ZTsKK2NsYXNzIFNRTEVycm9yOworY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247CitjbGFzcyBTUUxT
dGF0ZW1lbnRDYWxsYmFjazsKK2NsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7CitjbGFz
cyBTUUxUcmFuc2FjdGlvbjsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7CitjbGFzcyBT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CitjbGFzcyBTUUxWYWx1ZTsKK2NsYXNzIFZvaWRD
YWxsYmFjazsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgU1FMVHJhbnNh
Y3Rpb25XcmFwcGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9u
V3JhcHBlcj4geworcHVibGljOgorICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uV3JhcHBlcigp
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiop
ID0gMDsKKyAgICB2aXJ0dWFsIFNRTEVycm9yKiBzcWxFcnJvcigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0
aW9uKikgPSAwOworfTsKKworY2xhc3MgU1FMVHJhbnNhY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wg
cmVhZE9ubHkgPSBmYWxzZSk7CisKKyAgICB+U1FMVHJhbnNhY3Rpb24oKTsKKworICAgIHZvaWQg
ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFN0YXRl
bWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBsb2NrQWNxdWlyZWQoKTsKKyAgICBib29sIHBlcmZv
cm1OZXh0U3RlcCgpOworICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOworCisgICAg
RGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorICAgIGJv
b2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KKyAgICB2b2lkIG5vdGlmeURh
dGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKKworcHJpdmF0ZToKKyAgICBTUUxUcmFuc2Fj
dGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAgICAgICAgICAgICBQ
YXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVy
PiwgYm9vbCByZWFkT25seSk7CisKKyAgICB0eXBlZGVmIHZvaWQgKFNRTFRyYW5zYWN0aW9uOjoq
VHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOworICAgIFRyYW5zYWN0aW9uU3RlcE1ldGhvZCBtX25l
eHRTdGVwOworCisgICAgdm9pZCBlbnF1ZXVlU3RhdGVtZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Pik7CisKKyAgICB2b2lkIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFi
YXNlKCk7CisKKyAgICB2b2lkIGFjcXVpcmVMb2NrKCk7CisgICAgdm9pZCBvcGVuVHJhbnNhY3Rp
b25BbmRQcmVmbGlnaHQoKTsKKyAgICB2b2lkIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCk7
CisgICAgdm9pZCBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOworICAgIHZvaWQgcnVuU3RhdGVt
ZW50cygpOworICAgIHZvaWQgZ2V0TmV4dFN0YXRlbWVudCgpOworICAgIGJvb2wgcnVuQ3VycmVu
dFN0YXRlbWVudCgpOworICAgIHZvaWQgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7Cisg
ICAgdm9pZCBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2soKTsKKyAgICB2b2lkIGRlbGl2ZXJRdW90
YUluY3JlYXNlQ2FsbGJhY2soKTsKKyAgICB2b2lkIHBvc3RmbGlnaHRBbmRDb21taXQoKTsKKyAg
ICB2b2lkIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNsZWFudXBBZnRlclN1
Y2Nlc3NDYWxsYmFjaygpOworICAgIHZvaWQgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGlu
Q2FsbGJhY2spOworICAgIHZvaWQgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwor
ICAgIHZvaWQgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnU3RlcE5hbWUoVHJhbnNh
Y3Rpb25TdGVwTWV0aG9kKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gbV9j
dXJyZW50U3RhdGVtZW50OworCisgICAgYm9vbCBtX2V4ZWN1dGVTcWxBbGxvd2VkOworCisgICAg
UmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbldy
YXBwZXI+IG1fd3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gbV9jYWxsYmFja1dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFZvaWRD
YWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyOworICAgIFNRTENhbGxiYWNrV3JhcHBl
cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFja1dyYXBwZXI7Cisg
ICAgUmVmUHRyPFNRTEVycm9yPiBtX3RyYW5zYWN0aW9uRXJyb3I7CisgICAgYm9vbCBtX3Nob3Vs
ZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKKyAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKKyAg
ICBib29sIG1fbG9ja0FjcXVpcmVkOworICAgIGJvb2wgbV9yZWFkT25seTsKKyAgICBib29sIG1f
aGFzVmVyc2lvbk1pc21hdGNoOworCisgICAgTXV0ZXggbV9zdGF0ZW1lbnRNdXRleDsKKyAgICBE
ZXF1ZTxSZWZQdHI8U1FMU3RhdGVtZW50PiA+IG1fc3RhdGVtZW50UXVldWU7CisKKyAgICBPd25Q
dHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25faAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRp
dmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25k
aXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAg
SlNOb1N0YXRpY1RhYmxlcworICAgIF0gU1FMVHJhbnNhY3Rpb24geworICAgICAgICBbQ3VzdG9t
XSB2b2lkIGV4ZWN1dGVTcWwoaW4gRE9NU3RyaW5nIHNxbFN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIE9iamVjdEFycmF5IGFyZ3VtZW50cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIFNRTFN0YXRl
bWVudENhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gW09wdGlvbmFsLCBDYWxsYmFja10gU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayBlcnJvckNh
bGxiYWNrKTsKKyAgICB9OworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5pZGwKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICpUcmFuc2FjdGlvbgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rp
b25DYWxsYmFja19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U1FMVHJhbnNhY3Rpb247CisKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4geworcHVibGljOgor
ICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uQ2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qKSA9IDA7Cit9OworCit9CisKKyNlbmRpZgor
CisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25DYWxsYmFja19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKyAgICBpbnRlcmZhY2UgWwor
ICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAgICAgIENhbGxiYWNrCisgICAg
XSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChp
biBTUUxUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25DbGllbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQu
aCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFi
YXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxUcmFu
c2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihBYnN0cmFjdERhdGFiYXNl
KiBkYXRhYmFzZSkKK3sKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hlZHVsZU5v
dGlmeURhdGFiYXNlQ2hhbmdlZCgKKyAgICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCks
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFz
ZSk7Cit9CisKK2Jvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKEFic3Ry
YWN0RGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgdW5zaWduZWQgbG9uZyBs
b25nIGN1cnJlbnRRdW90YSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3Jp
Z2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBkYXRhYmFzZS0+ZGF0YWJhc2VD
b250ZXh0KCktPmRhdGFiYXNlRXhjZWVkZWRRdW90YShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmll
cigpKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEgPSBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Cisg
ICAgcmV0dXJuIChuZXdRdW90YSA+IGN1cnJlbnRRdW90YSk7Cit9CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25DbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U1FMVHJhbnNhY3Rpb25DbGllbnRfaAorI2RlZmluZSBTUUxUcmFuc2FjdGlvbkNsaWVudF9oCisK
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2Uu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBYnN0cmFjdERhdGFiYXNlOworCisvLyBBIGNsaWVudCB0byB0aGUgU1FMVHJhbnNh
Y3Rpb24gY2xhc3MuIEFsbG93cyBTUUxUcmFuc2FjdGlvbiB0byBub3RpZnkgaW50ZXJlc3RlZAor
Ly8gcGFydGllcyB0aGF0IGNlcnRhaW4gdGhpbmdzIGhhdmUgaGFwcGVuZWQgaW4gYSB0cmFuc2Fj
dGlvbi4KK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTUUxUcmFuc2FjdGlvbkNsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KCkgeyB9CisgICAgdm9pZCBkaWRDb21taXRX
cml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVT
dGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIGJvb2wgZGlkRXhjZWVkUXVvdGEoQWJz
dHJhY3REYXRhYmFzZSopOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ2xpZW50X2gKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGll
bnQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIK
KyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVyKFNRTFRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIHJldHVybiBkYXRh
YmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OnByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5hdGlvbkluZm8mIGluZm8p
Cit7CisgICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiB8fCBpbmZvLnBlbmRpbmdU
cmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+IGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNh
Y3Rpb25zLmZpcnN0KCk7CisgICAgaWYgKGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5pc1JlYWRP
bmx5KCkpIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rp
b24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBp
bmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuYWRkKGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKTsK
KyAgICAgICAgICAgIGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKKyAg
ICAgICAgfSB3aGlsZSAoIWluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkgJiYgaW5m
by5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCktPmlzUmVhZE9ubHkoKSk7CisgICAgfSBlbHNl
IGlmIChpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlu
Zm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgpOworICAgICAgICBpbmZvLmFjdGl2
ZVdyaXRlVHJhbnNhY3Rpb24gPSBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbjsKKyAgICAgICAgZmly
c3RQZW5kaW5nVHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOworICAgIH0KK30KKwordm9pZCBT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCit7CisgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRp
Zmllcih0cmFuc2FjdGlvbik7CisKKyAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBj
b29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklk
ZW50aWZpZXIpOworICAgIGlmIChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPT0gbV9jb29yZGlu
YXRpb25JbmZvTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIE5vIHBlbmRpbmcgdHJhbnNhY3Rpb25z
IGZvciB0aGlzIERCCisgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRp
bmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29yZGluYXRpb25JbmZvKCkpLmZpcnN0
OworICAgIH0KKworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZv
SXRlcmF0b3ItPnNlY29uZDsKKyAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRy
YW5zYWN0aW9uKTsKKyAgICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKK30KKwor
dm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKG1fY29vcmRpbmF0aW9uSW5mb01hcC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRh
YmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOworCisgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6
aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFw
LmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9y
ICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYg
aW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworCisgICAgaWYgKHRyYW5z
YWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVhZFRy
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAgICBpbmZvLmFjdGl2ZVJl
YWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQoaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uID09IHRyYW5zYWN0aW9uKTsKKyAg
ICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uID0gMDsKKyAgICB9CisKKyAgICBwcm9j
ZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjpzaHV0ZG93bigpCit7CisgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMg
aW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KKyAg
ICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOworICAgICAgICAgY29vcmRpbmF0
aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGlu
YXRpb25JbmZvSXRlcmF0b3IpIHsKKyAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNv
b3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOworICAgICAgICBpZiAoaW5mby5hY3RpdmVX
cml0ZVRyYW5zYWN0aW9uKQorICAgICAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9u
LT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CisgICAgICAgIGZvciAoSGFz
aFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID46Oml0ZXJhdG9yIGFjdGl2ZVJlYWRUcmFuc2Fj
dGlvbnNJdGVyYXRvciA9CisgICAgICAgICAgICAgICAgICAgICBpbmZvLmFjdGl2ZVJlYWRUcmFu
c2FjdGlvbnMuYmVnaW4oKTsKKyAgICAgICAgICAgICBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRl
cmF0b3IgIT0gaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmVuZCgpOworICAgICAgICAgICAg
ICsrYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yKSB7CisgICAgICAgICAgICAoKmFjdGl2
ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciktPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGlu
Z0Rvd24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFuIHVwIGFsbCBwZW5kaW5n
IHRyYW5zYWN0aW9ucyBmb3IgYWxsIGRhdGFiYXNlcworICAgIG1fY29vcmRpbmF0aW9uSW5mb01h
cC5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisjZGVmaW5lIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTUUxU
cmFuc2FjdGlvbjsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgeworICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCkgeyB9CisgICAgICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rp
b24qKTsKKyAgICAgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiopOworICAgICAg
ICB2b2lkIHNodXRkb3duKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBEZXF1ZTxS
ZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25zUXVldWU7CisgICAgICAgIHN0cnVj
dCBDb29yZGluYXRpb25JbmZvIHsKKyAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRp
bmdUcmFuc2FjdGlvbnM7CisgICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlv
bj4gPiBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zOworICAgICAgICAgICAgUmVmUHRyPFNRTFRyYW5z
YWN0aW9uPiBhY3RpdmVXcml0ZVRyYW5zYWN0aW9uOworICAgICAgICB9OworICAgICAgICAvLyBN
YXBzIGRhdGFiYXNlIG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgdHJhbnNhY3Rp
b25zCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENv
b3JkaW5hdGlvbkluZm9NYXA7CisgICAgICAgIENvb3JkaW5hdGlvbkluZm9NYXAgbV9jb29yZGlu
YXRpb25JbmZvTWFwOworCisgICAgICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMo
Q29vcmRpbmF0aW9uSW5mbyYgaW5mbyk7CisgICAgfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBuYXRpdmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja19oCisjZGVmaW5lIFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFja19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U1FMRXJyb3I7CisKK2NsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKSB7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9IDA7Cit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrX2gKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
c3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFC
QVNFLAorICAgICAgICBDYWxsYmFjaworICAgIF0gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
IHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBTUUxFcnJvciBlcnJvcik7CisgICAg
fTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uU3luYy5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUg
IkRhdGFiYXNlQXV0aG9yaXplci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU1FMRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVk
ZSAiU1FMU3RhdGVtZW50U3luYy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50Lmgi
CisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxW
YWx1ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZShEYXRhYmFzZVN5bmMq
IGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9v
bCByZWFkT25seSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uU3lu
YyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5KSk7Cit9CisKK1NRTFRyYW5zYWN0aW9uU3luYzo6U1FM
VHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQorICAgIDogbV9kYXRhYmFz
ZShkYikKKyAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX3JlYWRPbmx5KHJlYWRP
bmx5KQorICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0Y2goZmFsc2UpCisgICAgLCBtX21vZGlmaWVk
RGF0YWJhc2UoZmFsc2UpCisgICAgLCBtX3RyYW5zYWN0aW9uQ2xpZW50KGFkb3B0UHRyKG5ldyBT
UUxUcmFuc2FjdGlvbkNsaWVudCgpKSkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Cit9CisKK1NRTFRyYW5zYWN0
aW9uU3luYzo6flNRTFRyYW5zYWN0aW9uU3luYygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICht
X3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkK
KyAgICAgICAgcm9sbGJhY2soKTsKK30KKworUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRy
YW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29u
c3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRU
aHJlYWQoKSk7CisKKyAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCIiKTsKKwor
ICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0
TGFzdEVycm9yTWVzc2FnZSgiY2Fubm90IGV4ZWN1dGVTUUwgYmVjYXVzZSB0aGUgZGF0YWJhc2Ug
aXMgbm90IG9wZW4iKTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAobV9oYXNWZXJzaW9uTWlzbWF0Y2gp
IHsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgiY2Fubm90IGV4ZWN1
dGVTUUwgYmVjYXVzZSB0aGVyZSBpcyBhIHZlcnNpb24gbWlzbWF0Y2giKTsKKyAgICAgICAgZWMg
PSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoc3FsU3RhdGVtZW50LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpbnQgcGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0ZU1hc2s7Cisg
ICAgaWYgKCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2Vz
cygpKQorICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpOb0FjY2Vzc01h
c2s7CisgICAgZWxzZSBpZiAobV9yZWFkT25seSkKKyAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFi
YXNlQXV0aG9yaXplcjo6UmVhZE9ubHlNYXNrOworCisgICAgU1FMU3RhdGVtZW50U3luYyBzdGF0
ZW1lbnQoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIHBlcm1pc3Npb25zKTsKKworICAgIG1fZGF0
YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOworICAgIGJvb2wgcmV0cnlTdGF0ZW1lbnQgPSB0cnVl
OworICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldDsKKyAgICB3aGlsZSAocmV0cnlT
dGF0ZW1lbnQpIHsKKyAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgcmVz
dWx0U2V0ID0gc3RhdGVtZW50LmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSwgZWMpOworICAgICAg
ICBpZiAoIXJlc3VsdFNldCkgeworICAgICAgICAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24t
Pndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisg
ICAgICAgICAgICBpZiAoZWMgPT0gU1FMRXhjZXB0aW9uOjpRVU9UQV9FUlIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV90cmFuc2FjdGlvbkNsaWVudC0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2Uo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSAwOworICAgICAgICAgICAgICAgICAgICBy
ZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidGhlcmUgd2FzIG5v
dCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UiKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkg
eworICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOworICAgICAgICBtX3RyYW5zYWN0
aW9uQ2xpZW50LT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOworfQorCitFeGNlcHRpb25Db2RlIFNRTFRyYW5z
YWN0aW9uU3luYzo6YmVnaW4oKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2Ut
Pm9wZW5lZCgpKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25S
ZXN1bHQoMSwgU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgIG1fZGF0YWJh
c2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImNhbm5vdCBiZWdpbiB0cmFuc2FjdGlvbiBiZWNhdXNl
IHRoZSBkYXRhYmFzZSBpcyBub3Qgb3BlbiIpOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9u
OjpVTktOT1dOX0VSUjsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURh
dGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworCisgICAgLy8gU2V0IHRoZSBtYXhp
bXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5v
dCByZWFkLW9ubHkuCisgICAgaWYgKCFtX3JlYWRPbmx5KQorICAgICAgICBtX2RhdGFiYXNlLT5z
cWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJhc2UtPm1heGltdW1TaXplKCkp
OworCisgICAgQVNTRVJUKCFtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKKyAgICBtX3NxbGl0ZVRyYW5z
YWN0aW9uID0gYWRvcHRQdHIobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRl
cygpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVU
cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7
CisKKyAgICAvLyBDaGVjayBpZiBiZWdpbigpIHN1Y2NlZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRl
VHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2Ut
PnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBtX2Rh
dGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlvbjo6REFU
QUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKKyAg
ICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIGJlZ2luIHRy
YW5zYWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5j
bGVhcigpOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAg
fQorCisgICAgLy8gTm90ZTogV2UgaW50ZW50aW9uYWxseSByZXRyaWV2ZSB0aGUgYWN0dWFsIHZl
cnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4cGVjdGVkIHZlcnNpb24uCisgICAgLy8gSW4gbXVs
dGktcHJvY2VzcyBicm93c2Vycywgd2UgdGFrZSB0aGlzIG9wcG9ydGludXRpeSB0byB1cGRhdGUg
dGhlIGNhY2hlZCB2YWx1ZSBmb3IKKyAgICAvLyB0aGUgYWN0dWFsIHZlcnNpb24uIEluIHNpbmds
ZS1wcm9jZXNzIGJyb3dzZXJzLCB0aGlzIGlzIGp1c3QgYSBtYXAgbG9va3VwLgorICAgIFN0cmlu
ZyBhY3R1YWxWZXJzaW9uOworICAgIGlmICghbV9kYXRhYmFzZS0+Z2V0QWN0dWFsVmVyc2lvbkZv
clRyYW5zYWN0aW9uKGFjdHVhbFZlcnNpb24pKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9y
dFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMywgU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIG1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOworICAgICAgICBtX2RhdGFi
YXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gcmVhZCB2ZXJzaW9uIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgcm9sbGJhY2soKTsKKyAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlv
bjo6REFUQUJBU0VfRVJSOworICAgIH0KKyAgICBtX2hhc1ZlcnNpb25NaXNtYXRjaCA9ICFtX2Rh
dGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKSAhPSBhY3R1YWxWZXJzaW9u
KTsKKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDAsIC0xLCAw
KTsgLy8gT0sKKyAgICByZXR1cm4gMDsKK30KKworRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlv
blN5bmM6OmV4ZWN1dGUoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9w
ZW5lZCgpIHx8IChtX2NhbGxiYWNrICYmICFtX2NhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKSkp
IHsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RFcnJvck1lc3NhZ2UoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJmYWlsZWQgdG8g
ZXhlY3V0ZSB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOworICAgICAgICBtX2NhbGxiYWNrID0gMDsK
KyAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgfQorCisgICAg
bV9jYWxsYmFjayA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJh
bnNhY3Rpb25TeW5jOjpjb21taXQoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJh
c2UtPm9wZW5lZCgpKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0
aW9uUmVzdWx0KDEsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIDApOworICAgICAgICBtX2Rh
dGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY29tbWl0IHRyYW5zYWN0aW9u
IGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuLiIpOworICAgICAgICByZXR1cm4gU1FM
RXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zcWxpdGVUcmFu
c2FjdGlvbik7CisKKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhv
cml6ZXIoKTsKKworICAgIC8vIElmIHRoZSBjb21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24g
d2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMgImluIHByb2dyZXNzIgorICAgIGlmIChtX3NxbGl0ZVRy
YW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29t
bWl0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIG1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOworICAgICAgICBtX2RhdGFiYXNl
LT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY29tbWl0IHRyYW5zYWN0aW9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOwor
ICAgIH0KKworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKworICAgIC8vIFZhY3V1
bSB0aGUgZGF0YWJhc2UgaWYgYW55dGhpbmcgd2FzIGRlbGV0ZWQuCisgICAgaWYgKG1fZGF0YWJh
c2UtPmhhZERlbGV0ZXMoKSkKKyAgICAgICAgbV9kYXRhYmFzZS0+aW5jcmVtZW50YWxWYWN1dW1J
Zk5lZWRlZCgpOworCisgICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRy
YW5zYWN0aW9uIG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0aGUgZGVsZWdhdGVzLgor
ICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCisgICAgICAgIG1fdHJhbnNhY3Rpb25DbGllbnQt
PmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CisKKyAgICBtX2RhdGFiYXNl
LT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25TeW5jOjpyb2xsYmFjaygpCit7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgaWYgKG1f
c3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJh
Y2soKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgIH0KKyAgICBt
X2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2Ut
PnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvblN5bmMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRp
dmUKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTUUxUcmFuc2FjdGlvblN5bmNfaAorI2RlZmluZSBTUUxUcmFu
c2FjdGlvblN5bmNfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEYXRhYmFzZVN5bmM7CitjbGFzcyBTUUxSZXN1bHRTZXQ7CitjbGFzcyBT
UUxUcmFuc2FjdGlvbkNsaWVudDsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwor
Y2xhc3MgU1FMVmFsdWU7CitjbGFzcyBTUUxpdGVUcmFuc2FjdGlvbjsKKwordHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKKworLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNy
ZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCitjbGFz
cyBTUUxUcmFuc2FjdGlvblN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5
bmM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+
IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiwgYm9vbCByZWFkT25seSA9IGZhbHNlKTsKKworICAgIH5TUUxUcmFuc2FjdGlvblN5bmMo
KTsKKworICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBleGVjdXRlU1FMKGNvbnN0IFN0cmlu
ZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2UoKSB7IHJldHVybiBtX2Rh
dGFiYXNlLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkT25seTsgfQorCisgICAgRXhjZXB0aW9uQ29kZSBiZWdpbigpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZXhlY3V0ZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgY29tbWl0KCk7CisgICAgdm9pZCByb2xs
YmFjaygpOworCitwcml2YXRlOgorICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMq
LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSk7
CisKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBib29sIG1fcmVhZE9ubHk7
CisgICAgYm9vbCBtX2hhc1ZlcnNpb25NaXNtYXRjaDsKKworICAgIGJvb2wgbV9tb2RpZmllZERh
dGFiYXNlOworICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVudD4gbV90cmFuc2FjdGlvbkNs
aWVudDsKKyAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1FM
VHJhbnNhY3Rpb25TeW5jX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGwJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uU3luYy5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7
CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisg
ICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgIF0g
U1FMVHJhbnNhY3Rpb25TeW5jIHsKKyAgICAgICAgW0N1c3RvbV0gU1FMUmVzdWx0U2V0IGV4ZWN1
dGVTcWwoaW4gRE9NU3RyaW5nIHNxbFN0YXRlbWVudCwgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRz
KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2tfaAorI2RlZmluZSBTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFja19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTUUxUcmFuc2FjdGlvblN5
bmM7CisKKy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1
c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgorY2xhc3MgU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjaz4geworcHVibGljOgorICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrKCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uU3lu
YyopID0gMDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFja19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAorICAgICAgICBDYWxsYmFjaworICAgIF0gU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2sgeworICAgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNRTFRy
YW5zYWN0aW9uU3luYyB0cmFuc2FjdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dFNRTERh
dGFiYXNlLmgiCisKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VTeW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dFNRTERhdGFiYXNlOjpv
cGVuRGF0YWJhc2UoV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwgIUFic3RyYWN0RGF0YWJhc2U6Omlz
QXZhaWxhYmxlKCkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKGNvbnRleHQs
IG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxi
YWNrLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBXb3JrZXJDb250ZXh0U1FM
RGF0YWJhc2U6Om9wZW5EYXRhYmFzZVN5bmMoV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
IWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwgIUFic3Ry
YWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBEYXRhYmFzZVN5bmM6Om9w
ZW5EYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0
U1FMRGF0YWJhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIFdvcmtlckNvbnRleHRTUUxEYXRh
YmFzZV9oCisjZGVmaW5lIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZV9oCisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CitjbGFz
cyBEYXRhYmFzZVN5bmM7CitjbGFzcyBXb3JrZXJDb250ZXh0OworCitjbGFzcyBXb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNl
PiBvcGVuRGF0YWJhc2UoV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxs
YmFjaywgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3lu
Yz4gb3BlbkRhdGFiYXNlU3luYyhXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgV29ya2VyQ29udGV4
dFNRTERhdGFiYXNlKCkgeyB9OworICAgIH5Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UoKSB7IH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorCisjZW5kaWYgLy8gV29ya2VyQ29udGV4dFNRTERhdGFiYXNlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNl
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1dv
cmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCisgICAg
ICAgIFN1cHBsZW1lbnRhbD1Xb3JrZXJDb250ZXh0CisgICAgXSBXb3JrZXJDb250ZXh0U1FMRGF0
YWJhc2UgeworICAgICAgICBbVjhFbmFibGVkQXRSdW50aW1lXSBEYXRhYmFzZSBvcGVuRGF0YWJh
c2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcg
ZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gW0NhbGxiYWNr
LCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgW1Y4RW5hYmxlZEF0UnVudGltZV0g
RGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0
cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFjayBj
cmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAg
fTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1
bS9EYXRhYmFzZU9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlT2Jz
ZXJ2ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YWJhc2VPYnNl
cnZlcl9oCisjZGVmaW5lIERhdGFiYXNlT2JzZXJ2ZXJfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CisKKy8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGluIHRoZSBXZWJLaXQg
QVBJIChDaHJvbWl1bSBzb3VyY2UgdHJlZSkKKy8vIGluIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0
YWJhc2VPYnNlcnZlci5jcHAuCitjbGFzcyBEYXRhYmFzZU9ic2VydmVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyk7CisgICAgc3Rh
dGljIHZvaWQgZGF0YWJhc2VPcGVuZWQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2
b2lkIGRhdGFiYXNlTW9kaWZpZWQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHN0YXRpYyB2b2lk
IGRhdGFiYXNlQ2xvc2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKKworICAgIHN0YXRpYyB2b2lkIHJl
cG9ydE9wZW5EYXRhYmFzZVJlc3VsdChBYnN0cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBp
bnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICBzdGF0aWMgdm9p
ZCByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNp
dGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRp
YyB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGlu
dCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Cisg
ICAgc3RhdGljIHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoQWJzdHJhY3REYXRh
YmFzZSosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9y
Q29kZSk7CisgICAgc3RhdGljIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChBYnN0
cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3Fs
aXRlRXJyb3JDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3Vs
dChBYnN0cmFjdERhdGFiYXNlKiwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Cit9OworCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gRGF0YWJhc2VPYnNlcnZl
cl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNr
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiQWJz
dHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRl
ICJRdW90YVRyYWNrZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKQoreworICAg
IEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhEYXRhYmFzZVRyYWNrZXImLCB0cmFja2VyID0g
Km5ldyBEYXRhYmFzZVRyYWNrZXIoIiIpKTsKKyAgICByZXR1cm4gdHJhY2tlcjsKK30KKworRGF0
YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoY29uc3QgU3RyaW5nJikKK3sKKyAgICBTUUxp
dGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOworfQorCitib29sIERhdGFiYXNlVHJh
Y2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCit7CisgICAgcmV0dXJuIERhdGFi
YXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKK30KKwordm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpCit7CisgICAgLy8gQ2hyb21pdW0gc2V0cyB0
aGUgZGF0YWJhc2UgZGV0YWlscyB3aGVuIHRoZSBkYXRhYmFzZSBpcyBvcGVuZWQKK30KKworU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpCit7CisgICAgcmV0dXJuIG9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLyIgKyBuYW1lICsgIiMiOworfQorCit2b2lkIERhdGFi
YXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5E
YXRhYmFzZU1hcEd1YXJkKTsKKyAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQorICAgICAgICBt
X29wZW5EYXRhYmFzZU1hcCA9IGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9yaWdpbk1hcCk7CisKKyAg
ICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLT5k
YXRhYmFzZUlkZW50aWZpZXIoKTsKKyAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29w
ZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbklkZW50aWZpZXIpOworICAgIGlmICghbmFtZU1hcCkg
eworICAgICAgICBuYW1lTWFwID0gbmV3IERhdGFiYXNlTmFtZU1hcCgpOworICAgICAgICBtX29w
ZW5EYXRhYmFzZU1hcC0+c2V0KG9yaWdpbklkZW50aWZpZXIsIG5hbWVNYXApOworICAgIH0KKwor
ICAgIFN0cmluZyBuYW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgIERhdGFi
YXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKKyAgICBpZiAoIWRhdGFi
YXNlU2V0KSB7CisgICAgICAgIGRhdGFiYXNlU2V0ID0gbmV3IERhdGFiYXNlU2V0KCk7CisgICAg
ICAgIG5hbWVNYXAtPnNldChuYW1lLCBkYXRhYmFzZVNldCk7CisgICAgfQorCisgICAgZGF0YWJh
c2VTZXQtPmFkZChkYXRhYmFzZSk7CisKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU9w
ZW5lZChkYXRhYmFzZSk7Cit9CisKK2NsYXNzIE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3Nl
VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2so
ZGF0YWJhc2UpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIERhdGFiYXNlT2JzZXJ2
ZXI6OmRhdGFiYXNlQ2xvc2VkKG1fZGF0YWJhc2UuZ2V0KCkpOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBpc0NsZWFudXBUYXNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRh
c2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8QWJzdHJhY3REYXRh
YmFzZT4gbV9kYXRhYmFzZTsKK307CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVu
RGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgU3RyaW5nIG9yaWdp
bklkZW50aWZpZXIgPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlm
aWVyKCk7CisgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFz
ZU1hcEd1YXJkKTsKKyAgICBBU1NFUlQobV9vcGVuRGF0YWJhc2VNYXApOworICAgIERhdGFiYXNl
TmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRpZmll
cik7CisgICAgaWYgKCFuYW1lTWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbmFt
ZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKKyAgICBEYXRhYmFzZVNldCogZGF0YWJh
c2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7CisgICAgaWYgKCFkYXRhYmFzZVNldCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGZvdW5kID0gZGF0YWJhc2VT
ZXQtPmZpbmQoZGF0YWJhc2UpOworICAgIGlmIChmb3VuZCA9PSBkYXRhYmFzZVNldC0+ZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoZm91bmQpOworICAg
IGlmIChkYXRhYmFzZVNldC0+aXNFbXB0eSgpKSB7CisgICAgICAgIG5hbWVNYXAtPnJlbW92ZShu
YW1lKTsKKyAgICAgICAgZGVsZXRlIGRhdGFiYXNlU2V0OworICAgICAgICBpZiAobmFtZU1hcC0+
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKG9yaWdp
bklkZW50aWZpZXIpOworICAgICAgICAgICAgZGVsZXRlIG5hbWVNYXA7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKQorICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5wb3N0VGFzayhOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s6OmNyZWF0ZShkYXRh
YmFzZSkpOworICAgIGVsc2UKKyAgICAgICAgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9z
ZWQoZGF0YWJhc2UpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpn
ZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlID0gMDsKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplID0gMDsKKyAgICBRdW90YVRyYWNrZXI6Omluc3RhbmNl
KCkuZ2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigKKyAgICAgICAgZGF0
YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNlSWRlbnRpZmllcigpLAorICAgICAgICBk
YXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLCAmZGF0YWJhc2VTaXplLCAmc3BhY2VBdmFpbGFi
bGUpOworICAgIHJldHVybiBkYXRhYmFzZVNpemUgKyBzcGFjZUF2YWlsYWJsZTsKK30KKwordm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3Qg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBvcGVu
RGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworCisgICAgaWYgKCFtX29w
ZW5EYXRhYmFzZU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VOYW1lTWFwKiBu
YW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChjb250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaWYgKCFuYW1lTWFwKQorICAgICAgICByZXR1
cm47CisKKyAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZEl0
ID0gbmFtZU1hcC0+ZW5kKCk7CisgICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFwSXQgIT0gZGJOYW1l
TWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKKyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNl
U2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKKyAgICAgICAgZm9yIChEYXRhYmFzZVNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSBjb250ZXh0KQorICAgICAgICAgICAgICAgICgqaXQpLT5pbnRlcnJ1cHQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworY2xhc3MgRGF0YWJhc2VUcmFja2VyOjpDbG9zZU9uZURhdGFiYXNlSW1t
ZWRpYXRlbHlUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRh
c2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmFtZSwgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2sob3JpZ2luSWRlbnRp
ZmllciwgbmFtZSwgZGF0YWJhc2UpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseShtX29y
aWdpbklkZW50aWZpZXIsIG1fbmFtZSwgbV9kYXRhYmFzZSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2soY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNl
KQorICAgICAgICA6IG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyLmlzb2xhdGVk
Q29weSgpKQorICAgICAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQorICAgICAgICAs
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX29yaWdp
bklkZW50aWZpZXI7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBBYnN0cmFjdERhdGFiYXNlKiBt
X2RhdGFiYXNlOyAgLy8gSW50ZW50aW9uYWxseSBhIHJhdyBwb2ludGVyLgorfTsKKwordm9pZCBE
YXRhYmFzZVRyYWNrZXI6OmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpIHsKKyAgICBNdXRleExvY2tlciBv
cGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworICAgIGlmICghbV9v
cGVuRGF0YWJhc2VNYXApCisgICAgICAgIHJldHVybjsKKworICAgIERhdGFiYXNlTmFtZU1hcCog
bmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRpZmllcik7CisgICAg
aWYgKCFuYW1lTWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZVNldCogZGF0YWJh
c2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7CisgICAgaWYgKCFkYXRhYmFzZVNldCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gV2UgaGF2ZSB0byBjYWxsIGNsb3NlSW1tZWRpYXRlbHkoKSBv
biB0aGUgY29udGV4dCB0aHJlYWQgYW5kIHdlIGNhbm5vdCBzYWZlbHkgYWRkIGEgcmVmZXJlbmNl
IHRvCisgICAgLy8gdGhlIGRhdGFiYXNlIGluIG91ciBjb2xsZWN0aW9uIHdoZW4gbm90IG9uIHRo
ZSBjb250ZXh0IHRocmVhZCAod2hpY2ggaXMgYWx3YXlzIHRoZSBjYXNlIGdpdmVuCisgICAgLy8g
Y3VycmVudCB1c2FnZSkuCisgICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBkYXRh
YmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVuZCgpOyArK2l0KQorICAgICAg
ICAoKml0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhDbG9zZU9uZURhdGFi
YXNlSW1tZWRpYXRlbHlUYXNrOjpjcmVhdGUob3JpZ2luSWRlbnRpZmllciwgbmFtZSwgKml0KSk7
Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpjbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHko
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIEFic3Ry
YWN0RGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIC8vIEZpcnN0IHdlIGhhdmUgdG8gY29uZmly
bSB0aGUgJ2RhdGFiYXNlJyBpcyBzdGlsbCBpbiBvdXIgY29sbGVjdGlvbi4KKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFy
ZCk7CisgICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAt
PmdldChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFuYW1lTWFwKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAt
PmdldChuYW1lKTsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZm91bmQgPSBkYXRhYmFzZVNldC0+
ZmluZChkYXRhYmFzZSk7CisgICAgICAgIGlmIChmb3VuZCA9PSBkYXRhYmFzZVNldC0+ZW5kKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQW5kIHdlIGhhdmUgdG8gY2Fs
bCBjbG9zZUltbWVkaWF0ZWx5KCkgd2l0aG91dCBvdXIgY29sbGVjdGlvbiBsb2NrIGJlaW5nIGhl
bGQuCisgICAgZGF0YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKK30KKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0u
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJv
bWl1bS9RdW90YVRyYWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlF1b3RhVHJhY2tl
ci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitRdW90YVRyYWNrZXImIFF1b3RhVHJhY2tlcjo6aW5zdGFuY2UoKQoreworICAgIEF0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhRdW90YVRyYWNrZXImLCB0cmFja2VyID0gKm5ldyBR
dW90YVRyYWNrZXIpOworICAgIHJldHVybiB0cmFja2VyOworfQorCit2b2lkIFF1b3RhVHJhY2tl
cjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigKKyAgICBjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAorICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyogZGF0YWJhc2VTaXplLCB1bnNpZ25lZCBsb25nIGxvbmcqIHNw
YWNlQXZhaWxhYmxlKQoreworICAgIC8vIEV4dHJhIHNjb3BlIHRvIHVubG9jayBwcmlvciB0byBw
b3RlbnRpYWxseSBjYWxsaW5nIFBsYXRmb3JtU3VwcG9ydC4KKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VT
aXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CisgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6ZXMuZmluZChvcmln
aW5JZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuY29udGFpbnMoZGF0YWJh
c2VOYW1lKSk7CisgICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vjb25kLmdldChkYXRhYmFz
ZU5hbWUpOworCisgICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmNvbnRhaW5z
KG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICAqc3BhY2VBdmFpbGFibGUgPSBtX3Nw
YWNlQXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSBlbWJlZGRlciBoYXNuJ3Qg
cHVzaGVkIHRoaXMgdmFsdWUgdG8gdXMsIHNvIHdlIHB1bGwgaXQgYXMgbmVlZGVkLgorICAgICpz
cGFjZUF2YWlsYWJsZSA9IFBsYXRmb3JtU3VwcG9ydDo6ZGF0YWJhc2VHZXRTcGFjZUF2YWlsYWJs
ZUZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9pZCBRdW90YVRyYWNrZXI6OnVw
ZGF0ZURhdGFiYXNlU2l6ZSgKKyAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFz
ZVNpemUpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3VhcmQpOworICAgIEhh
c2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlU2l6ZXMuYWRk
KG9yaWdpbklkZW50aWZpZXIsIFNpemVNYXAoKSkuZmlyc3Q7CisgICAgaXQtPnNlY29uZC5zZXQo
ZGF0YWJhc2VOYW1lLCBkYXRhYmFzZVNpemUpOworfQorCit2b2lkIFF1b3RhVHJhY2tlcjo6dXBk
YXRlU3BhY2VBdmFpbGFibGVUb09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIs
IHVuc2lnbmVkIGxvbmcgbG9uZyBzcGFjZUF2YWlsYWJsZSkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrRGF0YShtX2RhdGFHdWFyZCk7CisgICAgbV9zcGFjZUF2YWlsYWJsZVRvT3JpZ2lucy5zZXQo
b3JpZ2luSWRlbnRpZmllciwgc3BhY2VBdmFpbGFibGUpOworfQorCit2b2lkIFF1b3RhVHJhY2tl
cjo6cmVzZXRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllcikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7CisgICAgbV9z
cGFjZUF2YWlsYWJsZVRvT3JpZ2lucy5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2No
cm9taXVtL1F1b3RhVHJhY2tlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hy
b21pdW0vUXVvdGFUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF1b3RhVHJhY2tlcl9oCisjZGVm
aW5lIFF1b3RhVHJhY2tlcl9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFF1b3RhVHJhY2tlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFF1b3RhVHJhY2tlciYgaW5zdGFuY2UoKTsKKworICAgIHZvaWQgZ2V0RGF0YWJhc2VT
aXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigKKyAgICAgICAgY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nKiBkYXRhYmFzZVNpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyogc3BhY2VBdmFp
bGFibGUpOworICAgIHZvaWQgdXBkYXRlRGF0YWJhc2VTaXplKAorICAgICAgICBjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAorICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplKTsKKyAgICB2b2lkIHVwZGF0ZVNwYWNl
QXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1bnNpZ25l
ZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpOworICAgIHZvaWQgcmVzZXRTcGFjZUF2YWlsYWJs
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisKK3ByaXZhdGU6Cisg
ICAgUXVvdGFUcmFja2VyKCkgeyB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCB1bnNp
Z25lZCBsb25nIGxvbmc+IFNpemVNYXA7CisgICAgU2l6ZU1hcCBtX3NwYWNlQXZhaWxhYmxlVG9P
cmlnaW5zOworICAgIEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPiBtX2RhdGFiYXNlU2l6ZXM7Cisg
ICAgTXV0ZXggbV9kYXRhR3VhcmQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorCisjZW5kaWYgLy8gUXVvdGFUcmFja2VyX2gKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2Vy
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25D
bGllbnRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0v
U1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQu
aCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFi
YXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBOb3RpZnlE
YXRhYmFzZUNoYW5nZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRh
c2s+IGNyZWF0ZShBYnN0cmFjdERhdGFiYXNlICpkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayhkYXRhYmFzZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KikKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNl
TW9kaWZpZWQobV9kYXRhYmFzZS5nZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE5vdGlm
eURhdGFiYXNlQ2hhbmdlZFRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFz
ZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gbV9kYXRhYmFzZTsKK307CisKK3ZvaWQgU1FMVHJhbnNh
Y3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSog
ZGF0YWJhc2UpCit7CisgICAgaWYgKCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5wb3N0VGFzayhOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrOjpjcmVhdGUoZGF0
YWJhc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYkNvcmU6OkRhdGFiYXNl
T2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQoZGF0YWJhc2UpOworfQorCit2b2lkIFNRTFRyYW5z
YWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFi
YXNlKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBleGVjdXRpbmcgZXZl
cnkgc3RhdGVtZW50IHRoYXQgY2hhbmdlcyB0aGUgREIuCisgICAgLy8gQ2hyb21pdW0gZG9lc24n
dCBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IHRoYXQgcG9pbnQuCit9CisKK2Jvb2wgU1FMVHJhbnNh
Y3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIC8vIENocm9taXVtIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvIG1hbnVhbGx5IGNoYW5n
ZSB0aGUgcXVvdGEgZm9yIGFuIG9yaWdpbiAoZm9yIG5vdywgYXQgbGVhc3QpLgorICAgIC8vIERv
bid0IGRvIGFueXRoaW5nLgorICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNs
aWVudENocm9taXVtLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0
aXZlCgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9u
IDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBACiAgICAgICAnLi4vTW9kdWxlcy9pbnRlbnRzJywK
ICAgICAgICcuLi9Nb2R1bGVzL2luZGV4ZWRkYicsCiAgICAgICAnLi4vTW9kdWxlcy9tZWRpYXN0
cmVhbScsCisgICAgICAnLi4vTW9kdWxlcy93ZWJkYXRhYmFzZScsCisgICAgICAnLi4vTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bScsCiAgICAgICAnLi4vTW9kdWxlcy93ZWJzb2NrZXRzJywK
ICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5L2Nocm9t
aXVtJywKQEAgLTk5MCw2ICs5OTIsNyBAQAogICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRl
X2RpcnMnOiBbCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxlcy9pbmRleGVk
ZGInLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMvbWVkaWFzdHJlYW0n
LAorICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMvd2ViZGF0YWJhc2UnLAog
ICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL2NzcycsCiAgICAgICAgICAgICAgICctLWlu
Y2x1ZGUnLCAnLi4vZG9tJywKICAgICAgICAgICAgICAgJy0taW5jbHVkZScsICcuLi9maWxlYXBp
JywKQEAgLTE4NDQsNiArMTg0NywxMSBAQAogCiAgICAgICAgIFsnZXhjbHVkZScsICdNb2R1bGVz
L2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZVxcLmNwcCQnXSwKICAgICAgICAg
WydleGNsdWRlJywgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbFxcLmNw
cCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyQ2xpZW50XFwuaCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyXFwuY3BwJCddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAnTW9k
dWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXJcXC4oY3BwfGgpJCddLAorICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZFxcLihj
cHB8aCkkJ10sCisgICAgICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ2xpZW50XFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnZmlsZWFwaS9M
b2NhbEZpbGVTeXN0ZW1cXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRl
JywgJ2luc3BlY3Rvci9KYXZhU2NyaXB0W14vXSpcXC5jcHAkJ10sCkBAIC0xODYwLDExICsxODY4
LDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ3BsdWdpbnMvUGx1Z2luU3RyZWFtXFwuY3BwJCdd
LAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGx1Z2lucy9QbHVnaW5WaWV3XFwuY3BwJCddLAogICAg
ICAgICBbJ2V4Y2x1ZGUnLCAncGx1Z2lucy9ucGFwaVxcLmNwcCQnXSwKLSAgICAgICAgWydleGNs
dWRlJywgJ3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50XFwuaCQnXSwKLSAgICAgICAgWydl
eGNsdWRlJywgJ3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyXFwuY3BwJCddLAotICAgICAgICBbJ2V4
Y2x1ZGUnLCAnc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXJcXC4oY3BwfGgpJCddLAotICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZFxcLihjcHB8aCkkJ10sCi0g
ICAgICAgIFsnZXhjbHVkZScsICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50XFwuY3BwJCdd
LAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyXFwu
Y3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlXFwu
Y3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2Vy
UmVwb3NpdG9yeVxcLihjcHB8aCkkJ10sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Mjk0
LDYgKzI0Mjk0LDIxOCBAQAogCQkJCTwvRmlsZT4KIAkJCTwvRmlsdGVyPgogCQkJPEZpbHRlcgor
CQkJCU5hbWU9IndlYmRhdGFiYXNlIgorCQkJCT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcQWJzdHJhY3REYXRhYmFzZS5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXEFic3RyYWN0RGF0YWJhc2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcQ2hhbmdlVmVy
c2lvbldyYXBwZXIuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxDaGFuZ2VWZXJzaW9uV3JhcHBlci5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
TW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFi
YXNlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQXV0aG9yaXplci5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXERhdGFiYXNlQXV0aG9yaXplci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFz
ZUNhbGxiYWNrLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQ29udGV4dC5jcHAiCisJCQkJ
CT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXERhdGFiYXNlQ29udGV4dC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFz
ZVN5bmMuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZVN5bmMuaCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0
YWJhc2VcRGF0YWJhc2VUYXNrLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VUYXNrLmgi
CisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxN
b2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlVGhyZWFkLmNwcCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
RGF0YWJhc2VUaHJlYWQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VUcmFja2VyLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VUcmFja2VyLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERP
TVdpbmRvd1NRTERhdGFiYXNlLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRE9NV2luZG93U1FMRGF0
YWJhc2UuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcT3JpZ2luUXVvdGFNYW5hZ2VyLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXE9yaWdp
blVzYWdlUmVjb3JkLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcT3JpZ2luVXNhZ2VSZWNvcmQuaCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcU1FMQ2FsbGJhY2tXcmFwcGVyLmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XFNRTEVycm9yLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTEV4Y2VwdGlvbi5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXFNRTEV4Y2VwdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxSZXN1bHRTZXQu
Y3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxSZXN1bHRTZXQuaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFJlc3VsdFNldFJv
d0xpc3QuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50LmNwcCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0
YWJhc2VcU1FMU3RhdGVtZW50LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudENhbGxi
YWNrLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50U3luYy5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNR
TFN0YXRlbWVudFN5bmMuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb24uY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQ2xp
ZW50LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9u
U3luYy5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3luYy5oIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3
ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxXb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuaCIKKwkJCQkJPgorCQkJPC9GaWxlPgorCQkJPC9GaWx0ZXI+CisJ
CQk8RmlsdGVyCiAJCQkJTmFtZT0id2Vic29ja2V0cyIKIAkJCQk+CiAJCQkJPEZpbGUKQEAgLTcw
ODQyLDIyMiArNzEwNTQsNiBAQAogCQkJTmFtZT0ic3RvcmFnZSIKIAkJCT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXEFic3RyYWN0RGF0YWJhc2UuY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXEFic3Ry
YWN0RGF0YWJhc2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3RvcmFnZVxDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3RvcmFnZVxEYXRhYmFzZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2UuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFzZUF1dGhv
cml6ZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXERhdGFiYXNlQXV0aG9yaXplci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXERhdGFiYXNlQ2FsbGJhY2suaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxEYXRhYmFzZUNvbnRleHQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXERhdGFiYXNlQ29udGV4dC5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXERhdGFiYXNlU3lu
Yy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN0b3JhZ2VcRGF0YWJhc2VTeW5jLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VUYXNrLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFzZVRh
c2suaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxEYXRhYmFzZVRocmVhZC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcRGF0YWJhc2VUaHJlYWQuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxEYXRhYmFz
ZVRyYWNrZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXERhdGFiYXNlVHJhY2tlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXERPTVdpbmRvd1NRTERhdGFiYXNl
LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxET01XaW5kb3dTUUxEYXRhYmFzZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUYXNrLmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9y
YWdlVGFzay5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFN0b3JhZ2VUaHJlYWQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VUaHJlYWQuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxPcmln
aW5RdW90YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdG9yYWdlXE9yaWdpblF1b3RhTWFuYWdlci5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXE9yaWdpblVzYWdl
UmVjb3JkLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3RvcmFnZVxPcmlnaW5Vc2FnZVJlY29yZC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrV3JhcHBlci5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXFNRTEVycm9yLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMRXhjZXB0aW9uLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxFeGNlcHRpb24uaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxT
UUxSZXN1bHRTZXQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFNRTFJlc3VsdFNldC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFJlc3VsdFNldFJvd0xpc3Qu
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dG9yYWdlXFNRTFJlc3VsdFNldFJvd0xpc3QuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1lbnQuY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFN0
YXRlbWVudC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxTUUxUcmFuc2FjdGlvbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb24uaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9u
Q2xpZW50LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRy
YW5zYWN0aW9uU3luYy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25TeW5jLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2suaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC03
MTE1OCwxOSArNzExNTQsMjMgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlVHJhY2tlci5oIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3RvcmFnZVxTdG9yYWdlVGFzay5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRhc2suaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxWZXJzaW9u
Q2hhbmdlQ2FsbGJhY2suaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRo
cmVhZC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCIKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRocmVhZC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFdvcmtlckNvbnRleHRTUUxEYXRhYmFz
ZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlVHJhY2tlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAxMDk4NTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMJ
KHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJv
amVjdERpcikuLiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cTW9kdWxlc1xnZW9sb2NhdGlv
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cTW9kdWxlc1xpbmRleGVkZGImcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcd2Vic29ja2V0cyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNz
aWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJy
aWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGNzcyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cZWRpdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZmlsZWFwaSZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxyZW5kZXJpbmdcbWF0aG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5k
ZXJpbmdcc3R5bGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRlcmluZ1xzdmcmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxiaW5kaW5nc1xnZW5lcmljJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5n
c1xqcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanNcc3BlY2lhbGl6YXRp
b24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbSZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cZG9tXGRlZmF1bHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGhpc3RvcnkmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XGh0bWxcY2FudmFzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXHBhcnNlciZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxzaGFkb3cmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGluc3BlY3RvciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXBwY2FjaGUmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2Fk
ZXJcYXJjaGl2ZVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGNhY2hlJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcaWNvbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cbWF0aG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxub3RpZmljYXRpb25z
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwYWdlXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxzY3Jv
bGxpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcd2luJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxwbGF0Zm9ybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxtb2NrJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxzcWwmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cbmV0d29yayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbmV0d29ya1x3
aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGNmJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2EmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGZpbHRlcnNcYXJtJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9y
bVxncmFwaGljc1xvcGVudHlwZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcdHJhbnNmb3JtcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
dGV4dCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cdGV4dFx0cmFuc2NvZGVy
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW4mcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ceG1s
XHBhcnNlciZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXFdlYkNvcmVc
RGVyaXZlZFNvdXJjZXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsdWdpbnMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsdWdpbnNcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxzdmdcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhp
Y3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xwcm9wZXJ0aWVzJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhpY3NcZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cc3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx0ZXN0aW5nJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlx3bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN0b3Jh
Z2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHdvcmtlcnMmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIp
XGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJp
dmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2Ny
aXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2
YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxGb3J3YXJkaW5n
SGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQo
V2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7
JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcc3FsaXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxpbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxpbmNsdWRlXHpsaWImcXVvdDsiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERpcikuLiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cTW9kdWxlc1xnZW9sb2NhdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cTW9kdWxl
c1xpbmRleGVkZGImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcd2ViZGF0YWJh
c2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXE1vZHVsZXNcd2Vic29ja2V0cyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cYWNjZXNzaWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRn
ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXGJyaWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGNzcyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cZWRpdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cZmlsZWFwaSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5nJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcbWF0aG1sJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRl
cmluZ1xzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xnZW5lcmljJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxiaW5kaW5nc1xqcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanNc
c3BlY2lhbGl6YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cZG9tXGRlZmF1bHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XGhpc3RvcnkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWwmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGh0bWxcY2FudmFzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1s
XHBhcnNlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRtbFxzaGFkb3cmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGluc3BlY3RvciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
bG9hZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXBwY2FjaGUmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZlJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxsb2FkZXJcYXJjaGl2ZVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9h
ZGVyXGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcaWNvbiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cbWF0aG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxu
b3RpZmljYXRpb25zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwYWdlXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGFnZVxzY3JvbGxpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcd2luJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybSZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0
Zm9ybVxtb2NrJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxzcWwmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cbmV0d29yayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cbmV0d29ya1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGNmJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljcyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2EmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcYXJtJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcdHJhbnNmb3JtcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cdGV4dCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cdGV4
dFx0cmFuc2NvZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGlj
c1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbCZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ceG1sXHBhcnNlciZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
b2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBs
dWdpbnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsdWdpbnNcd2luJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxzdmdcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxzdmdcZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xwcm9wZXJ0aWVz
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhpY3NcZmlsdGVycyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cc3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx0ZXN0
aW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHN0b3JhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdlYnNvY2tldHMmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdvcmtlcnMmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0
aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIp
XGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5j
bHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
aW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5j
bHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlw
dENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMm
cXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcc3FsaXRlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHpsaWImcXVvdDsiCiAJCVByZXByb2Nl
c3NvckRlZmluaXRpb25zPSJfX1dJTjMyX187RElTQUJMRV8zRF9SRU5ERVJJTkc7V0VCQ09SRV9D
T05URVhUX01FTlVTIgogCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJUHJlY29tcGlsZWRI
ZWFkZXJUaHJvdWdoPSJXZWJDb3JlUHJlZml4LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJk
aW5nSGVhZGVycy5jbWQJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcgQEAgbWtkaXIgMj5O
VUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluYwogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGly
JS4uXGNvbmZpZy5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgog
eGNvcHkgL3kgL2QgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXG9ialxXZWJDb3JlXERlcml2ZWRT
b3VyY2VzXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKIHhj
b3B5IC95IC9kICIlUHJvamVjdERpciUuLlxNb2R1bGVzXGdlb2xvY2F0aW9uXCouaCIgIiVDT05G
SUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZSIKK3hjb3B5IC95IC9kICIlUHJvamVj
dERpciUuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIl
XGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxNb2R1bGVzXHdl
YnNvY2tldHNcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgog
eGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXGFjY2Vzc2liaWxpdHlcKi5oIiAiJUNPTkZJR1VS
QVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGly
JS4uXGFjY2Vzc2liaWxpdHlcd2luXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1
ZGVcV2ViQ29yZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUyLDEx
ICs0NTIsNiBAQAogCQkxQTc2MkM3ODBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYy
QzcwMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oICovOyB9OwogCQkxQTc2
MkM3OTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aFJlc3VsdC5jcHAgKi87IH07CiAJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAv
KiBKU1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovOyB9
OwotCQkxQTdDQ0IxOTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBN0NDQjE1MENE
OTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBN0NDQjFBMENEOTQ2OUEwMEI3QjY0
RSAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdDQ0IxNjBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTFBN0NDQjFCMENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTdDQ0IxNzBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBN0NDQjFD
MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBN0NDQjE4MENEOTQ2OUEw
MEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTdDQ0IyNDBDRDk0NkZEMDBCN0I2
NEUgLyogU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBN0NDQjIyMENEOTQ2RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBN0ZB
NjE5MEREQTNCM0EwMDI4RjhBNSAvKiBOZXR3b3JrU3RhdGVOb3RpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3RkE2MTgwRERBM0IzQTAwMjhG
OEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyLmggKi87IH07CiAJCTFBN0ZBNjFCMEREQTNCQkUw
MDI4RjhBNSAvKiBOZXR3b3JrU3RhdGVOb3RpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdGQTYxQTBEREEzQkJFMDAyOEY4QTUgLyogTmV0
d29ya1N0YXRlTm90aWZpZXIuY3BwICovOyB9OwogCQkxQTdGQTY0OTBEREEzQ0JBMDAyOEY4QTUg
LyogTmV0d29ya1N0YXRlTm90aWZpZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3RkE2NDcwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtT
dGF0ZU5vdGlmaWVyTWFjLmNwcCAqLzsgfTsKQEAgLTUzNSw3ICs1MzAsNiBAQAogCQkxQUJBNzZD
OTExRDIwRTQ3MDA0QzIwMUMgLyogQ29sb3JEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDZGM0ZCMTE5ODMwN0QwMDlENTlENiAvKiBDb2xv
ckRhdGEuY3BwICovOyB9OwogCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NTUHJvcGVy
dHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDFFQTAzODExOTgzNkRCMDA3MTBCQzUgLyogQ1NTUHJvcGVydHlOYW1lcy5jcHAgKi87IH07
CiAJCTFBQkE3NkNCMTFEMjBFNTcwMDRDMjAxQyAvKiBDU1NWYWx1ZUtleXdvcmRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MUVBMDM5MTE5ODM3
NDkwMDcxMEJDNSAvKiBDU1NWYWx1ZUtleXdvcmRzLmNwcCAqLzsgfTsKLQkJMUFCRkU3NTMwQ0Q5
NjhEMDAwRkU0ODM0IC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQkZFNzUyMENEOTY4RDAwMEZFNDgzNCAvKiBTUUxU
cmFuc2FjdGlvbi5jcHAgKi87IH07CiAJCTFBQzIyNjBDMERCNjlGMTkwMDg5QjY2OSAvKiBKU0RP
TUFwcGxpY2F0aW9uQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFDMjI2MEEwREI2OUYxOTAwODlCNjY5IC8qIEpTRE9NQXBwbGljYXRpb25D
YWNoZS5jcHAgKi87IH07CiAJCTFBQzIyNjBEMERCNjlGMTkwMDg5QjY2OSAvKiBKU0RPTUFwcGxp
Y2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQzIyNjBCMERCNjlGMTkwMDg5QjY2OSAvKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGUuaCAq
LzsgfTsKIAkJMUFDRDFCNjMwQjAyOTczOTAwN0U1MDE2IC8qIERPTUNTU1N0eWxlRGVjbGFyYXRp
b25JbnRlcm5hbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODVFNzExNDQwQUM1RDUzNDAwNTMyNzBGIC8qIERPTUNTU1N0eWxl
RGVjbGFyYXRpb25JbnRlcm5hbC5oICovOyB9OwpAQCAtNTQ4LDggKzU0Miw2IEBACiAJCTFBQ0U1
M0Y2MEE4RDE5NDcwMDIyOTQ3RCAvKiBKU1hNTFNlcmlhbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDRTUzRjQwQThEMTk0NzAwMjI5NDdE
IC8qIEpTWE1MU2VyaWFsaXplci5jcHAgKi87IH07CiAJCTFBQ0U1M0Y3MEE4RDE5NDcwMDIyOTQ3
RCAvKiBKU1hNTFNlcmlhbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQ0U1M0Y1MEE4RDE5NDcwMDIyOTQ3RCAvKiBKU1hNTFNlcmlhbGl6ZXIu
aCAqLzsgfTsKIAkJMUFEMjMxNkUwQ0QyNjlFNzAwQzFGMTk0IC8qIEpTU1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFEMjMxNkQwQ0QyNjlFNzAwQzFGMTk0IC8qIEpTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwICov
OyB9OwotCQkxQUQ1MUExNDBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0YWJhc2VUcmFja2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUQ1MUExMjBDQjU5
Q0QzMDA5NTNEMTEgLyogRGF0YWJhc2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFENTFBMTUwQ0I1OUNEMzAwOTUzRDExIC8qIERh
dGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUQ1MUExMzBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0YWJhc2VUcmFja2VyLmNwcCAq
LzsgfTsKIAkJMUFEOEY4MUIxMUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFEOEY4MTkx
MUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBRDhGODFDMTFDQUI5RTkwMEU5M0U1
NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFEOEY4MUExMUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgKi87IH07CiAJCTFBREExNDEwMEUxQUU1RDkwMDAyM0VFNSAvKiBQbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBREExNDBFMEUxQUU1RDkwMDAyM0VFNSAvKiBQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyLmNwcCAqLzsgfTsKQEAgLTYwOCw4ICs2MDAsNiBAQAogCQkxQUY4RTExQTEyNTY1
OTI2MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjhFMTE5MTI1NjU5MjYwMDIzMEZGNyAvKiBQcm94eVNlcnZl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFB
RjhFMTMzMTI1NjVBNDQwMDIzMEZGNyAvKiBQcm94eVNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUY4RTEzMjEyNTY1QTQ0MDAyMzBGRjcg
LyogUHJveHlTZXJ2ZXIuY3BwICovOyB9OwogCQkxQUY4RTFDMzEyNTY3M0UwMDAyMzBGRjcgLyog
UHJveHlTZXJ2ZXJDRk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUY4RTFDMTEyNTY3M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5j
cHAgKi87IH07Ci0JCTFBRkUxMTdEMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dM
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RkUxMTdCMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCAqLzsgfTsK
LQkJMUFGRTExN0UwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTdDMENCRkZC
MzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZBIC8q
IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5NzBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0LmNwcCAqLzsgfTsKIAkJMUFGRTExOUEwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FM
UmVzdWx0U2V0Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlz
dC5oICovOyB9OwogCQkxQzExQ0NCNTBBQTYwOTM3MDBEQURCMjAgLyogRE9NTm90YXRpb24uaCBp
biBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg1Q0E5NkU4MEE5NjI0RTkwMDY5MENDRiAvKiBET01Ob3RhdGlvbi5oICovOyB9OwpAQCAt
Njc4LDcgKzY2OCw2IEBACiAJCTIyOTJCMjdDMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovOyB9
OwogCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IH07CiAJCTIyQkQ5RjgxMTM1MzY0RkUw
MDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi87IH07Ci0JCTI0NUQ4MEEzMTMyODBFNDAwMDM0OTJBNiAvKiBTUUxDYWxs
YmFja1dyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0NUQ4MEEyMTMyODBFNDAwMDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCAqLzsg
fTsKIAkJMjRBQTU2OEQxM0NDOTRDRTAwRTkwMkY2IC8qIERPTVNWR0FsdEdseXBoSXRlbUVsZW1l
bnRJbnRlcm5hbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjREOTEyQTMxM0NBOTc3RDAwRDIxOTE1IC8qIERPTVNWR0FsdEds
eXBoSXRlbUVsZW1lbnRJbnRlcm5hbC5oICovOyB9OwogCQkyNEFBNTY4RTEzQ0M5NTA5MDBFOTAy
RjYgLyogRE9NU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyQTExM0NBOTc3RDAw
RDIxOTE1IC8qIERPTVNWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjRBQTU2OTAx
M0NDOTUyRjAwRTkwMkY2IC8qIERPTVNWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEy
OUIxM0NBOTc1QTAwRDIxOTE1IC8qIERPTVNWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwpA
QCAtMTQ1OSw3ICsxNDQ4LDYgQEAKIAkJNTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuY3BwICovOyB9OwogCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3Ry
ZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwRDRBMzExMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2Uu
aCAqLzsgfTsKIAkJNTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICov
OyB9OwotCQk1MTE2RDk3NzBDRjE3N0JEMDBDMkI4NEQgLyogRGF0YWJhc2VEZXRhaWxzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTE2RDk3NTBDRjE3
N0JEMDBDMkI4NEQgLyogRGF0YWJhc2VEZXRhaWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTExRjIzMTcwREMxNjBEQTAwNEYwMDMyIC8qIFN0
b3JhZ2VUYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUYyMzEzMERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGFzay5jcHAgKi87IH07CiAJ
CTUxMUYyMzE4MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGFzay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTQwREMxNjBEQTAwNEYwMDMy
IC8qIFN0b3JhZ2VUYXNrLmggKi87IH07CiAJCTUxMUYyMzE5MERDMTYwREEwMDRGMDAzMiAvKiBT
dG9yYWdlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMUYyMzE1MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmNwcCAqLzsg
fTsKQEAgLTE0ODAsOCArMTQ2OCw2IEBACiAJCTUxMzI3RDYxMTFBMzNBMkIwMDRGOUQ2NSAvKiBT
aW5rRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAgKi87IH07
CiAJCTUxM0YxNDUzMEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxM0YxNDUxMEFCNjM0QzQwMDA5
NERERiAvKiBJY29uTG9hZGVyLmNwcCAqLzsgfTsKIAkJNTEzRjE0NTQwQUI2MzRDNDAwMDk0RERG
IC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxM0YxNDUyMEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmggKi87IH07Ci0J
CTUxNDE4NUVFMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTg1RUMwQ0Q2NUYw
NDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggKi87IH07Ci0JCTUxNDE4NUVGMENE
NjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQxODVFRDBDRDY1RjA0MDA3NjNDOTkg
LyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovOyB9OwogCQk1MTRCM0Y3MzBDNzIyMDQ3MDAw
NTMwREYgLyogRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRCM0Y3NjBD
NzIyMDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEIzRjc1MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxl
U3lzdGVtTWFjLm1tICovOyB9OwogCQk1MTRDNzYzNzBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxF
cnJvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzYzNTBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxFcnJvci5jcHAgKi87IH07CkBAIC0xNTEy
LDggKzE0OTgsNiBAQAogCQk1MTRDNzY3RTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNw
b25zZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCAq
LzsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2
QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTU3ODhDMTEyMDc4NTJDMDBB
MzdDNEEgLyogVmlzaXRlZExpbmtTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Nzg4QzAxMjA3ODUyQzAwQTM3QzRBIC8qIFZpc2l0ZWRM
aW5rU3RyYXRlZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk1MTVCMDM5OTBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCMDM5NzBDRDE2NDJB
MDBCN0VBOUMgLyogU1FMU3RhdGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE1QjAzOUEwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRl
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTVCMDM5ODBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50LmNwcCAqLzsgfTsKIAkJNTE2
MDMwMEIwQ0M0MjUxMjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwMzAwQTBDQzQyNTEyMDBDOEFD
MjUgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCAqLzsgfTsKIAkJNTE2MDMwNkMwQ0M0MzYyMzAwQzhB
QzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTYwMzA2QjBDQzQzNjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNw
cCAqLzsgfTsKIAkJNTE2MEY0OTgwQjBBQTc1RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MEY0OTcw
QjBBQTc1RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovOyB9OwpAQCAtMTUzMCwyMyAr
MTUxNCw5IEBACiAJCTUxODlGMDFFMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODlGMDFD
MTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuaCAqLzsgfTsKIAkJNTE4OUYwREUx
MEI0NkIwRTAwRjNDNzM5IC8qIFBvcFN0YXRlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4OUYwREQxMEI0NkIwRTAwRjNDNzM5IC8qIFBv
cFN0YXRlRXZlbnQuY3BwICovOyB9OwogCQk1MThBMzRDOTEwMjZDOEM5MDAxQjY4OTYgLyogSlNX
ZWJTb2NrZXRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE4QTM0QzYxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q3VzdG9tLmNw
cCAqLzsgfTsKLQkJNTE5NjExNkEwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTVFMENBQzU2
NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi87IH07Ci0JCTUxOTYxMTZCMENBQzU2NTcwMDEw
QTgwQyAvKiBEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE5NjExNUYwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE5NjExNkQwQ0FDNTY1
NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTYxMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFz
ZVRocmVhZC5jcHAgKi87IH07Ci0JCTUxOTYxMTczMENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1
bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE5NjExNjcwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5jcHAgKi87IH07Ci0JCTUx
OTYxMTc0MENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTY4MENBQzU2NTcwMDEwQTgwQyAv
KiBTUUxSZXN1bHRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk1MTk2MTE3ODBDQUM1NkE4MDAxMEE4MEMgLyogRGF0YWJhc2VUaHJlYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTYyMENB
QzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5oICovOyB9OwotCQk1MTk2MTFFQTBDQUM3
NDlDMDAxMEE4MEMgLyogRGF0YWJhc2VUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTFFODBDQUM3NDlDMDAxMEE4MEMgLyogRGF0YWJhc2VU
YXNrLmggKi87IH07Ci0JCTUxOTYxMUVCMENBQzc0OUMwMDEwQTgwQyAvKiBEYXRhYmFzZVRhc2su
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjEx
RTkwQ0FDNzQ5QzAwMTBBODBDIC8qIERhdGFiYXNlVGFzay5jcHAgKi87IH07CiAJCTUxQTA1MjMz
MTA1ODc3NEYwMENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBMDUyMzExMDU4Nzc0RjAwQ0M5RTk1IC8q
IENyZWRlbnRpYWxTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTFBMDUyMzQxMDU4Nzc0RjAwQ0M5RTk1IC8qIENyZWRlbnRpYWxTdG9y
YWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QTA1MjMyMTA1ODc3NEYwMENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5jcHAgKi87IH07CiAJ
CTUxQTA1MjU2MTA1ODg3NDAwMENDOUU5NSAvKiBQcm90ZWN0aW9uU3BhY2VIYXNoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUEwNTI1NTEwNTg4NzQw
MDBDQzlFOTUgLyogUHJvdGVjdGlvblNwYWNlSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxQTQ1QjU2MENBRDdGRDcwMDBEMkJFOSAvKiBE
YXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQTQ1QjU0MENBRDdGRDcwMDBEMkJFOSAvKiBEYXRhYmFzZUF1dGhvcml6ZXIu
aCAqLzsgfTsKLQkJNTFBNDVCNTcwQ0FEN0ZENzAwMEQyQkU5IC8qIERhdGFiYXNlQXV0aG9yaXpl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE0
NUI1NTBDQUQ3RkQ3MDAwRDJCRTkgLyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCAqLzsgfTsKLQkJ
NTFBOTI2N0MwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5MjY3ODBENTNGMDU3
MDA2M0VDQzIgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKLQkJNTFBOTI2N0QwRDUz
RjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOTI2NzkwRDUzRjA1NzAwNjNFQ0MyIC8qIE9y
aWdpblF1b3RhTWFuYWdlci5oICovOyB9OwotCQk1MUE5MjY3RTBENTNGMDU3MDA2M0VDQzIgLyog
T3JpZ2luVXNhZ2VSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFBOTI2N0EwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3Jk
LmNwcCAqLzsgfTsKLQkJNTFBOTI2N0YwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVj
b3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5
MjY3QjBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCAqLzsgfTsKIAkJNTFB
QTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQTNGNkUwQkQ1QUE5RTAwODky
OTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tICovOyB9OwogCQk1MUFCQUUxQjEwM0MxOEZGMDA4
QzUyNjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJl
YW1FcnJvci5oICovOyB9OwogCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3Ry
ZWFtSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUFCQUUxQzEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IH07
CkBAIC0xNTc3LDkgKzE1NDcsNyBAQAogCQk1MUUxRUNDMzBDOTFDOTA0MDBEQzI1NUIgLyogUGFn
ZVVSTFJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFFMUVDQkQwQzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuaCAqLzsgfTsKIAkJ
NTFFM0Y5QzcwREEwNTlEQzAwMjUwOTExIC8qIFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFM0Y5QzUwREEwNTlEQzAwMjUwOTExIC8q
IFN0b3JhZ2UuY3BwICovOyB9OwogCQk1MUUzRjlENjBEQTA1RTFEMDAyNTA5MTEgLyogSlNTdG9y
YWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RTNGOUQ0MERBMDVFMUQwMDI1MDkxMSAvKiBKU1N0b3JhZ2UuY3BwICovOyB9OwotCQk1MUVDOTI1
OTBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjU3MENFOTBEQjQwMEY5MDMwOCAvKiBTUUxFcnJv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUx
RUM5MjY1MENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFF
QzkyNUQwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAgKi87IH07Ci0JCTUxRkFGRTM0MENFQ0JGMkQwMEJCM0YyNCAvKiBEYXRhYmFzZVRyYWNr
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRkFGRTMzMENFQ0JGMkQwMEJCM0YyNCAvKiBEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUZCNTUwNDEx
M0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9z
ZUV2ZW50LmggKi87IH07CiAJCTUxRkI1NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
QjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CiAJCTUyMUQ0
NkY2MTFBRUM5ODEwMDUxNDYxMyAvKiBLaWxsUmluZ01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAvKiBL
aWxsUmluZ01hYy5tbSAqLzsgfTsKQEAgLTMzODksOCArMzM1Nyw2IEBACiAJCTk3MjA1QUI4MTIz
OTI5MTAwMEIxNzM4MCAvKiBNZWRpYURvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzIwNUFCNDEyMzkyOTEwMDBCMTczODAgLyogTWVkaWFE
b2N1bWVudC5oICovOyB9OwogCQk5NzIwNUFCQjEyMzkyOTI3MDBCMTczODAgLyogUGx1Z2luRG9j
dW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcyMDVBQjkxMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3VtZW50LmNwcCAqLzsgfTsKIAkJ
OTcyMDVBQkMxMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3VtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzIwNUFCQTEyMzkyOTI3MDBCMTcz
ODAgLyogUGx1Z2luRG9jdW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk5NzI0NTg1MjE0RkI3MjQ4MDBDQTg3NDYgLyogRGF0YWJhc2VDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MjQ1ODUwMTRGQjcyNDgwMENBODc0NiAvKiBEYXRhYmFzZUNvbnRleHQuY3BwICovOyB9OwotCQk5
NzI0NTg1MzE0RkI3MjQ4MDBDQTg3NDYgLyogRGF0YWJhc2VDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzI0NTg1MTE0RkI3MjQ4MDBDQTg3
NDYgLyogRGF0YWJhc2VDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTcyOEMzMTMxMjY4RTQzOTAwNDFFODlCIC8qIE1hcmt1cEFjY3Vt
dWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MjhDMzExMTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1bXVsYXRvci5jcHAgKi87IH07
CiAJCTk3MjhDMzE0MTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1bXVsYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcyOEMzMTIxMjY4RTQz
OTAwNDFFODlCIC8qIE1hcmt1cEFjY3VtdWxhdG9yLmggKi87IH07CiAJCTk3Mzg4OUEwMTE2RUE5
REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzM4ODk5RTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1l
bnRXcml0ZXIuY3BwICovOyB9OwpAQCAtMzQ5NSw3ICszNDYxLDYgQEAKIAkJOTc3RTJFMEYxMkYw
RkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3N0UyRTBDMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9y
LmggKi87IH07CiAJCTk3OEFENjc0MTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4QUQ2
NzExNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5jcHAgKi87IH07CiAJCTk3OEFE
Njc1MTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OEFENjcyMTQxMzBBOEQwMEM3Q0FFMyAv
KiBIVE1MU3BhbkVsZW1lbnQuaCAqLzsgfTsKLQkJOTc4RDA3QjQxNDVBMEVDRDAwOTY5MDhEIC8q
IFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzhEMDdCMzE0NUEwRUNEMDA5NjkwOEQgLyogU1FMRXhjZXB0aW9uLmNwcCAqLzsg
fTsKIAkJOTc4RDA3QjYxNDVBMEYwMzAwOTY5MDhEIC8qIEZpbGVFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4RDA3QjUxNDVBMEYw
MzAwOTY5MDhEIC8qIEZpbGVFeGNlcHRpb24uY3BwICovOyB9OwogCQk5NzhEMDdCODE0NUEwRjFC
MDA5NjkwOEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCNzE0NUEwRjFCMDA5Njkw
OEQgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCTk3OEQwN0JB
MTQ1QTBGM0MwMDk2OTA4RCAvKiBSYW5nZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzhEMDdCOTE0NUEwRjNDMDA5NjkwOEQgLyog
UmFuZ2VFeGNlcHRpb24uY3BwICovOyB9OwpAQCAtMzUzNCw2ICszNDk5LDYwIEBACiAJCTk3QUFC
RDJEMTRGQTA5RDUwMDc0NTdBRSAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdBQUJEMTIx
NEZBMDlENTAwNzQ1N0FFIC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggKi87
IH07CiAJCTk3QjFGMDJFMTNCMDI1Q0EwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzU2
OUUwMDEzQUYxNzJDMDBDREJBOEUgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwICovOyB9
OwogCQk5N0IxRjAyRjEzQjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NTY5RTAy
MTNBRjE3MkMwMENEQkE4RSAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oICovOyB9OworCQk5
N0JDNjlEQTE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlENjE1MDVGMDc2MDAx
Qjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgKi87IH07CisJCTk3QkM2OURCMTUwNUYwNzYw
MDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlENzE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3RE
YXRhYmFzZS5oICovOyB9OworCQk5N0JDNjlEQzE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVy
c2lvbldyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTdCQzY5RDgxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cCAqLzsgfTsKKwkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFw
cGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JD
NjlEOTE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCAqLzsgfTsKKwkJ
OTdCQzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OURFMTUwNUYwODEwMDFCNzRBQyAv
KiBEYXRhYmFzZS5jcHAgKi87IH07CisJCTk3QkM2QTIxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdC
QzY5REYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggKi87IH07CisJCTk3QkM2QTIzMTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RTExNTA1RjA4MTAwMUI3NEFDIC8q
IERhdGFiYXNlQXV0aG9yaXplci5jcHAgKi87IH07CisJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3QkM2OUUyMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhv
cml6ZXIuaCAqLzsgfTsKKwkJOTdCQzZBMjUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
QkM2OUUzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi87IH07CisJCTk3
QkM2QTI3MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RTUxNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlQ29udGV4dC5jcHAgKi87IH07CisJCTk3QkM2QTI4MTUwNUYwODEwMDFC
NzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3QkM2OUU2MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRl
eHQuaCAqLzsgfTsKKwkJOTdCQzZBMjkxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlRGV0YWls
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5
RTcxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlRGV0YWlscy5oICovOyB9OworCQk5N0JDNkEy
QTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUU4MTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZVN5bmMuY3BwICovOyB9OworCQk5N0JDNkEyQjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0JDNjlFOTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CisJCTk3
QkM2QTJEMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RUIxNTA1RjA4MTAwMUI3NEFD
IC8qIERhdGFiYXNlVGFzay5jcHAgKi87IH07CisJCTk3QkM2QTJFMTUwNUYwODEwMDFCNzRBQyAv
KiBEYXRhYmFzZVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3QkM2OUVDMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suaCAqLzsgfTsK
KwkJOTdCQzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUVEMTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgKi87IH07CisJCTk3QkM2QTMwMTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RUUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhy
ZWFkLmggKi87IH07CisJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNr
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdC
QzY5RUYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CisJCTk3
QkM2QTMyMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUYwMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZVRyYWNrZXIuaCAqLzsgfTsKKwkJOTdCQzZBMzMxNTA1RjA4MTAwMUI3NEFD
IC8qIERhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJh
Y2tlckNsaWVudC5oICovOyB9OworCQk5N0JDNkEzNDE1MDVGMDgxMDAxQjc0QUMgLyogRE9NV2lu
ZG93U1FMRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTdCQzY5RjIxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NRTERhdGFiYXNl
LmNwcCAqLzsgfTsKKwkJOTdCQzZBMzUxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NRTERh
dGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
N0JDNjlGMzE1MDVGMDgxMDAxQjc0QUMgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaCAqLzsgfTsK
KwkJOTdCQzZBMzcxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlGNTE1MDVG
MDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJOTdCQzZBMzgx
NTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RjYxNTA1RjA4MTAwMUI3NEFDIC8q
IE9yaWdpblF1b3RhTWFuYWdlci5oICovOyB9OworCQk5N0JDNkEzOTE1MDVGMDgxMDAxQjc0QUMg
LyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTdCQzY5RjcxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblVzYWdlUmVj
b3JkLmNwcCAqLzsgfTsKKwkJOTdCQzZBM0ExNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblVzYWdl
UmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
N0JDNjlGODE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCAqLzsgfTsKKwkJ
OTdCQzZBM0IxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTENhbGxiYWNrV3JhcHBlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RjkxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTENhbGxiYWNrV3JhcHBlci5oICovOyB9OworCQk5N0JDNkEzQzE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3QkM2OUZBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFcnJvci5oICovOyB9
OworCQk5N0JDNkEzRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUZDMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxFeGNlcHRpb24uY3BwICovOyB9OworCQk5N0JDNkEzRjE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5N0JDNjlGRDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmgg
Ki87IH07CisJCTk3QkM2QTQxMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RkYxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5jcHAgKi87IH07CisJCTk3QkM2QTQyMTUwNUYw
ODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTAwMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRT
ZXQuaCAqLzsgfTsKKwkJOTdCQzZBNDQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJv
d0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTdCQzZBMDIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9
OworCQk5N0JDNkE0NTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMDMxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCAqLzsgfTsKKwkJOTdCQzZBNDcx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEwNTE1MDVGMDgxMDAxQjc0QUMgLyogU1FM
U3RhdGVtZW50LmNwcCAqLzsgfTsKKwkJOTdCQzZBNDgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0
YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTdCQzZBMDYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5oICovOyB9OworCQk5N0JD
NkE0OTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTA3MTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oICovOyB9OworCQk5N0JDNkE0QjE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMDkxNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCAqLzsgfTsKKwkJOTdCQzZBNEQxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMEIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRl
bWVudFN5bmMuY3BwICovOyB9OworCQk5N0JDNkE0RTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3Rh
dGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTdCQzZBMEMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLzsgfTsK
KwkJOTdCQzZBNEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTBEMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgKi87IH07CisJCTk3QkM2QTUwMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0
aW9uLmggKi87IH07CisJCTk3QkM2QTUyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0JDNkExMDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICov
OyB9OworCQk5N0JDNkE1NDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZB
MTIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCAqLzsgfTsKKwkJ
OTdCQzZBNTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExMzE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCAqLzsgfTsKKwkJOTdCQzZBNTYxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTQxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovOyB9OworCQk5N0JDNkE1NzE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTUxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLzsgfTsKKwkJOTdCQzZBNTgxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTYxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oICovOyB9OworCQk5N0JDNkE1QTE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTE4MTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovOyB9OworCQk5N0JDNkE1QjE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rp
b25TeW5jLmggKi87IH07CisJCTk3QkM2QTVEMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTdCQzZBMUIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrLmggKi87IH07CisJCTk3QkM2QTVGMTUwNUYwODEwMDFCNzRBQyAvKiBXb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTdCQzZBMUQxNTA1RjA4MTAwMUI3NEFDIC8qIFdvcmtlckNvbnRleHRTUUxEYXRh
YmFzZS5jcHAgKi87IH07CisJCTk3QkM2QTYwMTUwNUYwODEwMDFCNzRBQyAvKiBXb3JrZXJDb250
ZXh0U1FMRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3QkM2QTFFMTUwNUYwODEwMDFCNzRBQyAvKiBXb3JrZXJDb250ZXh0U1FMRGF0YWJh
c2UuaCAqLzsgfTsKIAkJOTdCQzg0ODMxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
N0JDODQ4MTEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFyc2VyLmNwcCAqLzsgfTsK
IAkJOTdCQzg0ODQxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzg0ODIxMjM2RkQ5
MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5oICovOyB9OwogCQk5N0JDODQ5QjEyMzcw
QTRCMDAwQzYxNjEgLyogSFRNTElucHV0U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDODQ5QTEyMzcwQTRCMDAwQzYxNjEgLyogSFRNTElu
cHV0U3RyZWFtLmggKi87IH07CkBAIC0zNTUyLDggKzM1NzEsNiBAQAogCQk5N0U0MDI5MDEzQTY5
NkVEMDA5MTNENjcgLyogSWNvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RTQwMjhFMTNBNjk2RUQwMDkxM0Q2NyAvKiBJY29uQ29u
dHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTk3RTRBMTI2MTRGNEM1RDQwMDg3MEU0MyAvKiBOYXZpZ2F0b3JSZWdpc3RlclByb3RvY29s
SGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTczMEJFMTUxNEVGMjg2QjAwREYwNkI5IC8qIE5hdmlnYXRvclJlZ2lzdGVyUHJvdG9jb2xIYW5k
bGVyLmggKi87IH07CiAJCTk3RTRBMTI3MTRGNEM1RDcwMDg3MEU0MyAvKiBOYXZpZ2F0b3JSZWdp
c3RlclByb3RvY29sSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzMwQkUxNDE0RUYyODZCMDBERjA2QjkgLyogTmF2aWdhdG9yUmVnaXN0
ZXJQcm90b2NvbEhhbmRsZXIuY3BwICovOyB9OwotCQk5N0U2QzEzRDE1MDU4NzNGMDA2RkM5NDMg
LyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RTZDMTNBMTUwNTg3M0YwMDZGQzk0MyAvKiBXb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuY3BwICovOyB9OwotCQk5N0U2QzEzRTE1MDU4NzNGMDA2RkM5NDMg
LyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0U2QzEzQjE1MDU4NzNGMDA2RkM5NDMgLyogV29ya2VyQ29u
dGV4dFNRTERhdGFiYXNlLmggKi87IH07CiAJCTk3RUY3REZFMTA3RTU1QjcwMEQ3QzQ5QyAvKiBT
Y3JpcHRDb250cm9sbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxl
ckJhc2UuY3BwICovOyB9OwogCQk5ODQyNjRGMTEyRDUyODBBMDAwRDg4QTQgLyogTGlua0xvYWRl
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTg0MjY0RUYxMkQ1MjgwQTAwMEQ4OEE0IC8qIExpbmtMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJ
OTg1QkI5NkQxM0E5NDA1ODAwN0EwQjY5IC8qIExpbmtSZWxBdHRyaWJ1dGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTg1QkI5NkIxM0E5NDA1ODAw
N0EwQjY5IC8qIExpbmtSZWxBdHRyaWJ1dGUuY3BwICovOyB9OwpAQCAtNDIxOSw4ICs0MjM2LDYg
QEAKIAkJQThFQTgwMEMwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE4MDA0MEExOTUxNkUwMEE4
RUY1RiAvKiBTdHlsZVNoZWV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQThFQTgwMEQwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTgwMDUw
QTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuY3BwICovOyB9OwogCQlBOEVBODAwRTBBMTk1
MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEVBODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQThGNDU3
QTAxNEJDMUE4ODAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjQ1NzlEMTRCQzEzRUMwMDBD
RUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAgKi87IH07Ci0JCUE4RjQ1N0ExMTRCQzFB
OTQwMDBDRUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNDU3OUUxNEJDMTNFQzAwMENFQTU5IC8qIERP
TVdpbmRvd1NRTERhdGFiYXNlLmggKi87IH07CiAJCUE4RjQ2QTg0MENCMjBBOUQwMDNBOTY3MCAv
KiBET01TVkdDbGlwUGF0aEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDM2MTJDMEFDRTAwN0IwMDFGM0Q5RSAv
KiBET01TVkdDbGlwUGF0aEVsZW1lbnQuaCAqLzsgfTsKIAkJQThGNDZBODgwQ0IyMEE5RDAwM0E5
NjcwIC8qIERPTVNWR0dyYWRpZW50RWxlbWVudC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVDOUEyRUMwQUQ3RTkwMzAwRkJG
RjFFIC8qIERPTVNWR0dyYWRpZW50RWxlbWVudC5oICovOyB9OwogCQlBOEY0NkE4OTBDQjIwQTlE
MDAzQTk2NzAgLyogRE9NU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIGluIENvcHkgR2VuZXJhdGVk
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzYxMjgwQUNF
MDA3QjAwMUYzRDlFIC8qIERPTVNWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCAqLzsgfTsKQEAgLTUw
NDAsMjMgKzUwNTUsMTMgQEAKIAkJQjJGQTNFMTgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9v
bUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyRkEzRDMwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgKi87IH07CiAJ
CUIyRkEzRTE5MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJGQTNEMzEwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmggKi87IH07CiAJCUI1MEY1QjgxMEU5NkNEOTkwMEFENzFB
NiAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI1MEY1QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4
dHJhcy5tbSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1kZXByZWNhdGVk
LWRlY2xhcmF0aW9ucyI7IH07IH07Ci0JCUI1MUJGNkYwMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxU
cmFuc2FjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTFCRjZFRTEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGll
bnQuY3BwICovOyB9OwotCQlCNTFCRjZGMTEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rp
b25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1MUJGNkVGMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oICovOyB9
OwotCQlCNTIzQ0YwNjExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjND
RUZGMTE4MjY3NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovOyB9
OwotCQlCNTIzQ0YwODExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTIzQ0YwMTExODI2
NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmggKi87IH07Ci0JCUI1MjNDRjA5MTE4
MjY3NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyM0NGMDIxMTgyNjc1NDAwRUJCMjlDIC8q
IFNRTFRyYW5zYWN0aW9uU3luYy5jcHAgKi87IH07Ci0JCUI1MjNDRjBBMTE4MjY3NTQwMEVCQjI5
QyAvKiBEYXRhYmFzZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjUyM0NGMDMxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5jcHAg
Ki87IH07Ci0JCUI1MjNDRjBCMTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjA0MTE4MjY3
NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLzsgfTsKIAkJQjUyNUE5NjUxMUNBMjM0MDAw
M0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCNTI1QTk2MzExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRp
b24uaCAqLzsgfTsKIAkJQjUyNUE5NjYxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjVB
OTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUI1MzIw
RDZCMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTMyMEQ2OTEyMkEyNEU5MDAyRDE0NDAg
LyogRm9udFBsYXRmb3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUI1MzIwRDZDMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1E
YXRhQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNTMyMEQ2QTEyMkEyNEU5MDAyRDE0NDAgLyogRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tICov
OyB9OwotCQlCNTUwQjUyNTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMTEx
REM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi87IH07Ci0JCUI1NTBCNTI2
MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyog
U1FMU3RhdGVtZW50U3luYy5oICovOyB9OwogCQlCNTVENUFBNDExOTEzMUZDMDBCQ0MzMTUgLyog
SlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsKIAkJQjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1
IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpT
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovOyB9OwogCQlCNTVENUFBOTExOTEzMjUw
MDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTcxMTkxMzI1MDAwQkNDMzE1
IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCAqLzsgfTsKLQkJQjU2RUJBODUxMUM5
RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2Vw
dGlvbi5oICovOyB9OwogCQlCNThDRUI2OTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5
bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1OENF
QjY3MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5oICovOyB9OwogCQlCNThDRUI2
QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4Q0VCNjgxMTkxMzYwNzAwMkE2NzkwIC8q
IEpTRGF0YWJhc2VTeW5jLmNwcCAqLzsgfTsKIAkJQjU4Q0VCNkQxMTkxMzYxQzAwMkE2NzkwIC8q
IEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNThDRUI2QjExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2FjdGlv
blN5bmMuaCAqLzsgfTsKQEAgLTUwNzMsMTMgKzUwNzgsOCBAQAogCQlCNTlERDZBQTExOTAyQTcx
MDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1OURENkE4MTE5MDJBNzEwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovOyB9OwogCQlCNUE2ODQyMjBG
RkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNR
TGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJQjVBNjg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNR
TGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3Bw
ICovOyB9OwotCQlCNUI1REM2OTExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUI1REM2
NzExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgKi87IH07Ci0JCUI1QjVE
QzZBMTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAg
LyogQWJzdHJhY3REYXRhYmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1QzExMjM5MTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcCAqLzsgfTsKLQkJQjVDMTEyM0MxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggKi87IH07CiAJCUI1RDMxREZBMTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovOyB9Owog
CQlCNUQzMURGQjExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY5MTFDRjYxMEIw
MDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oICovOyB9OwotCQlCNUQzNjAxQTExMkY4QjU2
MDA0OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNl
Q2FsbGJhY2suaCAqLzsgfTsKIAkJQjY1NjYyNzAxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJh
bnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggKi87IH07CiAJ
CUI2NTY2MjcxMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZGMTIwQjEyMjcw
MDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKIAkJQjcxRkU2REYxMTA5MUNC
MzAwREFFRjc3IC8qIFByaW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0M0ExMTA0NTI1RDAwQkVCMEVDIC8qIFByaW50Q29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
MjUwLDEyICs3MjUwLDYgQEAKIAkJMUE3NjJDNzAwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhO
U1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoTlNS
ZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTc2MkM3MTBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNYUGF0aFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBNzYyQzcyMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBN0NDQjE1MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRD
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRD
YWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTdDQ0IxNjBDRDk0NjlB
MDBCN0I2NEUgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBN0NDQjE3MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3Q0NCMTgw
Q0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3Q0NCMjIwQ0Q5NDZGRDAwQjdCNjRFIC8q
IFNRTFRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFRy
YW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBN0NDQjIzMENEOTQ2
RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U1FMVHJhbnNhY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTdGQTYx
ODBEREEzQjNBMDAyOEY4QTUgLyogTmV0d29ya1N0YXRlTm90aWZpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1N0YXRlTm90aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE3RkE2MUEwRERBM0JCRTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0
ZU5vdGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdv
cmtTdGF0ZU5vdGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3RkE2
NDcwRERBM0NCQTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczNDQsNyArNzMzOCw2IEBACiAJCTFB
QjdGQzY1MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYUGF0aFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBQjdGQzY2MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aFZhcmlhYmxlUmVm
ZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCN0ZDNjcwQThCOTJF
QzAwRDlEMzdCIC8qIFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUFCRkU3NTIwQ0Q5NjhEMDAwRkU0ODM0IC8qIFNRTFRyYW5zYWN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFDMjI2MEEwREI2OUYxOTAwODlC
NjY5IC8qIEpTRE9NQXBwbGljYXRpb25DYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQUMyMjYwQjBEQjY5RjE5MDA4OUI2NjkgLyogSlNET01BcHBsaWNhdGlv
bkNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQXBwbGljYXRp
b25DYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUNFNTNERDBBOEQxODgx
MDAyMjk0N0QgLyogSlNET01QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTczNTgsOCArNzM1MSw2IEBACiAJCTFBQ0U1M0Y0MEE4RDE5NDcwMDIyOTQ3RCAvKiBKU1hNTFNl
cmlhbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWE1M
U2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQ0U1M0Y1MEE4
RDE5NDcwMDIyOTQ3RCAvKiBKU1hNTFNlcmlhbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTWE1MU2VyaWFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQUQyMzE2RDBDRDI2OUU3MDBDMUYxOTQgLyogSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFENTFBMTIwQ0I1OUNE
MzAwOTUzRDExIC8qIERhdGFiYXNlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEYXRhYmFzZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUFENTFBMTMwQ0I1OUNEMzAwOTUzRDExIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQUQ4RjgxOTExQ0FCOUU5MDBFOTNFNTQgLyogUGxhdGZv
cm1TdHJhdGVnaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
U3RyYXRlZ2llcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUQ4RjgxQTExQ0FC
OUU5MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtU3RyYXRlZ2llcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBREExNDBFMEUxQUU1RDkwMDAyM0VFNSAvKiBQbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzQzOCw5ICs3NDI5LDYgQEAKIAkJMUFGOEUxMTkxMjU2NTkyNjAwMjMwRkY3IC8qIFByb3h5
U2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5U2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjhFMTMyMTI1NjVBNDQwMDIzMEZGNyAv
KiBQcm94eVNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
cm94eVNlcnZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjhFMUMxMTI1
NjczRTAwMDIzMEZGNyAvKiBQcm94eVNlcnZlckNGTmV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5U2VydmVyQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUZFMTE3QjBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFGRTExN0MwQ0JG
RkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUZFMTE4QzBDQkZGQzRFMDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlz
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRkUxMTk3MENCRkZDQzQwMDMwMTdGQSAvKiBK
U1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFJlc3VsdFNldFJvd0xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYy
IC8qIERvY3VtZW50TG9hZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERvY3VtZW50TG9hZGVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc0OTUsNyArNzQ4Myw2IEBACiAJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFn
ZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyQkQ5RjgwMTM1MzY0RkUw
MDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyNDVEODBBMjEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tX
cmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTENhbGxiYWNrV3Jh
cHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBE
MjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaERlZkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdB
bHRHbHlwaERlZkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEy
OTMxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM3Niw3ICs4MzYzLDYgQEAKIAkJ
NTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTMxMTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTExNkQ5NzUwQ0YxNzdC
RDAwQzJCODREIC8qIERhdGFiYXNlRGV0YWlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEYXRhYmFzZURldGFpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTExRjIzMTMwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUYXNrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUYXNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUYXNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzE1MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdl
VGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VU
aHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM5Nyw4ICs4MzgzLDYg
QEAKIAkJNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW5rRG9jdW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTNGMTQ1MTBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxv
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWNvbkxvYWRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxM0YxNDUyMEFCNjM0QzQwMDA5
NERERiAvKiBJY29uTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
Y29uTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNDE4NUVDMENENjVG
MDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MTQxODVFRDBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCM0Y3MjBDNzIy
MDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEIzRjc1
MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lzdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRmlsZVN5c3RlbU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE0Qzc2MzUwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxFcnJvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDI5LDggKzg0MTMsNiBAQAogCQk1MTRDNzY2OTBD
RTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Nzg4QzAx
MjA3ODUyQzAwQTM3QzRBIC8qIFZpc2l0ZWRMaW5rU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtTdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTVCMDM5NzBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFN0YXRlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MTVCMDM5ODBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3Rh
dGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFN0YXRl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjAzMDBBMENDNDI1MTIw
MEM4QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRmlsZVN5c3RlbVBPU0lYLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2MDMwNkIwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVtQ0YuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwRjQ5NzBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9y
eUl0ZW1NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBIaXN0
b3J5SXRlbU1hYy5tbTsgcGF0aCA9IG1hYy9IaXN0b3J5SXRlbU1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTg0NDgsMjcgKzg0MzAsMTEgQEAKIAkJNTE4OUYwMUMxMEIzN0JE
OTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1BvcFN0YXRlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE4OUYwREQxMEI0NkIwRTAwRjNDNzM5IC8qIFBvcFN0YXRlRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9wU3RhdGVFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxOEEzNEM2MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tl
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYlNv
Y2tldEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMTVFMENB
QzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
OTYxMTVGMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MTk2MTE2MDBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5NjEx
NjEwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTE5NjExNjIwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlVGhyZWFkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTYxMTY3MENBQzU2NTcwMDEwQTgwQyAvKiBT
UUxSZXN1bHRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FM
UmVzdWx0U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5NjExNjgwQ0FD
NTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTUUxSZXN1bHRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5
NjExNjkwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gU1FMUmVzdWx0U2V0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTE5NjExRTgwQ0FDNzQ5QzAwMTBBODBDIC8qIERhdGFiYXNlVGFzay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTE5NjExRTkwQ0FDNzQ5QzAwMTBBODBDIC8qIERhdGFiYXNlVGFzay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZVRhc2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTlGRTBBMTBEQUQ0NDZFMDBBMDhGMjEgLyogSFRN
TEF0dHJpYnV0ZU5hbWVzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxBdHRyaWJ1dGVO
YW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5RkUwQTIwREFENDQ2RTAw
QTA4RjIxIC8qIEhUTUxUYWdOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MVGFn
TmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTA1MjMxMTA1ODc3NEYw
MENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDcmVkZW50aWFsU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUEwNTIzMjEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0b3JhZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3JlZGVudGlhbFN0b3JhZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUEwNTI1NTEwNTg4NzQwMDBDQzlFOTUgLyog
UHJvdGVjdGlvblNwYWNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cm90ZWN0aW9uU3BhY2VIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQTQ1
QjU0MENBRDdGRDcwMDBEMkJFOSAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VBdXRob3JpemVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUxQTQ1QjU1MENBRDdGRDcwMDBEMkJFOSAvKiBEYXRhYmFzZUF1dGhv
cml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VB
dXRob3JpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBOTI2NzgwRDUz
RjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5RdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MUE5MjY3OTBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luUXVvdGFN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9yaWdpblF1b3RhTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUE5MjY3QTBENTNGMDU3MDA2
M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUE5MjY3QjBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3JpZ2luVXNhZ2VSZWNvcmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQTNGNkUwQkQ1QUE5RTAwODkyOTcxIC8qIFJl
c291cmNlTG9hZGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUmVzb3VyY2VMb2FkZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUFCQUUxQzEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFt
SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUhh
bmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODUwMywxMiArODQ2OSw5IEBA
CiAJCTUxRTNGOUQxMERBMDVENzEwMDI1MDkxMSAvKiBTdG9yYWdlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBTdG9yYWdlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFF
M0Y5RDQwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUUzRjlENTBEQTA1RTFEMDAyNTA5MTEgLyogSlNTdG9yYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MUVDOTI1NzBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTFFQzkyNTgwQ0U5MERCNDAwRjkwMzA4IC8qIFNRTEVycm9yLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTUUxFcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFGNkEzRDUwNjYzQkYwNDAwNEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhUTUxDYW52YXNFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTUxRjZBM0Q2MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1M
Q2FudmFzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MQ2FudmFzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0
IC8qIERhdGFiYXNlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEYXRhYmFzZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFGQjU1MDIxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nsb3NlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nsb3NlRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjFENDZGNTExQUVDOTgxMDA1MTQ2MTMgLyog
S2lsbFJpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBL
aWxsUmluZ01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMzE4LDggKzEw
MjgxLDYgQEAKIAkJOTcyMDVBQjQxMjM5MjkxMDAwQjE3MzgwIC8qIE1lZGlhRG9jdW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFEb2N1bWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NzIwNUFCOTEyMzkyOTI3MDBCMTczODAgLyogUGx1Z2lu
RG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2lu
RG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzIwNUFCQTEyMzky
OTI3MDBCMTczODAgLyogUGx1Z2luRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGx1Z2luRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OTcyNDU4NTAxNEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZUNvbnRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5NzI0NTg1MTE0RkI3MjQ4MDBDQTg3NDYgLyogRGF0YWJh
c2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzI4QzMxMTEyNjhFNDM5MDA0
MUU4OUIgLyogTWFya3VwQWNjdW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWFya3VwQWNjdW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzI4QzMxMjEyNjhFNDM5MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya3VwQWNjdW11bGF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTczMEJFMTQxNEVGMjg2QjAwREYwNkI5IC8qIE5h
dmlnYXRvclJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvclJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDM4LDcgKzEwMzk5LDYgQEAKIAkJOTc4QUQ2
NzExNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3BhbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NzhBRDY3MjE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxTcGFuRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhBRDY3MzE0MTMwQThEMDBDN0NBRTMg
LyogSFRNTFNwYW5FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MU3BhbkVs
ZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzhEMDdCMzE0NUEwRUNE
MDA5NjkwOEQgLyogU1FMRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3OEQwN0I1MTQ1QTBGMDMwMDk2OTA4RCAvKiBGaWxlRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVFeGNlcHRpb24uY3BwOyBwYXRoID0gZmls
ZWFwaS9GaWxlRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc4
RDA3QjcxNDVBMEYxQjAwOTY5MDhEIC8qIE9wZXJhdGlvbk5vdEFsbG93ZWRFeGNlcHRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlcmF0aW9uTm90QWxsb3dl
ZEV4Y2VwdGlvbi5jcHA7IHBhdGggPSBmaWxlYXBpL09wZXJhdGlvbk5vdEFsbG93ZWRFeGNlcHRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzhEMDdCOTE0NUEwRjNDMDA5
NjkwOEQgLyogUmFuZ2VFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmFuZ2VFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTA0NzgsNiArMTA0MzgsNzYgQEAKIAkJOTdBQUJEMTAxNEZBMDlENTAwNzQ1N0FFIC8qIFdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlLmg7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTdBQUJEMTExNEZBMDlENTAwNzQ1N0FFIC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0
cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3QUFCRDEyMTRGQTA5RDUwMDc0NTdBRSAvKiBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOyBwYXRoID0gTW9kdWxlcy93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3QkM2OUQ2MTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFic3RyYWN0RGF0YWJhc2Uu
Y3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8qIEFi
c3RyYWN0RGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWJzdHJh
Y3REYXRhYmFzZS5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUQ4MTUwNUYwNzYwMDFCNzRB
QyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRh
dGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTdCQzY5RDkxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENoYW5nZVZlcnNpb25XcmFwcGVyLmg7
IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OURFMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZS5j
cHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5REYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlLmg7IHBhdGggPSBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3QkM2OUUwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gRGF0YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUUxMTUwNUYwODEwMDFC
NzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRGF0YWJhc2VBdXRob3JpemVyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTdCQzY5RTIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUF1dGhvcml6ZXIuaDsgcGF0aCA9
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3QkM2OUUzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxi
YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlQ2FsbGJhY2su
aDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlFNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2VDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGF0YWJhc2VDYWxsYmFjay5p
ZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlFNTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERh
dGFiYXNlQ29udGV4dC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUU2MTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRGF0YWJhc2VDb250ZXh0Lmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlFNzE1MDVG
MDgxMDAxQjc0QUMgLyogRGF0YWJhc2VEZXRhaWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERhdGFiYXNlRGV0YWlscy5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZURldGFpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RTgx
NTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZVN5bmMuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JD
NjlFOTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlU3luYy5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RUEx
NTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gRGF0YWJhc2VTeW5jLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VT
eW5jLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RUIxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBEYXRhYmFzZVRhc2suY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlFQzE1MDVG
MDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERhdGFiYXNlVGFzay5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RUQxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERhdGFiYXNlVGhyZWFkLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlF
RTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRGF0YWJhc2VUaHJlYWQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5
RUYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZVRyYWNrZXIuY3BwOyBwYXRoID0gTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5N0JDNjlGMDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlVHJhY2tlci5oOyBwYXRoID0g
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTdCQzY5RjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlckNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZVRyYWNrZXJD
bGllbnQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUYyMTUwNUYwODEwMDFCNzRB
QyAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTdCQzY5RjMxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERPTVdpbmRvd1NRTERhdGFiYXNlLmg7
IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUY0MTUwNUYwODEwMDFCNzRBQyAvKiBET01X
aW5kb3dTUUxEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRE9NV2luZG93U1FM
RGF0YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRh
YmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUY1MTUwNUYwODEw
MDFCNzRBQyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTdCQzY5RjYxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblF1b3RhTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPcmlnaW5RdW90YU1hbmFnZXIuaDsgcGF0
aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUY3MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2Fn
ZVJlY29yZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPcmlnaW5V
c2FnZVJlY29yZC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVj
b3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RjgxNTA1RjA4MTAw
MUI3NEFDIC8qIE9yaWdpblVzYWdlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE9yaWdpblVzYWdlUmVjb3JkLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUY5
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU1FMQ2FsbGJhY2tXcmFwcGVyLmg7IHBhdGggPSBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTENhbGxiYWNrV3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5N0JDNjlGQTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXJyb3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMRXJyb3IuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RkIxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTEVycm9yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxF
cnJvci5pZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEVycm9yLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RkMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxFeGNl
cHRpb24uY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNjlGRDE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTEV4Y2Vw
dGlvbi5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RkUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4
Y2VwdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU1FMRXhjZXB0aW9uLmlkbDsgcGF0
aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RkYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxSZXN1bHRTZXQuY3Bw
OyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5N0JDNkEwMDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFJlc3VsdFNldC5oOyBw
YXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMDExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU1FMUmVzdWx0U2V0LmlkbDsgcGF0aCA9IE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTdCQzZBMDIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMUmVzdWx0U2V0Um93TGlz
dC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkEwMzE1MDVGMDgxMDAxQjc0QUMg
LyogU1FMUmVzdWx0U2V0Um93TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTUUxSZXN1bHRTZXRSb3dMaXN0Lmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJl
c3VsdFNldFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMDQx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTdCQzZBMDUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxTdGF0ZW1lbnQuY3BwOyBwYXRoID0gTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5N0JDNkEwNjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFN0YXRlbWVudC5oOyBwYXRoID0gTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTdCQzZBMDcxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFN0YXRlbWVudENhbGxiYWNrLmg7IHBh
dGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTA4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0
ZW1lbnRDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU1FMU3RhdGVtZW50Q2Fs
bGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTA5MTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDsgcGF0aCA9IE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5N0JDNkEwQTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5pZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkEwQjE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBTUUxTdGF0ZW1lbnRTeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3QkM2QTBDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFN0YXRlbWVudFN5bmMuaDsgcGF0aCA9IE1v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5N0JDNkEwRDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb24uY3Bw
OyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTBFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFu
c2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlv
bi5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkEwRjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJh
bnNhY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uLmlkbDsg
cGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5N0JDNkExMDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMTExNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTdCQzZBMTIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9u
Q2xpZW50LmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkExMzE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gU1FMVHJhbnNhY3Rpb25DbGllbnQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTdCQzZBMTQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkExNTE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHBhdGggPSBN
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzZBMTYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3QkM2QTE3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5pZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTE4MTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTdCQzZBMTkxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN5bmMuaDsgcGF0
aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTFBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvblN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uU3luYy5p
ZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTFCMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5N0JDNkExQzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5N0JDNkExRDE1MDVGMDgx
MDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHA7IHBhdGgg
PSBNb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2QTFFMTUwNUYwODEwMDFCNzRBQyAvKiBXb3Jr
ZXJDb250ZXh0U1FMRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1dv
cmtlckNvbnRleHRTUUxEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
N0JDNkExRjE1MDVGMDgxMDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsOyBwYXRo
ID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDODQ4MTEyMzZGRDkzMDAwQzYxNjEgLyogVGV4
dERvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFRleHREb2N1bWVudFBhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzg0ODIxMjM2RkQ5MzAwMEM2
MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBUZXh0RG9jdW1lbnRQYXJzZXIuaDsgcGF0aCA9IHBhcnNlci9UZXh0RG9jdW1lbnRQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzg0OUExMjM3MEE0QjAwMEM2
MTYxIC8qIEhUTUxJbnB1dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBIVE1MSW5wdXRTdHJlYW0uaDsgcGF0aCA9IHBhcnNlci9IVE1MSW5wdXRTdHJlYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDk1LDkgKzEwNTI1LDYgQEAKIAkJOTdEQ0Uy
MDAxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhpc3RvcnlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3RTQwMjhEMTNBNjk2RUQwMDkxM0Q2NyAvKiBJY29uQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3RTQwMjhFMTNBNjk2RUQwMDkxM0Q2
NyAvKiBJY29uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
Y29uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5N0U2QzEzQTE1
MDU4NzNGMDA2RkM5NDMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3RTZDMTNCMTUwNTg3M0YwMDZGQzk0MyAv
KiBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTk3RTZDMTNDMTUwNTg3M0YwMDZGQzk0MyAvKiBXb3JrZXJDb250ZXh0U1FMRGF0YWJh
c2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5
QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk4NDI2NEVGMTJENTI4MEEwMDBEODhBNCAvKiBMaW5rTG9hZGVyQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtMb2FkZXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTg1QkI5NkIxM0E5NDA1ODAwN0EwQjY5IC8qIExp
bmtSZWxBdHRyaWJ1dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGlua1JlbEF0dHJpYnV0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE3
NCw5ICsxMTIwMSw2IEBACiAJCUE4RUE4MDA0MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoZWV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RUE4MDA1MEExOTUxNkUwMEE4RUY1RiAvKiBTdHls
ZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNo
ZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThFQTgwMDYwQTE5NTE2RTAw
QThFRjVGIC8qIE1lZGlhTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4RjQ1NzlEMTRCQzEz
RUMwMDBDRUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE4RjQ1NzlFMTRCQzEzRUMwMDBDRUE1OSAvKiBET01XaW5kb3dT
UUxEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01XaW5kb3dT
UUxEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEY0NTc5RjE0QkMx
M0VDMDAwQ0VBNTkgLyogRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERPTVdpbmRvd1NRTERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01NaW1lVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjAzMSwzNiArMTIwNTUsMTcgQEAKIAkJQjJG
QTNEMzAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHWm9vbUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR1pvb21FdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyRkEzRDMxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21F
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdab29tRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2
IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViQ29yZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUI1MUJGNkVFMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNsaWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1MUJGNkVGMTAyQzlFNTkwMDAy
QzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCNTIzQ0VGRjExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjUyM0NGMDExMTgyNjc1
NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQjUyM0NGMDIxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTIzQ0YwMzExODI2NzU0MDBFQkIy
OUMgLyogRGF0YWJhc2VTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERhdGFiYXNlU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1MjND
RjA0MTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUI1MjVBOTYzMTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTEV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxFeGNlcHRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTMyMEQ2OTEyMkEyNEU5MDAy
RDE0NDAgLyogRm9udFBsYXRmb3JtRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb250UGxhdGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1
MzIwRDZBMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4
NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNRTFN0YXRlbWVudFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1
QUE3MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luY0N1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1NUQ1QUJCMTE5MTMyNzIw
MEJDQzMxNSAvKiBEYXRhYmFzZVN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERhdGFi
YXNlU3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1NUQ1QUJDMTE5MTMy
NzIwMEJDQzMxNSAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNRTFRyYW5zYWN0aW9uU3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUI1NUQ1QUJEMTE5MTMyNzIwMEJDQzMxNSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTZFQkE4MzExQzlGRjgxMDBCMDQ0Nzcg
LyogU1FMRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTEV4
Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTZFQkE4NDExQzlGRjgx
MDBCMDQ0NzcgLyogU1FMRXhjZXB0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxF
eGNlcHRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNThDRUI2NzExOTEz
NjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjU4Q0VCNjgxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YWJhc2VTeW5jLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU4Q0VCNkIxMTkxMzYxQzAwMkE2NzkwIC8qIEpTU1FMVHJh
bnNhY3Rpb25TeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJh
bnNhY3Rpb25TeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENFQjZDMTE5
MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luYy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1OURENjhEMTE5MDI5OEUwMDdFOTY4NCAvKiBEYXRhYmFz
ZUNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhYmFzZUNhbGxiYWNrLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjU5REQ2OEUxMTkwMjk4RTAwN0U5Njg0
IC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxT
dGF0ZW1lbnRDYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI1OURE
NjhGMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjU5REQ2OTAxMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTlERDY5MTEx
OTAyOThFMDA3RTk2ODQgLyogU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlERDY5NzExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRh
YmFzZUNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YWJh
c2VDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlERDY5ODExOTAy
OUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YWJhc2VDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1OURENjlCMTE5MDJBNDIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA3Mywx
MyArMTIwNzgsOCBAQAogCQlCNTlERDZBODExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9
IHNxbC9TUUxpdGVGaWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1
QTY4NDIzMEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0g
c3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
NUI1REM2NzExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBYnN0cmFjdERhdGFiYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjVCNURDNjgxMTlCQjNENTAwMkE4NzkwIC8qIEFic3Ry
YWN0RGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RE
YXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNUMxMTIzOTEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWN0aXZlRE9NQ2FsbGJhY2suY3Bw
OyBwYXRoID0gZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBY3RpdmVET01DYWxsYmFjay5o
OyBwYXRoID0gZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCNUQzNjAxOTExMkY4QjU2MDA0OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1QyAvKiBK
U0lEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURC
VHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjY1NjYyNkYxMjBC
MTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI3MzRCMTgwMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNjb2Rlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGb250VHJhbnNjb2Rlci5j
cHA7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEzOTc2LDczICsxMzk3Niw2IEBACiAJCTFBRTgyRUM5MENBQUUxNzcw
MDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQlCNUI1REM2NzExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5j
cHAgKi8sCi0JCQkJQjVCNURDNjgxMTlCQjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2Uu
aCAqLywKLQkJCQk1MTQxODVFRDBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwICovLAotCQkJCTUxNDE4NUVDMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9u
V3JhcHBlci5oICovLAotCQkJCTUxOTYxMTVFMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5j
cHAgKi8sCi0JCQkJNTE5NjExNUYwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmggKi8sCi0J
CQkJNTE5NjExNjAwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmlkbCAqLywKLQkJCQk1MUE0
NUI1NTBDQUQ3RkQ3MDAwRDJCRTkgLyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCAqLywKLQkJCQk1
MUE0NUI1NDBDQUQ3RkQ3MDAwRDJCRTkgLyogRGF0YWJhc2VBdXRob3JpemVyLmggKi8sCi0JCQkJ
QjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCAqLywKLQkJCQlC
NTlERDY4RDExOTAyOThFMDA3RTk2ODQgLyogRGF0YWJhc2VDYWxsYmFjay5pZGwgKi8sCi0JCQkJ
OTcyNDU4NTAxNEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5jcHAgKi8sCi0JCQkJ
OTcyNDU4NTExNEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5oICovLAotCQkJCTUx
MTZEOTc1MENGMTc3QkQwMEMyQjg0RCAvKiBEYXRhYmFzZURldGFpbHMuaCAqLywKLQkJCQlCNTIz
Q0YwMzExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmNwcCAqLywKLQkJCQlCNTIzQ0Yw
NDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi8sCi0JCQkJQjU1RDVBQkIxMTkx
MzI3MjAwQkNDMzE1IC8qIERhdGFiYXNlU3luYy5pZGwgKi8sCi0JCQkJNTE5NjExRTkwQ0FDNzQ5
QzAwMTBBODBDIC8qIERhdGFiYXNlVGFzay5jcHAgKi8sCi0JCQkJNTE5NjExRTgwQ0FDNzQ5QzAw
MTBBODBDIC8qIERhdGFiYXNlVGFzay5oICovLAotCQkJCTUxOTYxMTYxMENBQzU2NTcwMDEwQTgw
QyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgKi8sCi0JCQkJNTE5NjExNjIwQ0FDNTY1NzAwMTBBODBD
IC8qIERhdGFiYXNlVGhyZWFkLmggKi8sCi0JCQkJMUFENTFBMTMwQ0I1OUNEMzAwOTUzRDExIC8q
IERhdGFiYXNlVHJhY2tlci5jcHAgKi8sCi0JCQkJMUFENTFBMTIwQ0I1OUNEMzAwOTUzRDExIC8q
IERhdGFiYXNlVHJhY2tlci5oICovLAotCQkJCTUxRkFGRTMzMENFQ0JGMkQwMEJCM0YyNCAvKiBE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKLQkJCQlBOEY0NTc5RDE0QkMxM0VDMDAwQ0VBNTkg
LyogRE9NV2luZG93U1FMRGF0YWJhc2UuY3BwICovLAotCQkJCUE4RjQ1NzlFMTRCQzEzRUMwMDBD
RUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5oICovLAotCQkJCUE4RjQ1NzlGMTRCQzEzRUMw
MDBDRUE1OSAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgKi8sCi0JCQkJNTFBOTI2NzgwRDUz
RjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgKi8sCi0JCQkJNTFBOTI2Nzkw
RDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5oICovLAotCQkJCTUxQTkyNjdB
MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAgKi8sCi0JCQkJNTFBOTI2
N0IwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3JkLmggKi8sCi0JCQkJMjQ1RDgw
QTIxMzI4MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oICovLAotCQkJCTUxRUM5
MjU3MENFOTBEQjQwMEY5MDMwOCAvKiBTUUxFcnJvci5oICovLAotCQkJCTUxRUM5MjU4MENFOTBE
QjQwMEY5MDMwOCAvKiBTUUxFcnJvci5pZGwgKi8sCi0JCQkJOTc4RDA3QjMxNDVBMEVDRDAwOTY5
MDhEIC8qIFNRTEV4Y2VwdGlvbi5jcHAgKi8sCi0JCQkJQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3
IC8qIFNRTEV4Y2VwdGlvbi5oICovLAotCQkJCUI1NkVCQTg0MTFDOUZGODEwMEIwNDQ3NyAvKiBT
UUxFeGNlcHRpb24uaWRsICovLAotCQkJCTUxOTYxMTY3MENBQzU2NTcwMDEwQTgwQyAvKiBTUUxS
ZXN1bHRTZXQuY3BwICovLAotCQkJCTUxOTYxMTY4MENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1
bHRTZXQuaCAqLywKLQkJCQk1MTk2MTE2OTBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0
LmlkbCAqLywKLQkJCQkxQUZFMTE3QjBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93
TGlzdC5jcHAgKi8sCi0JCQkJMUFGRTExN0MwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNl
dFJvd0xpc3QuaCAqLywKLQkJCQkxQUZFMTE4QzBDQkZGQzRFMDAzMDE3RkEgLyogU1FMUmVzdWx0
U2V0Um93TGlzdC5pZGwgKi8sCi0JCQkJNTE1QjAzOTgwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0
YXRlbWVudC5jcHAgKi8sCi0JCQkJNTE1QjAzOTcwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRl
bWVudC5oICovLAotCQkJCTFBN0NDQjE1MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRD
YWxsYmFjay5oICovLAotCQkJCUI1OURENjhFMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1l
bnRDYWxsYmFjay5pZGwgKi8sCi0JCQkJMUE3Q0NCMTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suaCAqLywKLQkJCQlCNTlERDY4RjExOTAyOThFMDA3RTk2ODQg
LyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5pZGwgKi8sCi0JCQkJQjU1MEI1MjExMURDNjhB
ODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwICovLAotCQkJCUI1NTBCNTIyMTFEQzY4
QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi8sCi0JCQkJMUFCRkU3NTIwQ0Q5NjhE
MDAwRkU0ODM0IC8qIFNRTFRyYW5zYWN0aW9uLmNwcCAqLywKLQkJCQkxQTdDQ0IyMjBDRDk0NkZE
MDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaCAqLywKLQkJCQkxQTdDQ0IyMzBDRDk0NkZEMDBC
N0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaWRsICovLAotCQkJCTFBN0NDQjE3MENEOTQ2OUEwMEI3
QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggKi8sCi0JCQkJQjU5REQ2OTAxMTkwMjk4
RTAwN0U5Njg0IC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsICovLAotCQkJCUI1MUJGNkVF
MTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgKi8sCi0JCQkJQjUx
QkY2RUYxMDJDOUU1OTAwMDJDMTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmggKi8sCi0JCQkJ
QjVDMTEyMzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
ICovLAotCQkJCUI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggKi8sCi0JCQkJMUE3Q0NCMTgwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oICovLAotCQkJCUI1OURENjkxMTE5MDI5OEUwMDdFOTY4NCAvKiBT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsICovLAotCQkJCUI1MjNDRjAyMTE4MjY3NTQw
MEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovLAotCQkJCUI1MjNDRjAxMTE4MjY3
NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaCAqLywKLQkJCQlCNTVENUFCQzExOTEz
MjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmlkbCAqLywKLQkJCQlCNTIzQ0VGRjEx
ODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLywKLQkJCQlC
NTVENUFCRDExOTEzMjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRs
ICovLAogCQkJCTUxRTNGOUM1MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJ
CQk1MUUzRjlDNDBEQTA1OURDMDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQx
MERBMDVENzEwMDI1MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKQEAgLTE0MDc2LDkgKzE0MDA5LDYg
QEAKIAkJCQkzQUIwMkQyOTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICov
LAogCQkJCTNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oICovLAog
CQkJCTNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICov
LAotCQkJCTk3RTZDMTNBMTUwNTg3M0YwMDZGQzk0MyAvKiBXb3JrZXJDb250ZXh0U1FMRGF0YWJh
c2UuY3BwICovLAotCQkJCTk3RTZDMTNCMTUwNTg3M0YwMDZGQzk0MyAvKiBXb3JrZXJDb250ZXh0
U1FMRGF0YWJhc2UuaCAqLywKLQkJCQk5N0U2QzEzQzE1MDU4NzNGMDA2RkM5NDMgLyogV29ya2Vy
Q29udGV4dFNRTERhdGFiYXNlLmlkbCAqLywKIAkJCSk7CiAJCQlpbmRlbnRXaWR0aCA9IDQ7CiAJ
CQlwYXRoID0gc3RvcmFnZTsKQEAgLTE3MTAzLDYgKzE3MDMzLDcgQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTk3MTE0NUZGMTRFRjAwNzkwMDY3NEZEOSAvKiBnZW9sb2NhdGlvbiAqLywKIAkJCQk5
NzEyQTU1MzE1MDA0RTNDMDA0OEFGMTAgLyogaW5kZXhlZGRiICovLAorCQkJCTk3QkM2OUQ1MTUw
NUYwNTQwMDFCNzRBQyAvKiB3ZWJkYXRhYmFzZSAqLywKIAkJCQk5N0FBQkNGNzE0RkEwOUI1MDA3
NDU3QUUgLyogd2Vic29ja2V0cyAqLywKIAkJCSk7CiAJCQluYW1lID0gTW9kdWxlczsKQEAgLTE3
MzkwLDYgKzE3MzIxLDgzIEBACiAJCQluYW1lID0gd2Vic29ja2V0czsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CiAJCX07CisJCTk3QkM2OUQ1MTUwNUYwNTQwMDFCNzRBQyAvKiB3ZWJkYXRh
YmFzZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJOTdC
QzY5RDYxNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwICovLAorCQkJCTk3
QkM2OUQ3MTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8sCisJCQkJOTdC
QzY5RDgxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLywKKwkJ
CQk5N0JDNjlEOTE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCAqLywK
KwkJCQk5N0JDNjlERTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwICovLAorCQkJCTk3
QkM2OURGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5oICovLAorCQkJCTk3QkM2OUUwMTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5pZGwgKi8sCisJCQkJOTdCQzY5RTExNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAgKi8sCisJCQkJOTdCQzY5RTIxNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oICovLAorCQkJCTk3QkM2OUUzMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi8sCisJCQkJOTdCQzY5RTQxNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaWRsICovLAorCQkJCTk3QkM2OUU1MTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuY3BwICovLAorCQkJCTk3QkM2OUU2MTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuaCAqLywKKwkJCQk5N0JDNjlFNzE1MDVGMDgx
MDAxQjc0QUMgLyogRGF0YWJhc2VEZXRhaWxzLmggKi8sCisJCQkJOTdCQzY5RTgxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgKi8sCisJCQkJOTdCQzY5RTkxNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlU3luYy5oICovLAorCQkJCTk3QkM2OUVBMTUwNUYwODEwMDFCNzRBQyAv
KiBEYXRhYmFzZVN5bmMuaWRsICovLAorCQkJCTk3QkM2OUVCMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZVRhc2suY3BwICovLAorCQkJCTk3QkM2OUVDMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZVRhc2suaCAqLywKKwkJCQk5N0JDNjlFRDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VU
aHJlYWQuY3BwICovLAorCQkJCTk3QkM2OUVFMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRo
cmVhZC5oICovLAorCQkJCTk3QkM2OUVGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNr
ZXIuY3BwICovLAorCQkJCTk3QkM2OUYwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNr
ZXIuaCAqLywKKwkJCQk5N0JDNjlGMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2Vy
Q2xpZW50LmggKi8sCisJCQkJOTdCQzY5RjIxNTA1RjA4MTAwMUI3NEFDIC8qIERPTVdpbmRvd1NR
TERhdGFiYXNlLmNwcCAqLywKKwkJCQk5N0JDNjlGMzE1MDVGMDgxMDAxQjc0QUMgLyogRE9NV2lu
ZG93U1FMRGF0YWJhc2UuaCAqLywKKwkJCQk5N0JDNjlGNDE1MDVGMDgxMDAxQjc0QUMgLyogRE9N
V2luZG93U1FMRGF0YWJhc2UuaWRsICovLAorCQkJCTk3QkM2OUY1MTUwNUYwODEwMDFCNzRBQyAv
KiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwICovLAorCQkJCTk3QkM2OUY2MTUwNUYwODEwMDFCNzRB
QyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLywKKwkJCQk5N0JDNjlGNzE1MDVGMDgxMDAxQjc0
QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovLAorCQkJCTk3QkM2OUY4MTUwNUYwODEwMDFC
NzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29yZC5oICovLAorCQkJCTk3QkM2OUY5MTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCAqLywKKwkJCQk5N0JDNjlGQTE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMRXJyb3IuaCAqLywKKwkJCQk5N0JDNjlGQjE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMRXJyb3IuaWRsICovLAorCQkJCTk3QkM2OUZDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFeGNl
cHRpb24uY3BwICovLAorCQkJCTk3QkM2OUZEMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFeGNlcHRp
b24uaCAqLywKKwkJCQk5N0JDNjlGRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmlk
bCAqLywKKwkJCQk5N0JDNjlGRjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmNwcCAq
LywKKwkJCQk5N0JDNkEwMDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmggKi8sCisJ
CQkJOTdCQzZBMDExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5pZGwgKi8sCisJCQkJ
OTdCQzZBMDIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovLAor
CQkJCTk3QkM2QTAzMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8s
CisJCQkJOTdCQzZBMDQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRs
ICovLAorCQkJCTk3QkM2QTA1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuY3BwICov
LAorCQkJCTk3QkM2QTA2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuaCAqLywKKwkJ
CQk5N0JDNkEwNzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaCAqLywK
KwkJCQk5N0JDNkEwODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRs
ICovLAorCQkJCTk3QkM2QTA5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmggKi8sCisJCQkJOTdCQzZBMEExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaWRsICovLAorCQkJCTk3QkM2QTBCMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxTdGF0ZW1lbnRTeW5jLmNwcCAqLywKKwkJCQk5N0JDNkEwQzE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMU3RhdGVtZW50U3luYy5oICovLAorCQkJCTk3QkM2QTBEMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxUcmFuc2FjdGlvbi5jcHAgKi8sCisJCQkJOTdCQzZBMEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uLmggKi8sCisJCQkJOTdCQzZBMEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRy
YW5zYWN0aW9uLmlkbCAqLywKKwkJCQk5N0JDNkExMDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oICovLAorCQkJCTk3QkM2QTExMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCAqLywKKwkJCQk5N0JDNkExMjE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwICovLAorCQkJCTk3QkM2QTEzMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oICovLAorCQkJCTk3QkM2QTE0MTUwNUYw
ODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLywKKwkJCQk5N0JD
NkExNTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovLAor
CQkJCTk3QkM2QTE2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaCAqLywKKwkJCQk5N0JDNkExNzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmlkbCAqLywKKwkJCQk5N0JDNkExODE1MDVGMDgxMDAxQjc0QUMgLyogU1FM
VHJhbnNhY3Rpb25TeW5jLmNwcCAqLywKKwkJCQk5N0JDNkExOTE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMVHJhbnNhY3Rpb25TeW5jLmggKi8sCisJCQkJOTdCQzZBMUExNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFRyYW5zYWN0aW9uU3luYy5pZGwgKi8sCisJCQkJOTdCQzZBMUIxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8sCisJCQkJOTdCQzZBMUMxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbCAqLywKKwkJCQk5N0JD
NkExRDE1MDVGMDgxMDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcCAqLywK
KwkJCQk5N0JDNkExRTE1MDVGMDgxMDAxQjc0QUMgLyogV29ya2VyQ29udGV4dFNRTERhdGFiYXNl
LmggKi8sCisJCQkJOTdCQzZBMUYxNTA1RjA4MTAwMUI3NEFDIC8qIFdvcmtlckNvbnRleHRTUUxE
YXRhYmFzZS5pZGwgKi8sCisJCQkpOworCQkJbmFtZSA9IHdlYmRhdGFiYXNlOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJOTdDMUY1NTExMjI4NTU4ODAwRURFNjE2IC8qIHBh
cnNlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTM3
NSw3ICsyMTM4Myw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQlCNUI1REM2QTExOUJC
M0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdC
QzY5REIxNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjlBODEyMkUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlB
UklBR3JpZENlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjMzMEZCQjlDMUQwMDUxMDI5
MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMjE1NDks
NyArMjE1NTcsNyBAQAogCQkJCTQ5NDg0RkNCMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkNFMTAyQ0YyM0MwMDE4
N0REMyAvKiBDYW52YXNTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAy
NzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE0MTg1RUUw
Q0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5N0JDNjlERDE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NTBCNkEwMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMDAyMkU2OTEzQ0UxQkJBMDAyODJENUIgLyogQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJDM0RBMkEwRDAwNkMxRDAwRUY2RjI2IC8qIENoYXJzZXREYXRhLmggaW4gSGVhZGVycyAqLywK
QEAgLTIxNjk2LDE2ICsyMTcwNCwxNiBAQAogCQkJCTUwRDQwNjEyMTQ3RDQ5REUwMEQzMEJCNSAv
KiBDdXN0b21GaWx0ZXJTaGFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0I0MTNFMEU4NjMz
RkQwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2RDBCMEEx
OTg5Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUx
OTYxMTZCMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTFBNDVCNTYwQ0FEN0ZENzAwMEQyQkU5IC8qIERhdGFiYXNlQXV0aG9yaXplci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjVEMzYwMUExMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAotCQkJCTk3MjQ1ODUzMTRGQjcyNDgwMENBODc0NiAvKiBEYXRhYmFz
ZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMTZEOTc3MENGMTc3QkQwMEMyQjg0RCAv
KiBEYXRhYmFzZURldGFpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUI1MjNDRjBCMTE4MjY3NTQw
MEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxOTYxMUVBMENB
Qzc0OUMwMDEwQTgwQyAvKiBEYXRhYmFzZVRhc2suaCBpbiBIZWFkZXJzICovLAotCQkJCTUxOTYx
MTc4MENBQzU2QTgwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUFENTFBMTQwQ0I1OUNEMzAwOTUzRDExIC8qIERhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTFGQUZFMzQwQ0VDQkYyRDAwQkIzRjI0IC8qIERhdGFiYXNlVHJhY2tlckNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERh
dGFiYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VBdXRob3JpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEyNTE1MDVGMDgx
MDAxQjc0QUMgLyogRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZB
MjgxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTdCQzZBMjkxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlRGV0YWlscy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTdCQzZBMkIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBMkUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGFz
ay5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBMzAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFi
YXNlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEzMjE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEzMzE1MDVGMDgx
MDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzIyNzQ2RjBFODM2NjQ1MDBFN0Y5NzUgLyogRGF0YVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM2NDY0MUMxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgxQUM1OTk5MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVt
LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzY0LDcgKzIyMzcyLDcgQEAKIAkJCQkxNDAzQjk5NzA5
RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVB
RTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5N0QyQUQwNDE0QjgyM0E2MDA5M0RGMzIgLyogRE9NV2luZG93UHJvcGVydHku
aCBpbiBIZWFkZXJzICovLAotCQkJCUE4RjQ1N0ExMTRCQzFBOTQwMDBDRUE1OSAvKiBET01XaW5k
b3dTUUxEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBMzUxNTA1RjA4MTAwMUI3
NEFDIC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzVBRTVB
QzE0OTI1RjVCMDA0RDU3NzYgLyogRE9NV3JhcHBlclZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNTNEQTJFMTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMUQxMzgwMEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMjQ0NCw2ICsyMjQ1Miw3IEBACiAJCQkJOTc2N0NFMEMxNDVBQkMxMzAw
NUU2NERCIC8qIEV4Y2VwdGlvbkludGVyZmFjZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdE
MkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc3Mjg2OTRGMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NUU4Qjg5MEUxREUyRDYwMDdGMjQ4
MSAvKiBGRUJsZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFOEI4QjBFMURFMkQ2MDA3RjI0
ODEgLyogRkVDb2xvck1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RThCOEQwRTFERTJE
NjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI5
ODksNiArMjI5OTgsNyBAQAogCQkJCUUwRkVGMzcyQjM3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50
U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYwOTAxRjBFOTFCOEVDMDAwQzY4QjUgLyog
SlNFdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzMxNEFDRUMxMDg5MjA4NjAwMEYw
RTU2IC8qIEpTRXhjZXB0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzcyODY5ODQxNEZE
OUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAwRjAxNTBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4OTNDNDdCODEyMzhBMDk5MDAyQjNEODYgLyogSlNGaWxlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTg5ODc4NUIxMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVFbnRy
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzU2NSw4ICsyMzU3NSw4IEBACiAJCQkJRjRFQUY0QUYx
MEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRTI0NDVGNzEzOTU4OTNBMDA0QjZDMTkgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDAxNDYyOEIxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdp
bkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUE5MjY3RDBENTNGMDU3MDA2M0VD
QzIgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUE5MjY3RjBE
NTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTk3QkM2QTM4MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTk3QkM2QTNBMTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29y
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REQwRTgxQjhERDAwQjI1OTY1IC8qIE91dGxp
bmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwRDU3MzcwQTVDNzdGRTAwN0VERDRDIC8q
IE92ZXJmbG93RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NzRBQkE1MEZBMjFFQjQwMEFE
N0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5
NTEsMjYgKzIzOTYxLDI2IEBACiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0
VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1
NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMjQ1RDgwQTMxMzI4MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxi
YWNrV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFFQzkyNTkwQ0U5MERCNDAwRjkwMzA4
IC8qIFNRTEVycm9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTZFQkE4NTExQzlGRjgxMDBCMDQ0
NzcgLyogU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkEzQjE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JD
NkEzQzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXJyb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
QkM2QTNGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBMjI0NjRBMENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjVBNjg0MjIwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjI0NjRDMENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVT
dGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjI0NjRFMENDOThEREIwMEMwNTI0MCAv
KiBTUUxpdGVUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE5NjExNzQwQ0FDNTY1
NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFGRTExN0Uw
Q0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUxNUIwMzk5MENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBN0NDQjE5MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE3Q0NCMUEwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJCUI1NTBCNTI2MTFEQzY4
QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTdD
Q0IyNDBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAot
CQkJCTFBN0NDQjFCMENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCNTFCRjZGMTEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNh
Y3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3
OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTdD
Q0IxQzBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTIzQ0YwODExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rp
b25TeW5jLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTIzQ0YwNjExODI2NzU0MDBFQkIyOUMgLyog
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTQy
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3
QkM2QTQ1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5N0JDNkE0ODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQk5N0JDNkE0OTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTk3QkM2QTRCMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkE0
RTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTdCQzZBNTAxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5N0JDNkE1MjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0JDNkE1NzE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTdCQzZBNTgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNUIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRy
YW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZBNUQxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTJFNkU1QTBDQzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OTYzMDgyNDVFNTkwMDFFOUFCQyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNFQTM5NDlEMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxp
c3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ0NjgsNyArMjQ0NzgsNyBAQAogCQkJCTJFNDM0NjQ5
MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NzEyQTYxMjE1MDA5MENFMDA0OEFGMTAgLyogV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NEIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNv
bnRleHRQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTdFNkMxM0UxNTA1ODczRjAwNkZDOTQz
IC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzZB
NjAxNTA1RjA4MTAwMUI3NEFDIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjM0NzQyRTExMzQzNjMxRjAwNTMxQkMyIC8qIFdvcmtlckRlYnVnZ2VyQWdl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzRTI2NDMxMTQ3NDg5OTEwMDVBODU4OCAvKiBXb3Jr
ZXJFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzZFMDdBNTEzNThBOEJFMDBBQUNC
QzkgLyogV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDUy
OSw4ICsyNDUzOSw2IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERD
RSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzcyODY5NEYxNEY4ODgyNTAwRjQ4
NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NzcyODY5ODQxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI0ODg4LDcgKzI0ODk2LDcgQEAKIAkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAotCQkJCUI1QjVEQzY5MTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2OURBMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0
cmFjdERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3
NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI5QzE2RTEz
MDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTc2Q0REMkYyMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTAxMiw3ICsyNTAyMCw3IEBACiAJCQkJNDk0ODRGQ0Ex
MDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTQ4NEZDRDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2OUQwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTQxODVFRjBDRDY1RjA0MDA3NjNDOTkgLyogQ2hh
bmdlVmVyc2lvbldyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzY5REMxNTA1RjA3
NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NTBCNjlGMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMjZEQzBDMDlEQUQ1RDYwMEFGQzg0NyAvKiBDaGFyc2V0RGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGNTVCM0RCMTEyNTFGMTJEMDAzRUYyNjkgLyogQ2hlY2tib3hJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTEzNiwxMyArMjUxNDQsMTMgQEAKIAkJCQk1
MENDMEEzOTE0QzZGNUIxMDAxN0FCNTEgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUwM0QwQ0FBMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwRDQwNjExMTQ3RDQ5REUwMEQzMEJCNSAv
KiBDdXN0b21GaWx0ZXJTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5NjExNkEwQ0FD
NTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxQTQ1QjU3
MENBRDdGRDcwMDBEMkJFOSAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTcyNDU4NTIxNEZCNzI0ODAwQ0E4NzQ2IC8qIERhdGFiYXNlQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCNTIzQ0YwQTExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5j
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxOTYxMUVCMENBQzc0OUMwMDEwQTgwQyAvKiBEYXRh
YmFzZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5NjExNkQwQ0FDNTY1NzAwMTBBODBD
IC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBRDUxQTE1MENCNTlD
RDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdC
QzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTk3QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTdCQzZBMjcxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkEyQTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTJEMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzZBMkYxNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2
QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODE1RTYxNjcxMzI1ODdBQTAwQjYyMkIwIC8qIERhdGFUcmFu
c2Zlckl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU5N0NDRUExMjkzOUNCODAwQzVDOEZG
IC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1MDIsNyArMjU1MTAsNyBAQAog
CQkJCTE0MDNCOTk4MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTcxMkE1QUQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRh
YmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0QyQUQwMzE0QjgyM0E2MDA5M0RGMzIgLyog
RE9NV2luZG93UHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThGNDU3QTAxNEJDMUE4
ODAwMENFQTU5IC8qIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTk3QkM2QTM0MTUwNUYwODEwMDFCNzRBQyAvKiBET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzUzREE0ODExNDMxMzREMDAwRDgxN0UgLyogRE9NV3JhcHBlcldv
cmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQxMzgxMEE1MzI1NTIwMDY0QkY1RiAvKiBE
T01YUGF0aC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RTlFMEEyMEFCM0EwQzcwMDA2OUNEMCAv
KiBET01YUGF0aEV4cHJlc3Npb24ubW0gaW4gU291cmNlcyAqLywKQEAgLTI1NTU2LDYgKzI1NTY0
LDcgQEAKIAkJCQlBN0NBQ0RCMTEzQ0U4NzVDMDBCQkJFM0YgLyogRXhjZXB0aW9uQ29kZVBsYWNl
aG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEFGREE2MEFGNTgzNjAwMDhDQzcwMCAv
KiBFeGNlcHRpb25IYW5kbGVycy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTZFNjdEMkE2MTI4MEU4
QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NzcyODY5NEUxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzVFOEI4ODBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVu
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzVFOEI4QTBFMURFMkQ2MDA3RjI0ODEgLyogRkVD
b2xvck1hdHJpeC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzVFOEI4QzBFMURFMkQ2MDA3RjI0
ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MDk2LDYg
KzI2MTA1LDcgQEAKIAkJCQlFMEZFRjM3MkI0N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwOTAyMDBFOTFCOEVDMDAwQzY4QjUgLyogSlNF
dmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzE0QUNFQjEwODkyMDg2MDAwRjBF
NTYgLyogSlNFeGNlcHRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc3Mjg2OTgzMTRG
RDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzAwRjAxNDBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg5M0M0N0I3MTIzOEEwOTkwMDJCM0Q4NiAvKiBKU0ZpbGVDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTg3ODVCMDEyMkNBMkE3MDAzQUFCREEgLyogSlNG
aWxlRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjcyOSw4ICsyNjczOSw4IEBACiAJCQkJ
RjRFQUY0QUUxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3OEQwN0I4MTQ1QTBGMUIwMDk2OTA4RCAvKiBPcGVyYXRpb25Ob3RBbGxv
d2VkRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAwMTQ2MjhBMTAzQ0QxREUwMDBC
MjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUE5MjY3
QzBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxQTkyNjdFMEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkEzNzE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luUXVv
dGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTM5MTUwNUYwODEwMDFCNzRB
QyAvKiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTBENTczNjBB
NUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDc3RTc3NjBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjcwNDgsMjAgKzI3MDU4LDIwIEBACiAJCQkJOTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8q
IFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTE1MDk5
RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUExRTExNTQ4MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGln
aHRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTc4RDA3QjQxNDVBMEVDRDAwOTY5MDhE
IC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkEzRTE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkU2RTdB
MENDNTU2RDUwMDRBMjA2MiAvKiBTUUxpdGVBdXRob3JpemVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBMjI0NjQ5MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNUE2ODQyNDBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3Rl
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTIyNDY0QjBDQzk4RERCMDBDMDUyNDAgLyogU1FM
aXRlU3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMjI0NjREMENDOThEREIwMEMw
NTI0MCAvKiBTUUxpdGVUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTk2MTE3
MzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTFBRkUxMTdEMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTUxNUIwMzlBMENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU1MEI1MjUxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0
YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFCRkU3NTMwQ0Q5NjhEMDAwRkU0
ODM0IC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUI1MUJGNkYwMTAy
QzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTIzQ0YwOTExODI2NzU0MDBFQkIyOUMgLyogU1FM
VHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2QTQxMTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzZBNDQx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJOTdCQzZBNDcxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk5N0JDNkE0RDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3lu
Yy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JDNkE0RjE1MDVGMDgxMDAxQjc0QUMgLyogU1FM
VHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzZBNTQxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3QkM2
QTU2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTk3QkM2QTVBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlv
blN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRTZFNTkwQ0M1NTIxMzAwNEEyMDYyIC8q
IFNRTFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUU2MDgyNDVFNTkwMDFFOUFC
QyAvKiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VBMzk0OUMx
MUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI3NDQ2LDcgKzI3NDU2LDcgQEAKIAkJCQlGMzgyMDg5NjE0N0QzNUY5MDAxMEJDMDYg
LyogV29ya2VyQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFNDM0NjQ4MEY1
NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
MTJBNjExMTUwMDkwQ0UwMDQ4QUYxMCAvKiBXb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTk3RTZDMTNEMTUwNTg3M0YwMDZGQzk0MyAvKiBXb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzZBNUYxNTA1RjA4
MTAwMUI3NEFDIC8qIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGMzQ3NDJFMDEzNDM2MzFGMDA1MzFCQzIgLyogV29ya2VyRGVidWdnZXJBZ2VudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBM0UyNjQzMDE0NzQ4OTkxMDA1QTg1ODggLyogV29ya2VyRXZl
bnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzZFMDdBNDEzNThBOEJFMDBBQUNCQzkg
LyogV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NTAy
LDggKzI3NTEyLDYgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNv
ZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAv
KiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3MzUyMTM3QjY1MTgwMDAw
OERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3NzI4Njk0RTE0Rjg4ODI1
MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTc3Mjg2OTgzMTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
QWJzdHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNl
LmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRo
b3JpemVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxpdGVUcmFu
c2FjdGlvbi5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotI2luY2x1
ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9yIHJlcG9ydGluZy4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25LZXlbXSA9
ICJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiOwotc3RhdGljIGNvbnN0IGNoYXIgaW5mb1RhYmxl
TmFtZVtdID0gIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyI7Ci0KLXN0YXRpYyBTdHJpbmcg
Zm9ybWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBzcWxpdGVFcnJvckNv
ZGUsIGNvbnN0IGNoYXIqIHNxbGl0ZUVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiVzICglZCAlcykiLCBtZXNzYWdlLCBzcWxpdGVFcnJvckNvZGUsIHNxbGl0ZUVy
cm9yTWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRh
YmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmluZyYgcmVz
dWx0U3RyaW5nKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsK
LSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmlu
ZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1
bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxS
ZXN1bHRSb3cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdERvbmUpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSByZWFkaW5n
IHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5k
YXRhKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgc2V0VGV4dFZhbHVl
SW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVl
cnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCB2YWx1ZSk7Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwot
ICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzdGVwIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi0vLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVkIGZ1bmN0
aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCi1zdGF0aWMgTXV0ZXgmIGd1
aWRNdXRleCgpCi17Ci0gICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4JiwgbXV0
ZXggPSAqbmV3IE11dGV4KTsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXR5cGVkZWYgSGFzaE1h
cDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7Ci1zdGF0aWMgR3VpZFZlcnNpb25NYXAmIGd1
aWRUb1ZlcnNpb25NYXAoKQotewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tl
ZC4KLSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQot
Ly8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KLXN0YXRpYyBpbmxpbmUgdm9p
ZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCi17Ci0g
ICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3VpZE11
dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBh
biBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KLSAgICAvLyBU
aGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3Mg
YXJlIHBlci10aHJlYWQuCi0gICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNp
b24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAotICAgIC8vIHRocmVh
ZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0
YSBzdHJ1Y3R1cmUuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3Ry
aWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgotCi0gICAgLy8gTWFwIG51bGwgc3RyaW5n
IHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgotICAgIGd1aWRUb1ZlcnNpb25N
YXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNp
b24uaXNvbGF0ZWRDb3B5KCkpOwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PEFi
c3RyYWN0RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKLXN0YXRpYyBHdWlkRGF0YWJhc2VN
YXAmIGd1aWRUb0RhdGFiYXNlTWFwKCkKLXsKLSAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBp
cyBsb2NrZWQuCi0gICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoR3VpZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFw
OwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXgg
aXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIFN0
cmluZyBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7Ci0KLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3Vp
ZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOwotICAgIGludCBndWlkID0gc3Ry
aW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOwotICAgIGlmICghZ3VpZCkgewot
ICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKLSAgICAgICAgZ3VpZCA9IGN1
cnJlbnROZXdHVUlEKys7Ci0gICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0
cmluZ0lELCBndWlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3VpZDsKLX0KLQotc3RhdGljIGJv
b2wgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRydWU7Ci0KLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6
aXNBdmFpbGFibGUoKQotewotICAgIHJldHVybiBpc0RhdGFiYXNlQXZhaWxhYmxlOwotfQotCi12
b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewot
ICAgIGlzRGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7Ci19Ci0KLS8vIHN0YXRpYwotY29u
c3QgY2hhciogQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKLXsKLSAg
ICByZXR1cm4gaW5mb1RhYmxlTmFtZTsKLX0KLQotQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3RE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCi0gICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fZGF0YWJhc2VDb250ZXh0KERhdGFiYXNl
Q29udGV4dDo6ZnJvbShjb250ZXh0KSkKLSAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgp
KQotICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmlzb2xhdGVkQ29weSgp
KQotICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSkKLSAgICAs
IG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQotICAgICwgbV9ndWlkKDApCi0gICAgLCBt
X29wZW5lZChmYWxzZSkKLSAgICAsIG1fbmV3KGZhbHNlKQotICAgICwgbV9pc1N5bmNEYXRhYmFz
ZShkYXRhYmFzZVR5cGUgPT0gU3luY0RhdGFiYXNlKQotewotICAgIEFTU0VSVChjb250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICBtX2RhdGFi
YXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGluZm9UYWJsZU5hbWUp
OwotCi0gICAgaWYgKG1fbmFtZS5pc051bGwoKSkKLSAgICAgICAgbV9uYW1lID0gIiI7Ci0KLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgICAgIG1f
Z3VpZCA9IGd1aWRGb3JPcmlnaW5BbmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCks
IG5hbWUpOwotICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1
aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAgIGlmICghaGFzaFNldCkgewot
ICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPjsKLSAg
ICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7Ci0gICAgfQotCi0gICAgbV9maWxl
bmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2Vj
dXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5h
ZGRPcGVuRGF0YWJhc2UodGhpcyk7Ci19Ci0KLUFic3RyYWN0RGF0YWJhc2U6On5BYnN0cmFjdERh
dGFiYXNlKCkKLXsKLSAgICBBU1NFUlQoIW1fb3BlbmVkKTsKLX0KLQotdm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpjbG9zZURhdGFiYXNlKCkKLXsKLSAgICBpZiAoIW1fb3BlbmVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgbV9vcGVuZWQgPSBm
YWxzZTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0K
LSAgICAgICAgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRh
YmFzZU1hcCgpLmdldChtX2d1aWQpOwotICAgICAgICBBU1NFUlQoaGFzaFNldCk7Ci0gICAgICAg
IEFTU0VSVChoYXNoU2V0LT5jb250YWlucyh0aGlzKSk7Ci0gICAgICAgIGhhc2hTZXQtPnJlbW92
ZSh0aGlzKTsKLSAgICAgICAgaWYgKGhhc2hTZXQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Z3VpZFRvRGF0YWJhc2VNYXAoKS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgICAgIGRlbGV0ZSBo
YXNoU2V0OwotICAgICAgICAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnJlbW92ZShtX2d1aWQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1TdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigp
IGNvbnN0Ci17Ci0gICAgLy8gTm90ZTogSW4gbXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUgY2Fj
aGVkIHZhbHVlIG1heSBiZSBhY2N1cmF0ZSwgYnV0IHdlIGNhbm5vdCByZWFkIHRoZQotICAgIC8v
IGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkgaW5k
dWNpbmcgYSBkZWFkbG9jay4KLSAgICAvLyBGSVhNRTogQWRkIGFuIGFzeW5jIHZlcnNpb24gZ2V0
dGVyIHRvIHRoZSBEYXRhYmFzZUFQSS4KLSAgICByZXR1cm4gZ2V0Q2FjaGVkVmVyc2lvbigpOwot
fQotCi1ib29sIEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hv
dWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoZXJyb3JNZXNzYWdlLmlzRW1wdHkoKSk7Ci0KLSAg
ICBjb25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7Ci0KLSAgICBpZiAoIW1f
c3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgewotICAgICAgICByZXBvcnRP
cGVuRGF0YWJhc2VSZXN1bHQoMSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCkpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2Uo
InVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3NxbGl0
ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtICglZCAlcykiLCBt
X3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLQotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVz
eVdhaXRUaW1lKTsKLQotICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsKLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAgICAgICAgR3VpZFZlcnNpb25N
YXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKLSAg
ICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewotICAgICAgICAg
ICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJz
aW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlz
TnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7Ci0gICAg
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQg
JWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKLQotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgICAgICAgICAgLy8gTm90ZTogSW4gbXVsdGktcHJvY2Vz
cyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBpbmFjY3VyYXRlLCBidXQKLSAgICAg
ICAgICAgIC8vIHdlIGNhbm5vdCByZWFkIHRoZSBhY3R1YWwgdmVyc2lvbiBmcm9tIHRoZSBkYXRh
YmFzZSB3aXRob3V0IHBvdGVudGlhbGx5Ci0gICAgICAgICAgICAvLyBpbmR1Y2luZyBhIGZvcm0g
b2YgZGVhZGxvY2ssIGEgYnVzeXRpbWVvdXQgZXJyb3Igd2hlbiB0cnlpbmcgdG8KLSAgICAgICAg
ICAgIC8vIGFjY2VzcyB0aGUgZGF0YWJhc2UuIFNvIHdlJ2xsIHVzZSB0aGUgY2FjaGVkIHZhbHVl
IGlmIHdlJ3JlIHVuYWJsZSB0byByZWFkCi0gICAgICAgICAgICAvLyB0aGUgdmFsdWUgZnJvbSB0
aGUgZGF0YWJhc2UgZmlsZSB3aXRob3V0IHdhaXRpbmcuCi0gICAgICAgICAgICAvLyBGSVhNRTog
QWRkIGFuIGFzeW5jIG9wZW5EYXRhYmFzZSBtZXRob2QgdG8gdGhlIERhdGFiYXNlQVBJLgotICAg
ICAgICAgICAgY29uc3QgaW50IG5vU3FsaXRlQnVzeVdhaXRUaW1lID0gMDsKLSAgICAgICAgICAg
IG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobm9TcWxpdGVCdXN5V2FpdFRpbWUpOwot
ICAgICAgICAgICAgU3RyaW5nIHZlcnNpb25Gcm9tRGF0YWJhc2U7Ci0gICAgICAgICAgICBpZiAo
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSh2ZXJzaW9uRnJvbURhdGFiYXNlLCBmYWxzZSkpIHsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IHZlcnNpb25Gcm9tRGF0YWJhc2U7Ci0gICAg
ICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1l
b3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWki
LCBtX2d1aWQpOwotCi0gICAgICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiht
X3NxbGl0ZURhdGFiYXNlKTsKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAg
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkgewotICAgICAgICAgICAgICAg
IHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgyLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVE
YXRhYmFzZS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9y
bWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHN0YXJ0
IHRyYW5zYWN0aW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKLSAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJp
bmcgdGFibGVOYW1lKGluZm9UYWJsZU5hbWUpOwotICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBtX25ldyA9
IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBUQUJMRSAiICsgdGFibGVOYW1lICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5P
VCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdCgzLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFz
ZS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1h
dEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBjcmVhdGUg
J2luZm8nIHRhYmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24sIGZhbHNlKSkg
ewotICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg0LCBJTlZBTElEX1NU
QVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFz
ZSwgZmFpbGVkIHRvIHJlYWQgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5y
b2xsYmFjaygpOwotICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwg
Y3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgc2hvdWxkU2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UpIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNl
dHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBt
X2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZSht
X2V4cGVjdGVkVmVyc2lvbiwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydE9w
ZW5EYXRhYmFzZVJlc3VsdCg1LCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVy
cm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byB3cml0ZSBjdXJy
ZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGN1cnJlbnRWZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKLSAg
ICAgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
RGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgY3VycmVudFZlcnNpb24gPSAiIjsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUgZW1wdHkgc3Ry
aW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdlIGhhdmUgbWF0
Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4KLSAgICAvLyBJ
ZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFsd2F5
cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZlLgot
ICAgIGlmICgoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSAmJiBtX2V4
cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVy
c2lvbikgewotICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoNiwgSU5WQUxJRF9TVEFU
RV9FUlIsIDApOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSAidW5hYmxlIHRvIG9wZW4gZGF0YWJh
c2UsIHZlcnNpb24gbWlzbWF0Y2gsICciICsgbV9leHBlY3RlZFZlcnNpb24gKyAiJyBkb2VzIG5v
dCBtYXRjaCB0aGUgY3VycmVudFZlcnNpb24gb2YgJyIgKyBjdXJyZW50VmVyc2lvbiArICInIjsK
LSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgbV9zcWxpdGVEYXRhYmFz
ZS5jbG9zZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotCi0gICAgbV9vcGVuZWQgPSB0cnVlOwotCi0gICAgaWYg
KG1fbmV3ICYmICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKLSAgICAgICAgbV9leHBl
Y3RlZFZlcnNpb24gPSAiIjsgLy8gVGhlIGNhbGxlciBwcm92aWRlZCBhIGNyZWF0aW9uQ2FsbGJh
Y2sgd2hpY2ggd2lsbCBzZXQgdGhlIGV4cGVjdGVkIHZlcnNpb24uCi0KLSAgICByZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoMCwgLTEsIDApOyAvLyBPSwotICAgIHJldHVybiB0cnVlOwotfQotCi1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpOwotfQotCi1TZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4oKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5n
ZXQoKTsKLX0KLQotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBj
b25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVh
ZCBzYWZldHkKLSAgICByZXR1cm4gbV9uYW1lLmlzb2xhdGVkQ29weSgpOwotfQotCi1TdHJpbmcg
QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAotewotICAgIC8vIFJldHVybiBh
IGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9k
aXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBBYnN0cmFjdERh
dGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lc3RpbWF0ZWRT
aXplOwotfQotCi1TdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZmlsZU5hbWUoKSBjb25zdAotewot
ICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkK
LSAgICByZXR1cm4gbV9maWxlbmFtZS5pc29sYXRlZENvcHkoKTsKLX0KLQotYm9vbCBBYnN0cmFj
dERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBz
aG91bGRDYWNoZVZlcnNpb24pCi17Ci0gICAgU3RyaW5nIHF1ZXJ5KFN0cmluZygiU0VMRUNUIHZh
bHVlIEZST00gIikgKyBpbmZvVGFibGVOYW1lICsgICIgV0hFUkUga2V5ID0gJyIgKyB2ZXJzaW9u
S2V5ICsgIic7Iik7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0g
ICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVE
YXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgaWYg
KHNob3VsZENhY2hlVmVyc2lvbikKLSAgICAgICAgICAgIHNldENhY2hlZFZlcnNpb24odmVyc2lv
bik7Ci0gICAgfSBlbHNlCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIHZl
cnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRh
KCkpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQotewotICAg
IC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0
YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBD
T05GTElDVCBSRVBMQUNFCi0gICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChz
ZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgotICAgIFN0cmluZyBxdWVyeShT
dHJpbmcoIklOU0VSVCBJTlRPICIpICsgaW5mb1RhYmxlTmFtZSArICAiIChrZXksIHZhbHVlKSBW
QUxVRVMgKCciICsgdmVyc2lvbktleSArICInLCA/KTsiKTsKLQotICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5kaXNhYmxlKCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0
YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOwotICAgIGlmIChyZXN1bHQp
IHsKLSAgICAgICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKLSAgICAgICAgICAgIHNldENhY2hl
ZFZlcnNpb24odmVyc2lvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0
YSgpLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJh
c2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgbV9l
eHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmlzb2xhdGVkQ29weSgpOwotfQotCi1TdHJpbmcgQWJz
dHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdl
dChtX2d1aWQpLmlzb2xhdGVkQ29weSgpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNl
dENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxWZXJzaW9uKQotewotICAgIC8vIFVw
ZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBh
Y3R1YWxWZXJzaW9uKTsKLX0KLQotYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpnZXRBY3R1YWxWZXJz
aW9uRm9yVHJhbnNhY3Rpb24oU3RyaW5nICZhY3R1YWxWZXJzaW9uKQotewotICAgIEFTU0VSVCht
X3NxbGl0ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSNpZiBQTEFURk9STShD
SFJPTUlVTSkKLSAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzIHRoZSBjYWNo
ZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUuCi0gICAgLy8gU28gd2UgcmV0cmlldmUgdGhlIHZh
bHVlIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBoZXJlLgot
ICAgIHJldHVybiBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24sIHRydWUpOwot
I2Vsc2UKLSAgICBhY3R1YWxWZXJzaW9uID0gZ2V0Q2FjaGVkVmVyc2lvbigpOwotICAgIHJldHVy
biB0cnVlOwotI2VuZGlmCi19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJsZUF1dGhv
cml6ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpl
bmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwot
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7Ci19
Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKGludCBw
ZXJtaXNzaW9ucykKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5zZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7Ci19Ci0KLWJv
b2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCi17Ci0gICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLX0KLQotYm9vbCBBYnN0cmFjdERh
dGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldh
c0luc2VydCgpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCi17
Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+cmVzZXREZWxldGVzKCk7Ci19Ci0KLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVs
ZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4g
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKLX0KLQotdm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpyZXNldEF1dGhvcml6ZXIoKQotewotICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXpl
cikKLSAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Ci19Ci0KLXVuc2lnbmVk
IGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0
aGlzKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVl
ZGVkKCkKLXsKLSAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZy
ZWVTcGFjZVNpemUoKTsKLSAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2Uu
dG90YWxTaXplKCk7Ci0gICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUpIHsK
LSAgICAgICAgaW50IHJlc3VsdCA9IG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1
dW1Db21tYW5kKCk7Ci0gICAgICAgIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHJlc3VsdCk7
Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgICAgICBsb2dFcnJv
ck1lc3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1pbmcgZGF0YWJhc2UiLCBy
ZXN1bHQsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQWJzdHJhY3REYXRhYmFzZTo6aW50ZXJydXB0KCkKLXsKLSAgICBtX3NxbGl0ZURhdGFiYXNl
LmludGVycnVwdCgpOwotfQotCi1ib29sIEFic3RyYWN0RGF0YWJhc2U6OmlzSW50ZXJydXB0ZWQo
KQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NxbGl0ZURhdGFiYXNlLmRhdGFiYXNlTXV0
ZXgoKSk7Ci0gICAgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2UuaXNJbnRlcnJ1cHRlZCgpOwotfQot
Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OmxvZ0Vycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2Fn
ZShPdGhlck1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
bWVzc2FnZSk7Ci19Ci0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLS8vIFRoZXNlIGFyZSB1c2Vk
IHRvIGdlbmVyYXRlIGhpc3RvZ3JhbXMgb2YgZXJyb3JzIHNlZW4gd2l0aCB3ZWJzcWwuCi0vLyBT
ZWUgYWJvdXQ6aGlzdG9ncmFtcyBpbiBjaHJvbWl1bS4KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNv
ZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCi17Ci0gICAgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0
T3BlbkRhdGFiYXNlUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxp
dGVFcnJvckNvZGUpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENoYW5nZVZl
cnNpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0
ZUVycm9yQ29kZSkKLXsKLSAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9u
UmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUp
OwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1
bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29k
ZSkKLXsKLSAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0
KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwotfQot
Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGlu
dCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCi17
Ci0gICAgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQodGhp
cywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLXZv
aWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJy
b3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQotewotICAg
IERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQodGhpcywgZXJy
b3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLXZvaWQgQWJz
dHJhY3REYXRhYmFzZTo6cmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50IHNxbGl0ZUVycm9y
Q29kZSkKLXsKLSAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3Vs
dCh0aGlzLCBzcWxpdGVFcnJvckNvZGUpOwotfQotCi0jZWxzZQotdm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIEFi
c3RyYWN0RGF0YWJhc2U6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50LCBpbnQsIGludCkg
eyB9Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQo
aW50LCBpbnQsIGludCkgeyB9Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENvbW1pdFRy
YW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQotdm9pZCBBYnN0cmFjdERhdGFiYXNl
OjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQotdm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQpIHsgfQotI2Vu
ZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBBYnN0cmFjdERhdGFiYXNlX2gKLSNkZWZpbmUgQWJzdHJhY3REYXRhYmFz
ZV9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaWYgIUxPR19ESVNB
QkxFRCB8fCAhRVJST1JfRElTQUJMRUQKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwot
Y2xhc3MgRGF0YWJhc2VDb250ZXh0OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNs
YXNzIFNlY3VyaXR5T3JpZ2luOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFz
cyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFic3RyYWN0
RGF0YWJhc2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotICAg
IHN0YXRpYyB2b2lkIHNldElzQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKTsKLQotICAgIHZpcnR1
YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBj
b25zdDsKLQotICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KLSAg
ICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KLSAgICBib29sIGlzU3luY0Rh
dGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N5bmNEYXRhYmFzZTsgfQotCi0gICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7
Ci0gICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVE
YXRhYmFzZTsgfQotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7
Ci0gICAgdm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBpbnRlcnJ1
cHQoKTsKLSAgICBib29sIGlzSW50ZXJydXB0ZWQoKTsKLQotICAgIHZvaWQgZGlzYWJsZUF1dGhv
cml6ZXIoKTsKLSAgICB2b2lkIGVuYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIHNldEF1dGhv
cml6ZXJSZWFkT25seSgpOwotICAgIHZvaWQgc2V0QXV0aG9yaXplclBlcm1pc3Npb25zKGludCBw
ZXJtaXNzaW9ucyk7Ci0gICAgYm9vbCBsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Ci0gICAg
Ym9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7Ci0gICAgdm9pZCByZXNldERlbGV0ZXMoKTsKLSAg
ICBib29sIGhhZERlbGV0ZXMoKTsKLSAgICB2b2lkIHJlc2V0QXV0aG9yaXplcigpOwotCi0gICAg
dmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKLQotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJh
c2VDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUNvbnRleHQ7IH0KLQotcHJvdGVj
dGVkOgotICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VWZXJzaW9uV3JhcHBlcjsKLSAgICBmcmllbmQg
Y2xhc3MgU1FMU3RhdGVtZW50OwotICAgIGZyaWVuZCBjbGFzcyBTUUxTdGF0ZW1lbnRTeW5jOwot
ICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7Ci0gICAgZnJpZW5kIGNsYXNzIFNR
TFRyYW5zYWN0aW9uOwotCi0gICAgZW51bSBEYXRhYmFzZVR5cGUgewotICAgICAgICBBc3luY0Rh
dGFiYXNlLAotICAgICAgICBTeW5jRGF0YWJhc2UKLSAgICB9OwotCi0gICAgQWJzdHJhY3REYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBl
KTsKLQotICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwotCi0gICAgdmlydHVhbCBib29sIHBlcmZv
cm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2Vw
dGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0KLSAgICBib29sIGdldFZlcnNpb25G
cm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbiA9IHRy
dWUpOwotICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBib29sIHNob3VsZENhY2hlVmVyc2lvbiA9IHRydWUpOwotICAgIHZvaWQgc2V0RXhwZWN0ZWRW
ZXJzaW9uKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZFZlcnNpb247IH0KLSAgICBTdHJpbmcgZ2V0Q2Fj
aGVkVmVyc2lvbigpY29uc3Q7Ci0gICAgdm9pZCBzZXRDYWNoZWRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYpOwotICAgIGJvb2wgZ2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKFN0cmluZyYgdmVy
c2lvbik7Ci0KLSAgICB2b2lkIGxvZ0Vycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OwotCi0gICAgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50
IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgdm9pZCByZXBvcnRD
aGFuZ2VWZXJzaW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGlu
dCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3Vs
dChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2Rl
KTsKLSAgICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUs
IGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHZvaWQgcmVw
b3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JD
b2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICB2b2lkIHJlcG9ydFZhY3V1bURhdGFiYXNl
UmVzdWx0KGludCBzcWxpdGVFcnJvckNvZGUpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRh
dGFiYXNlSW5mb1RhYmxlTmFtZSgpOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIERhdGFiYXNlQ29udGV4dCogbV9k
YXRhYmFzZUNvbnRleHQ7IC8vIE93bmVkIGJ5IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KLQot
ICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0
cmluZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwot
ICAgIFN0cmluZyBtX2ZpbGVuYW1lOwotCi0jaWYgIUxPR19ESVNBQkxFRCB8fCAhRVJST1JfRElT
QUJMRUQKLSAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIgKyBtX25hbWU7IH0K
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIGludCBtX2d1aWQ7Ci0gICAgYm9vbCBtX29wZW5lZDsK
LSAgICBib29sIG1fbmV3OwotICAgIGNvbnN0IGJvb2wgbV9pc1N5bmNEYXRhYmFzZTsKLQotICAg
IFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VB
dXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBBYnN0
cmFjdERhdGFiYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdl
VmVyc2lvbldyYXBwZXIuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVy
LmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJTUUxFcnJvci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNoYW5nZVZlcnNp
b25XcmFwcGVyOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24s
IGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikKLSAgICA6IG1fb2xkVmVyc2lvbihvbGRWZXJzaW9u
Lmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9uZXdWZXJzaW9uKG5ld1ZlcnNpb24uaXNvbGF0ZWRD
b3B5KCkpCi17Ci19Ci0KLWJvb2wgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1QcmVmbGln
aHQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh0cmFuc2FjdGlv
biAmJiB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2Ug
PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKLQotICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOwot
ICAgIGlmICghZGF0YWJhc2UtPmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbikp
IHsKLSAgICAgICAgaW50IHNxbGl0ZUVycm9yID0gZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
bGFzdEVycm9yKCk7Ci0gICAgICAgIGRhdGFiYXNlLT5yZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0
KDEsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgc3FsaXRlRXJyb3IpOwotICAgICAgICBtX3NxbEVy
cm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8g
cmVhZCB0aGUgY3VycmVudCB2ZXJzaW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3FsaXRlRXJyb3IsIGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhY3R1YWxW
ZXJzaW9uICE9IG1fb2xkVmVyc2lvbikgewotICAgICAgICBkYXRhYmFzZS0+cmVwb3J0Q2hhbmdl
VmVyc2lvblJlc3VsdCgyLCBTUUxFcnJvcjo6VkVSU0lPTl9FUlIsIDApOwotICAgICAgICBtX3Nx
bEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50
IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90
IG1hdGNoIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9ybVBvc3RmbGlnaHQoU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbiAmJiB0
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKTsKLQotICAgIGlmICghZGF0YWJhc2UtPnNldFZlcnNpb25JbkRh
dGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKLSAgICAgICAgaW50IHNxbGl0ZUVycm9yID0gZGF0YWJh
c2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCk7Ci0gICAgICAgIGRhdGFiYXNlLT5yZXBv
cnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDMsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgc3FsaXRlRXJy
b3IpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlRXJyb3IsIGRhdGFiYXNlLT5z
cWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGRhdGFiYXNlLT5zZXRFeHBlY3RlZFZlcnNpb24obV9uZXdWZXJzaW9uKTsK
LQotICAgIGRhdGFiYXNlLT5yZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8g
T0sKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6aGFu
ZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKLXsKLSAgICB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2V0Q2FjaGVkVmVyc2lvbihtX29s
ZFZlcnNpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJz
aW9uV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdl
VmVyc2lvbldyYXBwZXIuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0jaWZuZGVmIENoYW5nZVZlcnNpb25XcmFwcGVyX2gKLSNkZWZpbmUgQ2hhbmdlVmVyc2lvbldy
YXBwZXJfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNRTEVycm9yOwotCi1jbGFz
cyBDaGFuZ2VWZXJzaW9uV3JhcHBlciA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbldyYXBwZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoYW5nZVZlcnNpb25XcmFwcGVyPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24pIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDaGFuZ2VWZXJzaW9uV3JhcHBlcihvbGRWZXJzaW9uLCBuZXdW
ZXJzaW9uKSk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5z
YWN0aW9uKik7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0
aW9uKik7Ci0gICAgdmlydHVhbCBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJldHVybiBt
X3NxbEVycm9yLmdldCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUNvbW1pdEZhaWxlZEFm
dGVyUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiopOwotCi1wcml2YXRlOgotICAgIENoYW5nZVZl
cnNpb25XcmFwcGVyKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdW
ZXJzaW9uKTsKLQotICAgIFN0cmluZyBtX29sZFZlcnNpb247Ci0gICAgU3RyaW5nIG1fbmV3VmVy
c2lvbjsKLSAgICBSZWZQdHI8U1FMRXJyb3I+IG1fc3FsRXJyb3I7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gQ2hhbmdlVmVyc2lvbldyYXBwZXJf
aApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRE9NV2lu
ZG93U1FMRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRE9NV2luZG93U1FMRGF0YWJh
c2UuaCIKLQotI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJET01XaW5k
b3cuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2su
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPERh
dGFiYXNlPiBET01XaW5kb3dTUUxEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERPTVdpbmRvdyogd2lu
ZG93LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmICghd2luZG93LT5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gMDsKLSAgICBp
ZiAoQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKSAmJiB3aW5kb3ctPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpCi0gICAgICAgIGRhdGFiYXNl
ID0gRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCksIG5hbWUsIHZlcnNp
b24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7Ci0K
LSAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0K
LSAgICByZXR1cm4gZGF0YWJhc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0RPTVdpbmRvd1NRTERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgRE9NV2luZG93U1FMRGF0YWJhc2VfaAotI2RlZmluZSBET01XaW5kb3dTUUxEYXRhYmFz
ZV9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRGF0YWJh
c2U7Ci1jbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwotY2xhc3MgRnJhbWU7Ci0KLWNsYXNzIERPTVdp
bmRvd1NRTERhdGFiYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gb3BlbkRhdGFiYXNlKERPTVdpbmRvdyosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFj
aywgRXhjZXB0aW9uQ29kZSYpOwotCi1wcml2YXRlOgotICAgIERPTVdpbmRvd1NRTERhdGFiYXNl
KCkgeyB9OwotICAgIH5ET01XaW5kb3dTUUxEYXRhYmFzZSgpIHsgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRp
ZiAvLyBET01XaW5kb3dTUUxEYXRhYmFzZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgd2lu
ZG93IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVNRTF9EQVRBQkFT
RSwKLSAgICAgICAgU3VwcGxlbWVudGFsPURPTVdpbmRvdwotICAgIF0gRE9NV2luZG93U1FMRGF0
YWJhc2UgewotICAgICAgICBbVjhFbmFibGVkQXRSdW50aW1lXSBEYXRhYmFzZSBvcGVuRGF0YWJh
c2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcg
ZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gW0NhbGxiYWNr
LCBPcHRpb25hbF0gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQotICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAh
TEFOR1VBR0VfQ1BQCi0gICAgICAgIGF0dHJpYnV0ZSBTUUxFeGNlcHRpb25Db25zdHJ1Y3RvciBT
UUxFeGNlcHRpb247Ci0jZW5kaWYKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDI5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotCi0jaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCi0jaW5jbHVk
ZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgotI2lu
Y2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgotI2lu
Y2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUluc3RydW1l
bnRhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTUUxFcnJvci5oIgotI2luY2x1ZGUg
IlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVu
dC5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQu
aCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiVm9p
ZENhbGxiYWNrLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2lmIFVTRShKU0MpCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlQ3JlYXRpb25DYWxs
YmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJh
Y2spKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopCi0gICAgewotICAgICAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KG1fZGF0YWJhc2UuZ2V0KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUNy
ZWF0aW9uQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrKQotICAgICAgICA6IG1fZGF0YWJhc2UoZGF0
YWJhc2UpCi0gICAgICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci0gICAgUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKLX07Ci0KLVBhc3NSZWZQdHI8RGF0YWJh
c2U+IERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+
IGNyZWF0aW9uQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUmIGUpCi17Ci0gICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBm
b3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxEYXRhYmFzZT4g
ZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotCi0gICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKLSAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRp
b25DYWxsYmFjaywgZSwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBkYXRhYmFzZS0+bG9nRXJy
b3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0
YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSk7Ci0KLSAgICBEYXRhYmFzZUNvbnRleHQ6OmZyb20oY29udGV4dCktPnNldEhhc09w
ZW5EYXRhYmFzZXMoKTsKLQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRh
dGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0
KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7Ci0KLSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkg
JiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNj
aGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIs
IGRhdGFiYXNlLmdldCgpKTsKLSAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRhdGFi
YXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRhdGFiYXNlOwot
fQotCi1EYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgIDog
QWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplLCBBc3luY0RhdGFiYXNlKQotICAgICwgbV90cmFuc2FjdGlvbklu
UHJvZ3Jlc3MoZmFsc2UpCi0gICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkK
LSAgICAsIG1fZGVsZXRlZChmYWxzZSkKLXsKLSAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlP
cmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+aXNvbGF0ZWRDb3B5KCk7Ci0K
LSAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgQVNTRVJU
KGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKTsKLX0KLQotY2xhc3MgRGVyZWZD
b250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEZXJlZkNvbnRleHRUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBEZXJlZkNvbnRleHRUYXNrKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCA9PSBtX2Nv
bnRleHQpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotcHJpdmF0ZToK
LSAgICBEZXJlZkNvbnRleHRUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4g
Y29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7Ci19OwotCi1E
YXRhYmFzZTo6fkRhdGFiYXNlKCkKLXsKLSAgICAvLyBUaGUgcmVmZXJlbmNlIHRvIHRoZSBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0IG5lZWRzIHRvIGJlIGNsZWFyZWQgb24gdGhlIEphdmFTY3JpcHQg
dGhyZWFkLiAgSWYgd2UncmUgb24gdGhhdCB0aHJlYWQgYWxyZWFkeSwgd2UgY2FuIGp1c3QgbGV0
IHRoZSBSZWZQdHIncyBkZXN0cnVjdGlvbiBkbyB0aGUgZGVyZWZmaW5nLgotICAgIGlmICghbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgewotICAgICAgICAvLyBH
cmFiIGEgcG9pbnRlciB0byB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBoZXJlIGJlY2F1c2Ugd2UncmUg
cmVsZWFzaW5nIGl0IHdoZW4gd2UgcGFzcyBpdCB0bwotICAgICAgICAvLyBEZXJlZkNvbnRleHRU
YXNrOjpjcmVhdGUuCi0gICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7Ci0gICAgICAgIAot
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEZXJlZkNvbnRleHRUYXNr
OjpjcmVhdGUobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKSkpOwotICAgIH0KLX0K
LQotU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9kZWxldGVk
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIEFic3RyYWN0RGF0YWJhc2U6
OnZlcnNpb24oKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZSwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCi17Ci0gICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsK
LSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpIHx8IGRhdGFiYXNl
Q29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgmc3luY2hy
b25pemVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7Ci0gICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNr
OjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZzeW5jaHJvbml6ZXIsIGUs
IGVycm9yTWVzc2FnZSwgc3VjY2Vzcyk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgc3lu
Y2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7
Ci19Ci0KLXZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCi17Ci0gICAgaWYg
KG1fZGVsZXRlZCB8fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIExPRyhTdG9yYWdlQVBJLCAiTWFya2luZyAlcyAoJXApIGFzIGRl
bGV0ZWQiLCBzdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIHRoaXMpOwotICAgIG1f
ZGVsZXRlZCA9IHRydWU7Ci0KLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25p
emVyOwotICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dGVybWlu
YXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJEYXRhYmFzZSBoYW5kbGUgJXAgaXMgb24gYSB0ZXJtaW5hdGVkIERhdGFiYXNlVGhyZWFkLCBj
YW5ub3QgYmUgbWFya2VkIGZvciBub3JtYWwgY2xvc3VyZVxuIiwgdGhpcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IHRhc2sgPSBEYXRh
YmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIpOwotICAgIGRhdGFiYXNl
Q29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5y
ZWxlYXNlKCkpOwotICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKLX0K
LQotdm9pZCBEYXRhYmFzZTo6Y2xvc2UoKQotewotICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQo
KS0+ZGF0YWJhc2VUaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRh
YmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0KLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4
KTsKLSAgICAgICAgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0gZmFsc2U7Ci0gICAgICAg
IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5jbGVhcigpOwotICAgIH0KLQotICAgIGNsb3NlRGF0YWJhc2UoKTsKLQotICAgIC8vIE11
c3QgcmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VD
bG9zZWQoKS4KLSAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwotICAgIGRhdGFi
YXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlz
KTsKLSAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURh
dGFiYXNlVGFza3ModGhpcyk7Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3Zl
T3BlbkRhdGFiYXNlKHRoaXMpOwotfQotCi12b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5
KCkKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7Ci0gICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkID0gZGF0YWJhc2VDb250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGRhdGFiYXNlVGhyZWFkICYmICFkYXRh
YmFzZVRocmVhZC0+dGVybWluYXRpb25SZXF1ZXN0ZWQoKSAmJiBvcGVuZWQoKSkgewotICAgICAg
ICBsb2dFcnJvck1lc3NhZ2UoImZvcmNpYmx5IGNsb3NpbmcgZGF0YWJhc2UiKTsKLSAgICAgICAg
ZGF0YWJhc2VUaHJlYWQtPnNjaGVkdWxlSW1tZWRpYXRlVGFzayhEYXRhYmFzZUNsb3NlVGFzazo6
Y3JlYXRlKHRoaXMsIDApKTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFz
ZTo6bWF4aW11bVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6
OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2Vw
dGlvbkNvZGUmIGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIGlmIChBYnN0cmFjdERh
dGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZSwg
ZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBpZiAoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCkpCi0gICAgICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVyc2lv
bihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgQ2hhbmdlVmVyc2lvbldyYXBwZXI6
OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKSwgZmFsc2UpOwotfQotCi12b2lkIERhdGFi
YXNlOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxi
YWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKLXsKLSAgICBydW5U
cmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCBm
YWxzZSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaykKLXsKLSAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxs
YmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCB0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQgY2FsbFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTEVy
cm9yPiBlcnJvcikKLXsKLSAgICBjYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOwot
fQotCi12b2lkIERhdGFiYXNlOjpydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NS
ZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQotewotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKLSAgICBpZiAoIW1faXNUcmFu
c2FjdGlvblF1ZXVlRW5hYmxlZCkgewotICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykgewotICAg
ICAgICAgICAgUmVmUHRyPFNRTEVycm9yPiBlcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJy
b3I6OlVOS05PV05fRVJSLCAiZGF0YWJhc2UgaGFzIGJlZW4gY2xvc2VkIik7Ci0gICAgICAgICAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
Y2FsbFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgZXJyb3IucmVsZWFz
ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBj
YWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyLCByZWFkT25s
eSk7Ci0gICAgbV90cmFuc2FjdGlvblF1ZXVlLmFwcGVuZCh0cmFuc2FjdGlvbi5yZWxlYXNlKCkp
OwotICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MpCi0gICAgICAgIHNjaGVkdWxlVHJh
bnNhY3Rpb24oKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29t
cGxldGVkKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jl
c3NNdXRleCk7Ci0gICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICBzY2hl
ZHVsZVRyYW5zYWN0aW9uKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rp
b24oKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleC50cnlMb2Nr
KCkpOyAvLyBMb2NrZWQgYnkgY2FsbGVyLgotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb247Ci0KLSAgICBpZiAobV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkICYmICFtX3Ry
YW5zYWN0aW9uUXVldWUuaXNFbXB0eSgpKQotICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25RdWV1ZS50YWtlRmlyc3QoKTsKLQotICAgIGlmICh0cmFuc2FjdGlvbiAmJiBkYXRhYmFz
ZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkgewotICAgICAgICBPd25QdHI8RGF0YWJhc2VU
cmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRy
YW5zYWN0aW9uKTsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNl
VHJhbnNhY3Rpb25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFzay5nZXQoKSwgdGFz
ay0+dHJhbnNhY3Rpb24oKSk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1
ZTsKLSAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxl
VGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdHJhbnNhY3Rpb25J
blByb2dyZXNzID0gZmFsc2U7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rp
b25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVseSkKLXsK
LSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRoZSB0cmFu
c2FjdGlvbiBzdGVwXG4iLCB0YXNrLmdldCgpKTsKLSAgICBpZiAoaW1tZWRpYXRlbHkpCi0gICAg
ICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0
ZVRhc2sodGFzay5yZWxlYXNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgZGF0YWJhc2VDb250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci19Ci0K
LWNsYXNzIERlbGl2ZXJQZW5kaW5nQ2FsbGJhY2tUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlbGl2ZXJQ
ZW5kaW5nQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGl2ZXJQZW5k
aW5nQ2FsbGJhY2tUYXNrKHRyYW5zYWN0aW9uKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgbV90
cmFuc2FjdGlvbi0+cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBEZWxpdmVyUGVuZGluZ0NhbGxiYWNrVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiB0cmFuc2FjdGlvbikKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci19
OwotCi12b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soRGVsaXZlclBlbmRpbmdDYWxsYmFja1Rhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbikpOwot
fQotCi1WZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMoKQotewot
ICAgIGRpc2FibGVBdXRob3JpemVyKCk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dHlwZT0ndGFibGUnOyIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFi
bGVzIGZvciBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICBlbmFibGVBdXRob3JpemVyKCk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXM7Ci0gICAgaW50
IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJl
c3VsdFJvdykgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApOwotICAgICAgICBpZiAobmFtZSAhPSBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkKLSAgICAg
ICAgICAgIHRhYmxlTmFtZXMuYXBwZW5kKG5hbWUpOwotICAgIH0KLQotICAgIGVuYWJsZUF1dGhv
cml6ZXIoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBM
T0dfRVJST1IoIkVycm9yIGdldHRpbmcgdGFibGVzIGZvciBkYXRhYmFzZSAlcyIsIGRhdGFiYXNl
RGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGFibGVOYW1lczsKLX0KLQotU1FMVHJhbnNhY3Rp
b25DbGllbnQqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNsaWVu
dCgpOwotfQotCi1TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZTo6dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci19Ci0KLVZlY3RvcjxT
dHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRTogTm90IHVzaW5n
IGlzb2xhdGVkQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFr
ZSBzdHJpY3QgdHVybnMKLSAgICAvLyBpbiBkZWFsaW5nIHdpdGggdGhlbS4gSG93ZXZlciwgaWYg
dGhlIGNvZGUgY2hhbmdlcywgdGhpcyBtYXkgbm90IGJlIHRydWUgYW55bW9yZS4KLSAgICBWZWN0
b3I8U3RyaW5nPiByZXN1bHQ7Ci0gICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9u
aXplcjsKLSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpIHx8IGRh
dGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgm
c3luY2hyb25pemVyKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIE93blB0cjxEYXRh
YmFzZVRhYmxlTmFtZXNUYXNrPiB0YXNrID0gRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRl
KHRoaXMsICZzeW5jaHJvbml6ZXIsIHJlc3VsdCk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRh
dGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0g
ICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpCi0gICAgICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKTsK
LSAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRo
cmVhZCgpLT5nZXRUaHJlYWRJRCgpKQotICAgICAgICByZXR1cm4gbV9kYXRhYmFzZVRocmVhZFNl
Y3VyaXR5T3JpZ2luLmdldCgpOwotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIERhdGFiYXNlX2gKLSNkZWZpbmUgRGF0YWJhc2VfaAotCi0jaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZUNhbGxiYWNr
OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwot
Y2xhc3MgU1FMVHJhbnNhY3Rpb247Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOwotY2xh
c3MgU1FMVHJhbnNhY3Rpb25DbGllbnQ7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OwotY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwotY2xhc3MgU1FMVHJhbnNhY3Rp
b25XcmFwcGVyOwotY2xhc3MgVm9pZENhbGxiYWNrOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwotCi1jbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5EYXRhYmFzZSgpOwotCi0gICAgLy8gRGlyZWN0IHN1cHBvcnQgZm9y
IHRoZSBET00gQVBJCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKLSAgICB2b2lkIGNoYW5nZVZlcnNp
b24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sCi0gICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spOwot
ICAgIHZvaWQgcmVhZFRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFj
az4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0KLSAgICAvLyBJbnRlcm5hbCBlbmdpbmUg
c3VwcG9ydAotICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKLQotICAgIHZpcnR1YWwg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7Ci0gICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWxldGVkOyB9Ci0KLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNsb3NlSW1tZWRpYXRlbHkoKTsKLQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNp
emUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsK
LQotICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7
Ci0gICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiosIGJvb2wg
aW1tZWRpYXRlbHkgPSBmYWxzZSk7Ci0KLSAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNh
Y3Rpb25DbGllbnQoKSBjb25zdDsKLSAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgRGF0YWJh
c2VPcGVuVGFzazsKLSAgICBjbGFzcyBEYXRhYmFzZUNsb3NlVGFzazsKLSAgICBjbGFzcyBEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzazsKLSAgICBjbGFzcyBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOwot
Ci0gICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICB2b2lk
IHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7Ci0KLSAgICBib29sIG9wZW5B
bmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNv
ZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVu
QW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0KLSAgICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNv
bXBsZXRlZCgpOwotICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbigpOwotCi0gICAgVmVjdG9y
PFN0cmluZz4gcGVyZm9ybUdldFRhYmxlTmFtZXMoKTsKLQotICAgIHN0YXRpYyB2b2lkIGRlbGl2
ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOwotCi0gICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKLSAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzc011dGV4OwotICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7Ci0gICAgYm9vbCBt
X2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQ7Ci0KLSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKLQotICAgIGJvb2wgbV9kZWxldGVkOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2VuZGlmIC8vIERhdGFiYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2UuaWRsCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFn
ZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0Us
Ci0gICAgICAgIE9taXRDb25zdHJ1Y3RvciwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAg
IF0gRGF0YWJhc2UgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNp
b247Ci0gICAgICAgIHZvaWQgY2hhbmdlVmVyc2lvbihpbiBET01TdHJpbmcgb2xkVmVyc2lvbiwg
aW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFs
XSBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICAgICAgdm9pZCB0cmFuc2FjdGlv
bihpbiBbQ2FsbGJhY2tdIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFtDYWxs
YmFjaywgT3B0aW9uYWxdIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNr
LCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsK
LSAgICAgICAgdm9pZCByZWFkVHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gVm9p
ZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgfTsKLQotfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gMTA5ODU4
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGF0YWJhc2VBdXRob3JpemVyKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkpOwotfQotCi1E
YXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXplcihjb25zdCBTdHJpbmcmIGRhdGFi
YXNlSW5mb1RhYmxlTmFtZSkKLSAgICA6IG1fc2VjdXJpdHlFbmFibGVkKGZhbHNlKQotICAgICwg
bV9kYXRhYmFzZUluZm9UYWJsZU5hbWUoZGF0YWJhc2VJbmZvVGFibGVOYW1lKQotewotICAgIHJl
c2V0KCk7Ci0gICAgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKLX0KLQotdm9pZCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RBY3Rpb25XYXNJbnNlcnQgPSBmYWxz
ZTsKLSAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSBmYWxzZTsKLSAgICBtX3Blcm1p
c3Npb25zID0gUmVhZFdyaXRlTWFzazsKLX0KLQotdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnJl
c2V0RGVsZXRlcygpCi17Ci0gICAgbV9oYWREZWxldGVzID0gZmFsc2U7Ci19Ci0KLXZvaWQgRGF0
YWJhc2VBdXRob3JpemVyOjphZGRXaGl0ZWxpc3RlZEZ1bmN0aW9ucygpCi17Ci0gICAgLy8gU1FM
aXRlIGZ1bmN0aW9ucyB1c2VkIHRvIGhlbHAgaW1wbGVtZW50IHNvbWUgb3BlcmF0aW9ucwotICAg
IC8vIEFMVEVSIFRBQkxFIGhlbHBlcnMKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgi
c3FsaXRlX3JlbmFtZV90YWJsZSIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJz
cWxpdGVfcmVuYW1lX3RyaWdnZXIiKTsKLSAgICAvLyBHTE9CIGhlbHBlcnMKLSAgICBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zLmFkZCgiZ2xvYiIpOwotCi0gICAgLy8gU1FMaXRlIGNvcmUgZnVuY3Rp
b25zCi0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImFicyIpOwotICAgIG1fd2hpdGVs
aXN0ZWRGdW5jdGlvbnMuYWRkKCJjaGFuZ2VzIik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9u
cy5hZGQoImNvYWxlc2NlIik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImdsb2Ii
KTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgiaWZudWxsIik7Ci0gICAgbV93aGl0
ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImhleCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMu
YWRkKCJsYXN0X2luc2VydF9yb3dpZCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRk
KCJsZW5ndGgiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibGlrZSIpOwotICAg
IG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJsb3dlciIpOwotICAgIG1fd2hpdGVsaXN0ZWRG
dW5jdGlvbnMuYWRkKCJsdHJpbSIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJt
YXgiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgibWluIik7Ci0gICAgbV93aGl0
ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoIm51bGxpZiIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlv
bnMuYWRkKCJxdW90ZSIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJyZXBsYWNl
Iik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInJvdW5kIik7Ci0gICAgbV93aGl0
ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInJ0cmltIik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9u
cy5hZGQoInNvdW5kZXgiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic3FsaXRl
X3NvdXJjZV9pZCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzcWxpdGVfdmVy
c2lvbiIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzdWJzdHIiKTsKLSAgICBt
X3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgidG90YWxfY2hhbmdlcyIpOwotICAgIG1fd2hpdGVs
aXN0ZWRGdW5jdGlvbnMuYWRkKCJ0cmltIik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5h
ZGQoInR5cGVvZiIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJ1cHBlciIpOwot
ICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJ6ZXJvYmxvYiIpOwotCi0gICAgLy8gU1FM
aXRlIGRhdGUgYW5kIHRpbWUgZnVuY3Rpb25zCi0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0aW9ucy5h
ZGQoImRhdGUiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgidGltZSIpOwotICAg
IG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJkYXRldGltZSIpOwotICAgIG1fd2hpdGVsaXN0
ZWRGdW5jdGlvbnMuYWRkKCJqdWxpYW5kYXkiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25z
LmFkZCgic3RyZnRpbWUiKTsKLQotICAgIC8vIFNRTGl0ZSBhZ2dyZWdhdGUgZnVuY3Rpb25zCi0g
ICAgLy8gbWF4KCkgYW5kIG1pbigpIGFyZSBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgbV93aGl0
ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoImF2ZyIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMu
YWRkKCJjb3VudCIpOwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJncm91cF9jb25j
YXQiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgic3VtIik7Ci0gICAgbV93aGl0
ZWxpc3RlZEZ1bmN0aW9ucy5hZGQoInRvdGFsIik7Ci0KLSAgICAvLyBTUUxpdGUgRlRTIGZ1bmN0
aW9ucwotICAgIG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJtYXRjaCIpOwotICAgIG1fd2hp
dGVsaXN0ZWRGdW5jdGlvbnMuYWRkKCJzbmlwcGV0Iik7Ci0gICAgbV93aGl0ZWxpc3RlZEZ1bmN0
aW9ucy5hZGQoIm9mZnNldHMiKTsKLSAgICBtX3doaXRlbGlzdGVkRnVuY3Rpb25zLmFkZCgib3B0
aW1pemUiKTsKLQotICAgIC8vIFNRTGl0ZSBJQ1UgZnVuY3Rpb25zCi0gICAgLy8gbGlrZSgpLCBs
b3dlcigpIGFuZCB1cHBlcigpIGFyZSBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgbV93aGl0ZWxp
c3RlZEZ1bmN0aW9ucy5hZGQoInJlZ2V4cCIpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVy
OjpjcmVhdGVUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsKLSAgICBpZiAoIWFsbG93
V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAgbV9sYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKLSAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUo
dGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRhYmxl
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQotewotICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9U
QUJMRSByZXN1bHRzIGluIGEgVVBEQVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90Ci0gICAgLy8g
YWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNv
IHdlIG1pZ2h0IGFzCi0gICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JFQVRFX1RFTVBfVEFC
TEUgaW4gdGhlc2UgY2FzZXMKLSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OwotCi0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFt
ZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJsZShjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSkKLXsKLSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwotCi0gICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgLy8gU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBy
ZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90Ci0gICAgLy8gYWxsb3dl
ZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1p
Z2h0IGFzCi0gICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1RBQkxFIGluIHRo
ZXNlIGNhc2VzCi0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKLQotICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5h
bWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0FsdGVyVGFibGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRl
KCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIG1fbGFzdEFjdGlvbkNoYW5n
ZWREYXRhYmFzZSA9IHRydWU7Ci0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxl
TmFtZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZUluZGV4KGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQotewotICAgIGlmICghYWxsb3dXcml0ZSgp
KQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICBtX2xhc3RBY3Rpb25DaGFuZ2Vk
RGF0YWJhc2UgPSB0cnVlOwotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5h
bWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wSW5kZXgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgLy8gU1FMSVRFX0NSRUFU
RV9URU1QX0lOREVYIHNob3VsZCByZXN1bHQgaW4gYSBVUERBVEUgb3IgSU5TRVJUIG9wZXJhdGlv
biwKLSAgICAvLyB3aGljaCBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25z
IG9yIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gc28gd2UgbWlnaHQgYXMgd2VsbCBkaXNhbGxv
dyBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggaW4gdGhlc2UgY2FzZXMKLSAgICBpZiAoIWFsbG93
V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAgcmV0dXJuIGRlbnlC
YXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6
OmRyb3BJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsKLSAg
ICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAg
cmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Ci19Ci0KLWlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgLy8gU1FMSVRFX0RST1BfVEVNUF9JTkRFWCBzaG91
bGQgcmVzdWx0IGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMKLSAgICAvLyBub3QgYWxs
b3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdl
IG1pZ2h0Ci0gICAgLy8gYXMgd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX0lOREVYIGlu
IHRoZXNlIGNhc2VzCi0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxB
dXRoRGVueTsKLQotICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJs
ZU5hbWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUcmlnZ2VyKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQotewotICAgIGlmICghYWxsb3dXcml0
ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICBtX2xhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UgPSB0cnVlOwotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJs
ZU5hbWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVHJpZ2dlcihj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsKLSAgICAvLyBTUUxJVEVf
Q1JFQVRFX1RFTVBfVFJJR0dFUiByZXN1bHRzIGluIGEgSU5TRVJUIG9wZXJhdGlvbiwgd2hpY2gg
aXMgbm90Ci0gICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZh
dGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCi0gICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVf
Q1JFQVRFX1RFTVBfVFJJR0dFUiBpbiB0aGVzZSBjYXNlcwotICAgIGlmICghYWxsb3dXcml0ZSgp
KQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICByZXR1cm4gZGVueUJhc2VkT25U
YWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRy
aWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgaWYg
KCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIHJldHVy
biB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgLy8gU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHJlc3Vs
dHMgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QKLSAgICAvLyBhbGxvd2VkIGlu
IHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQg
YXMKLSAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBpbiB0aGVz
ZSBjYXNlcwotICAgIGlmICghYWxsb3dXcml0ZSgpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERl
bnk7Ci0KLSAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVOYW1l
KTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcm
KQotewotICAgIHJldHVybiAoIWFsbG93V3JpdGUoKSA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFs
bG93KTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFZpZXcoY29uc3Qg
U3RyaW5nJikKLXsKLSAgICAvLyBTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyByZXN1bHRzIGluIGEg
VVBEQVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90Ci0gICAgLy8gYWxsb3dlZCBpbiByZWFkLW9u
bHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCi0gICAg
Ly8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBpbiB0aGVzZSBjYXNlcwot
ICAgIHJldHVybiAoIWFsbG93V3JpdGUoKSA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsK
LX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZpZXcoY29uc3QgU3RyaW5nJikKLXsK
LSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0g
ICAgbV9oYWREZWxldGVzID0gdHJ1ZTsKLSAgICByZXR1cm4gU1FMQXV0aEFsbG93OwotfQotCi1p
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICAvLyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRpb24s
IHdoaWNoIGlzIG5vdAotICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBv
ciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcwotICAgIC8vIHdlbGwgZGlzYWxsb3cg
U1FMSVRFX0RST1BfVEVNUF9WSUVXIGluIHRoZXNlIGNhc2VzCi0gICAgaWYgKCFhbGxvd1dyaXRl
KCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIG1faGFkRGVsZXRlcyA9IHRy
dWU7Ci0gICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6Y3JlYXRlVlRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG1v
ZHVsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAgIHJldHVybiBTUUxB
dXRoRGVueTsKLQotICAgIC8vIEFsbG93IG9ubHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYg
KCFlcXVhbElnbm9yaW5nQ2FzZShtb2R1bGVOYW1lLCAiZnRzMyIpKQotICAgICAgICByZXR1cm4g
U1FMQXV0aERlbnk7Ci0KLSAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwot
ICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25z
dCBTdHJpbmcmIG1vZHVsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRlKCkpCi0gICAgICAg
IHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIC8vIEFsbG93IG9ubHkgdGhlIEZUUzMgZXh0ZW5z
aW9uCi0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShtb2R1bGVOYW1lLCAiZnRzMyIpKQotICAg
ICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2Vk
T25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxs
b3dEZWxldGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0gICAgaWYgKCFhbGxvd1dyaXRl
KCkpCi0gICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKLQotICAgIHJldHVybiB1cGRhdGVEZWxl
dGVzQmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjphbGxvd0luc2VydChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsKLSAgICBpZiAoIWFs
bG93V3JpdGUoKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAgbV9sYXN0QWN0
aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKLSAgICBtX2xhc3RBY3Rpb25XYXNJbnNlcnQgPSB0
cnVlOwotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1p
bnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1VwZGF0ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBpZiAoIWFsbG93V3JpdGUoKSkKLSAgICAgICAgcmV0
dXJuIFNRTEF1dGhEZW55OwotCi0gICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1
ZTsKLSAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50
IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dUcmFuc2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1f
c2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3c7Ci19Ci0KLWludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29u
c3QgU3RyaW5nJikKLXsKLSAgICBpZiAobV9wZXJtaXNzaW9ucyAmIE5vQWNjZXNzTWFzayAmJiBt
X3NlY3VyaXR5RW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotICAgIAotICAg
IHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotfQotCi1pbnQgRGF0YWJh
c2VBdXRob3JpemVyOjphbGxvd1JlaW5kZXgoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4g
KCFhbGxvd1dyaXRlKCkgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Ci19Ci0KLWludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkK
LXsKLSAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKLX0KLQotaW50
IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dQcmFnbWEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikKLXsKLSAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNR
TEF1dGhBbGxvdzsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBdHRhY2goY29u
c3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVu
eSA6IFNRTEF1dGhBbGxvdzsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dEZXRh
Y2goY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxB
dXRoRGVueSA6IFNRTEF1dGhBbGxvdzsKLX0KLQotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxs
b3dGdW5jdGlvbihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBpZiAobV9zZWN1
cml0eUVuYWJsZWQgJiYgIW1fd2hpdGVsaXN0ZWRGdW5jdGlvbnMuY29udGFpbnMoZnVuY3Rpb25O
YW1lKSkKLSAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0gICAgcmV0dXJuIFNRTEF1dGhB
bGxvdzsKLX0KLQotdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRpc2FibGUoKQotewotICAgIG1f
c2VjdXJpdHlFbmFibGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpl
bmFibGUoKQotewotICAgIG1fc2VjdXJpdHlFbmFibGVkID0gdHJ1ZTsKLX0KLQotYm9vbCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93V3JpdGUoKQotewotICAgIHJldHVybiAhKG1fc2VjdXJpdHlF
bmFibGVkICYmIChtX3Blcm1pc3Npb25zICYgUmVhZE9ubHlNYXNrIHx8IG1fcGVybWlzc2lvbnMg
JiBOb0FjY2Vzc01hc2spKTsKLX0KLQotdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNldFJlYWRP
bmx5KCkKLXsKLSAgICBtX3Blcm1pc3Npb25zIHw9IFJlYWRPbmx5TWFzazsKLX0KLSAgIAotdm9p
ZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNldFBlcm1pc3Npb25zKGludCBwZXJtaXNzaW9ucykKLXsK
LSAgICBtX3Blcm1pc3Npb25zID0gcGVybWlzc2lvbnM7Ci19Ci0KLWludCBEYXRhYmFzZUF1dGhv
cml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25z
dAotewotICAgIGlmICghbV9zZWN1cml0eUVuYWJsZWQpCi0gICAgICAgIHJldHVybiBTUUxBdXRo
QWxsb3c7Ci0KLSAgICAvLyBTYWRseSwgbm9ybWFsIGNyZWF0ZXMgYW5kIGRyb3BzIGVuZCB1cCBh
ZmZlY3Rpbmcgc3FsaXRlX21hc3RlciBpbiBhbiBhdXRob3JpemVyIGNhbGxiYWNrLCBzbwotICAg
IC8vIGl0IHdpbGwgYmUgdG91Z2ggdG8gZW5mb3JjZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBwb2xp
Y2llcwotICAgIC8vaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgInNxbGl0ZV9tYXN0
ZXIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsICJzcWxpdGVfdGVtcF9tYXN0ZXIi
KSB8fAotICAgIC8vICAgIGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgInNxbGl0ZV9zZXF1
ZW5jZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNl
SW5mb1RhYmxlTmFtZSgpKSkKLSAgICAvLyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwotCi0g
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgbV9kYXRhYmFzZUluZm9UYWJsZU5h
bWUpKQotICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7Ci0KLSAgICByZXR1cm4gU1FMQXV0aEFs
bG93OwotfQotCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjp1cGRhdGVEZWxldGVzQmFzZWRPblRh
YmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsKLSAgICBpbnQgYWxsb3cgPSBkZW55
QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwotICAgIGlmIChhbGxvdykKLSAgICAgICAgbV9o
YWREZWxldGVzID0gdHJ1ZTsKLSAgICByZXR1cm4gYWxsb3c7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6
ZXIuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgRGF0
YWJhc2VBdXRob3JpemVyX2gKLSNkZWZpbmUgRGF0YWJhc2VBdXRob3JpemVyX2gKLQotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1leHRlcm4gY29uc3QgaW50IFNRTEF1dGhBbGxvdzsKLWV4dGVybiBjb25zdCBpbnQgU1FMQXV0
aElnbm9yZTsKLWV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7Ci0KLWNsYXNzIERhdGFiYXNl
QXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZUF1dGhvcml6
ZXI+IHsKLXB1YmxpYzoKLQotICAgIGVudW0gUGVybWlzc2lvbnMgewotICAgICAgICBSZWFkV3Jp
dGVNYXNrID0gMCwKLSAgICAgICAgUmVhZE9ubHlNYXNrID0gMSA8PCAxLAotICAgICAgICBOb0Fj
Y2Vzc01hc2sgPSAxIDw8IDIKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJh
c2VBdXRob3JpemVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUp
OwotCi0gICAgaW50IGNyZWF0ZVRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLSAgICBp
bnQgY3JlYXRlVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLSAgICBpbnQgZHJv
cFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLSAgICBpbnQgZHJvcFRlbXBUYWJsZShj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0gICAgaW50IGFsbG93QWx0ZXJUYWJsZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwotCi0gICAgaW50
IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSk7Ci0gICAgaW50IGNyZWF0ZVRlbXBJbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwg
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwotICAgIGludCBkcm9wSW5kZXgoY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLSAgICBpbnQgZHJvcFRlbXBJ
bmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwot
Ci0gICAgaW50IGNyZWF0ZVRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3Qg
U3RyaW5nJiB0YWJsZU5hbWUpOwotICAgIGludCBjcmVhdGVUZW1wVHJpZ2dlcihjb25zdCBTdHJp
bmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0gICAgaW50IGRyb3BU
cmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1l
KTsKLSAgICBpbnQgZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKTsKLQotICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmlu
ZyYgdmlld05hbWUpOwotICAgIGludCBjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdO
YW1lKTsKLSAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7Ci0gICAgaW50
IGRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKLQotICAgIGludCBjcmVhdGVW
VGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7
Ci0gICAgaW50IGRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgbW9kdWxlTmFtZSk7Ci0KLSAgICBpbnQgYWxsb3dEZWxldGUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpOwotICAgIGludCBhbGxvd0luc2VydChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0g
ICAgaW50IGFsbG93VXBkYXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcm
IGNvbHVtbk5hbWUpOwotICAgIGludCBhbGxvd1RyYW5zYWN0aW9uKCk7Ci0KLSAgICBpbnQgYWxs
b3dTZWxlY3QoKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgYWxsb3dSZWFkKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbHVtbk5hbWUpOwotCi0gICAg
aW50IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7Ci0gICAgaW50IGFsbG93
QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7Ci0gICAgaW50IGFsbG93RnVuY3Rpb24o
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwotICAgIGludCBhbGxvd1ByYWdtYShjb25zdCBT
dHJpbmcmIHByYWdtYU5hbWUsIGNvbnN0IFN0cmluZyYgZmlyc3RBcmd1bWVudCk7Ci0KLSAgICBp
bnQgYWxsb3dBdHRhY2goY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgaW50IGFsbG93RGV0
YWNoKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKLQotICAgIHZvaWQgZGlzYWJsZSgpOwot
ICAgIHZvaWQgZW5hYmxlKCk7Ci0gICAgdm9pZCBzZXRSZWFkT25seSgpOwotICAgIHZvaWQgc2V0
UGVybWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2
b2lkIHJlc2V0RGVsZXRlcygpOwotCi0gICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uV2FzSW5zZXJ0OyB9Ci0gICAgYm9vbCBsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFi
YXNlOyB9Ci0gICAgYm9vbCBoYWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVz
OyB9Ci0KLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VBdXRob3JpemVyKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJbmZvVGFibGVOYW1lKTsKLSAgICB2b2lkIGFkZFdoaXRlbGlzdGVkRnVuY3Rpb25zKCk7
Ci0gICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAg
IGludCB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICBi
b29sIGFsbG93V3JpdGUoKTsKLQotICAgIGludCBtX3Blcm1pc3Npb25zOwotICAgIGJvb2wgbV9z
ZWN1cml0eUVuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9sYXN0QWN0aW9uV2FzSW5zZXJ0IDogMTsK
LSAgICBib29sIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA6IDE7Ci0gICAgYm9vbCBtX2hh
ZERlbGV0ZXMgOiAxOwotCi0gICAgY29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1l
OwotCi0gICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxpc3RlZEZ1
bmN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFi
YXNlQXV0aG9yaXplcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2Fs
bGJhY2suaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0
YWJhc2VDYWxsYmFja19oCi0jZGVmaW5lIERhdGFiYXNlQ2FsbGJhY2tfaAotCi0jaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlOwotY2xhc3MgRGF0YWJhc2VT
eW5jOwotCi1jbGFzcyBEYXRhYmFzZUNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPERhdGFiYXNlQ2FsbGJhY2s+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5EYXRhYmFzZUNh
bGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KERhdGFiYXNlKikgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChEYXRhYmFzZVN5bmMqKSA9IDA7Ci19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gRGF0YWJhc2VDYWxsYmFja19oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5pZGwJKHJldmlzaW9uIDEwOTg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLSAgICBpbnRlcmZh
Y2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIENhbGxiYWNr
Ci0gICAgXSBEYXRhYmFzZUNhbGxiYWNrIHsKLSAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChp
biBEYXRhYmFzZSBkYXRhYmFzZSk7Ci0gICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gRGF0
YWJhc2VTeW5jIGRhdGFiYXNlKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRh
dGFiYXNlQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQu
aCIKLSNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgRGF0YWJhc2VDb250ZXh0KiBleGlzdGluZ0RhdGFiYXNlQ29udGV4
dEZyb20oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RGF0YWJhc2VDb250ZXh0Kj4oU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250
ZXh0Pjo6ZnJvbShjb250ZXh0LCAiRGF0YWJhc2VDb250ZXh0IikpOwotfQotCi1EYXRhYmFzZUNv
bnRleHQ6OkRhdGFiYXNlQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQot
ICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2hhc09wZW5E
YXRhYmFzZXMoZmFsc2UpCi17Ci19Ci0KLURhdGFiYXNlQ29udGV4dDo6fkRhdGFiYXNlQ29udGV4
dCgpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQpIHsKLSAgICAgICAgQVNTRVJUKG1fZGF0
YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCkpOwotICAgICAgICBtX2RhdGFiYXNl
VGhyZWFkID0gMDsKLSAgICB9Ci19Ci0KLURhdGFiYXNlQ29udGV4dCogRGF0YWJhc2VDb250ZXh0
Ojpmcm9tKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRGF0YWJhc2VD
b250ZXh0KiBzdXBwbGVtZW50ID0gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQp
OwotICAgIGlmICghc3VwcGxlbWVudCkgewotICAgICAgICBzdXBwbGVtZW50ID0gbmV3IERhdGFi
YXNlQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgcHJvdmlkZVRvKGNvbnRleHQsICJEYXRhYmFz
ZUNvbnRleHQiLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7Ci0gICAgICAgIEFTU0VSVChzdXBwbGVt
ZW50ID09IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0RnJvbShjb250ZXh0KSk7Ci0gICAgfQotICAg
IHJldHVybiBzdXBwbGVtZW50OwotfQotCi1EYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0
OjpkYXRhYmFzZVRocmVhZCgpCi17Ci0gICAgaWYgKCFtX2RhdGFiYXNlVGhyZWFkICYmICFtX2hh
c09wZW5EYXRhYmFzZXMpIHsKLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBkYXRhYmFzZSB0aHJlYWQg
b24gZmlyc3QgcmVxdWVzdCAtIGJ1dCBub3QgaWYgYXQgbGVhc3Qgb25lIGRhdGFiYXNlIHdhcyBh
bHJlYWR5IG9wZW5lZCwKLSAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGF0IGNhc2Ugd2UgYWxyZWFk
eSBoYWQgYSBkYXRhYmFzZSB0aHJlYWQgYW5kIHRlcm1pbmF0ZWQgaXQgYW5kIHNob3VsZCBub3Qg
Y3JlYXRlIGFub3RoZXIuCi0gICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSBEYXRhYmFzZVRocmVh
ZDo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZVRocmVhZC0+c3RhcnQoKSkKLSAg
ICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQgPSAwOwotICAgIH0KLQotICAgIHJldHVybiBtX2Rh
dGFiYXNlVGhyZWFkLmdldCgpOwotfQotCi1ib29sIERhdGFiYXNlQ29udGV4dDo6aGFzT3BlbkRh
dGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotewotICAgIC8vIFdlIGRv
bid0IHVzZSBEYXRhYmFzZUNvbnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNh
dXNlCi0gICAgLy8gRGF0YWJhc2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBo
YXZlIG9uZSBhbHJlYWR5LgotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0ID0g
ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGcm9tKGNvbnRleHQpOwotICAgIGlmICghZGF0YWJhc2VD
b250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4
dC0+bV9oYXNPcGVuRGF0YWJhc2VzOwotfQotCi12b2lkIERhdGFiYXNlQ29udGV4dDo6c3RvcERh
dGFiYXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIqIGNsZWFudXBTeW5jKQotewotICAgIC8vIFdlIGRvbid0IHVzZSBEYXRhYmFzZUNv
bnRleHQ6OmZyb20gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCi0gICAgLy8gRGF0YWJh
c2VDb250ZXh0IHRvIGJlIGFsbG9jYXRlZCBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5Lgot
ICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0ID0gZXhpc3RpbmdEYXRhYmFzZUNv
bnRleHRGcm9tKGNvbnRleHQpOwotCi0gICAgaWYgKGRhdGFiYXNlQ29udGV4dCAmJiBkYXRhYmFz
ZUNvbnRleHQtPm1fZGF0YWJhc2VUaHJlYWQpCi0gICAgICAgIGRhdGFiYXNlQ29udGV4dC0+bV9k
YXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9uKGNsZWFudXBTeW5jKTsKLSAgICBlbHNl
IGlmIChjbGVhbnVwU3luYykKLSAgICAgICAgY2xlYW51cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsK
LX0KLQotYm9vbCBEYXRhYmFzZUNvbnRleHQ6OmFsbG93RGF0YWJhc2VBY2Nlc3MoKSBjb25zdAot
ewotICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQtPnBhZ2UoKSB8fCAoZG9j
dW1lbnQtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpICYmICFT
Y2hlbWVSZWdpc3RyeTo6YWxsb3dzRGF0YWJhc2VBY2Nlc3NJblByaXZhdGVCcm93c2luZyhkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSkpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgIC8vIGFsbG93RGF0YWJh
c2VBY2Nlc3MgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3Igd29ya2Vycy4KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBEYXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YShj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpLT5leGNlZWRlZERhdGFiYXNlUXVvdGEoZG9jdW1lbnQtPmZyYW1lKCksIG5hbWUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0gICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgYSByZWFsIGltcGxlbWVudGF0aW9uOyB0aGlzIGlzIGEgdGVtcG9y
YXJ5IHNvbHV0aW9uIGZvciB0ZXN0aW5nLgotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBk
ZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuc2V0UXVvdGEobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LCBkZWZhdWx0UXVvdGEpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VDb250ZXh0LmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKgotICovCi0KLSNpZm5kZWYgRGF0YWJhc2VDb250ZXh0X2gKLSNkZWZpbmUgRGF0YWJh
c2VDb250ZXh0X2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJTdXBw
bGVtZW50YWJsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlOwot
Y2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOwotY2xhc3MgRGF0YWJhc2VUaHJlYWQ7Ci1j
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1jbGFzcyBEYXRhYmFzZUNvbnRleHQgOiBw
dWJsaWMgU3VwcGxlbWVudDxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+RGF0YWJhc2VDb250ZXh0KCk7Ci0gICAgc3RhdGljIERhdGFiYXNlQ29udGV4dCog
ZnJvbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0KLSAgICBEYXRhYmFzZVRocmVhZCogZGF0
YWJhc2VUaHJlYWQoKTsKLQotICAgIHZvaWQgc2V0SGFzT3BlbkRhdGFiYXNlcygpIHsgbV9oYXNP
cGVuRGF0YWJhc2VzID0gdHJ1ZTsgfQotCi0gICAgc3RhdGljIGJvb2wgaGFzT3BlbkRhdGFiYXNl
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0KLSAgICAvLyBXaGVuIHRoZSBkYXRhYmFzZSBj
bGVhbnVwIGlzIGRvbmUsIGNsZWFudXBTeW5jIHdpbGwgYmUgc2lnbmFsbGVkLgotICAgIHN0YXRp
YyB2b2lkIHN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciopOwotCi0gICAgYm9vbCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkgY29uc3Q7
Ci0gICAgdm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJiBuYW1lKTsKLQot
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBEYXRhYmFzZUNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRocmVhZDsKLSAg
ICBib29sIG1faGFzT3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8g
ZmFsc2UsIGV2ZW4gYWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCi19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQot
Ci0jZW5kaWYgLy8gRGF0YWJhc2VDb250ZXh0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VEZXRhaWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZURldGFpbHMuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZURldGFpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIERhdGFiYXNlRGV0YWlsc19oCi0jZGVmaW5lIERhdGFiYXNlRGV0YWls
c19oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRGF0YWJhc2VEZXRhaWxzIHsKLXB1YmxpYzoKLSAgICBEYXRhYmFzZURldGFpbHMo
KQotICAgICAgICA6IG1fZXhwZWN0ZWRVc2FnZSgwKQotICAgICAgICAsIG1fY3VycmVudFVzYWdl
KDApCi0gICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgbV90aHJlYWQgPSBjdXJyZW50VGhy
ZWFkKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBEYXRhYmFzZURldGFpbHMoY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
bG9uZyBleHBlY3RlZFVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFVzYWdlKQotICAg
ICAgICA6IG1fbmFtZShkYXRhYmFzZU5hbWUpCi0gICAgICAgICwgbV9kaXNwbGF5TmFtZShkaXNw
bGF5TmFtZSkKLSAgICAgICAgLCBtX2V4cGVjdGVkVXNhZ2UoZXhwZWN0ZWRVc2FnZSkKLSAgICAg
ICAgLCBtX2N1cnJlbnRVc2FnZShjdXJyZW50VXNhZ2UpCi0gICAgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgbV90aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAg
ICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TmFtZTsgfQot
ICAgIHVpbnQ2NF90IGV4cGVjdGVkVXNhZ2UoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkVXNh
Z2U7IH0KLSAgICB1aW50NjRfdCBjdXJyZW50VXNhZ2UoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRVc2FnZTsgfQotI2lmbmRlZiBOREVCVUcKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTdHJp
bmcgbV9uYW1lOwotICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVpbnQ2NF90IG1fZXhw
ZWN0ZWRVc2FnZTsKLSAgICB1aW50NjRfdCBtX2N1cnJlbnRVc2FnZTsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZDsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIERhdGFiYXNlRGV0YWlsc19oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiAxMDk4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0
YWJhc2VTeW5jLmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0
YWJhc2VDYWxsYmFjay5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvblN5bmMuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgot
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VT
eW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoY29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotCi0gICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBm
b3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxEYXRhYmFzZVN5
bmM+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7Ci0KLSAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5
KCFjcmVhdGlvbkNhbGxiYWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBkYXRhYmFz
ZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERh
dGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSk7Ci0KLSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRp
b25DYWxsYmFjay5nZXQoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRo
ZSBjcmVhdGlvbiBjYWxsYmFjayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsK
LSAgICAgICAgY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YWJhc2UuZ2V0KCkpOwot
ICAgIH0KLQotICAgIHJldHVybiBkYXRhYmFzZTsKLX0KLQotRGF0YWJhc2VTeW5jOjpEYXRhYmFz
ZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSkKLSAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgU3luY0RhdGFiYXNlKQotewotfQotCi1EYXRh
YmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQotewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLQotICAgIGlmIChvcGVuZWQoKSkgewotICAg
ICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7
Ci0gICAgICAgIGNsb3NlRGF0YWJhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGF0YWJhc2VTeW5j
OjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBu
ZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjaGFuZ2VW
ZXJzaW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLQotICAgIGlmIChzcWxpdGVE
YXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIHJlcG9ydENoYW5n
ZVZlcnNpb25SZXN1bHQoMSwgU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIDApOwotICAgICAg
ICBzZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gY2hhbmdlVmVyc2lvbiBmcm9tIHdpdGhp
biBhIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jPiB0cmFuc2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNoYW5n
ZVZlcnNpb25DYWxsYmFjaywgZmFsc2UpOwotICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+YmVn
aW4oKSkpIHsKLSAgICAgICAgQVNTRVJUKCFsYXN0RXJyb3JNZXNzYWdlKCkuaXNFbXB0eSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOwotICAg
IGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgewotICAgICAgICBy
ZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KDIsIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsIHNx
bGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwotICAgICAgICBzZXRMYXN0RXJyb3JNZXNzYWdl
KCJ1bmFibGUgdG8gcmVhZCB0aGUgY3VycmVudCB2ZXJzaW9uIiwgc3FsaXRlRGF0YWJhc2UoKS5s
YXN0RXJyb3IoKSwgc3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGVj
ID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG9sZFZlcnNpb24pIHsKLSAgICAgICAgcmVwb3J0Q2hh
bmdlVmVyc2lvblJlc3VsdCgzLCBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSLCAwKTsKLSAgICAg
ICAgc2V0TGFzdEVycm9yTWVzc2FnZSgiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBh
bmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwotICAgICAgICBlYyA9IFNR
TEV4Y2VwdGlvbjo6VkVSU0lPTl9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoKGVjID0gdHJhbnNhY3Rpb24tPmV4ZWN1dGUoKSkpIHsKLSAgICAgICAgQVNTRVJUKCFsYXN0
RXJyb3JNZXNzYWdlKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobmV3VmVyc2lvbikpIHsKLSAgICAgICAgcmVwb3J0
Q2hhbmdlVmVyc2lvblJlc3VsdCg0LCBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSLCBzcWxpdGVE
YXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKLSAgICAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgidW5h
YmxlIHRvIHNldCB0aGUgbmV3IHZlcnNpb24iLCBzcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigp
LCBzcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OlVOS05PV05fRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChl
YyA9IHRyYW5zYWN0aW9uLT5jb21taXQoKSkpIHsKLSAgICAgICAgQVNTRVJUKCFsYXN0RXJyb3JN
ZXNzYWdlKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgc2V0Q2FjaGVkVmVyc2lvbihvbGRWZXJzaW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1
bHQoMCwgLTEsIDApOyAvLyBPSwotCi0gICAgc2V0RXhwZWN0ZWRWZXJzaW9uKG5ld1ZlcnNpb24p
OwotICAgIHNldExhc3RFcnJvck1lc3NhZ2UoIiIpOwotfQotCi12b2lkIERhdGFiYXNlU3luYzo6
dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNrLCBm
YWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgdHJ1ZSwgZWMpOwotfQotCi12
b2lkIERhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKLQotICAgIGlmIChzcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KSB7Ci0gICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBzdGFydCBhIHRyYW5z
YWN0aW9uIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OkRBVEFCQVNFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0
cjxTUUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb25TeW5jOjpj
cmVhdGUodGhpcywgY2FsbGJhY2ssIHJlYWRPbmx5KTsKLSAgICBpZiAoKGVjID0gdHJhbnNhY3Rp
b24tPmJlZ2luKCkpIHx8IChlYyA9IHRyYW5zYWN0aW9uLT5leGVjdXRlKCkpIHx8IChlYyA9IHRy
YW5zYWN0aW9uLT5jb21taXQoKSkpIHsKLSAgICAgICAgQVNTRVJUKCFsYXN0RXJyb3JNZXNzYWdl
KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgfQot
Ci0gICAgc2V0TGFzdEVycm9yTWVzc2FnZSgiIik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VTeW5jOjpt
YXJrQXNEZWxldGVkQW5kQ2xvc2UoKQotewotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRvIHNvbWV0
aGluZyBzaW1pbGFyIHRvIGNsb3NlSW1tZWRpYXRlbHkoKSwgYnV0IGluIGEgc3luYyB3YXkKLX0K
LQotY2xhc3MgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrIDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKGRhdGFiYXNlKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKQotICAgIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+Y2xvc2VJbW1lZGlhdGVseSgpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2so
UGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlKQotICAgICAgICA6IG1fZGF0YWJhc2Uo
ZGF0YWJhc2UpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IG1fZGF0
YWJhc2U7Ci19OwotCi12b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSgpCi17Ci0g
ICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwot
Ci0gICAgaWYgKCFvcGVuZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbG9nRXJyb3JNZXNz
YWdlKCJmb3JjaWJseSBjbG9zaW5nIGRhdGFiYXNlIik7Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwotICAgIGNsb3NlRGF0YWJhc2UoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNpb24g
MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhYmFzZVN5bmNfaAotI2RlZmluZSBE
YXRhYmFzZVN5bmNfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkFi
c3RyYWN0RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZUNhbGxi
YWNrOwotY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwotY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2s7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotY2xhc3MgU2VjdXJpdHlP
cmlnaW47Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIEluc3RhbmNlcyBvZiB0
aGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidz
IGNvbnRleHQgdGhyZWFkLgotY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVibGljIEFic3RyYWN0RGF0
YWJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlU3luYygpOwotCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRW
ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcm
IG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVhZFRyYW5zYWN0
aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKLQotICAgIGNvbnN0IFN0cmluZyYgbGFzdEVy
cm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVycm9yTWVzc2FnZTsgfQotICAgIHZv
aWQgc2V0TGFzdEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsgbV9sYXN0RXJy
b3JNZXNzYWdlID0gbWVzc2FnZTsgfQotICAgIHZvaWQgc2V0TGFzdEVycm9yTWVzc2FnZShjb25z
dCBjaGFyKiBtZXNzYWdlLCBpbnQgc3FsaXRlQ29kZSkKLSAgICB7Ci0gICAgICAgIHNldExhc3RF
cnJvck1lc3NhZ2UoU3RyaW5nOjpmb3JtYXQoIiVzICglZCkiLCBtZXNzYWdlLCBzcWxpdGVDb2Rl
KSk7Ci0gICAgfQotICAgIHZvaWQgc2V0TGFzdEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBtZXNz
YWdlLCBpbnQgc3FsaXRlQ29kZSwgY29uc3QgY2hhciogc3FsaXRlTWVzc2FnZSkKLSAgICB7Ci0g
ICAgICAgIHNldExhc3RFcnJvck1lc3NhZ2UoU3RyaW5nOjpmb3JtYXQoIiVzICglZCwgJXMpIiwg
bWVzc2FnZSwgc3FsaXRlQ29kZSwgc3FsaXRlTWVzc2FnZSkpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0g
ICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgU3RyaW5nIG1fbGFz
dEVycm9yTWVzc2FnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VTeW5jLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1t
b2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1T
UUxfREFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvciwKLSAgICAgICAgSlNOb1N0YXRp
Y1RhYmxlcwotICAgIF0gRGF0YWJhc2VTeW5jIHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyB2ZXJzaW9uOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGxhc3RFcnJvck1lc3NhZ2U7Ci0gICAgICAgIHZvaWQgY2hhbmdlVmVyc2lvbihpbiBET01TdHJp
bmcgb2xkVmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFtDYWxsYmFjaywgT3B0
aW9uYWxdIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrIGNhbGxiYWNrKSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKLSAgICAgICAgdm9pZCB0cmFuc2FjdGlvbihpbiBbQ2FsbGJhY2tdIFNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrIGNhbGxiYWNrKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAg
ICAgdm9pZCByZWFkVHJhbnNhY3Rpb24oaW4gW0NhbGxiYWNrXSBTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjayBjYWxsYmFjaykgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgfTsKLQotfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gMTA5ODU4
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRhdGFiYXNlVGFzay5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLURhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKCkK
LSAgICA6IG1fdGFza0NvbXBsZXRlZChmYWxzZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2hh
c0NoZWNrZWRGb3JUZXJtaW5hdGlvbihmYWxzZSkKLSNlbmRpZgotewotfQotCi12b2lkIERhdGFi
YXNlVGFza1N5bmNocm9uaXplcjo6d2FpdEZvclRhc2tDb21wbGV0aW9uKCkKLXsKLSAgICBtX3N5
bmNocm9ub3VzTXV0ZXgubG9jaygpOwotICAgIHdoaWxlICghbV90YXNrQ29tcGxldGVkKQotICAg
ICAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLndhaXQobV9zeW5jaHJvbm91c011dGV4KTsKLSAg
ICBtX3N5bmNocm9ub3VzTXV0ZXgudW5sb2NrKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyOjp0YXNrQ29tcGxldGVkKCkKLXsKLSAgICBtX3N5bmNocm9ub3VzTXV0ZXgubG9j
aygpOwotICAgIG1fdGFza0NvbXBsZXRlZCA9IHRydWU7Ci0gICAgbV9zeW5jaHJvbm91c0NvbmRp
dGlvbi5zaWduYWwoKTsKLSAgICBtX3N5bmNocm9ub3VzTXV0ZXgudW5sb2NrKCk7Ci19Ci0KLURh
dGFiYXNlVGFzazo6RGF0YWJhc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCi0gICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgICwgbV9zeW5jaHJvbml6ZXIoc3luY2hyb25pemVyKQotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICAsIG1fY29tcGxldGUoZmFsc2UpCi0jZW5kaWYKLXsKLX0KLQotRGF0YWJhc2VUYXNrOjp+RGF0
YWJhc2VUYXNrKCkKLXsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgQVNTRVJUKG1fY29tcGxldGUg
fHwgIW1fc3luY2hyb25pemVyKTsKLSNlbmRpZgotfQotCi12b2lkIERhdGFiYXNlVGFzazo6cGVy
Zm9ybVRhc2soKQotewotICAgIC8vIERhdGFiYXNlIHRhc2tzIGFyZSBtZWFudCB0byBiZSB1c2Vk
IG9ubHkgb25jZSwgc28gbWFrZSBzdXJlIHRoaXMgb25lIGhhc24ndCBiZWVuIHBlcmZvcm1lZCBi
ZWZvcmUuCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIEFTU0VSVCghbV9jb21wbGV0ZSk7Ci0jZW5k
aWYKLQotICAgIExPRyhTdG9yYWdlQVBJLCAiUGVyZm9ybWluZyAlcyAlcFxuIiwgZGVidWdUYXNr
TmFtZSgpLCB0aGlzKTsKLQotICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwotICAg
IGRvUGVyZm9ybVRhc2soKTsKLQotICAgIGlmIChtX3N5bmNocm9uaXplcikKLSAgICAgICAgbV9z
eW5jaHJvbml6ZXItPnRhc2tDb21wbGV0ZWQoKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBt
X2NvbXBsZXRlID0gdHJ1ZTsKLSNlbmRpZgotfQotCi0vLyAqKiogRGF0YWJhc2VPcGVuVGFzayAq
KioKLS8vIE9wZW5zIHRoZSBkYXRhYmFzZSBmaWxlIGFuZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBt
YXRjaGVzIHRoZSBleHBlY3RlZCB2ZXJzaW9uLgotCi1EYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFz
azo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbklu
TmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNl
cHRpb25Db2RlJiBjb2RlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3VjY2VzcykKLSAg
ICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25pemVyKQotICAgICwgbV9zZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKLSAgICAsIG1fY29kZShj
b2RlKQotICAgICwgbV9lcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICwgbV9zdWNjZXNz
KHN1Y2Nlc3MpCi17Ci0gICAgQVNTRVJUKHN5bmNocm9uaXplcik7IC8vIEEgdGFzayB3aXRoIG91
dHB1dCBwYXJhbWV0ZXJzIGlzIHN1cHBvc2VkIHRvIGJlIHN5bmNocm9ub3VzLgotfQotCi12b2lk
IERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkKLXsKLSAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwotICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIG1fY29kZSwgZXJyb3JNZXNzYWdl
KTsKLSAgICBpZiAoIW1fc3VjY2VzcykKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1l
c3NhZ2UuaXNvbGF0ZWRDb3B5KCk7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1jb25zdCBjaGFy
KiBEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICJEYXRhYmFzZU9wZW5UYXNrIjsKLX0KLSNlbmRpZgotCi0vLyAqKiogRGF0YWJh
c2VDbG9zZVRhc2sgKioqCi0vLyBDbG9zZXMgdGhlIGRhdGFiYXNlLgotCi1EYXRhYmFzZTo6RGF0
YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCi0gICAgOiBEYXRhYmFzZVRhc2so
ZGF0YWJhc2UsIHN5bmNocm9uaXplcikKLXsKLX0KLQotdm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VD
bG9zZVRhc2s6OmRvUGVyZm9ybVRhc2soKQotewotICAgIGRhdGFiYXNlKCktPmNsb3NlKCk7Ci19
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1jb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VDbG9z
ZVRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiRGF0YWJhc2VDbG9z
ZVRhc2siOwotfQotI2VuZGlmCi0KLS8vICoqKiBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayAqKioK
LS8vIFN0YXJ0cyBhIHRyYW5zYWN0aW9uIHRoYXQgd2lsbCByZXBvcnQgaXRzIHJlc3VsdHMgdmlh
IGEgY2FsbGJhY2suCi0KLURhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJh
c2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24p
Ci0gICAgOiBEYXRhYmFzZVRhc2sodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCksIDApCi0gICAgLCBt
X3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotewotfQotCi12b2lkIERhdGFiYXNlOjpEYXRhYmFz
ZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3JtVGFzaygpCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rp
b24tPnBlcmZvcm1OZXh0U3RlcCgpKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LT5pblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKLX0KLQotI2lmICFMT0dfRElTQUJM
RUQKLWNvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZGVidWdU
YXNrTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayI7
Ci19Ci0jZW5kaWYKLQotLy8gKioqIERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgKioqCi0vLyBSZXRy
aWV2ZXMgYSBsaXN0IG9mIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIC0gZm9yIFdlYkluc3Bl
Y3RvciBzdXBwb3J0LgotCi1EYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0YWJh
c2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCi0gICAgOiBEYXRhYmFz
ZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikKLSAgICAsIG1fdGFibGVOYW1lcyhuYW1lcykK
LXsKLSAgICBBU1NFUlQoc3luY2hyb25pemVyKTsgLy8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFt
ZXRlcnMgaXMgc3VwcG9zZWQgdG8gYmUgc3luY2hyb25vdXMuCi19Ci0KLXZvaWQgRGF0YWJhc2U6
OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmRvUGVyZm9ybVRhc2soKQotewotICAgIG1fdGFibGVO
YW1lcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7Ci19Ci0KLSNpZiAhTE9H
X0RJU0FCTEVECi1jb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6
ZGVidWdUYXNrTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrIjsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCShyZXZpc2lvbiAxMDk4NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBEYXRhYmFzZVRhc2tfaAotI2RlZmluZSBEYXRh
YmFzZVRhc2tfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFi
YXNlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBDYW4gYmUgdXNlZCB0byB3YWl0IHVudGls
IERhdGFiYXNlVGFzayBpcyBjb21wbGV0ZWQuCi0vLyBIYXMgdG8gYmUgcGFzc2VkIGludG8gRGF0
YWJhc2VUYXNrOjpjcmVhdGUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrLgotY2xhc3Mg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXIpOwotcHVibGljOgotICAgIERhdGFiYXNlVGFza1N5bmNocm9u
aXplcigpOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgdG8gd2FpdCB1bnRpbCB0
YXNrIGlzIGNvbXBsZXRlZC4KLSAgICB2b2lkIHdhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0g
ICAgLy8gQ2FsbGVkIGJ5IHRoZSB0YXNrLgotICAgIHZvaWQgdGFza0NvbXBsZXRlZCgpOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaGFzQ2hlY2tlZEZvclRlcm1pbmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNDaGVja2VkRm9yVGVybWluYXRpb247IH0KLSAgICB2b2lkIHNldEhhc0No
ZWNrZWRGb3JUZXJtaW5hdGlvbigpIHsgbV9oYXNDaGVja2VkRm9yVGVybWluYXRpb24gPSB0cnVl
OyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBib29sIG1fdGFza0NvbXBsZXRlZDsKLSAgICBN
dXRleCBtX3N5bmNocm9ub3VzTXV0ZXg7Ci0gICAgVGhyZWFkQ29uZGl0aW9uIG1fc3luY2hyb25v
dXNDb25kaXRpb247Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgbV9oYXNDaGVja2VkRm9yVGVy
bWluYXRpb247Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIERhdGFiYXNlVGFzayB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VUYXNrKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VUYXNrKCk7Ci0KLSAgICB2b2lkIHBlcmZvcm1U
YXNrKCk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2RhdGFi
YXNlOyB9Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaGFzU3luY2hyb25pemVyKCkgY29uc3Qg
eyByZXR1cm4gbV9zeW5jaHJvbml6ZXI7IH0KLSAgICBib29sIGhhc0NoZWNrZWRGb3JUZXJtaW5h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3luY2hyb25pemVyLT5oYXNDaGVja2VkRm9yVGVybWlu
YXRpb24oKTsgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBEYXRhYmFzZVRhc2soRGF0YWJh
c2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgZG9QZXJmb3JtVGFzaygpID0gMDsKLQotICAgIERhdGFiYXNlKiBtX2RhdGFiYXNlOwot
ICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogbV9zeW5jaHJvbml6ZXI7Ci0KLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Qg
PSAwOwotICAgIGJvb2wgbV9jb21wbGV0ZTsKLSNlbmRpZgotfTsKLQotY2xhc3MgRGF0YWJhc2U6
OkRhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBi
b29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5
bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJv
b2wmIHN1Y2Nlc3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNl
T3BlblRhc2soZGIsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNvZGUs
IGVycm9yTWVzc2FnZSwgc3VjY2VzcykpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBEYXRhYmFz
ZU9wZW5UYXNrKERhdGFiYXNlKiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBib29sJiBzdWNjZXNzKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7Ci0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgp
IGNvbnN0OwotI2VuZGlmCi0KLSAgICBib29sIG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2U7Ci0g
ICAgRXhjZXB0aW9uQ29kZSYgbV9jb2RlOwotICAgIFN0cmluZyYgbV9lcnJvck1lc3NhZ2U7Ci0g
ICAgYm9vbCYgbV9zdWNjZXNzOwotfTsKLQotY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VU
YXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5
bmNocm9uaXplciogc3luY2hyb25pemVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBEYXRhYmFzZUNsb3NlVGFzayhkYiwgc3luY2hyb25pemVyKSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIERhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwotI2lmICFMT0df
RElTQUJMRUQKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsK
LSNlbmRpZgotfTsKLQotY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIDog
cHVibGljIERhdGFiYXNlVGFzayB7Ci1wdWJsaWM6Ci0gICAgLy8gVHJhbnNhY3Rpb24gdGFzayBp
cyBuZXZlciBzeW5jaHJvbm91cywgc28gbm8gJ3N5bmNocm9uaXplcicgcGFyYW1ldGVyLgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKHRyYW5zYWN0aW9uKSk7Ci0gICAg
fQotCi0gICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbi5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb1Bl
cmZvcm1UYXNrKCk7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZGVidWdUYXNrTmFtZSgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rp
b24+IG1fdHJhbnNhY3Rpb247Ci19OwotCi1jbGFzcyBEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5h
bWVzVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPERhdGFiYXNlVGFibGVOYW1lc1Rhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlVGFibGVOYW1lc1Rh
c2soZGIsIHN5bmNocm9uaXplciwgbmFtZXMpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRGF0
YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplcios
IFZlY3RvcjxTdHJpbmc+JiBuYW1lcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFz
aygpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFz
a05hbWUoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgVmVjdG9yPFN0cmluZz4mIG1fdGFibGVOYW1l
czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCi0KLSNlbmRpZiAvLyBEYXRhYmFzZVRhc2tfaApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YWJh
c2VUaHJlYWQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBdXRv
ZHJhaW5lZFBvb2wuaCIKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNl
VGFzay5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNs
aWVudC5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EYXRhYmFzZVRo
cmVhZDo6RGF0YWJhc2VUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQotICAgICwgbV90cmFu
c2FjdGlvbkNsaWVudChhZG9wdFB0cihuZXcgU1FMVHJhbnNhY3Rpb25DbGllbnQoKSkpCi0gICAg
LCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IoYWRvcHRQdHIobmV3IFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKSkpCi0gICAgLCBtX2NsZWFudXBTeW5jKDApCi17Ci0gICAgbV9zZWxmUmVmID0g
dGhpczsKLX0KLQotRGF0YWJhc2VUaHJlYWQ6On5EYXRhYmFzZVRocmVhZCgpCi17Ci0gICAgLy8g
RklYTUU6IEFueSBjbGVhbnVwIHJlcXVpcmVkIGhlcmU/ICBTaW5jZSB0aGUgdGhyZWFkIGRlbGV0
ZXMgaXRzZWxmIGFmdGVyIHJ1bm5pbmcgaXRzIGRldGFjaGVkIGNvdXJzZSwgSSBkb24ndCB0aGlu
ayBzby4gIExldHMgYmUgc3VyZS4KLSAgICBBU1NFUlQodGVybWluYXRpb25SZXF1ZXN0ZWQoKSk7
Ci19Ci0KLWJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KCkKLXsKLSAgICBNdXRleExvY2tlciBs
b2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0KLSAgICBpZiAobV90aHJlYWRJRCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNl
VGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsK
LQotICAgIHJldHVybiBtX3RocmVhZElEOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpyZXF1
ZXN0VGVybWluYXRpb24oRGF0YWJhc2VUYXNrU3luY2hyb25pemVyICpjbGVhbnVwU3luYykKLXsK
LSAgICBBU1NFUlQoIW1fY2xlYW51cFN5bmMpOwotICAgIG1fY2xlYW51cFN5bmMgPSBjbGVhbnVw
U3luYzsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlVGhyZWFkICVwIHdhcyBhc2tlZCB0
byB0ZXJtaW5hdGVcbiIsIHRoaXMpOwotICAgIG1fcXVldWUua2lsbCgpOwotfQotCi1ib29sIERh
dGFiYXNlVGhyZWFkOjp0ZXJtaW5hdGlvblJlcXVlc3RlZChEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqIHRhc2tTeW5jaHJvbml6ZXIpIGNvbnN0Ci17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGlmICh0
YXNrU3luY2hyb25pemVyKQotICAgICAgICB0YXNrU3luY2hyb25pemVyLT5zZXRIYXNDaGVja2Vk
Rm9yVGVybWluYXRpb24oKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhc2tTeW5jaHJvbml6
ZXIpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gbV9xdWV1ZS5raWxsZWQoKTsKLX0KLQotdm9pZCBE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCh2b2lkKiB2RGF0YWJhc2VUaHJlYWQp
Ci17Ci0gICAgRGF0YWJhc2VUaHJlYWQqIGRiVGhyZWFkID0gc3RhdGljX2Nhc3Q8RGF0YWJhc2VU
aHJlYWQqPih2RGF0YWJhc2VUaHJlYWQpOwotICAgIGRiVGhyZWFkLT5kYXRhYmFzZVRocmVhZCgp
OwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCi17Ci0gICAgewot
ICAgICAgICAvLyBXYWl0IGZvciBEYXRhYmFzZVRocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZS4K
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIlN0YXJ0ZWQgRGF0YWJhc2VUaHJlYWQgJXAiLCB0aGlzKTsKLSAg
ICB9Ci0KLSAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKLSAgICB3aGlsZSAoT3duUHRyPERhdGFi
YXNlVGFzaz4gdGFzayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkgewotICAgICAgICB0YXNr
LT5wZXJmb3JtVGFzaygpOwotICAgICAgICBwb29sLmN5Y2xlKCk7Ci0gICAgfQotCi0gICAgLy8g
Q2xlYW4gdXAgdGhlIGxpc3Qgb2YgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG9uIHRoaXMgZGF0
YWJhc2UgdGhyZWFkCi0gICAgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLT5zaHV0ZG93bigpOwot
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVh
ciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJl
ZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50KCkpOwotCi0gICAgLy8gQ2xvc2UgdGhl
IGRhdGFiYXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0
IGlmIGFueSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNr
IGFuZCB3ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4gYW4KLSAgICAvLyBpbmNvbnNpc3Rl
bnQgb3IgbG9ja2VkIHN0YXRlLgotICAgIGlmIChtX29wZW5EYXRhYmFzZVNldC5zaXplKCkgPiAw
KSB7Ci0gICAgICAgIC8vIEFzIHRoZSBjYWxsIHRvIGNsb3NlIHdpbGwgbW9kaWZ5IHRoZSBvcmln
aW5hbCBzZXQsIHdlIG11c3QgdGFrZSBhIGNvcHkgdG8gaXRlcmF0ZSBvdmVyLgotICAgICAgICBE
YXRhYmFzZVNldCBvcGVuU2V0Q29weTsKLSAgICAgICAgb3BlblNldENvcHkuc3dhcChtX29wZW5E
YXRhYmFzZVNldCk7Ci0gICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBvcGVuU2V0
Q29weS5lbmQoKTsKLSAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBvcGVu
U2V0Q29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+Y2xv
c2UoKTsKLSAgICB9Ci0KLSAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2Vz
IGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hU
aHJlYWQobV90aHJlYWRJRCk7Ci0KLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFu
dXBTeW5jID0gbV9jbGVhbnVwU3luYzsKLQotICAgIC8vIENsZWFyIHRoZSBzZWxmIHJlZnB0ciwg
cG9zc2libHkgcmVzdWx0aW5nIGluIGRlbGV0aW9uCi0gICAgbV9zZWxmUmVmID0gMDsKLQotICAg
IGlmIChjbGVhbnVwU3luYykgLy8gU29tZW9uZSB3YW50ZWQgdG8ga25vdyB3aGVuIHdlIHdlcmUg
ZG9uZSBjbGVhbmluZyB1cC4KLSAgICAgICAgY2xlYW51cFN5bmMtPnRhc2tDb21wbGV0ZWQoKTsK
LX0KLQotdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKiBk
YXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOwot
ICAgIEFTU0VSVChkYXRhYmFzZSk7Ci0gICAgQVNTRVJUKCFtX29wZW5EYXRhYmFzZVNldC5jb250
YWlucyhkYXRhYmFzZSkpOwotICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZChkYXRhYmFzZSk7Ci19
Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKiBk
YXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOwot
ICAgIEFTU0VSVChkYXRhYmFzZSk7Ci0gICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkgfHwgbV9v
cGVuRGF0YWJhc2VTZXQuY29udGFpbnMoZGF0YWJhc2UpKTsKLSAgICBtX29wZW5EYXRhYmFzZVNl
dC5yZW1vdmUoZGF0YWJhc2UpOwotfQotCi12b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hlZHVsZVRh
c2soUGFzc093blB0cjxEYXRhYmFzZVRhc2s+IHRhc2spCi17Ci0gICAgQVNTRVJUKCF0YXNrLT5o
YXNTeW5jaHJvbml6ZXIoKSB8fCB0YXNrLT5oYXNDaGVja2VkRm9yVGVybWluYXRpb24oKSk7Ci0g
ICAgbV9xdWV1ZS5hcHBlbmQodGFzayk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNjaGVk
dWxlSW1tZWRpYXRlVGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKLXsKLSAgICBB
U1NFUlQoIXRhc2stPmhhc1N5bmNocm9uaXplcigpIHx8IHRhc2stPmhhc0NoZWNrZWRGb3JUZXJt
aW5hdGlvbigpKTsKLSAgICBtX3F1ZXVlLnByZXBlbmQodGFzayk7Ci19Ci0KLWNsYXNzIFNhbWVE
YXRhYmFzZVByZWRpY2F0ZSB7Ci1wdWJsaWM6Ci0gICAgU2FtZURhdGFiYXNlUHJlZGljYXRlKGNv
bnN0IERhdGFiYXNlKiBkYXRhYmFzZSkgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKSB7IH0KLSAgICBi
b29sIG9wZXJhdG9yKCkoRGF0YWJhc2VUYXNrKiB0YXNrKSBjb25zdCB7IHJldHVybiB0YXNrLT5k
YXRhYmFzZSgpID09IG1fZGF0YWJhc2U7IH0KLXByaXZhdGU6Ci0gICAgY29uc3QgRGF0YWJhc2Uq
IG1fZGF0YWJhc2U7Ci19OwotCi12b2lkIERhdGFiYXNlVGhyZWFkOjp1bnNjaGVkdWxlRGF0YWJh
c2VUYXNrcyhEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgLy8gTm90ZSB0aGF0IHRoZSB0aHJl
YWQgbG9vcCBpcyBydW5uaW5nLCBzbyBzb21lIHRhc2tzIGZvciB0aGUgZGF0YWJhc2UKLSAgICAv
LyBtYXkgc3RpbGwgYmUgZXhlY3V0ZWQuIFRoaXMgaXMgdW5hdm9pZGFibGUuCi0gICAgU2FtZURh
dGFiYXNlUHJlZGljYXRlIHByZWRpY2F0ZShkYXRhYmFzZSk7Ci0gICAgbV9xdWV1ZS5yZW1vdmVJ
ZihwcmVkaWNhdGUpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oCShyZXZpc2lvbiAxMDk4NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgRGF0YWJhc2VUaHJlYWRfaAotI2RlZmluZSBE
YXRhYmFzZVRocmVhZF9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8
d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YWJhc2U7Ci1jbGFzcyBEYXRh
YmFzZVRhc2s7Ci1jbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7Ci1jbGFzcyBEb2N1bWVu
dDsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50OwotY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjsKLQotY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRhYmFzZVRocmVhZD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlVGhy
ZWFkKTsgfQotICAgIH5EYXRhYmFzZVRocmVhZCgpOwotCi0gICAgYm9vbCBzdGFydCgpOwotICAg
IHZvaWQgcmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51
cFN5bmMpOwotICAgIGJvb2wgdGVybWluYXRpb25SZXF1ZXN0ZWQoRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiB0YXNrU3luY2hyb25pemVyID0gMCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNjaGVkdWxl
VGFzayhQYXNzT3duUHRyPERhdGFiYXNlVGFzaz4pOwotICAgIHZvaWQgc2NoZWR1bGVJbW1lZGlh
dGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNrPik7IC8vIFRoaXMganVzdCBhZGRzIHRoZSB0
YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgLSB0aGUgY2FsbGVyIG5lZWRzIHRvIGJlIGV4
dHJlbWVseSBjYXJlZnVsIG5vdCB0byBjcmVhdGUgZGVhZGxvY2tzIHdoZW4gd2FpdGluZyBmb3Ig
Y29tcGxldGlvbi4KLSAgICB2b2lkIHVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKik7
Ci0KLSAgICB2b2lkIHJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSopOwotICAgIHZvaWQgcmVj
b3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRo
cmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsgfQotCi0gICAgU1FMVHJhbnNhY3Rpb25DbGll
bnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNsaWVudC5nZXQo
KTsgfQotICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KLQotcHJpdmF0
ZToKLSAgICBEYXRhYmFzZVRocmVhZCgpOwotCi0gICAgc3RhdGljIHZvaWQgZGF0YWJhc2VUaHJl
YWRTdGFydCh2b2lkKik7Ci0gICAgdm9pZCBkYXRhYmFzZVRocmVhZCgpOwotCi0gICAgTXV0ZXgg
bV90aHJlYWRDcmVhdGlvbk11dGV4OwotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsK
LSAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fc2VsZlJlZjsKLQotICAgIE1lc3NhZ2VRdWV1
ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7Ci0KLSAgICAvLyBUaGlzIHNldCBrZWVwcyB0cmFjayBv
ZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhhdCBoYXZlIGJlZW4gdXNlZCBvbiB0aGlzIHRocmVhZC4K
LSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+IERhdGFiYXNlU2V0OwotICAg
IERhdGFiYXNlU2V0IG1fb3BlbkRhdGFiYXNlU2V0OwotCi0gICAgT3duUHRyPFNRTFRyYW5zYWN0
aW9uQ2xpZW50PiBtX3RyYW5zYWN0aW9uQ2xpZW50OwotICAgIE93blB0cjxTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0gICAgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBtX2NsZWFudXBTeW5jOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBEYXRhYmFzZVRo
cmVhZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
CShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJh
Y2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCi0KLSNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotI2luY2x1ZGUg
IkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRhdGFiYXNl
Q29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk9yaWdp
blF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCi0jaW5j
bHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgV2ViQ29yZTo6T3JpZ2luUXVvdGFN
YW5hZ2VyJiBvcmlnaW5RdW90YU1hbmFnZXIoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
V2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyLCBxdW90YU1hbmFnZXIsICgpKTsKLSAgICByZXR1
cm4gcXVvdGFNYW5hZ2VyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBEYXRh
YmFzZVRyYWNrZXIqIHN0YXRpY1RyYWNrZXIgPSAwOwotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6
aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCi17Ci0gICAgQVNT
RVJUKCFzdGF0aWNUcmFja2VyKTsKLSAgICBpZiAoc3RhdGljVHJhY2tlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3RhdGljVHJhY2tlciA9IG5ldyBEYXRhYmFzZVRyYWNrZXIoZGF0YWJhc2VQ
YXRoKTsKLX0KLQotRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKQot
ewotICAgIGlmICghc3RhdGljVHJhY2tlcikKLSAgICAgICAgc3RhdGljVHJhY2tlciA9IG5ldyBE
YXRhYmFzZVRyYWNrZXIoIiIpOwotCi0gICAgcmV0dXJuICpzdGF0aWNUcmFja2VyOwotfQotCi1E
YXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0
aCkKLSAgICA6IG1fY2xpZW50KDApCi17Ci0gICAgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRh
dGFiYXNlUGF0aCk7Ci0gICAgCi0gICAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVW
RlMoKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwot
ICAgIHBvcHVsYXRlT3JpZ2lucygpOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0
YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpOwotICAgIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gcGF0aC5pc29sYXRlZENv
cHkoKTsKLX0KLQotU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRo
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRD
b3B5KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgo
KSBjb25zdAotewotICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZp
bGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzb2xhdGVkQ29weSgpLCAiRGF0
YWJhc2VzLmRiIik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFi
YXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0
aCgpOwotICAgIGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3Rz
KGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXaGF0IGRvIGRvIGhlcmU/Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4g
ZGF0YWJhc2VQYXRoICVzLiIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7
Ci0gICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikpIHsKLSAgICAgICAg
aWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3Jp
Z2luIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHF1b3RhIElOVEVHRVIgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBhbmQgaGVy
ZQotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFibGUi
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkRh
dGFiYXNlcyIpKSB7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JF
QVRFIFRBQkxFIERhdGFiYXNlcyAoZ3VpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1F
TlQsIG9yaWdpbiBURVhULCBuYW1lIFRFWFQsIGRpc3BsYXlOYW1lIFRFWFQsIGVzdGltYXRlZFNp
emUgSU5URUdFUiwgcGF0aCBURVhUKTsiKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGFuZCBo
ZXJlCi0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgRGF0YWJhc2VzIHRh
YmxlIik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5F
c3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSkKLXsKLSAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKTsKLSAgICBQcm9wb3NlZERhdGFiYXNlIGRldGFpbHM7Ci0KLSAgICB1bnNp
Z25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQ7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3Rh
TWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLQotICAg
ICAgICBpZiAoIWNhbkNyZWF0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5h
bWUpOwotCi0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGltbWluZW50bHkgb3BlbmluZyBhIGRhdGFi
YXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4sIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBp
cyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIKLSAgICAgICAgLy8gYnkgZmV0Y2hp
bmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LgotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNh
Z2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwotCi0gICAgICAgIC8vIElmIGEgZGF0
YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWluIGVzdGltYXRlZCBzaXpl
IGFuZCBzYXkgaXQncyBPSy4KLSAgICAgICAgaWYgKGhhc0VudHJ5Rm9yRGF0YWJhc2Uob3JpZ2lu
LCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIElmIHRoZSBk
YXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9uLgotICAgICAgICByZXF1aXJlbWVu
dCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgICAgIGlmIChyZXF1aXJl
bWVudCA8IHVzYWdlKSB7Ci0gICAgICAgICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4s
IG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiB0aGUgZXN0aW1hdGVkIHNp
emUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdywgZG9uJ3QgYWxsb3cgY3JlYXRpb24u
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9M
b2NrKG9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBHaXZl
IHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGluY3JlYXNlIHRoZSBxdW90YS4KLSAgICAg
ICAgLy8gVGVtcG9yYXJpbHkgbWFrZSB0aGUgZGV0YWlscyBvZiB0aGUgcHJvcG9zZWQgZGF0YWJh
c2UgYXZhaWxhYmxlLCBzbyB0aGUgY2xpZW50IGNhbiBnZXQgYXQgdGhlbS4KLSAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFsbHkganVzdCBwYXNzIHRoZSBkZXRhaWxzIGludG8gdGhpcyBj
YWxsLCByYXRoZXIgdGhhbiB1c2luZyBtX3Byb3Bvc2VkRGF0YWJhc2VzLgotICAgICAgICBkZXRh
aWxzID0gUHJvcG9zZWREYXRhYmFzZShvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBEYXRhYmFzZURl
dGFpbHMobmFtZS5pc29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVz
dGltYXRlZFNpemUsIDApKTsKLSAgICAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5hZGQoJmRldGFp
bHMpOwotICAgIH0KLSAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQ7IHdl
IGRvbid0IGtub3cgd2hhdCB0aGV5J2xsIGRvLgotICAgIERhdGFiYXNlQ29udGV4dDo6ZnJvbShj
b250ZXh0KS0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUpOwotCi0gICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0KLSAgICBtX3Byb3Bvc2VkRGF0YWJhc2Vz
LnJlbW92ZSgmZGV0YWlscyk7Ci0KLSAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQgbm93
LCBhbGxvdyBpdHMgY3JlYXRpb24uCi0gICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3Jp
Z2luTm9Mb2NrKG9yaWdpbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZG9uZUNyZWF0
aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAg
ICBBU1NFUlQobV9xdW90YU1hcCk7Ci0gICAgcmV0dXJuIG1fcXVvdGFNYXAtPmNvbnRhaW5zKG9y
aWdpbik7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbihTZWN1
cml0eU9yaWdpbiogb3JpZ2luKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOwotICAgIHJldHVybiBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhvcmlnaW4p
OwotfQotCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzZShTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKLXsKLSAg
ICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIG9wZW5UcmFja2VyRGF0
YWJhc2UoZmFsc2UpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNF
TEVDVCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7Ci0K
LSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJ
ZGVudGlmaWVyKCkpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkYXRhYmFzZUlkZW50aWZp
ZXIpOwotCi0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OwotfQot
Ci11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJh
c2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgLy8gVGhlIG1heGlt
dW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwg
bWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCi0gICAgLy8gcGx1cyB0
aGUgY3VycmVudCB1c2FnZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UKLSAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5h
Z2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotICAgIFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICByZXR1
cm4gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSAtIG9yaWdpblF1b3RhTWFuYWdlcigpLmRp
c2tVc2FnZShvcmlnaW4pICsgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShk
YXRhYmFzZS0+ZmlsZU5hbWUoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFz
ZUNoYW5nZWQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgTG9ja2VyPE9yaWdp
blF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsK
LSAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5tYXJrRGF0YWJhc2UoZGF0YWJhc2UpOwotfQotCi12
b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25z
dCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotewotICAgIFZlY3RvcjxSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4gPiBvcGVuRGF0YWJhc2VzOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLQotICAg
ICAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgICAgIGlmICghbmFtZU1hcCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRi
TmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoRGF0YWJhc2VOYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFt
ZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7Ci0gICAgICAgICAgICBE
YXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+c2Vjb25kOwotICAgICAgICAg
ICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+
ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNl
dEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNl
dEl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSBjb250ZXh0KQotICAgICAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFw
cGVuZCgqZGJTZXRJdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRh
YmFzZXNFbmRJdCA9IG9wZW5EYXRhYmFzZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8UmVmUHRy
PEFic3RyYWN0RGF0YWJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRhYmFzZXNJdCA9IG9w
ZW5EYXRhYmFzZXMuYmVnaW4oKTsgb3BlbkRhdGFiYXNlc0l0ICE9IG9wZW5EYXRhYmFzZXNFbmRJ
dDsgKytvcGVuRGF0YWJhc2VzSXQpCi0gICAgICAgICgqb3BlbkRhdGFiYXNlc0l0KS0+aW50ZXJy
dXB0KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbikgY29uc3QKLXsKLSAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBw
ZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29sYXRl
ZENvcHkoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci19Ci0KLVN0cmluZyBEYXRh
YmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQotewotICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgQVNTRVJUKCFvcmlnaW5R
dW90YU1hbmFnZXIoKS50cnlMb2NrKCkpOwotCi0gICAgZm9yIChIYXNoU2V0PFByb3Bvc2VkRGF0
YWJhc2UqPjo6aXRlcmF0b3IgaXRlciA9IG1fcHJvcG9zZWREYXRhYmFzZXMuYmVnaW4oKTsgaXRl
ciAhPSBtX3Byb3Bvc2VkRGF0YWJhc2VzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIGlmICgoKml0
ZXIpLT5zZWNvbmQubmFtZSgpID09IG5hbWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdp
bikpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgb3JpZ2luSWRl
bnRpZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7Ci0gICAgU3RyaW5nIG9yaWdp
blBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhl
IHBhdGggZm9yIHRoaXMgU2VjdXJpdHlPcmlnaW4gZXhpc3RzCi0gICAgaWYgKGNyZWF0ZUlmTm90
RXhpc3RzICYmICFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZURpcmVjdG9yeUV4aXN0
cyhvcmlnaW5QYXRoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gU2VlIGlm
IHdlIGhhdmUgYSBwYXRoIGZvciB0aGlzIGRhdGFiYXNlIHlldAotICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJF
IG9yaWdpbj0/IEFORCBuYW1lPT87Iik7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgy
LCBuYW1lKTsKLQotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotCi0gICAgaWYg
KHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVt
OjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApKTsKLSAgICBpZiAoIWNyZWF0ZUlmTm90RXhpc3RzKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgZmlsZW5hbWUgZnJvbSBEYXRhYmFzZSBU
cmFja2VyIGZvciBvcmlnaW4gJXMsIG5hbWUgJXMiLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCku
ZGF0YSgpLCBuYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIH0KLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKLQotICAgIFN0cmluZyBmaWxlTmFtZSA9
IFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2Uob3JpZ2luUGF0aCwg
bmFtZSwgb3JpZ2luSWRlbnRpZmllciwgJm1fZGF0YWJhc2UpOwotICAgIGlmICghYWRkRGF0YWJh
c2Uob3JpZ2luLCBuYW1lLCBmaWxlTmFtZSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIC8vIElmIHRoaXMgb3JpZ2luJ3MgcXVvdGEgaXMgYmVpbmcgdHJhY2tlZCAob3BlbiBoYW5k
bGUgdG8gYSBkYXRhYmFzZSBpbiB0aGlzIG9yaWdpbiksIGFkZCB0aGlzIG5ldyBkYXRhYmFzZQot
ICAgIC8vIHRvIHRoZSBxdW90YSBtYW5hZ2VyIG5vdwotICAgIFN0cmluZyBmdWxsRmlsZVBhdGgg
PSBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBh
dGgsIGZpbGVOYW1lKTsKLSAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2lu
KG9yaWdpbikpCi0gICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdp
biwgbmFtZSwgZnVsbEZpbGVQYXRoKTsKLQotICAgIHJldHVybiBmdWxsRmlsZVBhdGg7Ci19Ci0K
LVN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQot
ewotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7Ci0KLSAgICByZXR1cm4gZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhvcmlnaW4s
IG5hbWUsIGNyZWF0ZUlmTm90RXhpc3RzKS5pc29sYXRlZENvcHkoKTsKLX0KLQotdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKLSAgICBpZiAobV9xdW90YU1hcCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9xdW90YU1hcCA9IGFkb3B0UHRyKG5ldyBRdW90YU1hcCk7Ci0KLSAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKGZhbHNlKTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IlNFTEVDVCBvcmlnaW4sIHF1b3RhIEZST00gT3JpZ2lucyIpOwotCi0gICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
bnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
UmVzdWx0Um93KSB7Ci0gICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCkpOwotICAgICAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLmdldCgpLT5pc29s
YXRlZENvcHkoKSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpKTsKLSAgICB9Ci0KLSAgICBp
ZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7Ci19Ci0KLXZvaWQgRGF0
YWJhc2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJl
c3VsdCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
LSAgICBBU1NFUlQobV9xdW90YU1hcCk7Ci0gICAgY29weUtleXNUb1ZlY3RvcigqbV9xdW90YU1h
cCwgcmVzdWx0KTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JP
cmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dFZlY3RvcikKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAg
IG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87
Iik7Ci0KLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwotCi0gICAgaW50IHJlc3VsdDsKLSAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmVzdWx0VmVj
dG9yLmFwcGVuZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0KLSAgICBpZiAocmVzdWx0
ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmll
dmUgYWxsIGRhdGFiYXNlIG5hbWVzIGZvciBvcmlnaW4gJXMiLCBvcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VO
YW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVz
dWx0VmVjdG9yKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHRlbXA7Ci0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgaWYgKCFk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbiwgdGVtcCkpCi0gICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0
ZXIgPSB0ZW1wLmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytpdGVyKQotICAgICAgICBy
ZXN1bHRWZWN0b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotRGF0YWJhc2VEZXRhaWxzIERhdGFiYXNlVHJhY2tlcjo6ZGV0YWlsc0Zvck5hbWVB
bmRPcmlnaW4oY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewot
ICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyID0gb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KTsKLSAgICBTdHJpbmcgZGlzcGxheU5hbWU7Ci0gICAgaW50NjRfdCBleHBlY3RlZFVzYWdlOwot
Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJk
KTsKLQotICAgICAgICBmb3IgKEhhc2hTZXQ8UHJvcG9zZWREYXRhYmFzZSo+OjppdGVyYXRvciBp
dGVyID0gbV9wcm9wb3NlZERhdGFiYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fcHJvcG9zZWREYXRh
YmFzZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGlmICgoKml0ZXIpLT5zZWNvbmQubmFt
ZSgpID09IG5hbWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdpbikpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoKCppdGVyKS0+c2Vjb25kLnRocmVhZCgpID09IGN1cnJlbnRUaHJlYWQo
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgqaXRlciktPnNlY29uZDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKLSAgICAgICAgaWYgKCFt
X2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygp
OwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8g
QU5EIG5hbWU9PyIpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKLSAgICAgICAgICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoKTsKLQotICAgICAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgyLCBuYW1lKTsKLQotICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKQotICAgICAgICAgICAg
cmV0dXJuIERhdGFiYXNlRGV0YWlscygpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0Um93KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJldHJpZXZpbmcgZGV0YWls
cyBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIGZyb20gdHJhY2tlciBkYXRhYmFzZSIsIG5h
bWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIERhdGFiYXNlRGV0YWlscygpOwotICAgICAgICB9Ci0gICAgICAgIGRp
c3BsYXlOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7Ci0gICAgICAgIGV4cGVjdGVk
VXNhZ2UgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IERhdGFiYXNlRGV0YWlscyhuYW1lLCBkaXNwbGF5TmFtZSwgZXhwZWN0ZWRVc2FnZSwgdXNhZ2VG
b3JEYXRhYmFzZShuYW1lLCBvcmlnaW4pKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNl
dERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSkKLXsKLSAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCk7Ci0gICAgaW50NjRfdCBndWlkID0gMDsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0cnVl
KTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZ3VpZCBGUk9NIERh
dGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7Ci0gICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MiwgbmFtZSk7Ci0KLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdFJvdykKLSAgICAgICAgZ3VpZCA9IHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQ2NCgwKTsKLSAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKLQotICAgIGlmIChndWlkID09
IDApIHsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciB0byBkZXRlcm1pbmcgZXhpc3RlbmNlIG9mIGRhdGFiYXNlICVzIGlu
IG9yaWdpbiAlcyBpbiB0cmFja2VyIGRhdGFiYXNlIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gVGhpcyBjYXNlIHNob3VsZCBuZXZlciBvY2N1ciAtIHdlIHNob3VsZCBuZXZlciBiZSBz
ZXR0aW5nIGRhdGFiYXNlIGRldGFpbHMgZm9yIGEgZGF0YWJhc2UgdGhhdCBkb2Vzbid0IGFscmVh
ZHkgZXhpc3QgaW4gdGhlIHRyYWNrZXIKLSAgICAgICAgICAgIC8vIEJ1dCBzaW5jZSB0aGUgdHJh
Y2tlciBmaWxlIGlzIGFuIGV4dGVybmFsIHJlc291cmNlIG5vdCB1bmRlciBjb21wbGV0ZSBjb250
cm9sIG9mIG91ciBjb2RlLCBpdCdzIHNvbWV3aGF0IGludmFsaWQgdG8gbWFrZSB0aGlzIGFuIEFT
U0VSVCBjYXNlCi0gICAgICAgICAgICAvLyBTbyB3ZSdsbCBwcmludCBhbiBlcnJvciBpbnN0ZWFk
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyaWV2ZSBndWlkIGZvciBkYXRh
YmFzZSAlcyBpbiBvcmlnaW4gJXMgZnJvbSB0aGUgdHJhY2tlciBkYXRhYmFzZSAtIGl0IGlzIGlu
dmFsaWQgdG8gc2V0IGRhdGFiYXNlIGRldGFpbHMgb24gYSBkYXRhYmFzZSB0aGF0IGRvZXNuJ3Qg
YWxyZWFkeSBleGlzdCBpbiB0aGUgdHJhY2tlciIsCi0gICAgICAgICAgICAgICAgICAgICAgIG5h
bWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgdXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgRGF0YWJhc2VzIFNFVCBkaXNwbGF5TmFt
ZT0/LCBlc3RpbWF0ZWRTaXplPT8gV0hFUkUgZ3VpZD0/Iik7Ci0gICAgaWYgKHVwZGF0ZVN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybjsKLQotICAgIHVw
ZGF0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkaXNwbGF5TmFtZSk7Ci0gICAgdXBkYXRlU3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBlc3RpbWF0ZWRTaXplKTsKLSAgICB1cGRhdGVTdGF0ZW1lbnQuYmlu
ZEludDY0KDMsIGd1aWQpOwotCi0gICAgaWYgKHVwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
UmVzdWx0RG9uZSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgZGV0YWls
cyBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3Jp
Z2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeURh
dGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRy
YWNrZXI6OnVzYWdlRm9yRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdp
biogb3JpZ2luKQotewotICAgIFN0cmluZyBwYXRoID0gZnVsbFBhdGhGb3JEYXRhYmFzZShvcmln
aW4sIG5hbWUsIGZhbHNlKTsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
cGF0aCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJh
Y3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgaWYgKCFkYXRhYmFzZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1f
b3BlbkRhdGFiYXNlTWFwR3VhcmQpOwotCi0gICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXAp
Ci0gICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcCA9IGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9y
aWdpbk1hcCk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZp
ZXIoKSk7Ci0gICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNl
TWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgICAgICBpZiAoIW5hbWVN
YXApIHsKLSAgICAgICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwOwotICAgICAg
ICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnNldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+
aXNvbGF0ZWRDb3B5KCksIG5hbWVNYXApOwotICAgICAgICB9Ci0KLSAgICAgICAgRGF0YWJhc2VT
ZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgICAgICBpZiAoIWRhdGFi
YXNlU2V0KSB7Ci0gICAgICAgICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldDsKLSAg
ICAgICAgICAgIG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBkYXRhYmFzZVNldCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhYmFzZVNldC0+YWRkKGRhdGFiYXNlKTsKLQotICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0
YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOwotCi0g
ICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmln
aW5RdW90YU1hbmFnZXIoKSk7Ci0gICAgICAgIGlmICghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJh
Y2tzT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKSkgewotICAgICAgICAgICAgb3Jp
Z2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkp
OwotICAgICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2UoZGF0YWJhc2Ut
PnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCksIGRhdGFiYXNl
LT5maWxlTmFtZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tE
YXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFi
YXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKLX0K
LQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFi
YXNlKiBkYXRhYmFzZSkKLXsKLSAgICBpZiAoIWRhdGFiYXNlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0
YWJhc2VNYXBHdWFyZCk7Ci0KLSAgICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgewotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigp
KTsKLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAt
PmdldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgICAgIGlmICghbmFtZU1hcCkg
ewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFw
LT5nZXQobmFtZSk7Ci0gICAgICAgIGlmICghZGF0YWJhc2VTZXQpIHsKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZGF0YWJhc2VTZXQtPnJlbW92ZShkYXRhYmFzZSk7Ci0KLSAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJSZW1vdmVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmlu
Z0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOwotCi0gICAgICAgIGlmICgh
ZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBu
YW1lTWFwLT5yZW1vdmUobmFtZSk7Ci0gICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKLQotICAg
ICAgICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigp
KTsKLSAgICAgICAgZGVsZXRlIG5hbWVNYXA7Ci0KLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3Rh
TWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAg
ICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkucmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9y
aWdpbigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJh
c2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxS
ZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gPiogZGF0YWJhc2VzKQotewotICAgIE11dGV4TG9ja2Vy
IG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0gICAgaWYgKCFt
X29wZW5EYXRhYmFzZU1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGF0YWJhc2VOYW1lTWFw
KiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChvcmlnaW4pOwotICAgIGlmICghbmFt
ZU1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0g
bmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VTZXQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJl
Z2luKCk7IGl0ICE9IGRhdGFiYXNlU2V0LT5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YWJhc2Vz
LT5hZGQoKml0KTsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNh
Z2VGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NFUlQo
IW9yaWdpblF1b3RhTWFuYWdlcigpLnRyeUxvY2soKSk7Ci0KLSAgICAvLyBVc2UgdGhlIE9yaWdp
blF1b3RhTWFuYWdlciBtZWNoYW5pc20gdG8gY2FsY3VsYXRlIHRoZSB1c2FnZQotICAgIGlmIChv
cmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAgICAgcmV0dXJu
IG9yaWdpblF1b3RhTWFuYWdlcigpLmRpc2tVc2FnZShvcmlnaW4pOwotCi0gICAgLy8gSWYgdGhl
IE9yaWdpblF1b3RhTWFuYWdlciBkb2Vzbid0IHRyYWNrIHRoaXMgb3JpZ2luIGFscmVhZHksIHBy
aW1lIGl0IHRvIGRvIHNvCi0gICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4ob3Jp
Z2luKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIGRhdGFiYXNlTmFtZXNGb3JP
cmlnaW5Ob0xvY2sob3JpZ2luLCBuYW1lcyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERh
dGFiYXNlKG9yaWdpbiwgbmFtZXNbaV0sIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2lu
LCBuYW1lc1tpXSwgZmFsc2UpKTsKLQotICAgIGlmICghb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJh
Y2tzT3JpZ2luKG9yaWdpbikpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBvcmlnaW5R
dW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25n
IERhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
LXsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBM
b2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFN
YW5hZ2VyKCkpOwotICAgIHJldHVybiB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwotfQot
Ci11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdpbk5vTG9j
ayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJk
LnRyeUxvY2soKSk7Ci0gICAgQVNTRVJUKG1fcXVvdGFNYXApOwotICAgIHJldHVybiBtX3F1b3Rh
TWFwLT5nZXQob3JpZ2luKTsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tl
cjo6cXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBNdXRleExv
Y2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICByZXR1cm4gcXVvdGFGb3JP
cmlnaW5Ob0xvY2sob3JpZ2luKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3Rh
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLQotICAgIGlmIChx
dW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pID09IHF1b3RhKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBvcGVuVHJhY2tlckRhdGFiYXNlKHRydWUpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3F1b3RhTWFwLT5jb250YWlucyhv
cmlnaW4pKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOwotICAgICAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVy
KCkpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBxdW90YSk7Ci0KLSAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0aGUgdHJh
Y2tlciIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCAiVVBEQVRFIE9yaWdpbnMgU0VUIHF1b3RhPT8gV0hFUkUgb3JpZ2luPT8iKTsK
LSAgICAgICAgYm9vbCBlcnJvciA9IHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2s7
Ci0gICAgICAgIGlmICghZXJyb3IpIHsKLSAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50NjQo
MSwgcXVvdGEpOwotICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkpOwotCi0gICAgICAgICAgICBlcnJvciA9ICFzdGF0ZW1lbnQuZXhl
Y3V0ZUNvbW1hbmQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnJvcikKLSNpZiBPUyhX
SU5ET1dTKQotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHF1b3RhICVJNjR1
IGluIHRyYWNrZXIgZGF0YWJhc2UgZm9yIG9yaWdpbiAlcyIsIHF1b3RhLCBvcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlCi0gICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBzZXQgcXVvdGEgJWxsdSBpbiB0cmFja2VyIGRhdGFiYXNlIGZvciBv
cmlnaW4gJXMiLCBxdW90YSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRh
dGEoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRv
IHVwZGF0ZSB0aGUgcXVvdGEgaW4gbWVtb3J5IGlmIHdlIGZhaWxlZCB0byB1cGRhdGUgaXQgb24g
ZGlzaz8KLSAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgcXVvdGEp
OwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW4ob3JpZ2luKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmFkZERhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBwYXRoKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAg
QVNTRVJUKG1fcXVvdGFNYXApOwotICAgIG9wZW5UcmFja2VyRGF0YWJhc2UodHJ1ZSk7Ci0gICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBOZXcgZGF0YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVkIHVudGlsIHRoZSBvcmlnaW4gaGFz
IGJlZW4gZXN0YWJsaXNoZWQKLSAgICBBU1NFUlQoaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKSk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNF
UlQgSU5UTyBEYXRhYmFzZXMgKG9yaWdpbiwgbmFtZSwgcGF0aCkgVkFMVUVTICg/LCA/LCA/KTsi
KTsKLQotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwotICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgzLCBwYXRoKTsKLQotICAgIGlmICghc3RhdGVtZW50LmV4ZWN1
dGVDb21tYW5kKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWRkIGRhdGFiYXNl
ICVzIHRvIG9yaWdpbiAlczogJXNcbiIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIG9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJh
c2VzKCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IG9yaWdpbnNDb3B5
OwotICAgIG9yaWdpbnMob3JpZ2luc0NvcHkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG9yaWdpbnNDb3B5LnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGVPcmlnaW4ob3JpZ2lu
c0NvcHlbaV0uZ2V0KCkpOwotfQotCi0vLyBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxp
dHkgdG8gbWFrZSBzdXJlIHRoYXQgbm9ib2R5IGlzIHRyeWluZyB0byBjcmVhdGUsIGRlbGV0ZSwg
b3Blbiwgb3IgY2xvc2UgZGF0YWJhc2VzIGluIHRoaXMgb3JpZ2luIHdoaWxlIHRoZSBkZWxldGlv
biBpcwotLy8gdGFraW5nIHBsYWNlLgotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdp
bihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNl
TmFtZXM7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFz
ZUd1YXJkKTsKLSAgICAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7Ci0gICAgICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAoIWRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCBkYXRhYmFzZU5h
bWVzKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlzdCBv
ZiBkYXRhYmFzZSBuYW1lcyBmb3Igb3JpZ2luICVzIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFjYW5EZWxldGVPcmlnaW4ob3JpZ2luKSkgewotICAgICAgICAgICAg
TE9HX0VSUk9SKCJUcmllZCB0byBkZWxldGUgYW4gb3JpZ2luICglcykgd2hpbGUgZWl0aGVyIGNy
ZWF0aW5nIGRhdGFiYXNlIGluIGl0IG9yIGFscmVhZHkgZGVsZXRpbmcgaXQiLCBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVj
b3JkRGVsZXRpbmdPcmlnaW4ob3JpZ2luKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkcm9wIHRoZSBs
b2NrIGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0
YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2suCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZp
bGUob3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldKSkgewotICAgICAgICAgICAgLy8gRXZlbiBpZiB0
aGUgZmlsZSBjYW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVsZXRlIHRoZSBy
ZXN0LCBkb24ndCByZXR1cm4gZWFybHkgaGVyZS4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBkYXRhYmFz
ZU5hbWVzW2ldLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFz
Y2lpKCkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAgIGRvbmVEZWxldGlu
Z09yaWdpbihvcmlnaW4pOwotCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOwotICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJvbSBv
cmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
Ci0KLSAgICAgICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBkYXRhYmFzZXMgZnJv
bSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgb3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBPcmlnaW5zIFdIRVJFIG9yaWdpbj0/Iik7Ci0gICAgICAgIGlmIChvcmlnaW5TdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAlcyBmcm9tIHRyYWNrZXIiLCBv
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG9yaWdpblN0YXRlbWVudC5iaW5k
VGV4dCgxLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLQotICAgICAgICBpZiAoIW9y
aWdpblN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGRhdGFiYXNlcyBmcm9tIG9yaWdpbiAlcyBm
cm9tIHRyYWNrZXIiLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3Rvcnkob3JpZ2luUGF0aChvcmln
aW4pKTsKLQotICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpblBvc3NpYmx5TGFz
dFJlZmVyZW5jZSA9IG9yaWdpbjsKLSAgICAgICAgbV9xdW90YU1hcC0+cmVtb3ZlKG9yaWdpbik7
Ci0KLSAgICAgICAgewotICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVv
dGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAgICAgICAgIG9yaWdp
blF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihvcmlnaW4pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4sIGRvIHNvbWUgYWRkaXRpb25hbCBk
ZWxldGlvbi4KLSAgICAgICAgaWYgKG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgICAgICAgICAgbV9kYXRhYmFzZS5j
bG9zZSgpOwotICAgICAgICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUo
dHJhY2tlckRhdGFiYXNlUGF0aCgpKTsKLSAgICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVs
ZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAgICAgICAgIG1fY2xpZW50LT5k
aXNwYXRjaERpZE1vZGlmeU9yaWdpbihvcmlnaW4pOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAg
bV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZU5hbWVz
W2ldKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEYXRh
YmFzZVRyYWNrZXI6OmNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2Nr
KCkpOwotICAgIC8vIENhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIHdoaWxlIHNvbWVvbmUgZWxzZSBp
cyBkZWxldGluZyBpdDsgdGhlcmUncyBhIHJpc2sgb2YgbGVhdmluZyB1bnRyYWNrZWQgZGF0YWJh
c2UgZGVicmlzIG9uIHRoZSBkaXNrLgotICAgIHJldHVybiAhZGVsZXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpICYmICFkZWxldGluZ09yaWdpbihvcmlnaW4pOwotfQotCi12b2lkIERhdGFiYXNl
VHJhY2tlcjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9j
aygpKTsKLSAgICBOYW1lQ291bnRNYXAqIG5hbWVNYXAgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3Jp
Z2luKTsKLSAgICBpZiAoIW5hbWVNYXApIHsKLSAgICAgICAgbmFtZU1hcCA9IG5ldyBOYW1lQ291
bnRNYXAoKTsKLSAgICAgICAgbV9iZWluZ0NyZWF0ZWQuc2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5
KCksIG5hbWVNYXApOwotICAgIH0KLSAgICBsb25nIGNvdW50ID0gbmFtZU1hcC0+Z2V0KG5hbWUp
OwotICAgIG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBjb3VudCArIDEpOwotfQot
Ci12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVCghbV9kYXRhYmFz
ZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgTmFtZUNvdW50TWFwKiBuYW1lTWFwID0gbV9iZWluZ0Ny
ZWF0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgaWYgKG5hbWVNYXApIHsKLSAgICAgICAgbG9uZyBjb3Vu
dCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICAgICAgQVNTRVJUKGNvdW50ID4gMCk7Ci0gICAg
ICAgIGlmIChjb3VudCA8PSAxKSB7Ci0gICAgICAgICAgICBuYW1lTWFwLT5yZW1vdmUobmFtZSk7
Ci0gICAgICAgICAgICBpZiAobmFtZU1hcC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
bV9iZWluZ0NyZWF0ZWQucmVtb3ZlKG9yaWdpbik7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5h
bWVNYXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmFtZU1h
cC0+c2V0KG5hbWUsIGNvdW50IC0gMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVChmYWxz
ZSk7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpjcmVhdGluZ0RhdGFiYXNlKFNlY3VyaXR5
T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fZGF0
YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIE5hbWVDb3VudE1hcCogbmFtZU1hcCA9IG1fYmVp
bmdDcmVhdGVkLmdldChvcmlnaW4pOwotICAgIHJldHVybiBuYW1lTWFwICYmIG5hbWVNYXAtPmdl
dChuYW1lKTsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKFNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQo
IW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIHJldHVybiAhY3JlYXRpbmdEYXRhYmFz
ZShvcmlnaW4sIG5hbWUpICYmICFkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci19Ci0K
LXZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJh
c2VHdWFyZC50cnlMb2NrKCkpOwotICAgIEFTU0VSVChjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4s
IG5hbWUpKTsKLSAgICBOYW1lU2V0KiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdp
bik7Ci0gICAgaWYgKCFuYW1lU2V0KSB7Ci0gICAgICAgIG5hbWVTZXQgPSBuZXcgTmFtZVNldCgp
OwotICAgICAgICBtX2JlaW5nRGVsZXRlZC5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgbmFt
ZVNldCk7Ci0gICAgfQotICAgIEFTU0VSVCghbmFtZVNldC0+Y29udGFpbnMobmFtZSkpOwotICAg
IG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKLX0KLQotdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkp
OwotICAgIE5hbWVTZXQqIG5hbWVTZXQgPSBtX2JlaW5nRGVsZXRlZC5nZXQob3JpZ2luKTsKLSAg
ICBpZiAobmFtZVNldCkgewotICAgICAgICBBU1NFUlQobmFtZVNldC0+Y29udGFpbnMobmFtZSkp
OwotICAgICAgICBuYW1lU2V0LT5yZW1vdmUobmFtZSk7Ci0gICAgICAgIGlmIChuYW1lU2V0LT5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fYmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW4pOwot
ICAgICAgICAgICAgZGVsZXRlIG5hbWVTZXQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRl
bGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgTmFtZVNl
dCogbmFtZVNldCA9IG1fYmVpbmdEZWxldGVkLmdldChvcmlnaW4pOwotICAgIHJldHVybiBuYW1l
U2V0ICYmIG5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpOwotfQotCi1ib29sIERhdGFiYXNlVHJhY2tl
cjo6Y2FuRGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCi17Ci0gICAgQVNTRVJU
KCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICByZXR1cm4gIShkZWxldGluZ09yaWdp
bihvcmlnaW4pIHx8IG1fYmVpbmdDcmVhdGVkLmdldChvcmlnaW4pKTsKLX0KLQotYm9vbCBEYXRh
YmFzZVRyYWNrZXI6OmRlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCi17Ci0g
ICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICByZXR1cm4gbV9vcmln
aW5zQmVpbmdEZWxldGVkLmNvbnRhaW5zKG9yaWdpbik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpyZWNvcmREZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKQotewotICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgQVNTRVJUKCFkZWxldGlu
Z09yaWdpbihvcmlnaW4pKTsKLSAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi0+
aXNvbGF0ZWRDb3B5KCkpOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5n
T3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKLSAgICBBU1NFUlQoZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7Ci0g
ICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmlnaW4pOwotfQotCi1ib29sIERhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNl
KG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwot
ICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCFjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoRkFMU0UpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJlY29yZERlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tz
IGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2suCi0gICAg
aWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1lKSkgewotICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBkZWxldGUgZmlsZSBmb3IgZGF0YWJhc2UgJXMgaW4gb3JpZ2luICVzIiwg
bmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKS5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOwotICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyIpOwot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgZGF0YWJhc2UgJXMgZnJvbSBv
cmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGRvbmVEZWxldGluZ0Rh
dGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIG5hbWUpOwotCi0gICAgaWYgKCFzdGF0ZW1lbnQuZXhl
Y3V0ZUNvbW1hbmQoKSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRl
bGV0aW9uIG9mIGRhdGFiYXNlICVzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG5hbWUu
YXNjaWkoKS5kYXRhKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICBkb25lRGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgewotICAgICAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotICAg
ICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwot
ICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkgewotICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hE
aWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKLSAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9k
aWZ5RGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKLSAgICB9Ci0gICAgZG9uZURlbGV0aW5nRGF0YWJh
c2Uob3JpZ2luLCBuYW1lKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gZGVsZXRl
RGF0YWJhc2VGaWxlIGhhcyB0byByZWxlYXNlIGxvY2tzIGJldHdlZW4gbG9va2luZyB1cCB0aGUg
bGlzdCBvZiBkYXRhYmFzZXMgdG8gY2xvc2UgYW5kIGNsb3NpbmcgdGhlbS4gIFdoaWxlIHRoaXMg
aXMgaW4gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIKLS8vIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcg
c3VyZSBubyBuZXcgZGF0YWJhc2VzIGFyZSBvcGVuZWQgaW4gdGhlIGZpbGUgdG8gYmUgZGVsZXRl
ZC4KLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFN0cmluZyBmdWxsUGF0aCA9
IGZ1bGxQYXRoRm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmYWxzZSk7Ci0gICAgaWYgKGZ1bGxQ
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
LSAgICAgICAgQVNTRVJUKGRlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSB8fCBkZWxldGlu
Z09yaWdpbihvcmlnaW4pKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxSZWZQdHI8QWJz
dHJhY3REYXRhYmFzZT4gPiBkZWxldGVkRGF0YWJhc2VzOwotCi0gICAgLy8gTWFrZSBzdXJlIG5v
dCB0byBob2xkIHRoZSBhbnkgbG9ja3Mgd2hlbiBjYWxsaW5nCi0gICAgLy8gRGF0YWJhc2U6Om1h
cmtBc0RlbGV0ZWRBbmRDbG9zZSgpLCBzaW5jZSB0aGF0IGNhbiBjYXVzZSBhIGRlYWRsb2NrCi0g
ICAgLy8gZHVyaW5nIHRoZSBzeW5jaHJvbm91cyBEYXRhYmFzZVRocmVhZCBjYWxsIGl0IHRyaWdn
ZXJzLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29w
ZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICAgICAgaWYgKG1fb3BlbkRhdGFiYXNlTWFwKSB7Ci0g
ICAgICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBvcGVuIGRhdGFiYXNlcywgbGV0cyBjaGVjayBp
ZiB0aGV5IGFyZSBmb3IgdGhpcyBvcmlnaW4uCi0gICAgICAgICAgICBEYXRhYmFzZU5hbWVNYXAq
IG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbik7Ci0gICAgICAgICAgICBp
ZiAobmFtZU1hcCAmJiBuYW1lTWFwLT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGVy
ZSBhcmUgc29tZSBvcGVuIGRhdGFiYXNlcyBmb3IgdGhpcyBvcmlnaW4sIGxldCdzIGNoZWNrCi0g
ICAgICAgICAgICAgICAgLy8gaWYgdGhleSBhcmUgdGhpcyBkYXRhYmFzZSBieSBuYW1lLgotICAg
ICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1l
KTsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0YWJhc2VTZXQtPnNpemUo
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUgZGF0YWJhc2Ugb3BlbiB3
aXRoIHRoaXMgbmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCi0gICAgICAgICAgICAgICAgICAg
IERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
ZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZWREYXRh
YmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwotCi0gICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShmdWxsUGF0aCk7Ci19Ci0KLXZvaWQgRGF0YWJh
c2VUcmFja2VyOjpzZXRDbGllbnQoRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCi17Ci0g
ICAgbV9jbGllbnQgPSBjbGllbnQ7Ci19Ci0KLXN0YXRpYyBNdXRleCYgbm90aWZpY2F0aW9uTXV0
ZXgoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7Ci0gICAg
cmV0dXJuIG11dGV4OwotfQotCi10eXBlZGVmIFZlY3RvcjxwYWlyPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFN0cmluZz4gPiBOb3RpZmljYXRpb25RdWV1ZTsKLQotc3RhdGljIE5vdGlmaWNhdGlv
blF1ZXVlJiBub3RpZmljYXRpb25RdWV1ZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChO
b3RpZmljYXRpb25RdWV1ZSwgcXVldWUsICgpKTsKLSAgICByZXR1cm4gcXVldWU7Ci19Ci0KLXZv
aWQgRGF0YWJhc2VUcmFja2VyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG5vdGlmaWNhdGlvbk11dGV4KCkpOwotCi0gICAgbm90aWZpY2F0aW9uUXVldWUoKS5h
cHBlbmQocGFpcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTdHJpbmc+KG9yaWdpbi0+aXNvbGF0
ZWRDb3B5KCksIG5hbWUuaXNvbGF0ZWRDb3B5KCkpKTsKLSAgICBzY2hlZHVsZUZvck5vdGlmaWNh
dGlvbigpOwotfQotCi1zdGF0aWMgYm9vbCBub3RpZmljYXRpb25TY2hlZHVsZWQgPSBmYWxzZTsK
LQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNjaGVkdWxlRm9yTm90aWZpY2F0aW9uKCkKLXsKLSAg
ICBBU1NFUlQoIW5vdGlmaWNhdGlvbk11dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIGlmICghbm90
aWZpY2F0aW9uU2NoZWR1bGVkKSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoRGF0YWJhc2VU
cmFja2VyOjpub3RpZnlEYXRhYmFzZXNDaGFuZ2VkLCAwKTsKLSAgICAgICAgbm90aWZpY2F0aW9u
U2NoZWR1bGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpub3Rp
ZnlEYXRhYmFzZXNDaGFuZ2VkKHZvaWQqKQotewotICAgIC8vIE5vdGUgdGhhdCBpZiBEYXRhYmFz
ZVRyYWNrZXIgZXZlciBiZWNvbWVzIG5vbi1zaW5nbGV0b24sIHdlJ2xsIGhhdmUgdG8gYW1lbmQg
dGhpcyBub3RpZmljYXRpb24KLSAgICAvLyBtZWNoYW5pc20gdG8gaW5jbHVkZSB3aGljaCB0cmFj
a2VyIHRoZSBub3RpZmljYXRpb24gZ29lcyBvdXQgb24gYXMgd2VsbC4KLSAgICBEYXRhYmFzZVRy
YWNrZXImIHRoZVRyYWNrZXIodHJhY2tlcigpKTsKLQotICAgIE5vdGlmaWNhdGlvblF1ZXVlIG5v
dGlmaWNhdGlvbnM7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobm90aWZpY2F0
aW9uTXV0ZXgoKSk7Ci0KLSAgICAgICAgbm90aWZpY2F0aW9ucy5zd2FwKG5vdGlmaWNhdGlvblF1
ZXVlKCkpOwotCi0gICAgICAgIG5vdGlmaWNhdGlvblNjaGVkdWxlZCA9IGZhbHNlOwotICAgIH0K
LQotICAgIGlmICghdGhlVHJhY2tlci5tX2NsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vdGlmaWNhdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHRoZVRyYWNrZXIubV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uobm90aWZp
Y2F0aW9uc1tpXS5maXJzdC5nZXQoKSwgbm90aWZpY2F0aW9uc1tpXS5zZWNvbmQpOwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlVHJhY2tlci5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIERhdGFiYXNlVHJhY2tlcl9oCi0jZGVmaW5lIERhdGFiYXNlVHJh
Y2tlcl9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgIVBMQVRGT1JNKENI
Uk9NSVVNKQotI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgotI2luY2x1ZGUgIlNRTGl0ZURh
dGFiYXNlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2VuZGlmIC8vICFQTEFURk9STShD
SFJPTUlVTSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBYnN0cmFjdERhdGFiYXNl
OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwot
Ci1zdHJ1Y3QgU2VjdXJpdHlPcmlnaW5IYXNoOwotCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQot
Y2xhc3MgRGF0YWJhc2VUcmFja2VyQ2xpZW50OwotCi1zdHJ1Y3QgU2VjdXJpdHlPcmlnaW5UcmFp
dHM7Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKENIUk9NSVVNKQotCi1jbGFzcyBEYXRhYmFzZVRyYWNr
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlVHJhY2tlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFj
a2VyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKLSAgICBzdGF0aWMgRGF0YWJhc2VUcmFj
a2VyJiB0cmFja2VyKCk7Ci0gICAgLy8gVGhpcyBzaW5nbGV0b24gd2lsbCBwb3RlbnRpYWxseSBi
ZSB1c2VkIGZyb20gbXVsdGlwbGUgd29ya2VyIHRocmVhZHMgYW5kIHRoZSBwYWdlJ3MgY29udGV4
dCB0aHJlYWQgc2ltdWx0YW5lb3VzbHkuICBUbyBrZWVwIHRoaXMgc2FmZSwgaXQncwotICAgIC8v
IGN1cnJlbnRseSB1c2luZyA0IGxvY2tzLiAgSW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2sgd2hl
biB0YWtpbmcgbXVsdGlwbGUgbG9ja3MsIHlvdSBtdXN0IHRha2UgdGhlbSBpbiB0aGUgY29ycmVj
dCBvcmRlcjoKLSAgICAvLyBtX2RhdGFiYXNlR3VhcmQgYmVmb3JlIHF1b3RhTWFuYWdlciBpZiBi
b3RoIGxvY2tzIGFyZSBuZWVkZWQuCi0gICAgLy8gbV9vcGVuRGF0YWJhc2VNYXBHdWFyZCBiZWZv
cmUgcXVvdGFNYW5hZ2VyIGlmIGJvdGggbG9ja3MgYXJlIG5lZWRlZC4KLSAgICAvLyBtX2RhdGFi
YXNlR3VhcmQgYW5kIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgY3VycmVudGx5IGRvbid0IG92ZXJs
YXAuCi0gICAgLy8gbm90aWZpY2F0aW9uTXV0ZXgoKSBpcyBjdXJyZW50bHkgaW5kZXBlbmRlbnQg
b2YgdGhlIG90aGVyIGxvY2tzLgotCi0gICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZvaWQgc2V0RGF0
YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIFN0
cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7Ci0KLSAgICB2b2lkIGFkZE9w
ZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7Ci0gICAgdm9pZCByZW1vdmVPcGVuRGF0YWJh
c2UoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHZvaWQgZ2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3Ry
YWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0
TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqKTsKLSAgICB2b2lkIGRh
dGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKik7Ci0KLSAgICB2b2lkIGludGVycnVwdEFs
bERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi1w
cml2YXRlOgotICAgIERhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7
Ci0KLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXREYXRhYmFz
ZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCgpIGNvbnN0OwotCi0gICAgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+ID4mIHJlc3VsdCk7Ci0gICAgYm9vbCBkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCk7Ci0KLSAgICBEYXRhYmFzZURl
dGFpbHMgZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiwgU2VjdXJpdHlPcmln
aW4qKTsKLQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvckRhdGFiYXNlKGNvbnN0IFN0
cmluZyYsIFNlY3VyaXR5T3JpZ2luKik7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Ci0gICAgdm9pZCBzZXRRdW90YShTZWN1cml0eU9yaWdp
biosIHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci0KLSAgICB2b2lkIGRlbGV0ZUFsbERhdGFiYXNlcygp
OwotICAgIGJvb2wgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Ci0gICAgYm9vbCBkZWxl
dGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICB2
b2lkIHNldENsaWVudChEYXRhYmFzZVRyYWNrZXJDbGllbnQqKTsKLQotICAgIC8vIEZyb20gYSBz
ZWNvbmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKLSAgICB2
b2lkIHNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLQotICAgIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmln
aW4qKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pOwotICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2Nr
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KTsKLSAgICBib29sIGRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdFZlY3Rvcik7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBsb25nIHVzYWdlRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
OwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9y
aWdpbiogb3JpZ2luKTsKLQotICAgIFN0cmluZyB0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3Q7
Ci0gICAgdm9pZCBvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
OwotCi0gICAgU3RyaW5nIG9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKLQotICAg
IGJvb2wgaGFzRW50cnlGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VJZGVudGlmaWVyKTsKLQotICAgIGJvb2wgYWRkRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdm9pZCBw
b3B1bGF0ZU9yaWdpbnMoKTsKLQotICAgIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKFNlY3VyaXR5
T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxBYnN0
cmFjdERhdGFiYXNlKj4gRGF0YWJhc2VTZXQ7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
RGF0YWJhc2VTZXQqPiBEYXRhYmFzZU5hbWVNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIERhdGFiYXNlTmFtZU1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4g
RGF0YWJhc2VPcmlnaW5NYXA7Ci0KLSAgICBNdXRleCBtX29wZW5EYXRhYmFzZU1hcEd1YXJkOwot
ICAgIG11dGFibGUgT3duUHRyPERhdGFiYXNlT3JpZ2luTWFwPiBtX29wZW5EYXRhYmFzZU1hcDsK
LQotICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyBtX2RhdGFiYXNlLCBtX3F1b3RhTWFwLCBtX3By
b3Bvc2VkRGF0YWJhc2VzLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgbV9vcmlnaW5zQmVpbmdE
ZWxldGVkLCBtX2JlaW5nQ3JlYXRlZCwgYW5kIG1fYmVpbmdEZWxldGVkLgotICAgIE11dGV4IG1f
ZGF0YWJhc2VHdWFyZDsKLSAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOwotCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIHVuc2lnbmVkIGxvbmcgbG9uZywg
U2VjdXJpdHlPcmlnaW5IYXNoPiBRdW90YU1hcDsKLSAgICBtdXRhYmxlIE93blB0cjxRdW90YU1h
cD4gbV9xdW90YU1hcDsKLQotICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKLQot
ICAgIERhdGFiYXNlVHJhY2tlckNsaWVudCogbV9jbGllbnQ7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBEYXRhYmFzZURldGFpbHM+IFByb3Bvc2VkRGF0
YWJhc2U7Ci0gICAgSGFzaFNldDxQcm9wb3NlZERhdGFiYXNlKj4gbV9wcm9wb3NlZERhdGFiYXNl
czsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGxvbmc+IE5hbWVDb3VudE1hcDsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgTmFtZUNvdW50TWFwKiwg
U2VjdXJpdHlPcmlnaW5IYXNoPiBDcmVhdGVTZXQ7Ci0gICAgQ3JlYXRlU2V0IG1fYmVpbmdDcmVh
dGVkOwotICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IE5hbWVTZXQ7Ci0gICAgSGFzaE1hcDxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBOYW1lU2V0KiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBtX2Jl
aW5nRGVsZXRlZDsKLSAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNlY3VyaXR5
T3JpZ2luSGFzaD4gbV9vcmlnaW5zQmVpbmdEZWxldGVkOwotICAgIGJvb2wgY2FuQ3JlYXRlRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2
b2lkIHJlY29yZENyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGRvbmVDcmVhdGluZ0RhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgYm9vbCBjcmVhdGluZ0RhdGFi
YXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgYm9v
bCBjYW5EZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIHZvaWQgcmVjb3JkRGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAq
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgZG9uZURlbGV0aW5nRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBib29s
IGRlbGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKLSAgICBib29sIGNhbkRlbGV0ZU9yaWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsK
LSAgICBib29sIGRlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOwotICAgIHZv
aWQgcmVjb3JkRGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmlnaW4gKm9yaWdpbik7Ci0gICAgdm9p
ZCBkb25lRGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmlnaW4gKm9yaWdpbik7Ci0KLSAgICBzdGF0
aWMgdm9pZCBzY2hlZHVsZUZvck5vdGlmaWNhdGlvbigpOwotICAgIHN0YXRpYyB2b2lkIG5vdGlm
eURhdGFiYXNlc0NoYW5nZWQodm9pZCopOwotI2Vsc2UKLXB1YmxpYzoKLSAgICB2b2lkIGNsb3Nl
RGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaFNldDxBYnN0cmFj
dERhdGFiYXNlKj4gRGF0YWJhc2VTZXQ7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRGF0
YWJhc2VTZXQqPiBEYXRhYmFzZU5hbWVNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
RGF0YWJhc2VOYW1lTWFwKj4gRGF0YWJhc2VPcmlnaW5NYXA7Ci0gICAgY2xhc3MgQ2xvc2VPbmVE
YXRhYmFzZUltbWVkaWF0ZWx5VGFzazsKLQotICAgIHZvaWQgY2xvc2VPbmVEYXRhYmFzZUltbWVk
aWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1l
LCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSk7Ci0KLSAgICBNdXRleCBtX29wZW5EYXRhYmFz
ZU1hcEd1YXJkOwotICAgIG11dGFibGUgT3duUHRyPERhdGFiYXNlT3JpZ2luTWFwPiBtX29wZW5E
YXRhYmFzZU1hcDsKLSNlbmRpZiAvLyAhUExBVEZPUk0oQ0hST01JVU0pCi19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5k
aWYgLy8gRGF0YWJhc2VUcmFja2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VUcmFja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotI2lmbmRlZiBEYXRhYmFzZVRyYWNrZXJDbGllbnRfaAotI2RlZmluZSBEYXRh
YmFzZVRyYWNrZXJDbGllbnRfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2VjdXJp
dHlPcmlnaW47Ci0KLWNsYXNzIERhdGFiYXNlVHJhY2tlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+RGF0YWJhc2VUcmFja2VyQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCi0KLSNlbmRpZiAvLyBEYXRhYmFzZVRyYWNrZXJDbGllbnRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTA5
ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJPcmlnaW5Vc2FnZVJlY29y
ZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU9yaWdpblF1b3RhTWFuYWdlcjo6T3JpZ2lu
UXVvdGFNYW5hZ2VyKCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgOiBtX3VzYWdlUmVjb3JkR3VhcmRM
b2NrZWQoZmFsc2UpCi0jZW5kaWYKLXsKLX0KLQotYm9vbCBPcmlnaW5RdW90YU1hbmFnZXI6OnRy
eUxvY2soKQotewotICAgIGJvb2wgbG9ja2VkID0gbV91c2FnZVJlY29yZEd1YXJkLnRyeUxvY2so
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKGxvY2tlZCkKLSAgICAgICAgbV91c2FnZVJlY29y
ZEd1YXJkTG9ja2VkID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVChtX3VzYWdlUmVj
b3JkR3VhcmRMb2NrZWQpOwotI2VuZGlmCi0gICAgcmV0dXJuIGxvY2tlZDsKLX0KLQotdm9pZCBP
cmlnaW5RdW90YU1hbmFnZXI6OmxvY2soKQotewotICAgIG1fdXNhZ2VSZWNvcmRHdWFyZC5sb2Nr
KCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCA9IHRydWU7
Ci0jZW5kaWYKLX0KLQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnVubG9jaygpCi17Ci0jaWZu
ZGVmIE5ERUJVRwotICAgIG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgbV91c2FnZVJlY29yZEd1YXJkLnVubG9jaygpOwotfQotCi12b2lkIE9yaWdpblF1b3Rh
TWFuYWdlcjo6dHJhY2tPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKQot
ewotICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwotICAgIEFTU0VSVCghbV91
c2FnZU1hcC5jb250YWlucyhvcmlnaW4uZ2V0KCkpKTsKLQotICAgIG1fdXNhZ2VNYXAuc2V0KG9y
aWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5ldyBPcmlnaW5Vc2FnZVJlY29yZCk7Ci19Ci0KLWJvb2wg
T3JpZ2luUXVvdGFNYW5hZ2VyOjp0cmFja3NPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKLSAgICByZXR1
cm4gbV91c2FnZU1hcC5jb250YWlucyhvcmlnaW4pOwotfQotCi12b2lkIE9yaWdpblF1b3RhTWFu
YWdlcjo6YWRkRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpCi17Ci0gICAgQVNTRVJU
KG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7Ci0KLSAgICBPcmlnaW5Vc2FnZVJlY29yZCogdXNh
Z2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdldChvcmlnaW4pOwotICAgIEFTU0VSVCh1c2FnZVJlY29y
ZCk7Ci0KLSAgICB1c2FnZVJlY29yZC0+YWRkRGF0YWJhc2UoZGF0YWJhc2VJZGVudGlmaWVyLmlz
b2xhdGVkQ29weSgpLCBmdWxsUGF0aC5pc29sYXRlZENvcHkoKSk7Ci19Ci0KLXZvaWQgT3JpZ2lu
UXVvdGFNYW5hZ2VyOjpyZW1vdmVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV91c2FnZVJlY29y
ZEd1YXJkTG9ja2VkKTsKLQotICAgIGlmIChPcmlnaW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQg
PSBtX3VzYWdlTWFwLmdldChvcmlnaW4pKQotICAgICAgICB1c2FnZVJlY29yZC0+cmVtb3ZlRGF0
YWJhc2UoZGF0YWJhc2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6
OnJlbW92ZU9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewotICAgIEFTU0VSVChtX3Vz
YWdlUmVjb3JkR3VhcmRMb2NrZWQpOwotCi0gICAgaWYgKE9yaWdpblVzYWdlUmVjb3JkKiB1c2Fn
ZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbikpIHsKLSAgICAgICAgbV91c2FnZU1hcC5y
ZW1vdmUob3JpZ2luKTsKLSAgICAgICAgZGVsZXRlIHVzYWdlUmVjb3JkOwotICAgIH0KLX0KLQot
dm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6Om1hcmtEYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoZGF0YWJhc2UpOwotICAgIEFTU0VSVChtX3VzYWdlUmVj
b3JkR3VhcmRMb2NrZWQpOwotICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9IG1f
dXNhZ2VNYXAuZ2V0KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBBU1NFUlQodXNh
Z2VSZWNvcmQpOwotCi0gICAgdXNhZ2VSZWNvcmQtPm1hcmtEYXRhYmFzZShkYXRhYmFzZS0+c3Ry
aW5nSWRlbnRpZmllcigpKTsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25nIE9yaWdpblF1b3RhTWFu
YWdlcjo6ZGlza1VzYWdlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7Ci0KLSAgICBPcmlnaW5Vc2FnZVJlY29yZCog
dXNhZ2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdldChvcmlnaW4pOwotICAgIEFTU0VSVCh1c2FnZVJl
Y29yZCk7Ci0KLSAgICByZXR1cm4gdXNhZ2VSZWNvcmQtPmRpc2tVc2FnZSgpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgT3JpZ2luUXVvdGFNYW5hZ2VyX2gKLSNkZWZpbmUgT3JpZ2lu
UXVvdGFNYW5hZ2VyX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKLWNsYXNzIE9yaWdp
blVzYWdlUmVjb3JkOwotCi1jbGFzcyBPcmlnaW5RdW90YU1hbmFnZXIgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE9yaWdpblF1b3RhTWFuYWdlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIE9yaWdpblF1b3RhTWFuYWdlcigpOwotCi0gICAgYm9vbCB0cnlMb2Nr
KCk7Ci0gICAgdm9pZCBsb2NrKCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotICAgIHZvaWQgdHJh
Y2tPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOwotICAgIGJvb2wgdHJhY2tzT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7Ci0gICAgdm9pZCBhZGREYXRhYmFzZShTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGZ1bGxQYXRoKTsKLSAgICB2b2lkIHJlbW92ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKik7Ci0KLSAgICB2b2lkIG1hcmtEYXRhYmFzZShBYnN0cmFjdERhdGFiYXNl
Kik7IC8vIE1hcmsgZGlydGluZXNzIG9mIGEgc3BlY2lmaWMgZGF0YWJhc2UuCi0gICAgdW5zaWdu
ZWQgbG9uZyBsb25nIGRpc2tVc2FnZShTZWN1cml0eU9yaWdpbiopIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIG11dGFibGUgTXV0ZXggbV91c2FnZVJlY29yZEd1YXJkOwotI2lmbmRlZiBOREVCVUcK
LSAgICBib29sIG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZDsKLSNlbmRpZgotCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIE9yaWdpblVzYWdlUmVjb3JkKiwgU2Vj
dXJpdHlPcmlnaW5IYXNoPiBPcmlnaW5Vc2FnZU1hcDsKLSAgICBPcmlnaW5Vc2FnZU1hcCBtX3Vz
YWdlTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIE9yaWdpblF1b3RhTWFuYWdlcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkocmV2aXNpb24g
MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiT3JpZ2luVXNhZ2VSZWNvcmQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
T3JpZ2luVXNhZ2VSZWNvcmQ6Ok9yaWdpblVzYWdlUmVjb3JkKCkKLSAgICA6IG1fY2FjaGVkRGlz
a1VzYWdlSXNWYWxpZChmYWxzZSkKLXsKLX0KLQotdm9pZCBPcmlnaW5Vc2FnZVJlY29yZDo6YWRk
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRo
KQotewotICAgIEFTU0VSVCghbV9kYXRhYmFzZU1hcC5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0g
ICAgQVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyLmltcGwoKS0+aGFzT25lUmVmKCkg
fHwgaWRlbnRpZmllci5pc0VtcHR5KCkpOwotICAgIEFTU0VSVF9BUkcoZnVsbFBhdGgsIGZ1bGxQ
YXRoLmltcGwoKS0+aGFzT25lUmVmKCkgfHwgZnVsbFBhdGguaXNFbXB0eSgpKTsKLQotICAgIG1f
ZGF0YWJhc2VNYXAuc2V0KGlkZW50aWZpZXIsIERhdGFiYXNlRW50cnkoZnVsbFBhdGgpKTsKLSAg
ICBtX3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIpOwotCi0gICAgbV9jYWNoZWREaXNrVXNhZ2VJ
c1ZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgT3JpZ2luVXNhZ2VSZWNvcmQ6OnJlbW92ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZU1h
cC5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0KLSAgICBtX2RhdGFiYXNlTWFwLnJlbW92ZShpZGVu
dGlmaWVyKTsKLSAgICBtX3Vua25vd25TZXQucmVtb3ZlKGlkZW50aWZpZXIpOwotICAgIG1fY2Fj
aGVkRGlza1VzYWdlSXNWYWxpZCA9IGZhbHNlOwotfQotCi12b2lkIE9yaWdpblVzYWdlUmVjb3Jk
OjptYXJrRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVCht
X2RhdGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBBU1NFUlRfQVJHKGlkZW50
aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5oYXNPbmVSZWYoKSB8fCBpZGVudGlmaWVyLmlzRW1w
dHkoKSk7Ci0KLSAgICBtX3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIpOwotICAgIG1fY2FjaGVk
RGlza1VzYWdlSXNWYWxpZCA9IGZhbHNlOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2lu
VXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSgpCi17Ci0gICAgLy8gVXNlIHRoZSBsYXN0IGNhY2hlZCB1
c2FnZSB2YWx1ZSBpZiB3ZSBoYXZlIGl0LgotICAgIGlmIChtX2NhY2hlZERpc2tVc2FnZUlzVmFs
aWQpCi0gICAgICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2FnZTsKLQotICAgIC8vIHN0YXQoKSBm
b3IgdGhlIHNpemVzIGtub3duIHRvIGJlIGRpcnR5LgotICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRl
cmF0b3IgaVVua25vd24gPSBtX3Vua25vd25TZXQuYmVnaW4oKTsKLSAgICBIYXNoU2V0PFN0cmlu
Zz46Oml0ZXJhdG9yIGVuZFVua25vd24gPSBtX3Vua25vd25TZXQuZW5kKCk7Ci0gICAgZm9yICg7
IGlVbmtub3duICE9IGVuZFVua25vd247ICsraVVua25vd24pIHsKLSAgICAgICAgY29uc3QgU3Ry
aW5nJiBwYXRoID0gbV9kYXRhYmFzZU1hcC5nZXQoKmlVbmtub3duKS5maWxlbmFtZTsKLSAgICAg
ICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgLy8gV2hlbiB3ZSBjYW4ndCBk
ZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFzc3VtZSB0aGUgZmls
ZSBpcyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KLSAgICAgICAgbG9uZyBsb25nIHNpemUgPSBTUUxp
dGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwotICAgICAgICBtX2RhdGFi
YXNlTWFwLnNldCgqaVVua25vd24sIERhdGFiYXNlRW50cnkocGF0aCwgc2l6ZSkpOwotICAgIH0K
LSAgICBtX3Vua25vd25TZXQuY2xlYXIoKTsKLQotICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBjYWNo
ZWQgdXNhZ2UgdmFsdWUuCi0gICAgbV9jYWNoZWREaXNrVXNhZ2UgPSAwOwotICAgIEhhc2hNYXA8
U3RyaW5nLCBEYXRhYmFzZUVudHJ5Pjo6aXRlcmF0b3IgaURhdGFiYXNlID0gbV9kYXRhYmFzZU1h
cC5iZWdpbigpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZUVudHJ5Pjo6aXRlcmF0b3Ig
ZW5kRGF0YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmVuZCgpOwotICAgIGZvciAoOyBpRGF0YWJhc2Ug
IT0gZW5kRGF0YWJhc2U7ICsraURhdGFiYXNlKQotICAgICAgICBtX2NhY2hlZERpc2tVc2FnZSAr
PSBpRGF0YWJhc2UtPnNlY29uZC5zaXplOwotCi0gICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlk
ID0gdHJ1ZTsKLSAgICByZXR1cm4gbV9jYWNoZWREaXNrVXNhZ2U7Ci19Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5oCShyZXZp
c2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3Jk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgT3JpZ2luVXNhZ2VSZWNv
cmRfaAotI2RlZmluZSBPcmlnaW5Vc2FnZVJlY29yZF9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+IAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBPYmplY3RzIG9mIHRoaXMgY2xh
c3MgY2FuIGJlIHVzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHdpdGggZXh0ZXJuYWwgc3luY2hy
b25pemF0aW9uLgotLy8gU3RyaW5nIGFyZ3VtZW50cyBhcmUgYWxzbyBzdXBwb3NlZCB0byBiZSBk
ZWVwbHkgY29waWVkIGJ5IHRoZSBjYWxsZXIgd2hlbiBuZWNlc3NhcnkuCi1jbGFzcyBPcmlnaW5V
c2FnZVJlY29yZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3JpZ2luVXNhZ2VSZWNvcmQp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPcmlnaW5Vc2FnZVJlY29y
ZCgpOwotCi0gICAgdm9pZCBhZGREYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgZnVsbFBhdGgpOwotICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyKTsKLSAgICB2b2lkIG1hcmtEYXRhYmFzZShjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIpOyAvLyBTaXplIG1heSBoYXZlIGNoYW5nZWQsIGFuZCB3aWxsIG5lZWQgdG8gYmUg
cmVjYWxjdWxhdGVkLgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UoKTsKLQotcHJp
dmF0ZToKLSAgICBzdHJ1Y3QgRGF0YWJhc2VFbnRyeSB7Ci0gICAgICAgIERhdGFiYXNlRW50cnko
KSB7IH0KLSAgICAgICAgRGF0YWJhc2VFbnRyeShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSA6IGZp
bGVuYW1lKGZpbGVuYW1lKSB7IH0KLSAgICAgICAgRGF0YWJhc2VFbnRyeShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkgOiBmaWxlbmFtZShmaWxlbmFtZSks
IHNpemUoc2l6ZSkgeyB9Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIHNpemU7IC8vIFRoaXMgbWVtYmVyIHJlbWFpbnMgdW5pbml0aWFsaXplZCB1
bnRpbCBkaXNrIHVzYWdlIGlzIGNhbGN1bGF0ZWQuCi0gICAgfTsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgRGF0YWJhc2VFbnRyeT4gbV9kYXRhYmFzZU1hcDsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV91
bmtub3duU2V0OwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1fY2FjaGVkRGlza1VzYWdlOwot
ICAgIGJvb2wgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTENhbGxiYWNrV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotI2lmbmRlZiBTUUxDYWxsYmFja1dyYXBwZXJfaAotI2RlZmluZSBTUUxDYWxsYmFj
a1dyYXBwZXJfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEEgaGVscGVyIGNsYXNzIHRvIHNhZmVseSBk
ZXJlZmVyZW5jZSB0aGUgY2FsbGJhY2sgb2JqZWN0cyBoZWxkIGJ5Ci0vLyBTUUxTdGF0ZW1lbnQg
YW5kIFNRTFRyYW5zYWN0aW9uIG9uIHRoZSBwcm9wZXIgdGhyZWFkLiBUaGUgJ3dyYXBwZWQnCi0v
LyBjYWxsYmFjayBpcyBkZXJlZmVyZW5jZWQ6Ci0vLyAtIGJ5IGRlc3RydWN0aW5nIHRoZSBlbmNs
b3Npbmcgd3JhcHBlciAtIG9uIGFueSB0aHJlYWQKLS8vIC0gYnkgY2FsbGluZyBjbGVhcigpIC0g
b24gYW55IHRocmVhZAotLy8gLSBieSB1bndyYXBwaW5nIGFuZCB0aGVuIGRlcmVmZXJlbmNpbmcg
bm9ybWFsbHkgLSBvbiBjb250ZXh0IHRocmVhZCBvbmx5Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBTUUxDYWxsYmFja1dyYXBwZXIgewotcHVibGljOgotICAgIFNRTENhbGxiYWNrV3JhcHBl
cihQYXNzUmVmUHRyPFQ+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQotICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgICAg
ICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KG1fY2FsbGJhY2sgPyBzY3JpcHRFeGVjdXRpb25D
b250ZXh0IDogMCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmdldCgpICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpKTsKLSAgICB9Ci0KLSAgICB+U1FMQ2FsbGJhY2tXcmFwcGVyKCkKLSAg
ICB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewot
ICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0OwotICAgICAgICBUKiBjYWxs
YmFjazsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OwotICAgICAgICAgICAgaWYgKCFtX2NhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
Q29udGV4dFRocmVhZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9jYWxsYmFjayA9IDA7Ci0gICAg
ICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0ID0gbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7Ci0gICAgICAgICAgICBjYWxsYmFj
ayA9IG1fY2FsbGJhY2sucmVsZWFzZSgpLmxlYWtSZWYoKTsKLSAgICAgICAgfQotICAgICAgICBj
b250ZXh0LT5wb3N0VGFzayhTYWZlUmVsZWFzZVRhc2s6OmNyZWF0ZShjYWxsYmFjaykpOwotICAg
IH0KLQotICAgIFBhc3NSZWZQdHI8VD4gdW53cmFwKCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrIHx8IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSAwOwotICAgICAgICByZXR1cm4gbV9jYWxsYmFjay5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgLy8gVXNlZnVsIGZvciBvcHRpbWl6YXRpb25zIG9ubHksIHBsZWFz
ZSB0ZXN0IHRoZSByZXR1cm4gdmFsdWUgb2YgdW53cmFwIHRvIGJlIHN1cmUuCi0gICAgYm9vbCBo
YXNDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KLQotcHJpdmF0ZToKLSAg
ICBjbGFzcyBTYWZlUmVsZWFzZVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxTYWZlUmVsZWFz
ZVRhc2s+IGNyZWF0ZShUKiBjYWxsYmFja1RvUmVsZWFzZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTYWZlUmVsZWFzZVRhc2soY2FsbGJhY2tUb1JlbGVhc2Up
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9jYWxsYmFja1RvUmVsZWFzZSAmJiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tUb1JlbGVhc2UtPmRlcmVmKCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5kZXJlZigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IGlzQ2xlYW51cFRhc2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBTYWZlUmVsZWFzZVRhc2soVCogY2FsbGJhY2tUb1JlbGVhc2UpCi0gICAgICAgICAg
ICA6IG1fY2FsbGJhY2tUb1JlbGVhc2UoY2FsbGJhY2tUb1JlbGVhc2UpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIFQqIG1fY2FsbGJhY2tUb1JlbGVhc2U7Ci0gICAgfTsKLQotICAg
IE11dGV4IG1fbXV0ZXg7Ci0gICAgUmVmUHRyPFQ+IG1fY2FsbGJhY2s7Ci0gICAgUmVmUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0K
LSNlbmRpZiAvLyBTUUxDYWxsYmFja1dyYXBwZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FM
RXJyb3IuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxF
cnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU1FMRXJyb3Jf
aAotI2RlZmluZSBTUUxFcnJvcl9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTUUxFcnJvciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTUUxFcnJvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNRTEVycm9yPiBjcmVhdGUodW5zaWduZWQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1FMRXJyb3IoY29kZSwgbWVzc2FnZSkpOyB9Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2RlLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCBpbnQgc3FsaXRlQ29kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
cmVhdGUoY29kZSwgU3RyaW5nOjpmb3JtYXQoIiVzICglZCkiLCBtZXNzYWdlLCBzcWxpdGVDb2Rl
KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTEVycm9yPiBjcmVhdGUodW5zaWdu
ZWQgY29kZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0ZUNvZGUsIGNvbnN0IGNoYXIq
IHNxbGl0ZU1lc3NhZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gY3JlYXRlKGNvZGUsIFN0cmlu
Zzo6Zm9ybWF0KCIlcyAoJWQgJXMpIiwgbWVzc2FnZSwgc3FsaXRlQ29kZSwgc3FsaXRlTWVzc2Fn
ZSkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7
IH0KLSAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS5pc29sYXRl
ZENvcHkoKTsgfQotCi0gICAgZW51bSBTUUxFcnJvckNvZGUgewotICAgICAgICBVTktOT1dOX0VS
UiA9IDAsCi0gICAgICAgIERBVEFCQVNFX0VSUiA9IDEsCi0gICAgICAgIFZFUlNJT05fRVJSID0g
MiwKLSAgICAgICAgVE9PX0xBUkdFX0VSUiA9IDMsCi0gICAgICAgIFFVT1RBX0VSUiA9IDQsCi0g
ICAgICAgIFNZTlRBWF9FUlIgPSA1LAotICAgICAgICBDT05TVFJBSU5UX0VSUiA9IDYsCi0gICAg
ICAgIFRJTUVPVVRfRVJSID0gNwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgU1FMRXJyb3IodW5z
aWduZWQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA6IG1fY29kZShjb2RlKSwgbV9tZXNz
YWdlKG1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkpIHsgfQotICAgIHVuc2lnbmVkIG1fY29kZTsKLSAg
ICBTdHJpbmcgbV9tZXNzYWdlOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFNRTEVy
cm9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaWRsCShyZXZpc2lvbiAxMDk4
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwot
ICAgICAgICBDb25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3Rv
ciwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAgIF0gU1FMRXJyb3IgewotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2RlOwotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7Ci0KLSAgICAgICAgLy8gU1FMRXJyb3JDb2RlOiB1
c2VkIG9ubHkgaW4gdGhlIGFzeW5jIERCIEFQSQotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBVTktOT1dOX0VSUiA9IDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERBVEFCQVNF
X0VSUiA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFZFUlNJT05fRVJSID0gMjsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVE9PX0xBUkdFX0VSUiA9IDM7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IFFVT1RBX0VSUiA9IDQ7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFNZTlRBWF9FUlIgPSA1OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBD
T05TVFJBSU5UX0VSUiA9IDY7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRJTUVPVVRf
RVJSID0gNzsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNl
cHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0
aW9uLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxF
eGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIlNRTEV4
Y2VwdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBhbiBhcnJheSBvZiBzdHJ1Y3RzIHRvIHBhaXIgdGhlIG5hbWVzIGFuZCBkZXNjcmlwdGlv
bnMuCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXhjZXB0aW9uTmFtZXNbXSA9IHsKLSAgICAi
VU5LTk9XTl9FUlIiLAotICAgICJEQVRBQkFTRV9FUlIiLAotICAgICJWRVJTSU9OX0VSUiIsCi0g
ICAgIlRPT19MQVJHRV9FUlIiLAotICAgICJRVU9UQV9FUlIiLAotICAgICJTWU5UQVhfRVJSIiwK
LSAgICAiQ09OU1RSQUlOVF9FUlIiLAotICAgICJUSU1FT1VUX0VSUiIKLX07Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25EZXNjcmlwdGlvbnNbXSA9IHsKLSAgICAiVGhlIG9w
ZXJhdGlvbiBmYWlsZWQgZm9yIHJlYXNvbnMgdW5yZWxhdGVkIHRvIHRoZSBkYXRhYmFzZS4iLAot
ICAgICJUaGUgb3BlcmF0aW9uIGZhaWxlZCBmb3Igc29tZSByZWFzb24gcmVsYXRlZCB0byB0aGUg
ZGF0YWJhc2UuIiwKLSAgICAiVGhlIGFjdHVhbCBkYXRhYmFzZSB2ZXJzaW9uIGRpZCBub3QgbWF0
Y2ggdGhlIGV4cGVjdGVkIHZlcnNpb24uIiwKLSAgICAiRGF0YSByZXR1cm5lZCBmcm9tIHRoZSBk
YXRhYmFzZSBpcyB0b28gbGFyZ2UuIiwKLSAgICAiUXVvdGEgd2FzIGV4Y2VlZGVkLiIsCi0gICAg
IkludmFsaWQgb3IgdW5hdXRob3JpemVkIHN0YXRlbWVudDsgb3IgdGhlIG51bWJlciBvZiBhcmd1
bWVudHMgZGlkIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mID8gcGxhY2Vob2xkZXJzLiIsCi0gICAg
IkEgY29uc3RyYWludCB3YXMgdmlvbGF0ZWQuIiwKLSAgICAiQSB0cmFuc2FjdGlvbiBsb2NrIGNv
dWxkIG5vdCBiZSBhY3F1aXJlZCBpbiBhIHJlYXNvbmFibGUgdGltZS4iCi19OwotCi1DT01QSUxF
X0FTU0VSVChXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVzKSA9PSBXVEZfQVJSQVlfTEVO
R1RIKGV4Y2VwdGlvbkRlc2NyaXB0aW9ucyksIFNRTEV4Y2VwdGlvblRhYmxlc011c3RNYXRjaCk7
Ci0KLWJvb2wgU1FMRXhjZXB0aW9uOjppbml0aWFsaXplRGVzY3JpcHRpb24oRXhjZXB0aW9uQ29k
ZSBlYywgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAo
ZWMgPCBTUUxFeGNlcHRpb25PZmZzZXQgfHwgZWMgPiBTUUxFeGNlcHRpb25NYXgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGRlc2NyaXB0aW9uLT50eXBlTmFtZSA9ICJET00gU1FMIjsK
LSAgICBkZXNjcmlwdGlvbi0+Y29kZSA9IGVjIC0gU1FMRXhjZXB0aW9uT2Zmc2V0OwotICAgIGRl
c2NyaXB0aW9uLT50eXBlID0gU1FMRXhjZXB0aW9uVHlwZTsKLQotICAgIHNpemVfdCB0YWJsZVNp
emUgPSBXVEZfQVJSQVlfTEVOR1RIKGV4Y2VwdGlvbk5hbWVzKTsKLSAgICBzaXplX3QgdGFibGVJ
bmRleCA9IGVjIC0gVU5LTk9XTl9FUlI7Ci0KLSAgICBkZXNjcmlwdGlvbi0+bmFtZSA9IHRhYmxl
SW5kZXggPCB0YWJsZVNpemUgPyBleGNlcHRpb25OYW1lc1t0YWJsZUluZGV4XSA6IDA7Ci0gICAg
ZGVzY3JpcHRpb24tPmRlc2NyaXB0aW9uID0gdGFibGVJbmRleCA8IHRhYmxlU2l6ZSA/IGV4Y2Vw
dGlvbkRlc2NyaXB0aW9uc1t0YWJsZUluZGV4XSA6IDA7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaAkocmV2aXNpb24gMTA5
ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTUUxFeGNlcHRpb25faAotI2RlZmluZSBTUUxF
eGNlcHRpb25faAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTUUxFeGNlcHRpb24g
OiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1FMRXhjZXB0aW9uPiBjcmVhdGUoY29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMRXhjZXB0aW9u
KGRlc2NyaXB0aW9uKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGludCBTUUxFeGNlcHRp
b25PZmZzZXQgPSAxMDAwOwotICAgIHN0YXRpYyBjb25zdCBpbnQgU1FMRXhjZXB0aW9uTWF4ID0g
MTA5OTsKLQotICAgIGVudW0gU1FMRXhjZXB0aW9uQ29kZSB7Ci0gICAgICAgIFVOS05PV05fRVJS
ID0gU1FMRXhjZXB0aW9uT2Zmc2V0LAotICAgICAgICBEQVRBQkFTRV9FUlIgPSBTUUxFeGNlcHRp
b25PZmZzZXQgKyAxLAotICAgICAgICBWRVJTSU9OX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCAr
IDIsCi0gICAgICAgIFRPT19MQVJHRV9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyAzLAotICAg
ICAgICBRVU9UQV9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA0LAotICAgICAgICBTWU5UQVhf
RVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgNSwKLSAgICAgICAgQ09OU1RSQUlOVF9FUlIgPSBT
UUxFeGNlcHRpb25PZmZzZXQgKyA2LAotICAgICAgICBUSU1FT1VUX0VSUiA9IFNRTEV4Y2VwdGlv
bk9mZnNldCArIDcKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZURlc2NyaXB0
aW9uKEV4Y2VwdGlvbkNvZGUsIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiopOwotCi1wcml2YXRl
OgotICAgIFNRTEV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQotICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCi0gICAgewotICAg
IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCi0KLSNlbmRpZiAvLyBTUUxFeGNlcHRpb25faApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgICAgIERv
Tm90Q2hlY2tDb25zdGFudHMKLSAgICBdIFNRTEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGNvZGU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbWVzc2FnZTsKLQotICAgICAgICAvLyBTUUxFeGNlcHRpb25Db2RlOiB1c2Vk
IG9ubHkgaW4gdGhlIHN5bmMgREIgQVBJCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVO
S05PV05fRVJSID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgREFUQUJBU0VfRVJS
ID0gMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVkVSU0lPTl9FUlIgPSAyOwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUT09fTEFSR0VfRVJSID0gMzsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgUVVPVEFfRVJSID0gNDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgU1lOVEFYX0VSUiA9IDU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNU
UkFJTlRfRVJSID0gNjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVElNRU9VVF9FUlIg
PSA3OwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQu
Y3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3Vs
dFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgdW5zaWduZWQgY29uc3QgTWF4RXJyb3JDb2RlID0gMjsKLQotU1FMUmVzdWx0U2V0
OjpTUUxSZXN1bHRTZXQoKQotICAgIDogbV9yb3dzKFNRTFJlc3VsdFNldFJvd0xpc3Q6OmNyZWF0
ZSgpKQotICAgICwgbV9pbnNlcnRJZCgwKQotICAgICwgbV9pbnNlcnRJZFNldChmYWxzZSkKLSAg
ICAsIG1fcm93c0FmZmVjdGVkKDApCi17Ci19Ci0KLWludDY0X3QgU1FMUmVzdWx0U2V0OjppbnNl
cnRJZChFeGNlcHRpb25Db2RlJiBlKSBjb25zdAotewotICAgIC8vIDQuMTEuNCAtIFJldHVybiB0
aGUgaWQgb2YgdGhlIGxhc3Qgcm93IGluc2VydGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBxdWVyeQot
ICAgIC8vIElmIHRoZSBxdWVyeSBkaWRuJ3QgcmVzdWx0IGluIGFueSByb3dzIGJlaW5nIGFkZGVk
LCByYWlzZSBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uCi0gICAgaWYgKG1faW5zZXJ0
SWRTZXQpCi0gICAgICAgIHJldHVybiBtX2luc2VydElkOwotCi0gICAgZSA9IElOVkFMSURfQUND
RVNTX0VSUjsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBTUUxSZXN1bHRTZXQ6OnJvd3NBZmZl
Y3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcm93c0FmZmVjdGVkOwotfQotCi1TUUxSZXN1
bHRTZXRSb3dMaXN0KiBTUUxSZXN1bHRTZXQ6OnJvd3MoKSBjb25zdAotewotICAgIHJldHVybiBt
X3Jvd3MuZ2V0KCk7Ci19Ci0KLXZvaWQgU1FMUmVzdWx0U2V0OjpzZXRJbnNlcnRJZChpbnQ2NF90
IGlkKQotewotICAgIEFTU0VSVCghbV9pbnNlcnRJZFNldCk7Ci0KLSAgICBtX2luc2VydElkID0g
aWQ7Ci0gICAgbV9pbnNlcnRJZFNldCA9IHRydWU7Ci19Ci0KLXZvaWQgU1FMUmVzdWx0U2V0Ojpz
ZXRSb3dzQWZmZWN0ZWQoaW50IGNvdW50KQotewotICAgIG1fcm93c0FmZmVjdGVkID0gY291bnQ7
Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3Vs
dFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0
LmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTUUxSZXN1bHRT
ZXRfaAotI2RlZmluZSBTUUxSZXN1bHRTZXRfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIlNRTFJlc3VsdFNldFJvd0xpc3QuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBTUUxSZXN1bHRTZXQgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8U1FMUmVzdWx0U2V0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1FMUmVzdWx0U2V0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1FMUmVzdWx0U2V0
KTsgfQotCi0gICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cygpIGNvbnN0OwotCi0gICAgaW50
NjRfdCBpbnNlcnRJZChFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgaW50IHJvd3NBZmZlY3Rl
ZCgpIGNvbnN0OwotCi0vLyBGb3IgaW50ZXJuYWwgKG5vbi1KUykgdXNlCi0gICAgdm9pZCBzZXRJ
bnNlcnRJZChpbnQ2NF90KTsKLSAgICB2b2lkIHNldFJvd3NBZmZlY3RlZChpbnQpOwotCi1wcml2
YXRlOgotICAgIFNRTFJlc3VsdFNldCgpOwotCi0gICAgUmVmUHRyPFNRTFJlc3VsdFNldFJvd0xp
c3Q+IG1fcm93czsKLSAgICBpbnQ2NF90IG1faW5zZXJ0SWQ7Ci0gICAgYm9vbCBtX2luc2VydElk
U2V0OwotICAgIGludCBtX3Jvd3NBZmZlY3RlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBTUUxSZXN1bHRTZXRfaApJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yLAotICAgICAg
ICBKU05vU3RhdGljVGFibGVzCi0gICAgXSBTUUxSZXN1bHRTZXQgewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgU1FMUmVzdWx0U2V0Um93TGlzdCByb3dzOwotCi0jaWYgIWRlZmluZWQoTEFO
R1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBs
b25nIGluc2VydElkCi0gICAgICAgICAgICBnZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0j
ZWxzZQotICAgICAgICAvLyBFeHBsaWNpdGVseSBjaG9vc2UgJ2xvbmcgbG9uZycgaGVyZSB0byBh
dm9pZCBhIDY0Yml0LT4zMmJpdCBzaG9ydGVuaW5nIHdhcm5pbmcgZm9yIHVzLgotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsb25nIGluc2VydElkCi0gICAgICAgICAgICBnZXR0ZXIg
cmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0jZW5kaWYKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGxvbmcgcm93c0FmZmVjdGVkOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNRTFJl
c3VsdFNldFJvd0xpc3QuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgU1FMUmVzdWx0U2V0Um93TGlzdDo6bGVuZ3RoKCkgY29u
c3QKLXsKLSAgICBpZiAobV9yZXN1bHQuc2l6ZSgpID09IDApCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgQVNTRVJUKG1fcmVzdWx0LnNpemUoKSAlIG1fY29sdW1ucy5zaXplKCkgPT0gMCk7Ci0K
LSAgICByZXR1cm4gbV9yZXN1bHQuc2l6ZSgpIC8gbV9jb2x1bW5zLnNpemUoKTsKLX0KLQotfQot
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93
TGlzdC5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJl
c3VsdFNldFJvd0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFNRTFJlc3VsdFNldFJvd0xpc3RfaAotI2RlZmluZSBTUUxSZXN1bHRTZXRSb3dMaXN0X2gKLQot
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTUUxSZXN1bHRTZXRSb3dMaXN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8U1FMUmVzdWx0U2V0Um93TGlzdD4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNRTFJlc3VsdFNldFJvd0xpc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTUUxSZXN1bHRTZXRSb3dMaXN0KTsgfQotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNv
bHVtbk5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zOyB9Ci0gICAgY29uc3QgVmVjdG9y
PFNRTFZhbHVlPiYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KLQotICAgIHZv
aWQgYWRkQ29sdW1uKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX2NvbHVtbnMuYXBwZW5kKG5hbWUp
OyB9Ci0gICAgdm9pZCBhZGRSZXN1bHQoY29uc3QgU1FMVmFsdWUmIHJlc3VsdCkgeyBtX3Jlc3Vs
dC5hcHBlbmQocmVzdWx0KTsgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgU1FMUmVzdWx0U2V0Um93TGlzdCgpIHsgfQotCi0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9jb2x1bW5zOwotICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9yZXN1bHQ7Ci19OwotCi19Ci0K
LSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0
U2V0Um93TGlzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxS
ZXN1bHRTZXRSb3dMaXN0LmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25k
aXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvciwKLSAgICAgICAg
SlNOb1N0YXRpY1RhYmxlcwotICAgIF0gU1FMUmVzdWx0U2V0Um93TGlzdCB7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICAgICAgW0N1c3RvbV0g
RE9NT2JqZWN0IGl0ZW0oaW4gdW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgfTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDEwOTg1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxTdGF0
ZW1lbnQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJEYXRhYmFz
ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxFcnJvci5oIgotI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5j
bHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTUUxW
YWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoRGF0
YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNR
TFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxs
YmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
LCBpbnQgcGVybWlzc2lvbnMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1l
bnQoZGF0YWJhc2UsIHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFj
aywgcGVybWlzc2lvbnMpKTsKLX0KLQotU1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQoRGF0YWJh
c2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBp
bnQgcGVybWlzc2lvbnMpCi0gICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQuaXNvbGF0ZWRDb3B5
KCkpCi0gICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3N0YXRlbWVudENhbGxi
YWNrV3JhcHBlcihjYWxsYmFjaywgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
LSAgICAsIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fcGVybWlzc2lvbnMocGVy
bWlzc2lvbnMpCi17Ci19Ci0KLWJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBk
YikKLXsKLSAgICBBU1NFUlQoIW1fcmVzdWx0U2V0KTsKLQotICAgIC8vIElmIHdlJ3JlIHJlLXJ1
bm5pbmcgdGhpcyBzdGF0ZW1lbnQgYWZ0ZXIgYSBxdW90YSB2aW9sYXRpb24sIHdlIG5lZWQgdG8g
Y2xlYXIgdGhhdCBlcnJvciBub3cKLSAgICBjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCk7Ci0KLSAg
ICAvLyBUaGlzIHRyYW5zYWN0aW9uIG1pZ2h0IGhhdmUgYmVlbiBtYXJrZWQgYmFkIHdoaWxlIGl0
IHdhcyBiZWluZyBzZXQgdXAgb24gdGhlIG1haW4gdGhyZWFkLAotICAgIC8vIHNvIGlmIHRoZXJl
IGlzIHN0aWxsIGFuIGVycm9yLCByZXR1cm4gZmFsc2UuCi0gICAgaWYgKG1fZXJyb3IpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRiLT5zZXRBdXRob3JpemVyUGVybWlzc2lvbnMobV9w
ZXJtaXNzaW9ucyk7Ci0KLSAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJhc2UgPSAmZGItPnNxbGl0
ZURhdGFiYXNlKCk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpkYXRhYmFzZSwg
bV9zdGF0ZW1lbnQpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0g
ICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IlVuYWJsZSB0byB2ZXJpZnkgY29ycmVjdG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0gZXJyb3IgJWkg
KCVzKSIsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0SW50ZXJydXB0KQot
ICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiwgImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHJlc3VsdCwgImludGVycnVwdGVk
Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRl
KFNRTEVycm9yOjpTWU5UQVhfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVz
dWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBkYi0+cmVwb3J0RXhlY3V0
ZVN0YXRlbWVudFJlc3VsdCgxLCBtX2Vycm9yLT5jb2RlKCksIHJlc3VsdCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogIElmIHRoZSBzdGF0ZW1lbnQgdXNl
cyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0ZSwgdGhlIGJpbmQgcGFyYW1ldGVy
IGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBudW1iZXIgb2YgcXVlc3Rpb24gbWFy
a3MuCi0gICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBtaWdodCBiZSB0cnlpbmcgdG8g
ZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cwotICAgIGlmIChzdGF0ZW1lbnQuYmluZFBh
cmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24ndCBtYXRjaCBudW1iZXIgb2YgcXVl
c3Rpb24gbWFya3MiKTsKLSAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoZGItPmlz
SW50ZXJydXB0ZWQoKSA/IFNRTEVycm9yOjpEQVRBQkFTRV9FUlIgOiBTUUxFcnJvcjo6U1lOVEFY
X0VSUiwgIm51bWJlciBvZiAnPydzIGluIHN0YXRlbWVudCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gg
YXJndW1lbnQgY291bnQiKTsKLSAgICAgICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1
bHQoMiwgbV9lcnJvci0+Y29kZSgpLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuYmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50
c1tpXSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkgewotICAgICAgICAg
ICAgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoZGIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQgdG8gYmluZCB2YWx1ZSBpbmRleCAlaSB0byBz
dGF0ZW1lbnQgZm9yIHF1ZXJ5ICclcyciLCBpICsgMSwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICAgICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoMywgU1FM
RXJyb3I6OkRBVEFCQVNFX0VSUiwgcmVzdWx0KTsKLSAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgYmluZCB2YWx1
ZSIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJl
c3VsdFNldCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRlKCk7Ci0KLSAgICAvLyBTdGVwIHNvIHdlIGNh
biBmZXRjaCB0aGUgY29sdW1uIG5hbWVzLgotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgaW50IGNvbHVtbkNv
dW50ID0gc3RhdGVtZW50LmNvbHVtbkNvdW50KCk7Ci0gICAgICAgIFNRTFJlc3VsdFNldFJvd0xp
c3QqIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAgICByb3dzLT5hZGRDb2x1bW4oc3RhdGVt
ZW50LmdldENvbHVtbk5hbWUoaSkpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICByb3dzLT5h
ZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVlKGkpKTsKLQotICAgICAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFNRTFJl
c3VsdFJvdyk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAg
ICAgICAgICBkYi0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg0LCBTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCByZXN1bHQpOwotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgImNvdWxkIG5vdCBpdGVyYXRlIHJlc3VsdHMiLCBy
ZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7
Ci0gICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5zZXJ0Ci0gICAg
ICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQotICAgICAgICAgICAgcmVzdWx0U2V0
LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lEKCkpOwotICAgIH0gZWxzZSBp
ZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAgLy8gUmV0dXJuIHRoZSBRdW90
YSBlcnJvciAtIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNwYWNlIGFuZCB0
aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4KLSAgICAgICAgc2V0RmFpbHVyZUR1ZVRvUXVv
dGEoZGIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGIt
PnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoNSwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwg
cmVzdWx0KTsKLSAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRB
VEFCQVNFX0VSUiwgImNvdWxkIG5vdCBleGVjdXRlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBJZiB0aGUgc3BlYyBhbGxvd3MgdHJpZ2dlcnMsIGFuZCB3ZSB3YW50IHRvIGJl
ICJhY2N1cmF0ZSIgaW4gYSBkaWZmZXJlbnQgd2F5LCB3ZSdkIHVzZQotICAgIC8vIHNxbGl0ZTNf
dG90YWxfY2hhbmdlcygpIGhlcmUgaW5zdGVhZCBvZiBzcWxpdGUzX2NoYW5nZWQsIGJlY2F1c2Ug
dGhhdCBpbmNsdWRlcyByb3dzIG1vZGlmaWVkIGZyb20gd2l0aGluIGEgdHJpZ2dlcgotICAgIC8v
IEZvciBub3csIHRoaXMgc2VlbXMgc3VmZmljaWVudAotICAgIHJlc3VsdFNldC0+c2V0Um93c0Fm
ZmVjdGVkKGRhdGFiYXNlLT5sYXN0Q2hhbmdlcygpKTsKLQotICAgIG1fcmVzdWx0U2V0ID0gcmVz
dWx0U2V0OwotICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDAsIC0xLCAwKTsg
Ly8gT0sKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldERhdGFi
YXNlRGVsZXRlZEVycm9yKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoIW1fZXJy
b3IgJiYgIW1fcmVzdWx0U2V0KTsKLSAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVu
dFJlc3VsdCg2LCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwotICAgIG1fZXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBleGVjdXRlIHN0
YXRlbWVudCwgYmVjYXVzZSB0aGUgdXNlciBkZWxldGVkIHRoZSBkYXRhYmFzZSIpOwotfQotCi12
b2lkIFNRTFN0YXRlbWVudDo6c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihEYXRhYmFzZSogZGF0
YWJhc2UpCi17Ci0gICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgZGF0
YWJhc2UtPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoNywgU1FMRXJyb3I6OlZFUlNJT05f
RVJSLCAwKTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lP
Tl9FUlIsICJjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAg
YXJndW1lbnQgZG8gbm90IG1hdGNoIik7Ci19Ci0KLWJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3Jt
Q2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh0cmFu
c2FjdGlvbik7Ci0KLSAgICBib29sIGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKLQotICAgIFJlZlB0
cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX3N0YXRlbWVudENhbGxiYWNrV3Jh
cHBlci51bndyYXAoKTsKLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjayA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7Ci0K
LSAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZW1lbnQgY2FsbGJhY2sgYW5kIHRyYWNr
IGlmIGl0IHJlc3VsdGVkIGluIGFuIGVycm9yLAotICAgIC8vIGJlY2F1c2UgdGhlbiB3ZSBuZWVk
IHRvIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgotICAgIGlmIChtX2Vy
cm9yKSB7Ci0gICAgICAgIEFTU0VSVChlcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tF
cnJvciA9IGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdl
dCgpKTsKLSAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKQotICAgICAgICBjYWxsYmFja0Vycm9yID0g
IWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIGNhbGxiYWNrRXJyb3I7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRG
YWlsdXJlRHVlVG9RdW90YShEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKCFtX2Vy
cm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgZGF0YWJhc2UtPnJlcG9ydEV4ZWN1dGVTdGF0ZW1l
bnRSZXN1bHQoOCwgU1FMRXJyb3I6OlFVT1RBX0VSUiwgMCk7Ci0gICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlFVT1RBX0VSUiwgInRoZXJlIHdhcyBub3QgZW5vdWdoIHJl
bWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBh
bmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gYWxsb3cgbW9yZSBzcGFjZSIpOwotfQotCi12b2lkIFNR
TFN0YXRlbWVudDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCi17Ci0gICAgaWYgKGxhc3RFeGVj
dXRpb25GYWlsZWREdWVUb1F1b3RhKCkpCi0gICAgICAgIG1fZXJyb3IgPSAwOwotfQotCi1ib29s
IFNRTFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBTUUxFcnJvcjo6UVVPVEFf
RVJSOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCShyZXZp
c2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNRTFN0YXRlbWVudF9oCi0jZGVm
aW5lIFNRTFN0YXRlbWVudF9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTUUxDYWxsYmFja1dyYXBwZXIuaCIKLSNp
bmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIERhdGFiYXNlOwotY2xhc3MgU1FMRXJyb3I7Ci1jbGFzcyBTUUxTdGF0
ZW1lbnRDYWxsYmFjazsKLWNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7Ci1jbGFzcyBT
UUxUcmFuc2FjdGlvbjsKLQotY2xhc3MgU1FMU3RhdGVtZW50IDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFNRTFN0YXRlbWVudD4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudD4gY3JlYXRlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwotCi0gICAg
Ym9vbCBleGVjdXRlKERhdGFiYXNlKik7Ci0gICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVl
VG9RdW90YSgpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNTdGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KLSAg
ICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
bWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KLQotICAgIHZvaWQgc2V0
RGF0YWJhc2VEZWxldGVkRXJyb3IoRGF0YWJhc2UqKTsKLSAgICB2b2lkIHNldFZlcnNpb25NaXNt
YXRjaGVkRXJyb3IoRGF0YWJhc2UqKTsKLQotICAgIGJvb2wgcGVyZm9ybUNhbGxiYWNrKFNRTFRy
YW5zYWN0aW9uKik7Ci0KLSAgICBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJldHVybiBt
X2Vycm9yLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIGNv
bnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwotCi0gICAgdm9pZCBzZXRGYWlsdXJl
RHVlVG9RdW90YShEYXRhYmFzZSopOwotICAgIHZvaWQgY2xlYXJGYWlsdXJlRHVlVG9RdW90YSgp
OwotCi0gICAgU3RyaW5nIG1fc3RhdGVtZW50OwotICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1
bWVudHM7Ci0gICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0
YXRlbWVudENhbGxiYWNrV3JhcHBlcjsKLSAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlcjsKLQotICAg
IFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsKLSAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jl
c3VsdFNldDsKLQotICAgIGludCBtX3Blcm1pc3Npb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIFNR
TFN0YXRlbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1l
bnRDYWxsYmFjay5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNp
Zm5kZWYgU1FMU3RhdGVtZW50Q2FsbGJhY2tfaAotI2RlZmluZSBTUUxTdGF0ZW1lbnRDYWxsYmFj
a19oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1FMVHJhbnNh
Y3Rpb247Ci1jbGFzcyBTUUxSZXN1bHRTZXQ7Ci0KLWNsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNr
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFN0YXRlbWVudENhbGxiYWNrPiB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+U1FMU3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqKSA9IDA7
Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
a19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENhbGxi
YWNrLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxT
dGF0ZW1lbnRDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBzdG9yYWdlIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TUUxf
REFUQUJBU0UsCi0gICAgICAgIENhbGxiYWNrCi0gICAgXSBTUUxTdGF0ZW1lbnRDYWxsYmFjayB7
Ci0gICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gU1FMVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24sIGluIFNRTFJlc3VsdFNldCByZXN1bHRTZXQpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkocmV2
aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrX2gKLSNkZWZpbmUgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
a19oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1FMVHJhbnNh
Y3Rpb247Ci1jbGFzcyBTUUxFcnJvcjsKLQotY2xhc3MgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIHsg
fQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9y
KikgPSAwOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0gICAgaW50ZXJmYWNlIFsKLSAg
ICAgICAgQ29uZGl0aW9uYWw9U1FMX0RBVEFCQVNFLAotICAgICAgICBDYWxsYmFjawotICAgIF0g
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayB7Ci0gICAgICAgIFtDdXN0b21dIGJvb2xlYW4gaGFu
ZGxlRXZlbnQoaW4gU1FMVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24sIGluIFNRTEVycm9yIGVycm9y
KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRT
eW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dFN5bmMuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudFN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCi0KLSNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAi
U1FMRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0jaW5jbHVkZSAiU1FM
VmFsdWUuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0
YXRlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNRTFN0YXRlbWVudFN5bmM6OlNRTFN0
YXRlbWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1
ZT4mIGFyZ3VtZW50cywgaW50IHBlcm1pc3Npb25zKQotICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVt
ZW50KQotICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRzKQotICAgICwgbV9wZXJtaXNzaW9ucyhw
ZXJtaXNzaW9ucykKLXsKLSAgICBBU1NFUlQoIW1fc3RhdGVtZW50LmlzRW1wdHkoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKERhdGFi
YXNlU3luYyogZGIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGRiLT5zZXRBdXRob3JpemVy
UGVybWlzc2lvbnMobV9wZXJtaXNzaW9ucyk7Ci0KLSAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJh
c2UgPSAmZGItPnNxbGl0ZURhdGFiYXNlKCk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KCpkYXRhYmFzZSwgbV9zdGF0ZW1lbnQpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQu
cHJlcGFyZSgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgZWMg
PSAocmVzdWx0ID09IFNRTFJlc3VsdEludGVycnVwdCA/IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0Vf
RVJSIDogU1FMRXhjZXB0aW9uOjpTWU5UQVhfRVJSKTsKLSAgICAgICAgZGItPnNldExhc3RFcnJv
ck1lc3NhZ2UoImNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKHN0
YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291bnQoKSAhPSBtX2FyZ3VtZW50cy5zaXplKCkpIHsKLSAg
ICAgICAgZWMgPSAoZGItPmlzSW50ZXJydXB0ZWQoKT8gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9F
UlIgOiBTUUxFeGNlcHRpb246OlNZTlRBWF9FUlIpOwotICAgICAgICBkYi0+c2V0TGFzdEVycm9y
TWVzc2FnZSgibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRj
aCBhcmd1bWVudCBjb3VudCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmVzdWx0ID0gc3RhdGVtZW50LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOwotICAg
ICAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAgICAgIGVjID0gU1FM
RXhjZXB0aW9uOjpRVU9UQV9FUlI7Ci0gICAgICAgICAgICBkYi0+c2V0TGFzdEVycm9yTWVzc2Fn
ZSgidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UiKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHRPaykgewotICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsK
LSAgICAgICAgICAgIGRiLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjb3VsZCBub3QgYmluZCB2YWx1
ZSIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0
U2V0ID0gU1FMUmVzdWx0U2V0OjpjcmVhdGUoKTsKLQotICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZl
dGNoIHRoZSBjb2x1bW4gbmFtZXMuCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAg
ICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBpbnQgY29sdW1uQ291bnQg
PSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKLSAgICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCog
cm93cyA9IHJlc3VsdFNldC0+cm93cygpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y29sdW1uQ291bnQ7IGkrKykKLSAgICAgICAgICAgIHJvd3MtPmFkZENvbHVtbihzdGF0ZW1lbnQu
Z2V0Q29sdW1uTmFtZShpKSk7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQotICAgICAgICAgICAgICAgIHJvd3MtPmFkZFJl
c3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoaSkpOwotCi0gICAgICAgICAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0
Um93KTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAg
ICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Ci0gICAgICAgICAgICBkYi0+c2V0
TGFzdEVycm9yTWVzc2FnZSgiY291bGQgbm90IGl0ZXJhdGUgcmVzdWx0cyIsIHJlc3VsdCwgZGF0
YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAvLyBE
aWRuJ3QgZmluZCBhbnl0aGluZywgb3Igd2FzIGFuIGluc2VydC4KLSAgICAgICAgaWYgKGRiLT5s
YXN0QWN0aW9uV2FzSW5zZXJ0KCkpCi0gICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElk
KGRhdGFiYXNlLT5sYXN0SW5zZXJ0Um93SUQoKSk7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0g
U1FMUmVzdWx0RnVsbCkgewotICAgICAgICAvLyBRdW90YSBlcnJvciwgdGhlIGRlbGVnYXRlIHdp
bGwgYmUgYXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJl
LXJ1bi4KLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlFVT1RBX0VSUjsKLSAgICAgICAgZGIt
PnNldExhc3RFcnJvck1lc3NhZ2UoInRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFpbmluZyBzdG9y
YWdlIHNwYWNlIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVj
ID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Ci0gICAgICAgIGRiLT5zZXRMYXN0RXJyb3JN
ZXNzYWdlKCJjb3VsZCBub3QgZXhlY3V0ZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJlc3VsdFNl
dC0+c2V0Um93c0FmZmVjdGVkKGRhdGFiYXNlLT5sYXN0Q2hhbmdlcygpKTsKLSAgICByZXR1cm4g
cmVzdWx0U2V0LnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50U3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTUUxTdGF0ZW1lbnRTeW5jX2gKLSNkZWZpbmUgU1FMU3RhdGVtZW50U3luY19oCi0K
LSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
LSNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNl
U3luYzsKLWNsYXNzIFNRTFJlc3VsdFNldDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
LQotY2xhc3MgU1FMU3RhdGVtZW50U3luYyB7Ci1wdWJsaWM6Ci0gICAgU1FMU3RhdGVtZW50U3lu
Yyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBpbnQgcGVybWlzc2lvbnMpOwotCi0gICAgUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IGV4
ZWN1dGUoRGF0YWJhc2VTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOwotCi1wcml2YXRlOgotICAgIFN0
cmluZyBtX3N0YXRlbWVudDsKLSAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRzOwotICAg
IGludCBtX3Blcm1pc3Npb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIFNRTFN0YXRlbWVudFN5bmNf
aApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlz
aW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXpl
ci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhy
ZWFkLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKLSNpbmNsdWRlICJTUUxFcnJvci5oIgotI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0
aW9uLmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50
Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCi0jaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9u
Q2xpZW50LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgi
Ci0jaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0vLyBU
aGVyZSdzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgaG93IG11Y2ggbW9yZSBzcGFjZSB3aWxs
IGJlIHJlcXVpcmVkIHdoZW4gYSBzdGF0ZW1lbnQgaGl0cyB0aGUgcXVvdGEgbGltaXQuCi0vLyBG
b3Igbm93LCB3ZSdsbCBhcmJpdHJhcmlseSBjaG9vc2UgY3VycmVudFF1b3RhICsgMW1iLgotLy8g
SW4gdGhlIGZ1dHVyZSB3ZSBkZWNpZGUgdG8gdHJhY2sgaWYgYSBzaXplIGluY3JlYXNlIHdhc24n
dCBlbm91Z2gsIGFuZCBhc2sgZm9yIGxhcmdlci1hbmQtbGFyZ2VyIGluY3JlYXNlcyB1bnRpbCBp
dHMgZW5vdWdoLgotc3RhdGljIGNvbnN0IGludCBEZWZhdWx0UXVvdGFTaXplSW5jcmVhc2UgPSAx
MDQ4NTc2OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b24+IFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUoRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVh
ZE9ubHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkp
KTsKLX0KLQotU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkp
Ci0gICAgOiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCi0gICAgLCBt
X2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQotICAgICwgbV9kYXRhYmFzZShkYikKLSAgICAsIG1f
d3JhcHBlcih3cmFwcGVyKQotICAgICwgbV9jYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRiLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIo
c3VjY2Vzc0NhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV9l
cnJvckNhbGxiYWNrV3JhcHBlcihlcnJvckNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQotICAgICwgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCi0gICAg
LCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCi0gICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkK
LSAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCi0gICAgLCBtX2hhc1ZlcnNpb25NaXNtYXRjaChm
YWxzZSkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZSk7Ci19Ci0KLVNRTFRyYW5zYWN0aW9uOjp+
U1FMVHJhbnNhY3Rpb24oKQotewotICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7Ci19
Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0
ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxT
dGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gY2FsbGJhY2tFcnJvciwgRXhjZXB0aW9uQ29kZSYgZSkKLXsKLSAgICBpZiAoIW1f
ZXhlY3V0ZVNxbEFsbG93ZWQgfHwgIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIGUg
PSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBw
ZXJtaXNzaW9ucyA9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKLSAgICBpZiAo
IW1fZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNzKCkpCi0g
ICAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6Tm9BY2Nlc3NNYXNrOwot
ICAgIGVsc2UgaWYgKG1fcmVhZE9ubHkpCi0gICAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNl
QXV0aG9yaXplcjo6UmVhZE9ubHlNYXNrOwotCi0gICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3Rh
dGVtZW50ID0gU1FMU3RhdGVtZW50OjpjcmVhdGUobV9kYXRhYmFzZS5nZXQoKSwgc3FsU3RhdGVt
ZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBjYWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7Ci0K
LSAgICBpZiAobV9kYXRhYmFzZS0+ZGVsZXRlZCgpKQotICAgICAgICBzdGF0ZW1lbnQtPnNldERh
dGFiYXNlRGVsZXRlZEVycm9yKG1fZGF0YWJhc2UuZ2V0KCkpOwotCi0gICAgZW5xdWV1ZVN0YXRl
bWVudChzdGF0ZW1lbnQpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uOjplbnF1ZXVlU3RhdGVt
ZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQpCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOwotICAgIG1fc3RhdGVtZW50UXVldWUuYXBwZW5k
KHN0YXRlbWVudCk7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1jb25zdCBjaGFyKiBTUUxUcmFu
c2FjdGlvbjo6ZGVidWdTdGVwTmFtZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0
aG9kIHN0ZXApCi17Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9j
aykKLSAgICAgICAgcmV0dXJuICJhY3F1aXJlTG9jayI7Ci0gICAgZWxzZSBpZiAoc3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKLSAgICAgICAgcmV0
dXJuICJvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQiOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKQotICAgICAgICByZXR1cm4gInJ1blN0YXRl
bWVudHMiOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0
QW5kQ29tbWl0KQotICAgICAgICByZXR1cm4gInBvc3RmbGlnaHRBbmRDb21taXQiOwotICAgIGVs
c2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clRyYW5zYWN0aW9uQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclRyYW5zYWN0aW9u
Q2FsbGJhY2siOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVy
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2siOwotICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclN0YXRl
bWVudENhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyUXVvdGFJ
bmNyZWFzZUNhbGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6
ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vzc0Nh
bGxiYWNrIjsKLSAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFm
dGVyU3VjY2Vzc0NhbGxiYWNrKQotICAgICAgICByZXR1cm4gImNsZWFudXBBZnRlclN1Y2Nlc3ND
YWxsYmFjayI7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gIlVOS05PV04iOwotfQotI2VuZGlm
Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRl
ZERhdGFiYXNlKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZS0+b3BlbmVkKCkgJiYgIW1fZGF0YWJh
c2UtPmlzSW50ZXJydXB0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIGRh
dGFiYXNlIHdhcyBzdG9wcGVkLCBkb24ndCBkbyBhbnl0aGluZyBhbmQgY2FuY2VsIHF1ZXVlZCB3
b3JrCi0gICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSB3YXMgc3RvcHBlZCBvciBpbnRlcnJ1
cHRlZCAtIGNhbmNlbGxpbmcgd29yayBmb3IgdGhpcyB0cmFuc2FjdGlvbiIpOwotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKLSAgICBtX3N0YXRlbWVudFF1ZXVlLmNs
ZWFyKCk7Ci0gICAgbV9uZXh0U3RlcCA9IDA7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSB1bm5lZWRl
ZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgbV9jYWxsYmFja1dy
YXBwZXIuY2xlYXIoKTsKLSAgICBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKLSAg
ICBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0KLSAgICAvLyBUaGUgbmV4dCBzdGVw
cyBzaG91bGQgYmUgZXhlY3V0ZWQgb25seSBpZiB3ZSdyZSBvbiB0aGUgREIgdGhyZWFkLgotICAg
IGlmIChjdXJyZW50VGhyZWFkKCkgIT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRh
dGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRoZSBjdXJyZW50IFNRTGl0ZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgc3RvcHBlZCwgYXMgd2Vs
bAotICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNh
Y3Rpb24tPnN0b3AoKTsKLSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAg
IH0KLQotICAgIGlmIChtX2xvY2tBY3F1aXJlZCkKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKLX0KLQotCi1ib29sIFNRTFRy
YW5zYWN0aW9uOjpwZXJmb3JtTmV4dFN0ZXAoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU3Rl
cCAlc1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7Ci0KLSAgICBBU1NFUlQobV9uZXh0
U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrIHx8Ci0gICAgICAgICAgIG1fbmV4
dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgfHwK
LSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMg
fHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRB
bmRDb21taXQgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmNs
ZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayB8fAotICAgICAgICAgICBtX25leHRTdGVwID09ICZT
UUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKTsKLQot
ICAgIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCk7Ci0KLSAgICBp
ZiAobV9uZXh0U3RlcCkKLSAgICAgICAgKHRoaXMtPiptX25leHRTdGVwKSgpOwotCi0gICAgLy8g
SWYgdGhlcmUgaXMgbm8gbmV4dFN0ZXAgYWZ0ZXIgcGVyZm9ybWluZyB0aGUgYWJvdmUgc3RlcCwg
dGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlCi0gICAgcmV0dXJuICFtX25leHRTdGVwOwotfQot
Ci12b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiYWNrKCkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIkNhbGxiYWNrICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXAp
KTsKLQotICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRy
YW5zYWN0aW9uQ2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNh
Y3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgfHwKLSAgICAgICAgICAgbV9u
ZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayB8fAot
ICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5j
cmVhc2VDYWxsYmFjayB8fAotICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayk7Ci0KLSAgICBjaGVja0FuZEhhbmRsZUNsb3NlZE9y
SW50ZXJydXB0ZWREYXRhYmFzZSgpOwotCi0gICAgaWYgKG1fbmV4dFN0ZXApCi0gICAgICAgICh0
aGlzLT4qbV9uZXh0U3RlcCkoKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6bm90aWZ5RGF0
YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpCi17Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBkYXRhYmFzZSgpLT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0
VGhyZWFkSUQoKSk7Ci0KLSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3Ms
IHdlIHNob3VsZCByb2xsIGl0IGJhY2sgaGVyZSwgc2luY2UgdGhpcyBpcyBvdXIgbGFzdAotICAg
IC8vIG9wb3J0dW5pdHkgdG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0cmFuc2FjdGlv
biBvbiB0aGUgREIgdGhyZWFkLgotICAgIC8vIENsZWFyaW5nIG1fc3FsaXRlVHJhbnNhY3Rpb24g
aW52b2tlcyBTUUxpdGVUcmFuc2FjdGlvbidzIGRlc3RydWN0b3Igd2hpY2ggZG9lcyBqdXN0IHRo
YXQuCi0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotfQotCi12b2lkIFNRTFRyYW5z
YWN0aW9uOjphY3F1aXJlTG9jaygpCi17Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpLT5hY3F1aXJlTG9jayh0aGlzKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6
bG9ja0FjcXVpcmVkKCkKLXsKLSAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7Ci0gICAgbV9uZXh0
U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0OwotICAg
IExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQg
aW1tZWRpYXRlbHkgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNl
LT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKLX0KLQotdm9pZCBTUUxUcmFu
c2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKLXsKLSAgICBBU1NFUlQoIW1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAg
IEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7Ci0KLSAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5pbmcg
YW5kIHByZWZsaWdodGluZyB0cmFuc2FjdGlvbiAlcCIsIHRoaXMpOwotCi0gICAgLy8gSWYgdGhl
IGRhdGFiYXNlIHdhcyBkZWxldGVkLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjawotICAgIGlm
IChtX2RhdGFiYXNlLT5kZWxldGVkKCkpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3Rh
cnRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwotICAgICAg
ICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dO
X0VSUiwgInVuYWJsZSB0byBvcGVuIGEgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdGhlIHVzZXIgZGVs
ZXRlZCB0aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNh
Z2UgZm9yIHRoaXMgdHJhbnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQt
b25seQotICAgIGlmICghbV9yZWFkT25seSkKLSAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0
YWJhc2UoKS5zZXRNYXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKLQotICAg
IEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9
IGFkb3B0UHRyKG5ldyBTUUxpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFz
ZSgpLCBtX3JlYWRPbmx5KSk7Ci0KLSAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKLSAg
ICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rp
b24tPmJlZ2luKCk7Ci0gICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotCi0gICAg
Ly8gVHJhbnNhY3Rpb24gU3RlcHMgMSsyIC0gT3BlbiBhIHRyYW5zYWN0aW9uIHRvIHRoZSBkYXRh
YmFzZSwganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscwotICAgIGlm
ICghbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXJy
b3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3Io
KSk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJy
b3I6OkRBVEFCQVNFX0VSUiwgInVuYWJsZSB0byBiZWdpbiB0cmFuc2FjdGlvbiIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRl
RGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICAg
ICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBOb3RlOiBXZSBpbnRlbnRpb25hbGx5IHJldHJpZXZlIHRoZSBhY3R1YWwgdmVy
c2lvbiBldmVuIHdpdGggYW4gZW1wdHkgZXhwZWN0ZWQgdmVyc2lvbi4KLSAgICAvLyBJbiBtdWx0
aS1wcm9jZXNzIGJyb3dzZXJzLCB3ZSB0YWtlIHRoaXMgb3Bwb3J0aW51dGl5IHRvIHVwZGF0ZSB0
aGUgY2FjaGVkIHZhbHVlIGZvcgotICAgIC8vIHRoZSBhY3R1YWwgdmVyc2lvbi4gSW4gc2luZ2xl
LXByb2Nlc3MgYnJvd3NlcnMsIHRoaXMgaXMganVzdCBhIG1hcCBsb29rdXAuCi0gICAgU3RyaW5n
IGFjdHVhbFZlcnNpb247Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5nZXRBY3R1YWxWZXJzaW9uRm9y
VHJhbnNhY3Rpb24oYWN0dWFsVmVyc2lvbikpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0
U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpKTsKLSAgICAgICAgbV90cmFuc2FjdGlv
bkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxl
IHRvIHJlYWQgdmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIG1fZGF0YWJh
c2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xl
YXIoKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotICAgICAgICBo
YW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtX2hhc1ZlcnNpb25NaXNtYXRjaCA9ICFtX2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5p
c0VtcHR5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtX2RhdGFiYXNlLT5leHBl
Y3RlZFZlcnNpb24oKSAhPSBhY3R1YWxWZXJzaW9uKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXBzIDMgLSBQZWZvcm0gcHJlZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxs
YmFjayBpZiB0aGV5IGZhaWwKLSAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZv
cm1QcmVmbGlnaHQodGhpcykpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6
ZXIoKTsKLSAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgICAgICBtX2Rh
dGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9
IG1fd3JhcHBlci0+c3FsRXJyb3IoKTsKLSAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uRXJyb3Ip
IHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQo
NCwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25F
cnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5rbm93biBl
cnJvciBvY2N1cnJlZCBkdXJpbmcgdHJhbnNhY3Rpb24gcHJlZmxpZ2h0Iik7Ci0gICAgICAgIH0K
LSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDQgLSBJbnZva2UgdGhlIHRyYW5zYWN0
aW9uIGNhbGxiYWNrIHdpdGggdGhlIG5ldyBTUUxUcmFuc2FjdGlvbiBvYmplY3QKLSAgICBtX25l
eHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjazsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sg
Zm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRy
YW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2
ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCkKLXsKLSAgICBib29sIHNob3VsZERlbGl2ZXJFcnJvckNh
bGxiYWNrID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2Fs
bGJhY2sgPSBtX2NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKLSAgICBpZiAoY2FsbGJhY2spIHsK
LSAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3VsZERlbGl2
ZXJFcnJvckNhbGxiYWNrID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKTsKLSAgICAgICAg
bV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRyYW5zYWN0aW9u
IFN0ZXAgNSAtIElmIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgbnVsbCBvciByYWlzZWQg
YW4gZXhjZXB0aW9uLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjawotICAgIGlmIChzaG91bGRE
ZWxpdmVyRXJyb3JDYWxsYmFjaykgewotICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRy
YW5zYWN0aW9uUmVzdWx0KDUsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgIG1f
dHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJS
LCAidGhlIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgd2FzIG51bGwgb3IgdGhyZXcgYW4gZXhjZXB0
aW9uIik7Ci0gICAgICAgIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKLQotICAgIG1fZGF0YWJh
c2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSwotfQotCi12
b2lkIFNRTFRyYW5zYWN0aW9uOjpzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpCi17Ci0gICAgbV9u
ZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50czsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVtZW50cyBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRo
aXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOwotfQot
Ci12b2lkIFNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKCkKLXsKLSAgICBBU1NFUlQobV9s
b2NrQWNxdWlyZWQpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYSBzZXJpZXMgb2Ygc3RhdGVtZW50
cyBxdWV1ZWQgdXAgdGhhdCBhcmUgYWxsIHN1Y2Nlc3NmdWwgYW5kIGhhdmUgbm8gYXNzb2NpYXRl
ZAotICAgIC8vIFNRTFN0YXRlbWVudENhbGxiYWNrIG9iamVjdHMsIHRoZW4gd2UgY2FuIGJ1cm4g
dGhyb3VnaCB0aGUgcXVldWUKLSAgICBkbyB7Ci0gICAgICAgIGlmIChtX3Nob3VsZFJldHJ5Q3Vy
cmVudFN0YXRlbWVudCAmJiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3Fs
aXRlKCkpIHsKLSAgICAgICAgICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gZmFs
c2U7Ci0gICAgICAgICAgICAvLyBGSVhNRSAtIEFub3RoZXIgcGxhY2UgdGhhdCBuZWVkcyBmaXhp
bmcgdXAgYWZ0ZXIgPHJkYXI6Ly9wcm9ibGVtLzU2Mjg0Njg+IGlzIGFkZHJlc3NlZC4KLSAgICAg
ICAgICAgIC8vIFNlZSA6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpIGZvciBkaXNjdXNz
aW9uCi0KLSAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBtYXhpbXVtIHNpemUgaGVyZSwgYXMgaXQg
d2FzIGluY3JlYXNlZCB0byBhbGxvdyB1cyB0byByZXRyeSB0aGlzIHN0YXRlbWVudC4KLSAgICAg
ICAgICAgIC8vIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50IGlzIHNldCB0byB0cnVlIG9u
bHkgd2hlbiBhIHN0YXRlbWVudCBleGNlZWRzCi0gICAgICAgICAgICAvLyB0aGUgcXVvdGEsIHdo
aWNoIGNhbiBoYXBwZW4gb25seSBpbiBhIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24uIFRoZXJlZm9y
ZSwgdGhlcmUKLSAgICAgICAgICAgIC8vIGlzIG5vIG5lZWQgdG8gY2hlY2sgaGVyZSBpZiB0aGUg
dHJhbnNhY3Rpb24gaXMgcmVhZC13cml0ZS4KLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCkuc2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQg
aGFzIGFscmVhZHkgYmVlbiBydW4sIGZhaWxlZCBkdWUgdG8gcXVvdGEgY29uc3RyYWludHMsIGFu
ZCB3ZSdyZSBub3QgcmV0cnlpbmcgaXQsCi0gICAgICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IGVu
ZGVkIGluIGFuIGVycm9yLiAgSGFuZGxlIGl0IG5vdwotICAgICAgICAgICAgaWYgKG1fY3VycmVu
dFN0YXRlbWVudCAmJiBtX2N1cnJlbnRTdGF0ZW1lbnQtPmxhc3RFeGVjdXRpb25GYWlsZWREdWVU
b1F1b3RhKCkpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3Io
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN0YXRlbWVudAotICAgICAgICAgICAg
Z2V0TmV4dFN0YXRlbWVudCgpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAocnVuQ3VycmVudFN0
YXRlbWVudCgpKTsKLQotICAgIC8vIElmIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSByZXR1cm5lZCBm
YWxzZSwgdGhhdCBtZWFucyBlaXRoZXIgdGhlcmUgd2FzIG5vIGN1cnJlbnQgc3RhdGVtZW50IHRv
IHJ1biwKLSAgICAvLyBvciB0aGUgY3VycmVudCBzdGF0ZW1lbnQgcmVxdWlyZXMgYSBjYWxsYmFj
ayB0byBjb21wbGV0ZS4gIEluIHRoZSBsYXRlciBjYXNlLCBpdCBhbHNvIHNjaGVkdWxlZAotICAg
IC8vIHRoZSBjYWxsYmFjayBvciBwZXJmb3JtZWQgYW55IG90aGVyIGFkZGl0aW9uYWwgd29yayBz
byB3ZSBjYW4gcmV0dXJuCi0gICAgaWYgKCFtX2N1cnJlbnRTdGF0ZW1lbnQpCi0gICAgICAgIHBv
c3RmbGlnaHRBbmRDb21taXQoKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6Z2V0TmV4dFN0
YXRlbWVudCgpCi17Ci0gICAgbV9jdXJyZW50U3RhdGVtZW50ID0gMDsKLQotICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKLSAgICBpZiAoIW1fc3RhdGVtZW50UXVldWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlbWVudCA9IG1fc3RhdGVtZW50UXVl
dWUudGFrZUZpcnN0KCk7Ci0gICAgfQotfQotCi1ib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJy
ZW50U3RhdGVtZW50KCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7Ci0KLSAg
ICBpZiAobV9oYXNWZXJzaW9uTWlzbWF0Y2gpCi0gICAgICAgIG1fY3VycmVudFN0YXRlbWVudC0+
c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKLQotICAgIGlmICht
X2N1cnJlbnRTdGF0ZW1lbnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsKLSAgICAgICAg
aWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgewotICAgICAgICAg
ICAgLy8gRmxhZyB0aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBkYXRhYmFz
ZSBmb3IgbGF0ZXIgZGVsZWdhdGUgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICBtX21vZGlmaWVk
RGF0YWJhc2UgPSB0cnVlOwotICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0
aGlzIGRhdGFiYXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCi0gICAgICAgICAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRh
dGFiYXNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+
aGFzU3RhdGVtZW50Q2FsbGJhY2soKSkgewotICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOwotICAgICAgICAgICAgTE9HKFN0
b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayBmb3IgdHJhbnNh
Y3Rpb24gJXBcbiIsIHRoaXMpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFu
c2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX2N1cnJlbnRTdGF0
ZW1lbnQtPmxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpIHsKLSAgICAgICAgbV9uZXh0
U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjazsKLSAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2Fs
bGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+
c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZUN1cnJlbnRTdGF0ZW1l
bnRFcnJvcigpCi17Ci0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgNi5lcnJvciAtIENhbGwgdGhl
IHN0YXRlbWVudCdzIGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVycm9yIGNh
bGxiYWNrLAotICAgIC8vIG9yIHRoZSB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2ssIGp1bXAg
dG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrCi0gICAgaWYgKG1fY3VycmVudFN0YXRl
bWVudC0+aGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpICYmICFtX3NxbGl0ZVRyYW5zYWN0aW9u
LT53YXNSb2xsZWRCYWNrQnlTcWxpdGUoKSkgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRy
YW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7Ci0gICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9u
ICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNh
bGxiYWNrKHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9
IG1fY3VycmVudFN0YXRlbWVudC0+c3FsRXJyb3IoKTsKLSAgICAgICAgaWYgKCFtX3RyYW5zYWN0
aW9uRXJyb3IpIHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0
aW9uUmVzdWx0KDEsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIDApOwotICAgICAgICAgICAgbV90
cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCAidGhlIHN0YXRlbWVudCBmYWlsZWQgdG8gZXhlY3V0ZSIpOwotICAgICAgICB9Ci0gICAgICAg
IGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJy
ZW50U3RhdGVtZW50KTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNi42IGFuZCA2LjMoZXJy
b3IpIC0gSWYgdGhlIHN0YXRlbWVudCBjYWxsYmFjayB3ZW50IHdyb25nLCBqdW1wIHRvIHRoZSB0
cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjawotICAgIC8vIE90aGVyd2lzZSwgY29udGludWUgdG8g
bG9vcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgcXVldWUKLSAgICBtX2V4ZWN1dGVTcWxBbGxvd2Vk
ID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IG1fY3VycmVudFN0YXRlbWVudC0+cGVyZm9ybUNh
bGxiYWNrKHRoaXMpOwotICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKLQotICAgIGlm
IChyZXN1bHQpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25S
ZXN1bHQoMiwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKLSAgICAgICAgbV90cmFuc2FjdGlv
bkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUgc3Rh
dGVtZW50IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVycm9yIGNh
bGxiYWNrIGRpZCBub3QgcmV0dXJuIGZhbHNlIik7Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9u
RXJyb3IodHJ1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRz
KCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJh
Y2soKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZW1lbnQpOwotICAgIEFTU0VSVCghbV9z
aG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQpOwotCi0gICAgbV9zaG91bGRSZXRyeUN1cnJlbnRT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90
YShkYXRhYmFzZSgpKTsKLQotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0
YXRlbWVudHM7Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIHJ1blN0YXRlbWVudHMg
Zm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRy
YW5zYWN0aW9uU3RlcCh0aGlzKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdo
dEFuZENvbW1pdCgpCi17Ci0gICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKLQotICAgIC8vIFRy
YW5zYWN0aW9uIFN0ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRo
ZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwKLSAgICBpZiAobV93cmFwcGVyICYmICFtX3dy
YXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KHRoaXMpKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25F
cnJvciA9IG1fd3JhcHBlci0+c3FsRXJyb3IoKTsKLSAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9u
RXJyb3IpIHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KDMsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgICAgICBtX3RyYW5z
YWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVu
a25vd24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9uIHBvc3RmbGlnaHQiKTsKLSAg
ICAgICAgfQotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRyYW5zYWN0b24gU3RlcCA4KzkgLSBDb21taXQgdGhl
IHRyYW5zYWN0aW9uLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGF0IGZhaWxz
Ci0gICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOwotCi0gICAgbV9kYXRhYmFzZS0+ZGlz
YWJsZUF1dGhvcml6ZXIoKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAg
ICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7Ci0KLSAgICAvLyBJZiB0aGUgY29tbWl0
IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9n
cmVzcyIKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAg
ICAgIGlmIChtX3dyYXBwZXIpCi0gICAgICAgICAgICBtX3dyYXBwZXItPmhhbmRsZUNvbW1pdEZh
aWxlZEFmdGVyUG9zdGZsaWdodCh0aGlzKTsKLSAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFw
cGVyLmNsZWFyKCk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KDQsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFi
YXNlKCkubGFzdEVycm9yKCkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJv
cjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJ1bmFibGUgdG8gY29tbWl0IHRyYW5z
YWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5zcWxp
dGVEYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25F
cnJvcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2RhdGFiYXNlLT5y
ZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCi0KLSAgICAvLyBW
YWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxldGVkLgotICAgIGlmIChtX2Rh
dGFiYXNlLT5oYWREZWxldGVzKCkpCi0gICAgICAgIG1fZGF0YWJhc2UtPmluY3JlbWVudGFsVmFj
dXVtSWZOZWVkZWQoKTsKLQotICAgIC8vIFRoZSBjb21taXQgd2FzIHN1Y2Nlc3NmdWwuIElmIHRo
ZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3RpZnkgdGhlIGRlbGVnYXRl
cy4KLSAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQotICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNlKCkpOwot
Ci0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0KLSAg
ICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNrLCBpZiB0
aGVyZSBpcyBvbmUKLSAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNr
KCkpIHsKLSAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nl
c3NDYWxsYmFjazsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJT
dWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9k
YXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgIH0gZWxzZQot
ICAgICAgICBjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2soKTsKLX0KLQotdm9pZCBTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpCi17Ci0gICAgLy8gVHJhbnNhY3Rpb24g
U3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjawotICAgIFJlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsK
LSAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKQotICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KCk7Ci0KLSAgICAvLyBTY2hlZHVsZSBhICJwb3N0LXN1Y2Nlc3MgY2FsbGJhY2siIHN0
ZXAgdG8gcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGRhdGFiYXNlIHRocmVhZCBpbiBjYXNlIHRoZXJl
Ci0gICAgLy8gYXJlIGZ1cnRoZXIgdHJhbnNhY3Rpb25zIHF1ZXVlZCB1cCBmb3IgdGhpcyBEYXRh
YmFzZQotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nl
c3NDYWxsYmFjazsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVy
U3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRh
YmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNh
Y3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fbG9j
a0FjcXVpcmVkKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEgLSBFbmQgdHJhbnNhY3Rp
b24gc3RlcHMKLSAgICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlXG4iLCB0aGlzKTsKLSAgICBBU1NFUlQoIW1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICBtX25leHRTdGVwID0gMDsKLQotICAg
IC8vIFJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBkYXRhYmFzZQotICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7Ci19Ci0KLXZvaWQgU1FM
VHJhbnNhY3Rpb246OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQotewot
ICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKLSAgICAgICAg
aWYgKGluQ2FsbGJhY2spCi0gICAgICAgICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKLSAgICAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
IGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgICAgICAgICBtX2RhdGFiYXNlLT5z
Y2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIE5vIGVycm9yIGNhbGxiYWNrLCBzbyBmYXN0LWZvcndhcmQg
dG86Ci0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlv
bi4KLSAgICBpZiAoaW5DYWxsYmFjaykgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5z
YWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7Ci0gICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+
c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2xl
YW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12b2lkIFNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKLXsKLSAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkVycm9yKTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIg
LSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0Ci0gICAgLy8g
ZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgotICAgIFJlZlB0cjxT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJh
Y2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChlcnJvckNhbGxiYWNrKQotICAgICAgICBlcnJv
ckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwotCi0gICAg
bV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKLX0KLQotdm9pZCBT
UUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKLXsK
LSAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOwotCi0gICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1
dGhvcml6ZXIoKTsKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgewotICAgICAgICAvLyBU
cmFuc2FjdGlvbiBTdGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLgotICAgICAgICBt
X3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwotCi0gICAgICAgIEFTU0VSVCghbV9kYXRh
YmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICB9Ci0gICAgbV9kYXRhYmFzZS0+ZW5h
YmxlQXV0aG9yaXplcigpOwotCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIEFueSBzdGls
bC1wZW5kaW5nIHN0YXRlbWVudHMgaW4gdGhlIHRyYW5zYWN0aW9uIGFyZSBkaXNjYXJkZWQuCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAg
ICAgIG1fc3RhdGVtZW50UXVldWUuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBUcmFuc2FjdGlv
biBpcyBjb21wbGV0ZSEgIFRoZXJlIGlzIG5vIG5leHQgc3RlcAotICAgIExPRyhTdG9yYWdlQVBJ
LCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGUgd2l0aCBhbiBlcnJvclxuIiwgdGhpcyk7Ci0g
ICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKTsKLSAgICBtX25leHRTdGVwID0gMDsKLQotICAgIC8vIE5vdyByZWxlYXNlIHRoZSBs
b2NrIG9uIHRoaXMgZGF0YWJhc2UKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
I2lmbmRlZiBTUUxUcmFuc2FjdGlvbl9oCi0jZGVmaW5lIFNRTFRyYW5zYWN0aW9uX2gKLQotI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKLSNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZTsKLWNsYXNzIFNRTEVycm9yOwotY2xh
c3MgU1FMaXRlVHJhbnNhY3Rpb247Ci1jbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFjazsKLWNsYXNz
IFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbjsKLWNsYXNz
IFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s7Ci1jbGFzcyBTUUxWYWx1ZTsKLWNsYXNzIFZvaWRDYWxsYmFjazsKLQotdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgU1FMVHJhbnNhY3Rpb25XcmFwcGVyIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gewotcHVibGljOgotICAg
IHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uV3JhcHBlcigpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIFNRTEVy
cm9yKiBzcWxFcnJvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ29tbWl0
RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKikgPSAwOwotfTsKLQotY2xhc3Mg
U1FMVHJhbnNhY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rp
b24+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3Jl
YXRlKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wgcmVhZE9ubHkgPSBmYWxzZSk7Ci0KLSAg
ICB+U1FMVHJhbnNhY3Rpb24oKTsKLQotICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcm
IHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLAotICAgICAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0
cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9p
ZCBsb2NrQWNxdWlyZWQoKTsKLSAgICBib29sIHBlcmZvcm1OZXh0U3RlcCgpOwotICAgIHZvaWQg
cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOwotCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyBy
ZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQotICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0dXJu
IG1fcmVhZE9ubHk7IH0KLSAgICB2b2lkIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rv
d24oKTsKLQotcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiwKLSAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7Ci0KLSAg
ICB0eXBlZGVmIHZvaWQgKFNRTFRyYW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgp
OwotICAgIFRyYW5zYWN0aW9uU3RlcE1ldGhvZCBtX25leHRTdGVwOwotCi0gICAgdm9pZCBlbnF1
ZXVlU3RhdGVtZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Pik7Ci0KLSAgICB2b2lkIGNoZWNr
QW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCk7Ci0KLSAgICB2b2lkIGFjcXVp
cmVMb2NrKCk7Ci0gICAgdm9pZCBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKTsKLSAgICB2
b2lkIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCk7Ci0gICAgdm9pZCBzY2hlZHVsZVRvUnVu
U3RhdGVtZW50cygpOwotICAgIHZvaWQgcnVuU3RhdGVtZW50cygpOwotICAgIHZvaWQgZ2V0TmV4
dFN0YXRlbWVudCgpOwotICAgIGJvb2wgcnVuQ3VycmVudFN0YXRlbWVudCgpOwotICAgIHZvaWQg
aGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7Ci0gICAgdm9pZCBkZWxpdmVyU3RhdGVtZW50
Q2FsbGJhY2soKTsKLSAgICB2b2lkIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2soKTsKLSAg
ICB2b2lkIHBvc3RmbGlnaHRBbmRDb21taXQoKTsKLSAgICB2b2lkIGRlbGl2ZXJTdWNjZXNzQ2Fs
bGJhY2soKTsKLSAgICB2b2lkIGNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpOwotICAgIHZv
aWQgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGluQ2FsbGJhY2spOwotICAgIHZvaWQgZGVs
aXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwotICAgIHZvaWQgY2xlYW51cEFmdGVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGRlYnVnU3RlcE5hbWUoVHJhbnNhY3Rpb25TdGVwTWV0aG9kKTsKLSNlbmRp
ZgotCi0gICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gbV9jdXJyZW50U3RhdGVtZW50OwotCi0gICAg
Ym9vbCBtX2V4ZWN1dGVTcWxBbGxvd2VkOwotCi0gICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFi
YXNlOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IG1fd3JhcHBlcjsKLSAgICBT
UUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gbV9jYWxsYmFja1dyYXBw
ZXI7Ci0gICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJh
Y2tXcmFwcGVyOwotICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+IG1fZXJyb3JDYWxsYmFja1dyYXBwZXI7Ci0gICAgUmVmUHRyPFNRTEVycm9yPiBtX3Ry
YW5zYWN0aW9uRXJyb3I7Ci0gICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsK
LSAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKLSAgICBib29sIG1fbG9ja0FjcXVpcmVkOwot
ICAgIGJvb2wgbV9yZWFkT25seTsKLSAgICBib29sIG1faGFzVmVyc2lvbk1pc21hdGNoOwotCi0g
ICAgTXV0ZXggbV9zdGF0ZW1lbnRNdXRleDsKLSAgICBEZXF1ZTxSZWZQdHI8U1FMU3RhdGVtZW50
PiA+IG1fc3RhdGVtZW50UXVldWU7Ci0KLSAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1f
c3FsaXRlVHJhbnNhY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRp
dGlvbmFsPVNRTF9EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yLAotICAgICAgICBK
U05vU3RhdGljVGFibGVzCi0gICAgXSBTUUxUcmFuc2FjdGlvbiB7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgZXhlY3V0ZVNxbChpbiBET01TdHJpbmcgc3FsU3RhdGVtZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gU1FMU3RhdGVt
ZW50Q2FsbGJhY2sgY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBbT3B0aW9uYWwsIENhbGxiYWNrXSBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIGVycm9yQ2Fs
bGJhY2spOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKlRyYW5zYWN0aW9uCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2tfaAot
I2RlZmluZSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCi0KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBTUUxUcmFuc2FjdGlvbjsKLQotY2xhc3MgU1FMVHJhbnNhY3Rp
b25DYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25DYWxsYmFjaygp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiopID0gMDsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIHN0b3JhZ2UgewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVNR
TF9EQVRBQkFTRSwKLSAgICAgICAgQ2FsbGJhY2sKLSAgICBdIFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2sgewotICAgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNRTFRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25D
bGllbnQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiRGF0
YWJhc2VUcmFja2VyLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBT
UUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihBYnN0cmFjdERh
dGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hl
ZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCgKLSAgICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3Jp
Z2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFNRTFRyYW5z
YWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFi
YXNlKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZChk
YXRhYmFzZSk7Ci19Ci0KLWJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3Rh
KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIEFTU0VSVChkYXRhYmFzZS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgdW5zaWduZWQg
bG9uZyBsb25nIGN1cnJlbnRRdW90YSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3Rh
Rm9yT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBkYXRhYmFzZS0+ZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlRXhjZWVkZWRRdW90YShkYXRhYmFzZS0+c3RyaW5nSWRl
bnRpZmllcigpKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEgPSBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4o
KSk7Ci0gICAgcmV0dXJuIChuZXdRdW90YSA+IGN1cnJlbnRRdW90YSk7Ci19Ci0KLX0KLQotI2Vu
ZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU1FMVHJhbnNhY3Rpb25DbGllbnRfaAotI2RlZmluZSBTUUxU
cmFuc2FjdGlvbkNsaWVudF9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBYnN0cmFjdERhdGFiYXNlOwotCi0vLyBBIGNs
aWVudCB0byB0aGUgU1FMVHJhbnNhY3Rpb24gY2xhc3MuIEFsbG93cyBTUUxUcmFuc2FjdGlvbiB0
byBub3RpZnkgaW50ZXJlc3RlZAotLy8gcGFydGllcyB0aGF0IGNlcnRhaW4gdGhpbmdzIGhhdmUg
aGFwcGVuZWQgaW4gYSB0cmFuc2FjdGlvbi4KLWNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNsaWVudCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KCkgeyB9
Ci0gICAgdm9pZCBkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqKTsK
LSAgICB2b2lkIGRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIGJv
b2wgZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSopOwotfTsKLQotfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ2xpZW50
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0
YWJhc2UuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQotewotICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOwot
ICAgIEFTU0VSVChkYXRhYmFzZSk7Ci0gICAgcmV0dXJuIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlm
aWVyKCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1BlbmRp
bmdUcmFuc2FjdGlvbnMoQ29vcmRpbmF0aW9uSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoaW5mby5h
Y3RpdmVXcml0ZVRyYW5zYWN0aW9uIHx8IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gZmlyc3RQ
ZW5kaW5nVHJhbnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKTsKLSAg
ICBpZiAoZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBk
byB7Ci0gICAgICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGluZm8ucGVuZGluZ1Ry
YW5zYWN0aW9ucy50YWtlRmlyc3QoKTsKLSAgICAgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5z
YWN0aW9ucy5hZGQoZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24pOwotICAgICAgICAgICAgZmlyc3RQ
ZW5kaW5nVHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOwotICAgICAgICB9IHdoaWxlICghaW5m
by5wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSAmJiBpbmZvLnBlbmRpbmdUcmFuc2FjdGlv
bnMuZmlyc3QoKS0+aXNSZWFkT25seSgpKTsKLSAgICB9IGVsc2UgaWYgKGluZm8uYWN0aXZlUmVh
ZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rp
b25zLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9
IGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uOwotICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlv
bi0+bG9ja0FjcXVpcmVkKCk7Ci0gICAgfQotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBT
dHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsK
LQotICAgIENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmllcik7Ci0gICAgaWYg
KGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9PSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCkp
IHsKLSAgICAgICAgLy8gTm8gcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIHRoaXMgREIKLSAgICAg
ICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmFkZChk
YklkZW50aWZpZXIsIENvb3JkaW5hdGlvbkluZm8oKSkuZmlyc3Q7Ci0gICAgfQotCi0gICAgQ29v
cmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vjb25kOwot
ICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOwotICAgIHBy
b2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKGluZm8pOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsK
LSAgICBpZiAobV9jb29yZGluYXRpb25JbmZvTWFwLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0cmFu
c2FjdGlvbik7Ci0KLSAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRp
b25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIp
OwotICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25J
bmZvTWFwLmVuZCgpKTsKLSAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9u
SW5mb0l0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgewotICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uKSk7Ci0gICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5yZW1v
dmUodHJhbnNhY3Rpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpbmZvLmFjdGl2
ZVdyaXRlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24pOwotICAgICAgICBpbmZvLmFjdGl2ZVdy
aXRlVHJhbnNhY3Rpb24gPSAwOwotICAgIH0KLQotICAgIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rp
b25zKGluZm8pOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3du
KCkKLXsKLSAgICAvLyBOb3RpZnkgYWxsIHRyYW5zYWN0aW9ucyBpbiBwcm9ncmVzcyB0aGF0IHRo
ZSBkYXRhYmFzZSB0aHJlYWQgaXMgc2h1dHRpbmcgZG93bgotICAgIGZvciAoQ29vcmRpbmF0aW9u
SW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRp
b25JbmZvTWFwLmJlZ2luKCk7Ci0gICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0g
bV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpOyArK2Nvb3JkaW5hdGlvbkluZm9JdGVyYXRvcikg
ewotICAgICAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJh
dG9yLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCi0g
ICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhy
ZWFkSXNTaHV0dGluZ0Rvd24oKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFu
c2FjdGlvbj4gPjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KLSAg
ICAgICAgICAgICAgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5iZWdpbigpOwot
ICAgICAgICAgICAgIGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciAhPSBpbmZvLmFjdGl2
ZVJlYWRUcmFuc2FjdGlvbnMuZW5kKCk7Ci0gICAgICAgICAgICAgKythY3RpdmVSZWFkVHJhbnNh
Y3Rpb25zSXRlcmF0b3IpIHsKLSAgICAgICAgICAgICgqYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0
ZXJhdG9yKS0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gQ2xlYW4gdXAgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBh
bGwgZGF0YWJhc2VzCi0gICAgbV9jb29yZGluYXRpb25JbmZvTWFwLmNsZWFyKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCi0jZGVmaW5lIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlv
bjsKLQotICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCkgeyB9Ci0gICAgICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKLSAg
ICAgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiopOwotICAgICAgICB2b2lkIHNo
dXRkb3duKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25zUXVldWU7Ci0gICAgICAgIHN0cnVjdCBDb29yZGlu
YXRpb25JbmZvIHsKLSAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2Fj
dGlvbnM7Ci0gICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBhY3Rp
dmVSZWFkVHJhbnNhY3Rpb25zOwotICAgICAgICAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBh
Y3RpdmVXcml0ZVRyYW5zYWN0aW9uOwotICAgICAgICB9OwotICAgICAgICAvLyBNYXBzIGRhdGFi
YXNlIG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgdHJhbnNhY3Rpb25zCi0gICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENvb3JkaW5hdGlv
bkluZm9NYXA7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm9NYXAgbV9jb29yZGluYXRpb25JbmZv
TWFwOwotCi0gICAgICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoQ29vcmRpbmF0
aW9uSW5mbyYgaW5mbyk7Ci0gICAgfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCi0KLSNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2su
aAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja19oCi0jZGVmaW5lIFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFja19oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU1FMRXJyb3I7Ci0KLWNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKSB7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9IDA7Ci19OwotCi19Ci0KLSNl
bmRpZgotCi0jZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5pZGwJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotbW9kdWxlIHN0b3JhZ2UgewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlv
bmFsPVNRTF9EQVRBQkFTRSwKLSAgICAgICAgQ2FsbGJhY2sKLSAgICBdIFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjayB7Ci0gICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gU1FMRXJyb3Ig
ZXJyb3IpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvblN5bmMuY3BwCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgi
Ci0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRob3Jp
emVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VT
eW5jLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTUUxFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRT
eW5jLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKLSNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0jaW5jbHVk
ZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+
IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb25TeW5jKGRiLCBjYWxsYmFjaywg
cmVhZE9ubHkpKTsKLX0KLQotU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmMo
RGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4g
Y2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCi0gICAgOiBtX2RhdGFiYXNlKGRiKQotICAgICwgbV9j
YWxsYmFjayhjYWxsYmFjaykKLSAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCi0gICAgLCBtX2hh
c1ZlcnNpb25NaXNtYXRjaChmYWxzZSkKLSAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkK
LSAgICAsIG1fdHJhbnNhY3Rpb25DbGllbnQoYWRvcHRQdHIobmV3IFNRTFRyYW5zYWN0aW9uQ2xp
ZW50KCkpKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLX0KLQotU1FMVHJhbnNhY3Rpb25TeW5jOjp+U1FMVHJh
bnNhY3Rpb25TeW5jKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rp
b24gJiYgbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQotICAgICAgICByb2xsYmFj
aygpOwotfQotCi1QYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMVHJhbnNhY3Rpb25TeW5jOjpl
eGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChtX2RhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLQotICAg
IG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoIiIpOwotCi0gICAgaWYgKCFtX2RhdGFi
YXNlLT5vcGVuZWQoKSkgewotICAgICAgICBtX2RhdGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdl
KCJjYW5ub3QgZXhlY3V0ZVNRTCBiZWNhdXNlIHRoZSBkYXRhYmFzZSBpcyBub3Qgb3BlbiIpOwot
ICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIGlmIChtX2hhc1ZlcnNpb25NaXNtYXRjaCkgewotICAgICAgICBtX2Rh
dGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJjYW5ub3QgZXhlY3V0ZVNRTCBiZWNhdXNlIHRo
ZXJlIGlzIGEgdmVyc2lvbiBtaXNtYXRjaCIpOwotICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6
VkVSU0lPTl9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChzcWxTdGF0
ZW1lbnQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBwZXJtaXNzaW9u
cyA9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKLSAgICBpZiAoIW1fZGF0YWJh
c2UtPmRhdGFiYXNlQ29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNzKCkpCi0gICAgICBwZXJt
aXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsKLSAgICBlbHNlIGlm
IChtX3JlYWRPbmx5KQotICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVyOjpS
ZWFkT25seU1hc2s7Ci0KLSAgICBTUUxTdGF0ZW1lbnRTeW5jIHN0YXRlbWVudChzcWxTdGF0ZW1l
bnQsIGFyZ3VtZW50cywgcGVybWlzc2lvbnMpOwotCi0gICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRo
b3JpemVyKCk7Ci0gICAgYm9vbCByZXRyeVN0YXRlbWVudCA9IHRydWU7Ci0gICAgUmVmUHRyPFNR
TFJlc3VsdFNldD4gcmVzdWx0U2V0OwotICAgIHdoaWxlIChyZXRyeVN0YXRlbWVudCkgewotICAg
ICAgICByZXRyeVN0YXRlbWVudCA9IGZhbHNlOwotICAgICAgICByZXN1bHRTZXQgPSBzdGF0ZW1l
bnQuZXhlY3V0ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7Ci0gICAgICAgIGlmICghcmVzdWx0U2V0
KSB7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5
U3FsaXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGlmIChl
YyA9PSBTUUxFeGNlcHRpb246OlFVT1RBX0VSUikgewotICAgICAgICAgICAgICAgIGlmIChtX3Ry
YW5zYWN0aW9uQ2xpZW50LT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKSkgewotICAgICAgICAg
ICAgICAgICAgICBlYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHJ5U3RhdGVtZW50ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFiYXNlLT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5p
bmcgc3RvcmFnZSBzcGFjZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bV9kYXRhYmFzZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7Ci0gICAgICAgIG1fbW9k
aWZpZWREYXRhYmFzZSA9IHRydWU7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25DbGllbnQtPmRpZEV4
ZWN1dGVTdGF0ZW1lbnQoZGF0YWJhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdFNl
dC5yZWxlYXNlKCk7Ci19Ci0KLUV4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdp
bigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKLSAg
ICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFeGNl
cHRpb246OlVOS05PV05fRVJSLCAwKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TGFzdEVycm9y
TWVzc2FnZSgiY2Fubm90IGJlZ2luIHRyYW5zYWN0aW9uIGJlY2F1c2UgdGhlIGRhdGFiYXNlIGlz
IG5vdCBvcGVuIik7Ci0gICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOwot
ICAgIH0KLQotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRo
aXMgdHJhbnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seS4KLSAg
ICBpZiAoIW1fcmVhZE9ubHkpCi0gICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
c2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7Ci0KLSAgICBBU1NFUlQo
IW1fc3FsaXRlVHJhbnNhY3Rpb24pOwotICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBhZG9wdFB0
cihuZXcgU1FMaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgbV9y
ZWFkT25seSkpOwotCi0gICAgbV9kYXRhYmFzZS0+cmVzZXREZWxldGVzKCk7Ci0gICAgbV9kYXRh
YmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5iZWdp
bigpOwotICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKLQotICAgIC8vIENoZWNr
IGlmIGJlZ2luKCkgc3VjY2VlZGVkLgotICAgIGlmICghbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Q
cm9ncmVzcygpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2Uo
KS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0
YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIsIG1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCkpOwotICAgICAgICBtX2RhdGFiYXNl
LT5zZXRMYXN0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gYmVnaW4gdHJhbnNhY3Rpb24iLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURh
dGFiYXNlKCkubGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgICAg
IHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKLSAgICB9Ci0KLSAgICAvLyBOb3Rl
OiBXZSBpbnRlbnRpb25hbGx5IHJldHJpZXZlIHRoZSBhY3R1YWwgdmVyc2lvbiBldmVuIHdpdGgg
YW4gZW1wdHkgZXhwZWN0ZWQgdmVyc2lvbi4KLSAgICAvLyBJbiBtdWx0aS1wcm9jZXNzIGJyb3dz
ZXJzLCB3ZSB0YWtlIHRoaXMgb3Bwb3J0aW51dGl5IHRvIHVwZGF0ZSB0aGUgY2FjaGVkIHZhbHVl
IGZvcgotICAgIC8vIHRoZSBhY3R1YWwgdmVyc2lvbi4gSW4gc2luZ2xlLXByb2Nlc3MgYnJvd3Nl
cnMsIHRoaXMgaXMganVzdCBhIG1hcCBsb29rdXAuCi0gICAgU3RyaW5nIGFjdHVhbFZlcnNpb247
Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5nZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oYWN0
dWFsVmVyc2lvbikpIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdCgzLCBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRl
RGF0YWJhc2UoKS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJv
ck1lc3NhZ2UoInVuYWJsZSB0byByZWFkIHZlcnNpb24iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICByb2xsYmFjaygpOwotICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7
Ci0gICAgfQotICAgIG1faGFzVmVyc2lvbk1pc21hdGNoID0gIW1fZGF0YWJhc2UtPmV4cGVjdGVk
VmVyc2lvbigpLmlzRW1wdHkoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1fZGF0
YWJhc2UtPmV4cGVjdGVkVmVyc2lvbigpICE9IGFjdHVhbFZlcnNpb24pOwotICAgIG1fZGF0YWJh
c2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSwotICAgIHJl
dHVybiAwOwotfQotCi1FeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZSgp
Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOwotICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkgfHwgKG1fY2Fs
bGJhY2sgJiYgIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpKSkgewotICAgICAgICBpZiAo
bV9kYXRhYmFzZS0+bGFzdEVycm9yTWVzc2FnZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
ZGF0YWJhc2UtPnNldExhc3RFcnJvck1lc3NhZ2UoImZhaWxlZCB0byBleGVjdXRlIHRyYW5zYWN0
aW9uIGNhbGxiYWNrIik7Ci0gICAgICAgIG1fY2FsbGJhY2sgPSAwOwotICAgICAgICByZXR1cm4g
U1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLSAgICB9Ci0KLSAgICBtX2NhbGxiYWNrID0gMDsK
LSAgICByZXR1cm4gMDsKLX0KLQotRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmNv
bW1pdCgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsK
LSAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FM
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RF
cnJvck1lc3NhZ2UoInVuYWJsZSB0byBjb21taXQgdHJhbnNhY3Rpb24gYmVjYXVzZSB0aGUgZGF0
YWJhc2UgaXMgbm90IG9wZW4uIik7Ci0gICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05P
V05fRVJSOwotICAgIH0KLQotICAgIEFTU0VSVChtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKLQotICAg
IG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi0+Y29tbWl0KCk7Ci0gICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotCi0gICAg
Ly8gSWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxsIGJlIG1h
cmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCi0gICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkgewotICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJl
c3VsdCgyLCBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0
YWJhc2UoKS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNldExhc3RFcnJvck1l
c3NhZ2UoInVuYWJsZSB0byBjb21taXQgdHJhbnNhY3Rpb24iLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVy
cm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Ci0gICAgfQotCi0gICAgbV9z
cWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotCi0gICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBp
ZiBhbnl0aGluZyB3YXMgZGVsZXRlZC4KLSAgICBpZiAobV9kYXRhYmFzZS0+aGFkRGVsZXRlcygp
KQotICAgICAgICBtX2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7Ci0KLSAg
ICAvLyBUaGUgY29tbWl0IHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZp
ZWQgdGhpcyBkYXRhYmFzZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZXMuCi0gICAgaWYgKG1fbW9kaWZp
ZWREYXRhYmFzZSkKLSAgICAgICAgbV90cmFuc2FjdGlvbkNsaWVudC0+ZGlkQ29tbWl0V3JpdGVU
cmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKLQotICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRy
YW5zYWN0aW9uUmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBTUUxUcmFuc2FjdGlvblN5bmM6OnJvbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFz
ZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9k
YXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlv
bikgewotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwotICAgICAgICBt
X3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgfQotICAgIG1fZGF0YWJhc2UtPmVuYWJs
ZUF1dGhvcml6ZXIoKTsKLQotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2Uo
KS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU1FMVHJhbnNhY3Rpb25TeW5jX2gKLSNkZWZpbmUgU1FMVHJh
bnNhY3Rpb25TeW5jX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRGF0YWJhc2VTeW5jOwotY2xhc3MgU1FMUmVzdWx0U2V0OwotY2xhc3Mg
U1FMVHJhbnNhY3Rpb25DbGllbnQ7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazsK
LWNsYXNzIFNRTFZhbHVlOwotY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247Ci0KLXR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBj
cmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgotY2xh
c3MgU1FMVHJhbnNhY3Rpb25TeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25T
eW5jPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
PiBjcmVhdGUoRGF0YWJhc2VTeW5jKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjaz4sIGJvb2wgcmVhZE9ubHkgPSBmYWxzZSk7Ci0KLSAgICB+U1FMVHJhbnNhY3Rpb25TeW5j
KCk7Ci0KLSAgICBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gZXhlY3V0ZVNRTChjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBFeGNl
cHRpb25Db2RlJik7Ci0KLSAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9k
YXRhYmFzZS5nZXQoKTsgfQotICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVhZE9ubHk7IH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgYmVnaW4oKTsKLSAgICBFeGNlcHRpb25D
b2RlIGV4ZWN1dGUoKTsKLSAgICBFeGNlcHRpb25Db2RlIGNvbW1pdCgpOwotICAgIHZvaWQgcm9s
bGJhY2soKTsKLQotcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VTeW5j
KiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHkp
OwotCi0gICAgUmVmUHRyPERhdGFiYXNlU3luYz4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Ci0gICAgYm9vbCBtX3JlYWRPbmx5
OwotICAgIGJvb2wgbV9oYXNWZXJzaW9uTWlzbWF0Y2g7Ci0KLSAgICBib29sIG1fbW9kaWZpZWRE
YXRhYmFzZTsKLSAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25DbGllbnQ+IG1fdHJhbnNhY3Rpb25D
bGllbnQ7Ci0gICAgT3duUHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9u
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFNR
TFRyYW5zYWN0aW9uU3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvblN5bmMuaWRsCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLW1vZHVsZSBzdG9yYWdlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlv
bmFsPVNRTF9EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yLAotICAgICAgICBKU05v
U3RhdGljVGFibGVzCi0gICAgXSBTUUxUcmFuc2FjdGlvblN5bmMgewotICAgICAgICBbQ3VzdG9t
XSBTUUxSZXN1bHRTZXQgZXhlY3V0ZVNxbChpbiBET01TdHJpbmcgc3FsU3RhdGVtZW50LCBpbiBP
YmplY3RBcnJheSBhcmd1bWVudHMpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCShyZXZpc2lvbiAx
MDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2tfaAotI2RlZmluZSBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFja19oCi0K
LSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7Ci0KLS8v
IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkg
b24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgotY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4g
ewotcHVibGljOgotICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrKCkgeyB9
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uU3luYyopID0gMDsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
a19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrLmlkbAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLW1vZHVsZSBzdG9yYWdlIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBD
b25kaXRpb25hbD1TUUxfREFUQUJBU0UsCi0gICAgICAgIENhbGxiYWNrCi0gICAgXSBTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjayB7Ci0gICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gU1FM
VHJhbnNhY3Rpb25TeW5jIHRyYW5zYWN0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmNwcAkocmV2
aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FM
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiV29ya2VyQ29udGV4dFNRTERhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJEYXRhYmFz
ZUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXb3Jr
ZXJDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gV29ya2VyQ29udGV4dFNRTERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoV29ya2VyQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFi
YXNlKCkgfHwgIUFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBE
YXRhYmFzZTo6b3BlbkRhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2U6Om9wZW5EYXRhYmFzZVN5bmMo
V29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwgIUFic3RyYWN0RGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkp
IHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHJldHVybiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMoY29udGV4dCwgbmFt
ZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ss
IGVjKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvV29ya2VyQ29udGV4dFNR
TERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Xb3JrZXJD
b250ZXh0U1FMRGF0YWJhc2UuaAkocmV2aXNpb24gMTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJDb250ZXh0U1FMRGF0
YWJhc2VfaAotI2RlZmluZSBXb3JrZXJDb250ZXh0U1FMRGF0YWJhc2VfaAotCi0jaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRGF0YWJhc2U7Ci1jbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwotY2xh
c3MgRGF0YWJhc2VTeW5jOwotY2xhc3MgV29ya2VyQ29udGV4dDsKLQotY2xhc3MgV29ya2VyQ29u
dGV4dFNRTERhdGFiYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gb3BlbkRhdGFiYXNlKFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVN5
bmM+IG9wZW5EYXRhYmFzZVN5bmMoV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRp
b25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOwotCi1wcml2YXRlOgotICAgIFdvcmtlckNvbnRl
eHRTUUxEYXRhYmFzZSgpIHsgfTsKLSAgICB+V29ya2VyQ29udGV4dFNRTERhdGFiYXNlKCkgeyB9
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKLQotI2VuZGlmIC8vIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dvcmtlckNvbnRleHRTUUxEYXRhYmFzZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9Xb3JrZXJDb250ZXh0U1FMRGF0YWJhc2Uu
aWRsCShyZXZpc2lvbiAxMDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1dvcmtlckNv
bnRleHRTUUxEYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICoKLSAqLwotCi1tb2R1bGUgd2luZG93IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPVNRTF9EQVRBQkFTRSwKLSAgICAgICAgU3VwcGxlbWVudGFsPVdvcmtlckNvbnRl
eHQKLSAgICBdIFdvcmtlckNvbnRleHRTUUxEYXRhYmFzZSB7Ci0gICAgICAgIFtWOEVuYWJsZWRB
dFJ1bnRpbWVdIERhdGFiYXNlIG9wZW5EYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9N
U3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBEYXRhYmFzZUNhbGxiYWNr
IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQot
ICAgICAgICBbVjhFbmFibGVkQXRSdW50aW1lXSBEYXRhYmFzZVN5bmMgb3BlbkRhdGFiYXNlU3lu
YyhpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBk
aXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBpbiBbQ2FsbGJhY2ss
IE9wdGlvbmFsXSBEYXRhYmFzZUNhbGxiYWNrIGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgICAgICAg
ICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaAkocmV2aXNpb24g
MTA5ODU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2Vy
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0YWJhc2VPYnNl
cnZlcl9oCi0jZGVmaW5lIERhdGFiYXNlT2JzZXJ2ZXJfaAotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
Ci0KLS8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGluIHRoZSBXZWJLaXQg
QVBJIChDaHJvbWl1bSBzb3VyY2UgdHJlZSkKLS8vIGluIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0
YWJhc2VPYnNlcnZlci5jcHAuCi1jbGFzcyBEYXRhYmFzZU9ic2VydmVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyk7Ci0gICAgc3Rh
dGljIHZvaWQgZGF0YWJhc2VPcGVuZWQoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHN0YXRpYyB2
b2lkIGRhdGFiYXNlTW9kaWZpZWQoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHN0YXRpYyB2b2lk
IGRhdGFiYXNlQ2xvc2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKLQotICAgIHN0YXRpYyB2b2lkIHJl
cG9ydE9wZW5EYXRhYmFzZVJlc3VsdChBYnN0cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBp
bnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICBzdGF0aWMgdm9p
ZCByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNp
dGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHN0YXRp
YyB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGlu
dCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0g
ICAgc3RhdGljIHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoQWJzdHJhY3REYXRh
YmFzZSosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9y
Q29kZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChBYnN0
cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3Fs
aXRlRXJyb3JDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3Vs
dChBYnN0cmFjdERhdGFiYXNlKiwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci19OwotCi19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gRGF0YWJhc2VPYnNlcnZl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tl
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9t
aXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNpb24gMTA5ODU4KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMjY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIu
aCIKLSNpbmNsdWRlICJRdW90YVRyYWNrZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlNR
TGl0ZUZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKQotewotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhEYXRhYmFzZVRyYWNrZXIm
LCB0cmFja2VyID0gKm5ldyBEYXRhYmFzZVRyYWNrZXIoIiIpKTsKLSAgICByZXR1cm4gdHJhY2tl
cjsKLX0KLQotRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoY29uc3QgU3RyaW5nJikK
LXsKLSAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOwotfQotCi1ib29s
IERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi17Ci0gICAg
cmV0dXJuIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpCi17Ci0gICAgLy8gQ2hy
b21pdW0gc2V0cyB0aGUgZGF0YWJhc2UgZGV0YWlscyB3aGVuIHRoZSBkYXRhYmFzZSBpcyBvcGVu
ZWQKLX0KLQotU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpCi17Ci0gICAgcmV0
dXJuIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLyIgKyBuYW1lICsgIiMiOwotfQot
Ci12b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2Uq
IGRhdGFiYXNlKQotewotICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFw
TG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFw
KQotICAgICAgICBtX29wZW5EYXRhYmFzZU1hcCA9IGFkb3B0UHRyKG5ldyBEYXRhYmFzZU9yaWdp
bk1hcCk7Ci0KLSAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5h
bWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlm
ICghbmFtZU1hcCkgewotICAgICAgICBuYW1lTWFwID0gbmV3IERhdGFiYXNlTmFtZU1hcCgpOwot
ICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+c2V0KG9yaWdpbklkZW50aWZpZXIsIG5hbWVNYXAp
OwotICAgIH0KLQotICAgIFN0cmluZyBuYW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkp
OwotICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAg
ICBpZiAoIWRhdGFiYXNlU2V0KSB7Ci0gICAgICAgIGRhdGFiYXNlU2V0ID0gbmV3IERhdGFiYXNl
U2V0KCk7Ci0gICAgICAgIG5hbWVNYXAtPnNldChuYW1lLCBkYXRhYmFzZVNldCk7Ci0gICAgfQot
Ci0gICAgZGF0YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7Ci0KLSAgICBEYXRhYmFzZU9ic2VydmVy
OjpkYXRhYmFzZU9wZW5lZChkYXRhYmFzZSk7Ci19Ci0KLWNsYXNzIE5vdGlmeURhdGFiYXNlT2Jz
ZXJ2ZXJPbkNsb3NlVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25D
bG9zZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb3RpZnlEYXRhYmFzZU9ic2VydmVy
T25DbG9zZVRhc2soZGF0YWJhc2UpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIERh
dGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKG1fZGF0YWJhc2UuZ2V0KCkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgYm9vbCBpc0NsZWFudXBUYXNrKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFzZU9ic2Vy
dmVyT25DbG9zZVRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKLSAg
ICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
QWJzdHJhY3REYXRhYmFzZT4gbV9kYXRhYmFzZTsKLX07Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpyZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAg
U3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0
YWJhc2VJZGVudGlmaWVyKCk7Ci0gICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayht
X29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICBBU1NFUlQobV9vcGVuRGF0YWJhc2VNYXApOwot
ICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3Jp
Z2luSWRlbnRpZmllcik7Ci0gICAgaWYgKCFuYW1lTWFwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKLSAgICBEYXRhYmFz
ZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFz
ZVNldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGZvdW5k
ID0gZGF0YWJhc2VTZXQtPmZpbmQoZGF0YWJhc2UpOwotICAgIGlmIChmb3VuZCA9PSBkYXRhYmFz
ZVNldC0+ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUo
Zm91bmQpOwotICAgIGlmIChkYXRhYmFzZVNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG5hbWVN
YXAtPnJlbW92ZShuYW1lKTsKLSAgICAgICAgZGVsZXRlIGRhdGFiYXNlU2V0OwotICAgICAgICBp
ZiAobmFtZU1hcC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+
cmVtb3ZlKG9yaWdpbklkZW50aWZpZXIpOwotICAgICAgICAgICAgZGVsZXRlIG5hbWVNYXA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKQotICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5wb3N0VGFzayhOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s6
OmNyZWF0ZShkYXRhYmFzZSkpOwotICAgIGVsc2UKLSAgICAgICAgRGF0YWJhc2VPYnNlcnZlcjo6
ZGF0YWJhc2VDbG9zZWQoZGF0YWJhc2UpOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJh
c2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSog
ZGF0YWJhc2UpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlID0gMDsK
LSAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplID0gMDsKLSAgICBRdW90YVRyYWNr
ZXI6Omluc3RhbmNlKCkuZ2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdpbigK
LSAgICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNlSWRlbnRpZmllcigp
LAotICAgICAgICBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLCAmZGF0YWJhc2VTaXplLCAm
c3BhY2VBdmFpbGFibGUpOwotICAgIHJldHVybiBkYXRhYmFzZVNpemUgKyBzcGFjZUF2YWlsYWJs
ZTsKLX0KLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNv
bnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBNdXRl
eExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwotCi0g
ICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGF0YWJh
c2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0gICAgaWYgKCFuYW1lTWFwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRi
TmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7Ci0gICAgZm9yIChEYXRhYmFzZU5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1lTWFw
SXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAgRGF0YWJhc2VT
ZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKLSAgICAgICAgRGF0YWJhc2VT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsKLSAgICAgICAgZm9y
IChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSBjb250ZXh0KQotICAgICAgICAgICAgICAgICgqaXQpLT5pbnRlcnJ1cHQo
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotY2xhc3MgRGF0YWJhc2VUcmFja2VyOjpDbG9zZU9u
ZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENsb3NlT25lRGF0YWJhc2VJ
bW1lZGlhdGVseVRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmFtZSwgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2so
b3JpZ2luSWRlbnRpZmllciwgbmFtZSwgZGF0YWJhc2UpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7
Ci0gICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNsb3NlT25lRGF0YWJhc2VJbW1l
ZGlhdGVseShtX29yaWdpbklkZW50aWZpZXIsIG1fbmFtZSwgbV9kYXRhYmFzZSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2soY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIEFic3RyYWN0RGF0YWJh
c2UqIGRhdGFiYXNlKQotICAgICAgICA6IG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlm
aWVyLmlzb2xhdGVkQ29weSgpKQotICAgICAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgp
KQotICAgICAgICAsIG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgewotICAgIH0KLQotICAgIFN0
cmluZyBtX29yaWdpbklkZW50aWZpZXI7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBBYnN0cmFj
dERhdGFiYXNlKiBtX2RhdGFiYXNlOyAgLy8gSW50ZW50aW9uYWxseSBhIHJhdyBwb2ludGVyLgot
fTsKLQotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpIHsKLSAgICBN
dXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwot
ICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIERhdGFi
YXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQob3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgaWYgKCFuYW1lTWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEYXRhYmFz
ZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFz
ZVNldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBjYWxsIGNsb3NlSW1t
ZWRpYXRlbHkoKSBvbiB0aGUgY29udGV4dCB0aHJlYWQgYW5kIHdlIGNhbm5vdCBzYWZlbHkgYWRk
IGEgcmVmZXJlbmNlIHRvCi0gICAgLy8gdGhlIGRhdGFiYXNlIGluIG91ciBjb2xsZWN0aW9uIHdo
ZW4gbm90IG9uIHRoZSBjb250ZXh0IHRocmVhZCAod2hpY2ggaXMgYWx3YXlzIHRoZSBjYXNlIGdp
dmVuCi0gICAgLy8gY3VycmVudCB1c2FnZSkuCi0gICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0
b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVuZCgpOyAr
K2l0KQotICAgICAgICAoKml0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhD
bG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrOjpjcmVhdGUob3JpZ2luSWRlbnRpZmllciwg
bmFtZSwgKml0KSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpjbG9zZU9uZURhdGFiYXNl
SW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIC8vIEZpcnN0IHdlIGhh
dmUgdG8gY29uZmlybSB0aGUgJ2RhdGFiYXNlJyBpcyBzdGlsbCBpbiBvdXIgY29sbGVjdGlvbi4K
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0
YWJhc2VNYXBHdWFyZCk7Ci0gICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVu
RGF0YWJhc2VNYXAtPmdldChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCFuYW1lTWFw
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNl
dCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZm91bmQgPSBk
YXRhYmFzZVNldC0+ZmluZChkYXRhYmFzZSk7Ci0gICAgICAgIGlmIChmb3VuZCA9PSBkYXRhYmFz
ZVNldC0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQW5kIHdl
IGhhdmUgdG8gY2FsbCBjbG9zZUltbWVkaWF0ZWx5KCkgd2l0aG91dCBvdXIgY29sbGVjdGlvbiBs
b2NrIGJlaW5nIGhlbGQuCi0gICAgZGF0YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAJKHJldmlzaW9uIDEwOTg1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlF1b3RhVHJhY2tlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgotCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1RdW90YVRyYWNrZXImIFF1b3RhVHJhY2tlcjo6aW5zdGFu
Y2UoKQotewotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhRdW90YVRyYWNrZXImLCB0
cmFja2VyID0gKm5ldyBRdW90YVRyYWNrZXIpOwotICAgIHJldHVybiB0cmFja2VyOwotfQotCi12
b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFibGVUb09yaWdp
bigKLSAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lLAotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyogZGF0YWJhc2VTaXplLCB1bnNpZ25l
ZCBsb25nIGxvbmcqIHNwYWNlQXZhaWxhYmxlKQotewotICAgIC8vIEV4dHJhIHNjb3BlIHRvIHVu
bG9jayBwcmlvciB0byBwb3RlbnRpYWxseSBjYWxsaW5nIFBsYXRmb3JtU3VwcG9ydC4KLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKLSAgICAgICAgQVNT
RVJUKG1fZGF0YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7Ci0gICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNl
U2l6ZXMuZmluZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQu
Y29udGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+c2Vj
b25kLmdldChkYXRhYmFzZU5hbWUpOwotCi0gICAgICAgIGlmIChtX3NwYWNlQXZhaWxhYmxlVG9P
cmlnaW5zLmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICAqc3BhY2VB
dmFpbGFibGUgPSBtX3NwYWNlQXZhaWxhYmxlVG9PcmlnaW5zLmdldChvcmlnaW5JZGVudGlmaWVy
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBl
bWJlZGRlciBoYXNuJ3QgcHVzaGVkIHRoaXMgdmFsdWUgdG8gdXMsIHNvIHdlIHB1bGwgaXQgYXMg
bmVlZGVkLgotICAgICpzcGFjZUF2YWlsYWJsZSA9IFBsYXRmb3JtU3VwcG9ydDo6ZGF0YWJhc2VH
ZXRTcGFjZUF2YWlsYWJsZUZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKLX0KLQotdm9pZCBR
dW90YVRyYWNrZXI6OnVwZGF0ZURhdGFiYXNlU2l6ZSgKLSAgICBjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAotICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBkYXRhYmFzZVNpemUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRh
R3VhcmQpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTaXplTWFwPjo6aXRlcmF0b3IgaXQgPSBtX2Rh
dGFiYXNlU2l6ZXMuYWRkKG9yaWdpbklkZW50aWZpZXIsIFNpemVNYXAoKSkuZmlyc3Q7Ci0gICAg
aXQtPnNlY29uZC5zZXQoZGF0YWJhc2VOYW1lLCBkYXRhYmFzZVNpemUpOwotfQotCi12b2lkIFF1
b3RhVHJhY2tlcjo6dXBkYXRlU3BhY2VBdmFpbGFibGVUb09yaWdpbihjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBzcGFjZUF2YWlsYWJsZSkKLXsKLSAg
ICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7Ci0gICAgbV9zcGFjZUF2YWlsYWJs
ZVRvT3JpZ2lucy5zZXQob3JpZ2luSWRlbnRpZmllciwgc3BhY2VBdmFpbGFibGUpOwotfQotCi12
b2lkIFF1b3RhVHJhY2tlcjo6cmVzZXRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFH
dWFyZCk7Ci0gICAgbV9zcGFjZUF2YWlsYWJsZVRvT3JpZ2lucy5yZW1vdmUob3JpZ2luSWRlbnRp
Zmllcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1F1b3Rh
VHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0v
UXVvdGFUcmFja2VyLmgJKHJldmlzaW9uIDEwOTg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgUXVvdGFUcmFja2VyX2gKLSNkZWZpbmUgUXVvdGFUcmFja2VyX2gKLQotI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UXVvdGFUcmFja2VyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUXVvdGFUcmFja2VyJiBpbnN0YW5j
ZSgpOwotCi0gICAgdm9pZCBnZXREYXRhYmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2lu
KAotICAgICAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLAotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcqIGRhdGFiYXNlU2l6ZSwg
dW5zaWduZWQgbG9uZyBsb25nKiBzcGFjZUF2YWlsYWJsZSk7Ci0gICAgdm9pZCB1cGRhdGVEYXRh
YmFzZVNpemUoCi0gICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUsCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFz
ZVNpemUpOwotICAgIHZvaWQgdXBkYXRlU3BhY2VBdmFpbGFibGVUb09yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBzcGFjZUF2YWlsYWJsZSk7
Ci0gICAgdm9pZCByZXNldFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKTsKLQotcHJpdmF0ZToKLSAgICBRdW90YVRyYWNrZXIoKSB7IH0KLQotICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkIGxvbmcgbG9uZz4gU2l6ZU1hcDsKLSAg
ICBTaXplTWFwIG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFNpemVNYXA+IG1fZGF0YWJhc2VTaXplczsKLSAgICBNdXRleCBtX2RhdGFHdWFyZDsKLX07Ci0K
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBRdW90YVRy
YWNrZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2Fj
dGlvbkNsaWVudENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
MDk4NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9u
Q2xpZW50Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKLQotI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOb3RpZnlEYXRhYmFzZUNoYW5n
ZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2s+IGNyZWF0ZShB
YnN0cmFjdERhdGFiYXNlICpkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayhkYXRhYmFzZSkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKLSAgICB7
Ci0gICAgICAgIFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQobV9k
YXRhYmFzZS5nZXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5vdGlmeURhdGFiYXNlQ2hh
bmdlZFRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKLSAgICAgICAg
OiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8QWJzdHJh
Y3REYXRhYmFzZT4gbV9kYXRhYmFzZTsKLX07Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6
OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17
Ci0gICAgaWYgKCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRU
aHJlYWQoKSkgewotICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5w
b3N0VGFzayhOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrOjpjcmVhdGUoZGF0YWJhc2UpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRh
dGFiYXNlTW9kaWZpZWQoZGF0YWJhc2UpOwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50
OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAg
IC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBleGVjdXRpbmcgZXZlcnkgc3RhdGVtZW50
IHRoYXQgY2hhbmdlcyB0aGUgREIuCi0gICAgLy8gQ2hyb21pdW0gZG9lc24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nIGF0IHRoYXQgcG9pbnQuCi19Ci0KLWJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6
OmRpZEV4Y2VlZFF1b3RhKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIC8vIENo
cm9taXVtIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgcXVvdGEg
Zm9yIGFuIG9yaWdpbiAoZm9yIG5vdywgYXQgbGVhc3QpLgotICAgIC8vIERvbid0IGRvIGFueXRo
aW5nLgotICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Nv
bnRleHRUaHJlYWQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQo=
</data>
<flag name="review"
          id="133296"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
      

    </bug>

</bugzilla>