<?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>97405</bug_id>
          
          <creation_ts>2012-09-22 23:31:55 -0700</creation_ts>
          <short_desc>Integrate most of GoogleURL in WTFURL</short_desc>
          <delta_ts>2012-09-24 14:30:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</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>97422</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>abarth</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>726232</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-22 23:31:55 -0700</bug_when>
    <thetext>Let&apos;s get this project going.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726234</commentid>
    <comment_count>1</comment_count>
      <attachid>165280</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-22 23:45:17 -0700</bug_when>
    <thetext>Created attachment 165280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726235</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-22 23:48:35 -0700</bug_when>
    <thetext>Attachment 165280 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xc...&quot; exit_code: 1
Source/WTF/wtf/url/src/URLCanonInternal.cpp:285:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.cpp:302:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:363:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:364:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:368:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:374:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:380:  _strtoui64 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 7 in 35 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>726237</commentid>
    <comment_count>3</comment_count>
      <attachid>165281</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-22 23:54:21 -0700</bug_when>
    <thetext>Created attachment 165281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726239</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-22 23:56:57 -0700</bug_when>
    <thetext>Attachment 165281 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xc...&quot; exit_code: 1
Source/WTF/wtf/url/src/URLCanonInternal.cpp:285:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.cpp:302:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:363:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:364:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:368:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:374:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:380:  _strtoui64 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 7 in 34 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>726240</commentid>
    <comment_count>5</comment_count>
      <attachid>165281</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-22 23:57:45 -0700</bug_when>
    <thetext>Comment on attachment 165281
Patch

Attachment 165281 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13984349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726241</commentid>
    <comment_count>6</comment_count>
      <attachid>165282</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-23 00:04:11 -0700</bug_when>
    <thetext>Created attachment 165282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726246</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-23 00:07:18 -0700</bug_when>
    <thetext>Attachment 165282 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xc...&quot; exit_code: 1
Source/WTF/wtf/url/src/URLCanonInternal.cpp:285:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.cpp:302:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:363:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:364:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:368:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:374:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:380:  _strtoui64 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 7 in 34 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>726250</commentid>
    <comment_count>8</comment_count>
      <attachid>165282</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-23 05:20:14 -0700</bug_when>
    <thetext>Comment on attachment 165282
Patch

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

&gt; Source/WTF/wtf/url/api/ParsedURL.cpp:184
&gt; +//    ASSERT_WITH_MESSAGE(!segment.isEmpty(), &quot;A valid URL component should not be empty.&quot;);

:-)

&gt; Source/WTF/wtf/url/src/URLCanon.h:540
&gt; +bool ReplaceStandardURL(const char* base,
&gt; +                                 const URLSegments&amp; baseParsed,
&gt; +                                 const Replacements&lt;char&gt;&amp;,
&gt; +                                 CharsetConverter* queryConverter,
&gt; +                                 URLBuffer&lt;char&gt;&amp;,
&gt; +                                 URLSegments* outputParsed);

Shouldn&apos;t we put this on one line. That seems to be webkit style

&gt; Source/WTF/wtf/url/src/URLCanonFileurl.cpp:3
&gt; +// Copyright 2007, Google Inc. All rights reserved.
&gt; +// Copyright 2012, Apple Inc. All rights reserved.
&gt; +//

Shouldnt we fix the license style to be like the rest of webkit? like no comma after the year etc.

/*
 *  Copyright (C) 2007 Google Inc. All rights reserved.
 *  Copyright (C) 2012  Apple Inc. All rights reserved.
 *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726279</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-23 11:57:53 -0700</bug_when>
    <thetext>Ben and I discussed this patch on #webkit for a bit before he posted this patch.  He would like to land this patch, get things wired together, and then work on refactoring the code in place.  This approach isn&apos;t the one we typically use when adding code to WebKit, but our thinking is that this code is more like a third-party library like the ones in Source/ThirdParty.

Perhaps we should first land the code in Source/ThirdParty, refactor it there, and then move it to into WebKit proper when its ready?  The downside of that approach is that the build system integration is trickier.

I&apos;m going to rs=me this patch, but please consider whether it would be better to stage the code in Source/ThirdParty for a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726294</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-23 13:48:38 -0700</bug_when>
    <thetext>&gt; Ben and I discussed this patch on #webkit for a bit before he posted this patch.  He would like to land this patch, get things wired together, and then work on refactoring the code in place.  This approach isn&apos;t the one we typically use when adding code to WebKit, but our thinking is that this code is more like a third-party library like the ones in Source/ThirdParty.

The problem is this code is in desperate need for cleaning and refactoring. Doing so without relying on the tests is working in the dark.

Every hour I spent renaming stuff would be better spent refactoring the code toward the template version.

All the code is contained in the url/ directory, so it is quite self contained already.

Next, I want to have all the tests passing, add new tests to cover the component parsing. Then eventually refactor everything and fix performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726304</commentid>
    <comment_count>11</comment_count>
      <attachid>165294</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-23 15:44:09 -0700</bug_when>
    <thetext>Created attachment 165294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726305</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-23 15:44:27 -0700</bug_when>
    <thetext>Same patch, more cleaning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726306</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-23 15:47:00 -0700</bug_when>
    <thetext>Attachment 165294 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xc...&quot; exit_code: 1
Source/WTF/wtf/url/src/URLCanonInternal.cpp:267:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.cpp:284:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:365:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:366:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:370:  _itoa_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:376:  _itow_s is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/url/src/URLCanonInternal.h:382:  _strtoui64 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 7 in 36 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>726375</commentid>
    <comment_count>14</comment_count>
      <attachid>165294</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-23 21:33:20 -0700</bug_when>
    <thetext>Comment on attachment 165294
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727006</commentid>
    <comment_count>15</comment_count>
      <attachid>165294</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-24 14:30:32 -0700</bug_when>
    <thetext>Comment on attachment 165294
Patch

Clearing flags on attachment: 165294

Committed r129412: &lt;http://trac.webkit.org/changeset/129412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727007</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-24 14:30:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165280</attachid>
            <date>2012-09-22 23:45:17 -0700</date>
            <delta_ts>2012-09-22 23:54:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97405-20120922234439.patch</filename>
            <type>text/plain</type>
            <size>411696</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkyODdjOTIzNTgwNzIzNmRkMDRkNmJl
MGRiZWFhNmRlOTMzNDM1ZjUuLmZlY2I3ZGYzNjQ0Y2Q3M2FiNmQ5NmY2NjRlN2Y0OTRiMzc5ODhh
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjE3IEBACisyMDEyLTA5LTIyICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbnRlZ3JhdGUgbW9zdCBvZiBHb29nbGVV
UkwgaW4gV1RGVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzQwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYnJpbmdzIGFsbW9zdCBhbGwgb2YgdGhlIGltcGxlbWVudGF0YXRpb24g
b2YgR29vZ2xlLVVSTCBpbiBXVEZVUkwKKyAgICAgICAgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMu
CisKKyAgICAgICAgVGhlIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgY29kZSBhcmUgbW9zdGx5
OgorICAgICAgICAtQ29kZSBjbGVhbmluZy4KKyAgICAgICAgLVJlcGxhY2UgdXJsX3BhcnNlOjpQ
YXJzZWQgYnkgVVJMU2VnbWVudHMuCisgICAgICAgIC1SZXBsYWNlIHVybF9wYXJzZTo6Q29tcG9u
ZW50IGJ5IFVSTENvbXBvbmVudAorICAgICAgICAtTW9yZSBjb2RlIGNsZWFuaW5nLgorICAgICAg
ICAtQWRvcHQgVVJMQnVmZmVyIGFuZCBSYXdVUkxCdWZmZXIgaW5zdGVhZCBvZiB0aGUgQ2Fub25P
dXRwdXRUIGFuZCBSYXdDYW5vbk91dHB1dFQuCisgICAgICAgIC1Vc2UgVVJMQ2hhcmFjdGVyVHlw
ZXMgaW5zdGVhZCBvZiB0aGUgbGl0YW55IG9mIGNoYXJhY3RlcnMgZnVuY3Rpb25zLgorICAgICAg
ICAtU29tZSBtb3JlIGNvZGUgY2xlYW5pbmcuCisgICAgICAgIC1GaXggdGhlIHN0eWxlIHRvIG1h
dGNoIFdlYktpdCBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAtUmVuYW1lIHRoZSBmaWxl
cyB0byBtYXRjaCBXZWJLaXQgc3R5bGUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKyAgICAgICAgKiB3dGYvdXJs
L2FwaS9QYXJzZWRVUkwuY3BwOgorICAgICAgICAoV1RGOjpQYXJzZWRVUkw6OlBhcnNlZFVSTCk6
CisgICAgICAgIChXVEY6OlBhcnNlZFVSTDo6c2VnbWVudCk6CisgICAgICAgICogd3RmL3VybC9h
cGkvUGFyc2VkVVJMLmg6CisgICAgICAgIChXVEY6OlBhcnNlZFVSTDo6aXNWYWxpZCk6CisgICAg
ICAgICogd3RmL3VybC9zcmMvUmF3VVJMQnVmZmVyLmg6CisgICAgICAgICogd3RmL3VybC9zcmMv
VVJMQ2Fub24uaDogQWRkZWQuCisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAg
KENoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDaGFy
c2V0Q29udmVydGVyOjpDaGFyc2V0Q29udmVydGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6Q2hhcnNldENvbnZlcnRlcjo6fkNoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAgICAo
Q2Fub25Ib3N0SW5mbyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9z
dEluZm86OkNhbm9uSG9zdEluZm8pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpD
YW5vbkhvc3RJbmZvOjpJc0lQQWRkcmVzcyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNhbm9uSG9zdEluZm86OkFkZHJlc3NMZW5ndGgpOgorICAgICAgICAoVVJMQ29tcG9uZW50
U291cmNlKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6VVJMQ29tcG9uZW50U291
cmNlOjpVUkxDb21wb25lbnRTb3VyY2UpOgorICAgICAgICAoUmVwbGFjZW1lbnRzKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpSZXBsYWNlbWVudHMpOgor
ICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNldFNjaGVtZSk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNTY2hlbWVP
dmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRz
OjpTZXRVc2VybmFtZSk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2Vt
ZW50czo6Q2xlYXJVc2VybmFtZSk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJl
cGxhY2VtZW50czo6SXNVc2VybmFtZU92ZXJyaWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5v
bmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNldFBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpDbGVhclBhc3N3b3JkKToKKyAgICAgICAgKFdU
Rjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpJc1Bhc3N3b3JkT3ZlcnJpZGRlbik6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0SG9zdCk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJIb3N0
KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpJc0hvc3RP
dmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRz
OjpTZXRQb3J0KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRz
OjpDbGVhclBvcnQpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVu
dHM6OklzUG9ydE92ZXJyaWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpS
ZXBsYWNlbWVudHM6OlNldFBhdGgpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpS
ZXBsYWNlbWVudHM6OkNsZWFyUGF0aCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OlJlcGxhY2VtZW50czo6SXNQYXRoT3ZlcnJpZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9u
aWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0UXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5v
bmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNsZWFyUXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxD
YW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OklzUXVlcnlPdmVycmlkZGVuKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRSZWYpOgorICAgICAgICAo
V1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNsZWFyUmVmKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpJc1JlZk92ZXJyaWRkZW4pOgor
ICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OnNvdXJjZXMpOgor
ICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OmNvbXBvbmVudHMp
OgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlBsYWNlaG9s
ZGVyKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkV0Yy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpyZW1vdmVVUkxXaGl0ZXNwYWNlKToKKyAgICAg
ICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpj
YW5vbmljYWxTY2hlbWVDaGFyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fu
b25pY2FsaXplU2NoZW1lKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25p
Y2FsaXplVXNlckluZm8pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmlj
YWxpemVQb3J0KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXpl
UmVmKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplRmlsZVN5
c3RlbVVSTCk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6UmVwbGFjZUZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAqIHd0Zi91cmwv
c3JjL1VSTENhbm9uRmlsZXVybC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIp
OgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpGaWxlQ2Fub25pY2FsaXplUGF0aCk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VGaWxlVVJMKToKKyAgICAg
ICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplSG9zdCk6CisgICAgICAgIChVUkxDYW5vbmlj
YWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplSG9z
dFZlcmJvc2UpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcDogQWRkZWQu
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OklETlRvQVNDSUkpOgorICAgICAgICAo
VVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlYWRV
VEZDaGFyKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcDogQWRkZWQuCisg
ICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZUlQQWRkcmVzcyk6Cisg
ICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5v
bkludGVybmFsLmNwcDogQWRkZWQuCisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyk6Cisg
ICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAg
ICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNvbnZlcnRVVEY4VG9VVEYxNik6CisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlNldHVwT3ZlcnJpZGVDb21wb25lbnRzKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6U2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6Ol9pdG9hX3MpOgorICAgICAgICAoV1RG
OjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19zKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxD
YW5vbkludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAg
ICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OmhleENoYXJUb1ZhbHVlKToKKyAgICAgICAgKFdU
Rjo6VVJMQ2Fub25pY2FsaXplcjo6aXNEb3QpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjphcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6ZG9BcHBlbmRVVEY4KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
QXBwZW5kQ2hhclRvT3V0cHV0KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBw
ZW5kVVRGOFZhbHVlKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRG
OEVzY2FwZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkFwcGVuZFVU
RjE2VmFsdWUpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpBcHBlbmRVVEY4RXNj
YXBlZENoYXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpJczhCaXRDaGFyKToK
KyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6RGVjb2RlRXNjYXBlZCk6CisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6Ol9pdG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5v
bmljYWxpemVyOjpfaXRvd19zKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6X3N0
cnRvdWk2NCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplTWFpbHRvVVJM
KToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpSZXBsYWNlTWFpbHRvVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5v
blBhdGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25p
Y2FsaXplUGF0aCk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUGFydGlhbFBhdGgpOgorICAgICAgICAqIHd0
Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxD
YW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVQYXRoVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNh
bGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlUGF0aFVSTCk6
CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVRdWVyeSk6CisgICAgICAgIChV
UkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q29udmVy
dFVURjE2VG9RdWVyeUVuY29kaW5nKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblJl
bGF0aXZlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OmlzUmVs
YXRpdmVVUkwpOgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVS
TENhbm9uaWNhbGl6ZXI6OnJlc29sdmVSZWxhdGl2ZVVSTCk6CisgICAgICAgICogd3RmL3VybC9z
cmMvVVJMQ2Fub25TdGRVUkwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2Fs
aXplcjo6RGVmYXVsdFBvcnRGb3JTY2hlbWUpOgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZVN0YW5kYXJkVVJM
KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVN0YW5kYXJkVVJMKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5jcHA6CisgICAgICAgICog
d3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaDoKKyAgICAgICAgKFdURjo6VVJMQ2hhcmFj
dGVyVHlwZXM6OmlzQ29tcG9uZW50Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5
cGVzOjppc0hleENoYXIpOgorICAgICAgICAoV1RGOjpVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0
Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5cGVzOjppc1F1ZXJ5Q2hhcik6Cisg
ICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5cGVzOjppc0NoYXJhY3Rlck9mVHlwZSk6CisgICAg
ICAgIChVUkxDaGFyYWN0ZXJUeXBlcyk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMRXNjYXBl
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxGaWxlLmg6IEFkZGVkLgor
ICAgICAgICAoVVJMUGFyc2VyKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjppc1dpbmRvd3NE
cml2ZVNlcGFyYXRvcik6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6aXNXaW5kb3dzRHJpdmVM
ZXR0ZXIpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmZpbmROZXh0U2xhc2gpOgorICAgICAg
ICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMpOgorICAgICAgICAo
V1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdpblVOQ1BhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3Jj
L1VSTFBhcnNlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdFNj
aGVtZSk6CisgICAgICAgIChVUkxQYXJzZXIpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6Oklz
QXV0aG9yaXR5VGVybWluYXRvcik6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdEZp
bGVOYW1lKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpFeHRyYWN0UXVlcnlLZXlWYWx1ZSk6
CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VBdXRob3JpdHkpOgorICAgICAgICAoV1RG
OjpVUkxQYXJzZXI6OlBhcnNlUG9ydCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VT
dGFuZGFyZFVSTCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VQYXRoVVJMKToKKyAg
ICAgICAgKFdURjo6VVJMUGFyc2VyOjpQYXJzZUZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAoV1RG
OjpVUkxQYXJzZXI6OlBhcnNlTWFpbHRvVVJMKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpw
YXJzZVBhdGhJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VBZnRlclNj
aGVtZSk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMUGFyc2UuaDogQWRkZWQuCisgICAgICAg
IChVUkxQYXJzZXIpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpQYXJzZUZpbGVV
UkwpOgorICAgICAgICAoVVJMUGFyc2VyKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxQYXJz
ZUludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoVVJMUGFyc2VyKToKKyAgICAgICAgKFdURjo6
VVJMUGFyc2VyOjppc1VSTFNsYXNoKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpzaG91bGRU
cmltRnJvbVVSTCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6dHJpbVVSTCk6CisgICAgICAg
IChXVEY6OlVSTFBhcnNlcjo6Y291bnRDb25zZWN1dGl2ZVNsYXNoZXMpOgorICAgICAgICAqIHd0
Zi91cmwvc3JjL1VSTFBhcnNlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VS
TFNlZ21lbnRzLmNwcDoKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oOgorICAg
ICAgICAoV1RGOjpVUkxTZWdtZW50czo6VVJMU2VnbWVudHMpOgorICAgICAgICAoVVJMU2VnbWVu
dHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdU
Rjo6VVJMU2VnbWVudHM6OmlubmVyVVJMU2VnbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdt
ZW50czo6c2V0SW5uZXJVUkxTZWdtZW50cyk6CisgICAgICAgIChXVEY6OlVSTFNlZ21lbnRzOjpj
bGVhcklubmVyVVJMU2VnbWVudHMpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFV0aWwuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFVSTFV0aWxpdGllcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxp
dGllczo6SXNTdGFuZGFyZCk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6RmluZEFuZENv
bXBhcmVTY2hlbWUpOgorICAgICAgICAoV1RGOjpVUkxVdGlsaXRpZXM6OkNhbm9uaWNhbGl6ZSk6
CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKToKKyAgICAgICAg
KFdURjo6VVJMVXRpbGl0aWVzOjpSZXBsYWNlQ29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVS
TFV0aWxpdGllczo6TG93ZXJDYXNlRXF1YWxzQVNDSUkpOgorICAgICAgICAoV1RGOjpVUkxVdGls
aXRpZXM6OkRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxp
dGllczo6RW5jb2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpD
b21wYXJlU2NoZW1lQ29tcG9uZW50KToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsLmg6
IEFkZGVkLgorICAgICAgICAoVVJMVXRpbGl0aWVzKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9V
UkxVdGlsSW50ZXJuYWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
RXNjYXBlLmguCisgICAgICAgIChVUkxVdGlsaXRpZXMpOgorCiAyMDEyLTA5LTIxICBTaW1vbiBI
YXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVycm9y
IG91dCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIElDVSBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAx
NTczMjYzY2NkODkzZjNkZDk4ZDljNmRkZmRkOWM0ODlmMTM0NzcxLi5mZWZhYzg5M2RhOTJjMzJj
YjE4MjMzOWU3NmE3ODM0Mzk2MDBmODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MTItMDktMjIgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIEludGVncmF0ZSBtb3N0IG9mIEdvb2dsZVVSTCBpbiBXVEZVUkwKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3NDA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9vc2VuIEtVUkxXVEZVUkwgdG8gYmUg
YWJsZSB0byBydW4gbW9zdCB0ZXN0cyBpbiBEZWJ1Zy4KKworICAgICAgICAqIHBsYXRmb3JtL0tV
UkxXVEZVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6S1VSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpLVVJMOjpoYXNQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpo
YXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6cXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZnJhZ21lbnRJZGVudGlm
aWVyKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmZpbGVTeXN0ZW1QYXRoKToKKwogMjAxMi0w
OS0yMiAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBB
WDogTGF5b3V0IHRlc3RzIHdvdWxkIGJlIGVhc2llciB0byB3cml0ZSBpZiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlciBjb3VsZCBmaW5kIGFuIGVsZW1lbnQgYnkgaWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUyYWY3YjljZWNjNWQxYTUyYWUwOGQ5N2I0MjJi
M2U1YWFiZDAwNzYuLjgyZjcyMWMyMDgxODlhYmIxZmE1ODk5YTZlZTRlMmFmM2YwMWVkYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTIsNiArMTIsMjkg
QEAKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTRGM0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjNCMEY2
MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjYxNDdCMEExNUREQ0NEQzAwRERC
OTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MTQ3QjA4MTVERENDREMwMEREQjkwNyAvKiBJbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi87IH07CisJCTI2RTZDMUVFMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vbkV0Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkU2QzFDRTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwICov
OyB9OworCQkyNkU2QzFFRjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25GaWxlc3lzdGVtdXJs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZD
MUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwICovOyB9Owor
CQkyNkU2QzFGMDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25GaWxldXJsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQwMTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwuY3BwICovOyB9OworCQkyNkU2QzFGMTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQxMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhv
c3QuY3BwICovOyB9OworCQkyNkU2QzFGMjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JQ1Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMx
RDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSUNVLmNwcCAqLzsgfTsKKwkJMjZFNkMxRjUx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uSW50ZXJuYWwuY3BwICovOyB9OworCQkyNkU2QzFGNjE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZFNkMxRDYxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwu
aCAqLzsgfTsKKwkJMjZFNkMxRjcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDcxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwICovOyB9OworCQkyNkU2QzFGOTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDkxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
TWFpbHRvLmNwcCAqLzsgfTsKKwkJMjZFNkMxRkExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkU2QzFEQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRoLmNwcCAqLzsgfTsKKwkJMjZF
NkMxRkIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFEQjE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAqLzsgfTsKKwkJMjZFNkMxRkMxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnku
Y3BwICovOyB9OworCQkyNkU2QzFGRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25SZWxhdGl2
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2
QzFERDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25SZWxhdGl2ZS5jcHAgKi87IH07CisJCTI2
RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblN0ZFVSTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFERjE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICovOyB9OworCQkyNkU2QzIwMTE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2RTZDMUUxMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbi5oICovOyB9OworCQky
NkU2QzIwMzE2MDkwMzczMDBDQTZBRjQgLyogVVJMRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TEZpbGUuaCAqLzsgfTsKKwkJMjZFNkMyMDQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmls
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2
QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCAqLzsgfTsKKwkJMjZFNkMy
MDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUU1MTYwOTAzNzMwMENBNkFGNCAv
KiBVUkxQYXJzZUludGVybmFsLmggKi87IH07CisJCTI2RTZDMjA3MTYwOTAzNzMwMENBNkFGNCAv
KiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNkU2QzFFNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2UuY3BwICovOyB9OworCQky
NkU2QzIwODE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUU4MTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxQYXJzZS5oICovOyB9OworCQkyNkU2QzIwQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkU2QzFFQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggKi87IH07CisJCTI2
RTZDMjBDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxVdGlsLmNwcCAqLzsgfTsKKwkJMjZFNkMyMEQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUVE
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggKi87IH07CiAJCTJDMDUzODU0MTVCQzgxOTAw
MEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkMwNTM4NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlh
bkRhdGVUaW1lLmggKi87IH07CiAJCTJDQ0Q4OTJBMTVDMDM5MDIwMDI4NTA4MyAvKiBHcmVnb3Jp
YW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQ0NEODkyOTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICov
OyB9OwogCQk0MzMwRjM4RjE1NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzMzBGMzhFMTU3NDVCMDUw
MEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICovOyB9OwpAQCAtMjM3LDEwICsyNjAsNiBAQAogCQlB
OEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNjYxNTFBODI1QjAw
NDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCAqLzsgfTsKIAkJQThBNDc0NzUxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hh
cmFjdGVyVHlwZXMuaCAqLzsgfTsKIAkJQThBNDc0NzYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENv
bXBvbmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oICovOyB9OwotCQlBOEE0
NzQ3NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBV
UkxFc2NhcGUuY3BwICovOyB9OwotCQlBOEE0NzQ3ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNj
YXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmggKi87IH07Ci0JCUE4QTQ3NDc5MTUx
QTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzZCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIu
aCAqLzsgfTsKLQkJQThBNDc0N0ExNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2Fs
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDczNkMxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oICovOyB9Owog
CQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNkQxNTFBODI1QjAwNDEy
M0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCAqLzsgfTsKIAkJQThBNDc0N0MxNTFBODI1QjAwNDEyM0ZG
IC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzM2RTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuaCAqLzsgfTsK
IAkJQThBNDc0N0QxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNG
RiAvKiBWYWx1ZUNoZWNrLmggKi87IH07CkBAIC0yNjAsNiArMjc5LDI5IEBACiAJCTE0M0Y2MTFF
MTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0IwRjYx
NUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2F0dXJhdGVkQXJpdGhtZXRpYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5n
Q29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ2VyVG9T
dHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNF
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkV0Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkV0Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25GaWxlc3lz
dGVtdXJsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRDAxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVybC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVUkxDYW5vbkZpbGV1cmwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNkU2QzFEMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSG9zdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbklDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5v
bklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUQ1MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVSTENhbm9uSW50ZXJuYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNkU2QzFENjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxDYW5vbkludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUQ3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbklQLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9u
SVAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEOTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVVJMQ2Fub25NYWlsdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uUGF0aC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMURCMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBh
dGh1cmwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25Q
YXRodXJsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxREMxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVVJMQ2Fub25RdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uUmVsYXRpdmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25TdGRVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VVJMQ2Fub25TdGRVUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFF
MTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVVJMQ2Fub24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMx
RTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVVJMRmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFF
NDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNlRmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTI2RTZDMUU1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFBhcnNlSW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TFBhcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRTgxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTFBhcnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFBh
cnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUVBMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxVdGlsSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVVJMVXRpbEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZD
MUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVSTFV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyNkU2QzFFRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVUkxVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJDMDUzODUzMTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmVnb3JpYW5EYXRlVGltZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQ0NEODkyOTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFu
RGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JlZ29y
aWFuRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzMwRjM4RTE1
NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVSTFN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00OTQsMTAgKzUzNiw2IEBACiAJCUE4QTQ3MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFy
YWN0ZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxD
aGFyYWN0ZXJUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzY3
MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVUkxDaGFyYWN0ZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBOEE0NzM2ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ29tcG9uZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTENvbXBvbmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2OTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTEVzY2FwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAv
KiBVUkxFc2NhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRXNjYXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzZCMTUxQTgyNUIwMDQxMjNG
RiAvKiBVUkxQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzZDMTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxRdWVyeUNhbm9uaWNhbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVVJMUXVlcnlDYW5vbmljYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4QTQ3MzZEMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxTZWdtZW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdt
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxTZWdtZW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM2RjE1MUE4MjVCMDA0MTIzRkYgLyog
VmFsdWVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZUNoZWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzMsMTUgKzkxMSwzNCBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJQThBNDczNjQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZl
ci5oICovLAogCQkJCUE4QTQ3MzY1MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxCdWZmZXIuaCAqLywK
KwkJCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCAqLywKKwkJCQkyNkU2
QzFDRTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwICovLAorCQkJCTI2RTZDMUNG
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwICovLAorCQkJCTI2
RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwuY3BwICovLAorCQkJCTI2
RTZDMUQxMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovLAorCQkJCTI2RTZD
MUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgKi8sCisJCQkJMjZFNkMxRDUx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovLAorCQkJCTI2RTZDMUQ2
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmggKi8sCisJCQkJMjZFNkMxRDcx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwICovLAorCQkJCTI2RTZDMUQ5MTYwOTAz
NzMwMENBNkFGNCAvKiBVUkxDYW5vbk1haWx0by5jcHAgKi8sCisJCQkJMjZFNkMxREExNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAgKi8sCisJCQkJMjZFNkMxREIxNjA5MDM3MzAw
Q0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5jcHAgKi8sCisJCQkJMjZFNkMxREMxNjA5MDM3MzAw
Q0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwICovLAorCQkJCTI2RTZDMUREMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCAqLywKKwkJCQkyNkU2QzFERjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICovLAogCQkJCUE4QTQ3MzY2MTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgKi8sCiAJCQkJQThBNDczNjcxNTFBODI1QjAw
NDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmggKi8sCiAJCQkJQThBNDczNjgxNTFBODI1QjAw
NDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oICovLAotCQkJCUE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNG
RiAvKiBVUkxFc2NhcGUuY3BwICovLAotCQkJCUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBV
UkxFc2NhcGUuaCAqLywKLQkJCQlBOEE0NzM2QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMUGFyc2Vy
LmggKi8sCi0JCQkJQThBNDczNkMxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2Fs
aXplci5oICovLAorCQkJCTI2RTZDMUUzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggKi8s
CisJCQkJMjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmNwcCAqLywKKwkJCQky
NkU2QzFFODE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2UuaCAqLywKKwkJCQkyNkU2QzFFNDE2
MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCAqLywKKwkJCQkyNkU2QzFFNTE2MDkw
MzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oICovLAogCQkJCUE4QTQ3MzZEMTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8sCiAJCQkJQThBNDczNkUxNTFBODI1QjAw
NDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggKi8sCisJCQkJMjZFNkMxRUMxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTFV0aWwuY3BwICovLAorCQkJCTI2RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxV
dGlsLmggKi8sCisJCQkJMjZFNkMxRUExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRlcm5h
bC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBzcmM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMTA2Miw5ICsxMTE5LDYgQEAKIAkJCQlBOEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3NTE1MUE4MjVCMDA0MTIzRkYg
LyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDc2MTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxDb21wb25lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc4
MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3
NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4
QTQ3NDdBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxRdWVyeUNhbm9uaWNhbGl6ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDdDMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NzExNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFN0cmluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBp
biBIZWFkZXJzICovLApAQCAtMTA3Niw2ICsxMTMwLDEzIEBACiAJCQkJQThBNDc0NDYxNTFBODI1
QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQx
MTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTI2RTZDMUY2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIwMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZDMjAzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIwNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFy
c2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZFNkMyMDgxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTFBhcnNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIwQTE2MDkwMzczMDBDQTZB
RjQgLyogVVJMVXRpbEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIwRDE2MDkw
MzczMDBDQTZBRjQgLyogVVJMVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMjE5LDEwICsxMjgw
LDI1IEBACiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRo
cmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NTgxNTFBODI1QjAwNDEyM0ZGIC8q
IFR5cGVUcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRUUxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTENhbm9uRXRjLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUVGMTYwOTAz
NzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMjZFNkMxRjAxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVybC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyNkU2QzFGMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUYyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGNTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25JbnRlcm5hbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGNzE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25JUC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGOTE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MjZFNkMxRkExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkyNkU2QzFGQjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTI2RTZDMUZDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblF1
ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUZEMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vblJlbGF0aXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUZGMTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vblN0ZFVSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3
NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQThBNDc0NzcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkyNkU2QzIwNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTI2RTZDMjA3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2Vn
bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDMzMEYzOEYxNTc0NUIwNTAwQUFGQThGIC8q
IFVSTFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzIwQzE2MDkwMzczMDBDQTZB
RjQgLyogVVJMVXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2OTE1MUE4MjVCMDA0
MTIzRkYgLyogVVRGOC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0NTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgy
NUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgK
aW5kZXggMGJlNGJiMDdkYzI4ZmM5MTE2MmVkMzA2NWFjYjE1MjA5ZjIxZDNlMi4uZDdhZjhjZWI0
NjlhZmE5NmI4OTg1N2M2Mjc4NmM2NjgyMTU2ZGE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC05NCw2ICs5
NCw4IEBACiAjZGVmaW5lIFdURl9VU0VfQVJFTkFfQUxMT0NfQUxJR05NRU5UX0lOVEVHRVIgMQog
I2VuZGlmIC8qIE1JUFMgKi8KIAorI2RlZmluZSBXVEZfVVNFX1dURlVSTCAxCisKIC8qIENQVShQ
UEMpIC0gUG93ZXJQQyAzMi1iaXQgKi8KICNpZiAgIGRlZmluZWQoX19wcGNfXykgICAgIFwKICAg
ICB8fCBkZWZpbmVkKF9fUFBDX18pICAgICBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvYXBpL1BhcnNlZFVSTC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5j
cHAKaW5kZXggMGIxNWZjYmNhMmRjOTMyMDRkZjhhMWE1OGE3MGVhZTUwNDU4YWNjNC4uMzZhYWM3
MjVlOTAyYzFlNDdkZjBkYzRhOWVkZjNlZDhkZjIyZDc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkv
UGFyc2VkVVJMLmNwcApAQCAtMzMsMjMgKzMzLDM4IEBACiAjaW5jbHVkZSA8d3RmL01lbW9yeUlu
c3RydW1lbnRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SYXdVUkxCdWZmZXIuaD4KICNpbmNsdWRl
IDx3dGYvVVJMQ29tcG9uZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL1VSTFBhcnNlci5oPgorI2luY2x1
ZGUgPHd0Zi9VUkxVdGlsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIAogUGFyc2VkVVJMOjpQYXJzZWRVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCiB7Ci0gICAgaWYgKHVybFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zcGVjID0g
VVJMU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgdW5zaWduZWQgdXJsU3Ry
aW5nTGVuZ3RoID0gdXJsU3RyaW5nLmxlbmd0aCgpOworICAgIGlmICghdXJsU3RyaW5nTGVuZ3Ro
KQorICAgICAgICByZXR1cm47IC8vIEZJWE1FOiB3ZSBzaG91bGQgQVNTRVJUIG9uIHRoaXMsIGJ1
dCBwZW9wbGUgdXNlIEtVUkwgaW5jb3JyZWN0bHkgd2l0aCBQYXJzZWRVUkxTdHJpbmdUYWcgOigu
CisKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gb3V0cHV0QnVmZmVyOworICAgIFN0cmluZyBiYXNl
OworICAgIGNvbnN0IENTdHJpbmcmIGJhc2VTdHIgPSBiYXNlLnV0ZjgoKTsKKyAgICBib29sIGlz
VmFsaWQgPSBmYWxzZTsKKyAgICBVUkxTZWdtZW50cyBiYXNlU2VnbWVudHM7CiAKLSAgICAvLyBG
SVhNRTogaGFuZGxlIGludmFsaWQgdXJsU3RyaW5nLgotICAgIG1fc3BlYyA9IFVSTFN0cmluZyh1
cmxTdHJpbmcpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgdGFrZSBzaG9ydGN1dHMgaGVyZSEg
V2UgZG8gbm90IGhhdmUgdG8gcmVzb2x2ZSB0aGUgcmVsYXRpdmUgcGFydC4KICAgICBpZiAodXJs
U3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBVUkxQYXJzZXI8TENoYXI+OjpwYXJzZVN0YW5kYXJk
VVJMKHVybFN0cmluZy5jaGFyYWN0ZXJzOCgpLCB1cmxTdHJpbmcubGVuZ3RoKCksIG1fc2VnbWVu
dHMpOworICAgICAgICBpc1ZhbGlkID0gVVJMVXRpbGl0aWVzOjpyZXNvbHZlUmVsYXRpdmUoYmFz
ZVN0ci5kYXRhKCksIGJhc2VTZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVybFN0cmlu
Zy5jaGFyYWN0ZXJzOCgpKSwgdXJsU3RyaW5nTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhcnNldENvbnZlcnRlciAqLyAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVy
LCAmbV9zZWdtZW50cyk7CiAgICAgZWxzZQotICAgICAgICBVUkxQYXJzZXI8VUNoYXI+OjpwYXJz
ZVN0YW5kYXJkVVJMKHVybFN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgdXJsU3RyaW5nLmxlbmd0aCgp
LCBtX3NlZ21lbnRzKTsKKyAgICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJl
bGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxTdHJpbmcuY2hhcmFjdGVyczE2KCksIHVy
bFN0cmluZ0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIGNoYXJzZXRDb252ZXJ0ZXIgKi8gMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2VnbWVudHMpOworCisg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBBU1NFUlQgb24gaXNWYWxpZCwgYnV0IHBlb3BsZSB1c2Ug
S1VSTCBpbmNvcnJlY3RseSB3aXRoIFBhcnNlZFVSTFN0cmluZ1RhZyA6KC4KKyAgICBpZiAoaXNW
YWxpZCkKKyAgICAgICAgbV9zcGVjID0gVVJMU3RyaW5nKFN0cmluZyhvdXRwdXRCdWZmZXIuZGF0
YSgpLCBvdXRwdXRCdWZmZXIubGVuZ3RoKCkpKTsKIH0KIAogUGFyc2VkVVJMOjpQYXJzZWRVUkwo
Y29uc3QgUGFyc2VkVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlKQpAQCAtNTcsMzYg
KzcyLDI5IEBAIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFBhcnNlZFVSTCYgYmFzZSwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZSkKICAgICBpZiAoIWJhc2UuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAocmVsYXRpdmUuaXNFbXB0eSgpKSB7CisgICAgdW5zaWduZWQgcmVs
YXRpdmVMZW5ndGggPSByZWxhdGl2ZS5sZW5ndGgoKTsKKyAgICBpZiAoIXJlbGF0aXZlTGVuZ3Ro
KSB7CiAgICAgICAgICp0aGlzID0gYmFzZS53aXRob3V0RnJhZ21lbnQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBoYW5kbGUgaW52YWxpZCBVUkxzLgotICAgIGNv
bnN0IFN0cmluZyYgYmFzZVN0cmluZyA9IGJhc2UubV9zcGVjLnN0cmluZygpOwotICAgIFJhd1VS
TEJ1ZmZlcjxjaGFyLCAxMDI0PiBvdXRwdXRCdWZmZXI7Ci0gICAgaWYgKHJlbGF0aXZlLmlzOEJp
dCgpKSB7Ci0gICAgICAgIGlmIChiYXNlU3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBV
UkxQYXJzZXI8TENoYXIsIExDaGFyPjo6cGFyc2VVUkxXaXRoQmFzZShyZWxhdGl2ZS5jaGFyYWN0
ZXJzOCgpLCByZWxhdGl2ZS5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJpbmcuY2hhcmFjdGVyczgoKSwgYmFzZVN0
cmluZy5sZW5ndGgoKSwgYmFzZS5tX3NlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCBtX3NlZ21lbnRzKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFVSTFBhcnNlcjxMQ2hhciwgVUNoYXI+Ojpw
YXJzZVVSTFdpdGhCYXNlKHJlbGF0aXZlLmNoYXJhY3RlcnM4KCksIHJlbGF0aXZlLmxlbmd0aCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZVN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgYmFzZVN0cmluZy5sZW5ndGgoKSwgYmFzZS5tX3Nl
Z21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0QnVmZmVyLCBtX3NlZ21lbnRzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChiYXNlU3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBVUkxQYXJz
ZXI8VUNoYXIsIExDaGFyPjo6cGFyc2VVUkxXaXRoQmFzZShyZWxhdGl2ZS5jaGFyYWN0ZXJzMTYo
KSwgcmVsYXRpdmUubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nLmNoYXJhY3RlcnM4KCksIGJhc2VTdHJpbmcu
bGVuZ3RoKCksIGJhc2UubV9zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXI8VUNoYXIsIFVDaGFyPjo6cGFyc2VV
UkxXaXRoQmFzZShyZWxhdGl2ZS5jaGFyYWN0ZXJzMTYoKSwgcmVsYXRpdmUubGVuZ3RoKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
U3RyaW5nLmNoYXJhY3RlcnMxNigpLCBiYXNlU3RyaW5nLmxlbmd0aCgpLCBiYXNlLm1fc2VnbWVu
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXRCdWZmZXIsIG1fc2VnbWVudHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3Bl
YyA9IFVSTFN0cmluZyhTdHJpbmcob3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0QnVmZmVyLmxl
bmd0aCgpKSk7CisgICAgUmF3VVJMQnVmZmVyPGNoYXI+IG91dHB1dEJ1ZmZlcjsKKyAgICBjb25z
dCBDU3RyaW5nJiBiYXNlU3RyID0gYmFzZS5tX3NwZWMubV9zdHJpbmcudXRmOCgpOworICAgIGJv
b2wgaXNWYWxpZCA9IGZhbHNlOworCisgICAgaWYgKHJlbGF0aXZlLmlzOEJpdCgpKQorICAgICAg
ICBpc1ZhbGlkID0gVVJMVXRpbGl0aWVzOjpyZXNvbHZlUmVsYXRpdmUoYmFzZVN0ci5kYXRhKCks
IGJhc2UubV9zZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlbGF0aXZlLmNoYXJhY3Rl
cnM4KCkpLCByZWxhdGl2ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIGNoYXJzZXRDb252ZXJ0ZXIgKi8gMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2VnbWVu
dHMpOworICAgIGVsc2UKKyAgICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJl
bGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlLm1fc2VnbWVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5jaGFyYWN0ZXJzMTYoKSwg
cmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKwor
ICAgIGlmIChpc1ZhbGlkKQorICAgICAgICBtX3NwZWMgPSBVUkxTdHJpbmcoU3RyaW5nKG91dHB1
dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5sZW5ndGgoKSkpOwogfQogCiBQYXJzZWRVUkwg
UGFyc2VkVVJMOjppc29sYXRlZENvcHkoKSBjb25zdApAQCAtMTcxLDcgKzE3OSw5IEBAIFN0cmlu
ZyBQYXJzZWRVUkw6OnNlZ21lbnQoY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQpIGNvbnN0
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFN0cmluZyBzZWdtZW50ID0gbV9zcGVj
LnN0cmluZygpLnN1YnN0cmluZyhjb21wb25lbnQuYmVnaW4oKSwgY29tcG9uZW50Lmxlbmd0aCgp
KTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzZWdtZW50LmlzRW1wdHkoKSwgIkEgdmFsaWQg
VVJMIGNvbXBvbmVudCBzaG91bGQgbm90IGJlIGVtcHR5LiIpOworCisgICAgLy8gRklYTUU6IEdv
b2dsZVVSTCBjcmVhdGUgZW1wdHkgc2VnbWVudHMuIFRoaXMgaGFwcGVuIGZvciB0aGUgZnJhZ21l
bnQgZm9yIHRoZSB0ZXN0IGZhc3QvdXJsL3NlZ21lbnRzLmh0bWwKKy8vICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoIXNlZ21lbnQuaXNFbXB0eSgpLCAiQSB2YWxpZCBVUkwgY29tcG9uZW50IHNob3Vs
ZCBub3QgYmUgZW1wdHkuIik7CiAgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFyc2VkVVJMLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
YXBpL1BhcnNlZFVSTC5oCmluZGV4IDA2MDNjZjExNjdjZjhiOTA0YWE4YzZhZDc2MjM3MGE3N2Fl
NTE0Y2MuLjAxNGUyOTM2N2E4MDJjZDA4MjVjYmI2ZjZmN2U3MjEwMzkzZWNiMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFyc2VkVVJMLmgKKysrIGIvU291cmNlL1dURi93
dGYvdXJsL2FwaS9QYXJzZWRVUkwuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgUGFyc2VkVVJMIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCi0gICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fc3BlYy5zdHJpbmcoKS5pc0VtcHR5KCk7
IH0KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9zcGVjLnN0cmluZygpLmlz
TnVsbCgpOyB9CiAKICAgICAvLyBSZXR1cm4gYSBVUkwgY29tcG9uZW50IG9yIGEgbnVsbCBTdHJp
bmcgaWYgdGhlIGNvbXBvbmVudCBpcyB1bmRlZmluZWQgZm9yIHRoZSBVUkwuCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBzY2hlbWUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvUmF3VVJMQnVmZmVyLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1Jh
d1VSTEJ1ZmZlci5oCmluZGV4IDU5YTdmMThhZjQ1YjI5M2NkYjUzNDI0ZDUwNWUxNGZkNzk4ZjI5
MjkuLjhmMDBmNTA5NmViMjJkZThmMjlmMzhmYmE2Y2JkYmJjNmExN2ViNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvUmF3VVJMQnVmZmVyLmgKKysrIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9SYXdVUkxCdWZmZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2lmIFVTRShXVEZV
UkwpCiAKICNpbmNsdWRlICJVUkxCdWZmZXIuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdURiB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fu
b24uaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjM0
ZjEwNWI3OTcyZDdiYmQ0NmIzOGE5YTgxNGIzMjJjZmZjNGQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbi5oCkBAIC0wLDAgKzEsNjU5IEBACisvLyBD
b3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjaWZuZGVmIFVSTENhbm9uX2gKKyNkZWZp
bmUgVVJMQ2Fub25faAorCisjaW5jbHVkZSAiVVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJMUGFy
c2UuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIgeworCisvLyBDaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gQ29udmVy
dHMgcXVlcnkgc3RyaW5ncyBpbnRvIGEgY3VzdG9tIGVuY29kaW5nLiBUaGUgZW1iZWRkZXIgY2Fu
IHN1cHBseSBhbgorLy8gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyB0byBpbnRlcmZhY2Ug
d2l0aCB0aGVpciBvd24gY2hhcmFjdGVyIHNldAorLy8gY29udmVyc2lvbiBsaWJyYXJpZXMuCisv
LworLy8gRW1iZWRkZXJzIHdpbGwgd2FudCB0byBzZWUgdGhlIHVuaXQgdGVzdCBmb3IgdGhlIElD
VSB2ZXJzaW9uLgorCitjbGFzcyBDaGFyc2V0Q29udmVydGVyIHsKK3B1YmxpYzoKKyAgICBDaGFy
c2V0Q29udmVydGVyKCkgeyB9CisgICAgdmlydHVhbCB+Q2hhcnNldENvbnZlcnRlcigpIHsgfQor
CisgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGlucHV0IHN0cmluZyBmcm9tIFVURi0xNiB0byB3
aGF0ZXZlciBvdXRwdXQgZm9ybWF0IHRoZQorICAgIC8vIGNvbnZlcnRlciBzdXBwb3J0cy4gVGhp
cyBpcyB1c2VkIG9ubHkgZm9yIHRoZSBxdWVyeSBlbmNvZGluZyBjb252ZXJzaW9uLAorICAgIC8v
IHdoaWNoIGRvZXMgbm90IGZhaWwuIEluc3RlYWQsIHRoZSBjb252ZXJ0ZXIgc2hvdWxkIGluc2Vy
dCAiaW52YWxpZAorICAgIC8vIGNoYXJhY3RlciIgY2hhcmFjdGVycyBpbiB0aGUgb3V0cHV0IGZv
ciBpbnZhbGlkIHNlcXVlbmNlcywgYW5kIGRvIHRoZQorICAgIC8vIGJlc3QgaXQgY2FuLgorICAg
IC8vCisgICAgLy8gSWYgdGhlIGlucHV0IGNvbnRhaW5zIGEgY2hhcmFjdGVyIG5vdCByZXByZXNl
bnRhYmxlIGluIHRoZSBvdXRwdXQKKyAgICAvLyBjaGFyYWN0ZXIgc2V0LCB0aGUgY29udmVydGVy
IHNob3VsZCBhcHBlbmQgdGhlIEhUTUwgZW50aXR5IHNlcXVlbmNlIGluCisgICAgLy8gZGVjaW1h
bCwgKHN1Y2ggYXMgIiYjMjAzMjA7Iikgd2l0aCBlc2NhcGluZyBvZiB0aGUgYW1wZXJzYW5kLCBu
dW1iZXIKKyAgICAvLyBzaWduLCBhbmQgc2VtaWNvbG9uIChpbiB0aGUgcHJldmlvdXMgZXhhbXBs
ZSBpdCB3b3VsZCBiZQorICAgIC8vICIlMjYlMjMyMDMyMCUzQiIpLiBUaGlzIHJ1bGUgaXMgYmFz
ZWQgb24gd2hhdCBJRSBkb2VzIGluIHRoaXMgc2l0dWF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBD
b252ZXJ0RnJvbVVURjE2KGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCkgPSAwOworfTsKKworLy8gV2hpdGVzcGFjZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisvLyBTZWFyY2hlcyBmb3Igd2hpdGVzcGFjZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20g
dGhlIG1pZGRsZSBvZiBVUkxzLCBhbmQKKy8vIHJlbW92ZXMgaXQuIFJlbW92ZWQgd2hpdGVzcGFj
ZSBhcmUgdGFicyBhbmQgbmV3bGluZXMsIGJ1dCBOT1Qgc3BhY2VzLiBTcGFjZXMKKy8vIGFyZSBw
cmVzZXJ2ZWQsIHdoaWNoIGlzIHdoYXQgbW9zdCBicm93c2VycyBkby4gQSBwb2ludGVyIHRvIHRo
ZSBvdXRwdXQgd2lsbAorLy8gYmUgcmV0dXJuZWQsIGFuZCB0aGUgbGVuZ3RoIG9mIHRoYXQgb3V0
cHV0IHdpbGwgYmUgaW4gfG91dHB1dExlbmd0aHwuCisvLworLy8gVGhpcyBzaG91bGQgYmUgY2Fs
bGVkIGJlZm9yZSBwYXJzaW5nIGlmIHdoaXRlc3BhY2UgcmVtb3ZhbCBpcyBkZXNpcmVkICh3aGlj
aAorLy8gaXQgbm9ybWFsbHkgaXMgd2hlbiB5b3UgYXJlIGNhbm9uaWNhbGl6aW5nKS4KKy8vCisv
LyBJZiBubyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdXNl
IHRoZSBidWZmZXIgYW5kIHdpbGwKKy8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGlucHV0LCB0
byBhdm9pZCB0aGUgZXh0cmEgY29weS4gSWYgbW9kaWZpY2F0aW9uIGlzCisvLyByZXF1aXJlZCwg
dGhlIGdpdmVuIHxidWZmZXJ8IHdpbGwgYmUgdXNlZCBhbmQgdGhlIHJldHVybmVkIHBvaW50ZXIg
d2lsbAorLy8gcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLgorLy8KKy8vIFRo
ZXJlZm9yZSwgY2FsbGVycyBzaG91bGQgbm90IHVzZSB0aGUgYnVmZmVyLCBzaW5jZSBpdCBtYXkg
YWN0dWFsbCBiZSBlbXB0eSwKKy8vIHVzZSB0aGUgY29tcHV0ZWQgcG9pbnRlciBhbmQgfG91dHB1
dExlbmd0aHwgaW5zdGVhZC4KK2NvbnN0IGNoYXIqIHJlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3Qg
Y2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiwgaW50KiBvdXRw
dXRMZW5ndGgpOworY29uc3QgVUNoYXIqIHJlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgVUNoYXIq
IGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mLCBpbnQqIG91dHB1dExl
bmd0aCk7CisKKy8vIElETiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ29udmVydHMgdGhlIFVuaWNv
ZGUgaW5wdXQgcmVwcmVzZW50aW5nIGEgaG9zdG5hbWUgdG8gQVNDSUkgdXNpbmcgSUROIHJ1bGVz
LgorLy8gVGhlIG91dHB1dCBtdXN0IGZhbGwgaW4gdGhlIEFTQ0lJIHJhbmdlLCBidXQgd2lsbCBi
ZSBlbmNvZGVkIGluIFVURi0xNi4KKy8vCisvLyBPbiBzdWNjZXNzLCB0aGUgb3V0cHV0IHdpbGwg
YmUgZmlsbGVkIHdpdGggdGhlIEFTQ0lJIGhvc3QgbmFtZSBhbmQgaXQgd2lsbAorLy8gcmV0dXJu
IHRydWUuIFVubGlrZSBtb3N0IG90aGVyIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zLCB0aGlz
IGFzc3VtZXMgdGhhdAorLy8gdGhlIG91dHB1dCBpcyBlbXB0eS4gVGhlIGJlZ2lubmluZyBvZiB0
aGUgaG9zdCB3aWxsIGJlIGF0IG9mZnNldCAwLCBhbmQKKy8vIHRoZSBsZW5ndGggb2YgdGhlIG91
dHB1dCB3aWxsIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgaG9zdCBuYW1lLgorLy8K
Ky8vIE9uIGVycm9yLCByZXR1cm5zIGZhbHNlLiBUaGUgb3V0cHV0IGluIHRoaXMgY2FzZSBpcyB1
bmRlZmluZWQuCitib29sIElETlRvQVNDSUkoY29uc3QgVUNoYXIqIHNyYywgaW50IHNvdXJjZUxl
bmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KTsKKworLy8gUGllY2UtYnktcGllY2UgY2Fu
b25pY2FsaXplcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8KKy8vIFRoZXNlIGluZGl2aWR1YWwgY2Fub25pY2FsaXplcnMgYXBwZW5kIHRoZSBjYW5v
bmljYWxpemVkIHZlcnNpb25zIG9mIHRoZQorLy8gY29ycmVzcG9uZGluZyBVUkwgY29tcG9uZW50
IHRvIHRoZSBnaXZlbiBzdGQ6OnN0cmluZy4gVGhlIHNwZWMgYW5kIHRoZQorLy8gcHJldmlvdXNs
eS1pZGVudGlmaWVkIHJhbmdlIG9mIHRoYXQgY29tcG9uZW50IGFyZSB0aGUgaW5wdXQuIFRoZSBy
YW5nZSBvZgorLy8gdGhlIGNhbm9uaWNhbGl6ZWQgY29tcG9uZW50IHdpbGwgYmUgd3JpdHRlbiB0
byB0aGUgb3V0cHV0IGNvbXBvbmVudC4KKy8vCisvLyBUaGVzZSBmdW5jdGlvbnMgYWxsIGFwcGVu
ZCB0byB0aGUgb3V0cHV0IHNvIHRoZXkgY2FuIGJlIGNoYWluZWQuIE1ha2Ugc3VyZQorLy8gdGhl
IG91dHB1dCBpcyBlbXB0eSB3aGVuIHlvdSBzdGFydC4KKy8vCisvLyBUaGVzZSBmdW5jdGlvbnMg
cmV0dXJucyBib29sZWFuIHZhbHVlcyBpbmRpY2F0aW5nIHN1Y2Nlc3MuIE9uIGZhaWx1cmUsIHRo
ZXkKKy8vIHdpbGwgYXR0ZW1wdCB0byB3cml0ZSBzb21ldGhpbmcgcmVhc29uYWJsZSB0byB0aGUg
b3V0cHV0IHNvIHRoYXQsIGlmCisvLyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIHRoZXkgd2lsbCBy
ZWNvZ25pc2UgaXQgYXMgc29tZXRoaW5nIHRoYXQncyBtZXNzZWQgdXAuCisvLyBOb3RoaW5nIG1v
cmUgc2hvdWxkIGV2ZXIgYmUgZG9uZSB3aXRoIHRoZXNlIGludmFsaWQgVVJMcywgaG93ZXZlci4K
KworLy8gU2NoZW1lOiBBcHBlbmRzIHRoZSBzY2hlbWUgYW5kIGNvbG9uIHRvIHRoZSBVUkwuIFRo
ZSBvdXRwdXQgY29tcG9uZW50IHdpbGwKKy8vIGluZGljYXRlIHRoZSByYW5nZSBvZiBjaGFyYWN0
ZXJzIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBjb2xvbi4KKy8vCisvLyBDYW5vbmljYWwg
VVJMcyBhbHdheXMgaGF2ZSBhIHNjaGVtZS4gSWYgdGhlIHNjaGVtZSBpcyBub3QgcHJlc2VudCBp
biB0aGUKKy8vIGlucHV0LCB0aGlzIHdpbGwganVzdCB3cml0ZSB0aGUgY29sb24gdG8gaW5kaWNh
dGUgYW4gZW1wdHkgc2NoZW1lLiBEb2VzIG5vdAorLy8gYXBwZW5kIHNsYXNoZXMgd2hpY2ggd2ls
bCBiZSBuZWVkZWQgYmVmb3JlIGFueSBhdXRob3JpdHkgY29tcG9uZW50cyBmb3IgbW9zdAorLy8g
VVJMcy4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4K
K2Jvb2wgQ2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgc2NoZW1lLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91cHV0U2NoZW1l
KTsKK2Jvb2wgQ2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXB1dFNj
aGVtZSk7CisKKy8vIFVzZXIgaW5mbzogdXNlcm5hbWUvcGFzc3dvcmQuIElmIHByZXNlbnQsIHRo
aXMgd2lsbCBhZGQgdGhlIGRlbGltaXRlcnMgc28KKy8vIHRoZSBvdXRwdXQgd2lsbCBiZSAiPHVz
ZXJuYW1lPjo8cGFzc3dvcmQ+QCIgb3IgIjx1c2VybmFtZT5AIi4gRW1wdHkKKy8vIHVzZXJuYW1l
L3Bhc3N3b3JkIHBhaXJzLCBvciBlbXB0eSBwYXNzd29yZHMsIHdpbGwgZ2V0IGNvbnZlcnRlZCB0
bworLy8gbm9uZXhpc3RhbnQgaW4gdGhlIGNhbm9uaWNhbCB2ZXJzaW9uLgorLy8KKy8vIFRoZSBj
b21wb25lbnRzIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHJlZmVyIHRvIHJhbmdlcyBp
biB0aGUKKy8vIHJlc3BlY3RpdmUgc291cmNlIHN0cmluZ3MuIFVzdWFsbHksIHRoZXNlIHdpbGwg
YmUgdGhlIHNhbWUgc3RyaW5nLCB3aGljaAorLy8gaXMgbGVnYWwgYXMgbG9uZyBhcyB0aGUgdHdv
IGNvbXBvbmVudHMgZG9uJ3Qgb3ZlcmxhcC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1
aXJlcyBVVEYtOCBlbmNvZGluZy4KK2Jvb2wgQ2Fub25pY2FsaXplVXNlckluZm8oY29uc3QgY2hh
ciogdXNlcm5hbWVTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIGNvbnN0IGNo
YXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1
dFVzZXJuYW1lLCBVUkxDb21wb25lbnQqIG91dHB1dFBhc3N3b3JkKTsKK2Jvb2wgQ2Fub25pY2Fs
aXplVXNlckluZm8oY29uc3QgVUNoYXIqIHVzZXJuYW1lU291cmNlLCBjb25zdCBVUkxDb21wb25l
bnQmIHVzZXJuYW1lLCBjb25zdCBVQ2hhciogcGFzc3dvcmRTb3VyY2UsIGNvbnN0IFVSTENvbXBv
bmVudCYgcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFy
PiYsIFVSTENvbXBvbmVudCogb3V0cHV0VXNlcm5hbWUsIFVSTENvbXBvbmVudCogb3V0cHV0UGFz
c3dvcmQpOworCisKKy8vIFRoaXMgc3RydWN0dXJlIGhvbGRzIGRldGFpbGVkIHN0YXRlIGV4cG9y
dGVkIGZyb20gdGhlIElQL0hvc3QgY2Fub25pY2FsaXplcnMuCisvLyBBZGRpdGlvbmFsIGZpZWxk
cyBtYXkgYmUgYWRkZWQgYXMgY2FsbGVycyByZXF1aXJlIHRoZW0uCitzdHJ1Y3QgQ2Fub25Ib3N0
SW5mbyB7CisKKyAgICBDYW5vbkhvc3RJbmZvKCkKKyAgICAgICAgOiBmYW1pbHkoTkVVVFJBTCkK
KyAgICAgICAgLCBpcHY0Q29tcG9uZW50c0NvdW50KDApCisgICAgICAgICwgb3VwdXRIb3N0KCkK
KyAgICB7CisgICAgfQorCisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gdGVzdCBpZiBm
YW1pbHkgaXMgYW4gSVAgYWRkcmVzcy4KKyAgICBib29sIElzSVBBZGRyZXNzKCkgY29uc3QgeyBy
ZXR1cm4gZmFtaWx5ID09IElQVjQgfHwgZmFtaWx5ID09IElQVjY7IH0KKworICAgIC8vIFRoaXMg
ZmllbGQgc3VtbWFyaXplcyBob3cgdGhlIGlucHV0IHdhcyBjbGFzc2lmaWVkIGJ5IHRoZSBjYW5v
bmljYWxpemVyLgorICAgIGVudW0gRmFtaWx5IHsKKyAgICAgICAgLy8gLSBEb2Vzbid0IHJlc2Vt
YmxlIGFuIElQIGFkZHJlc3MuIEFzIGZhciBhcyB0aGUgSVAKKyAgICAgICAgLy8gY2Fub25pY2Fs
aXplciBpcyBjb25jZXJuZWQsIGl0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEKKyAgICAgICAgLy8g
ICBob3N0bmFtZS4KKyAgICAgICAgTkVVVFJBTCwKKworICAgICAgICAvLyAtIEFsbW9zdCBhbiBJ
UCwgYnV0IHdhcyBub3QgY2Fub25pY2FsaXplZC4gVGhpcyBjb3VsZCBiZSBhbgorICAgICAgICAv
LyBJUHY0IGFkZHJlc3Mgd2hlcmUgdHJ1bmNhdGlvbiBvY2N1cnJlZCwgb3Igc29tZXRoaW5nCisg
ICAgICAgIC8vIGNvbnRhaW5pbmcgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyA6W10gd2hpY2ggZGlk
IG5vdCBwYXJzZQorICAgICAgICAvLyBhcyBhbiBJUHY2IGFkZHJlc3MuIE5ldmVyIGF0dGVtcHQg
dG8gY29ubmVjdCB0byB0aGlzCisgICAgICAgIC8vIGFkZHJlc3MsIGJlY2F1c2UgaXQgbWlnaHQg
YWN0dWFsbHkgc3VjY2VlZCEKKyAgICAgICAgQlJPS0VOLAorCisgICAgICAgIElQVjQsIC8vIC0g
U3VjY2Vzc2Z1bGx5IGNhbm9uaWNhbGl6ZWQgYXMgYW4gSVB2NCBhZGRyZXNzLgorICAgICAgICBJ
UFY2LCAvLyAtIFN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIGFzIGFuIElQdjYgYWRkcmVzcy4K
KyAgICB9OworICAgIEZhbWlseSBmYW1pbHk7CisKKyAgICAvLyBJZiB8ZmFtaWx5fCBpcyBJUFY0
LCB0aGVuIHRoaXMgaXMgdGhlIG51bWJlciBvZiBub25lbXB0eSBkb3Qtc2VwYXJhdGVkCisgICAg
Ly8gY29tcG9uZW50cyBpbiB0aGUgaW5wdXQgdGV4dCwgZnJvbSAxIHRvIDQuIElmIHxmYW1pbHl8
IGlzIG5vdCBJUFY0LAorICAgIC8vIHRoaXMgdmFsdWUgaXMgdW5kZWZpbmVkLgorICAgIGludCBp
cHY0Q29tcG9uZW50c0NvdW50OworCisgICAgLy8gTG9jYXRpb24gb2YgaG9zdCB3aXRoaW4gdGhl
IGNhbm9uaWNhbGl6ZWQgb3V0cHV0LgorICAgIC8vIENhbm9uaWNhbGl6ZUlQQWRkcmVzcygpIG9u
bHkgc2V0cyB0aGlzIGZpZWxkIGlmIHxmYW1pbHl8IGlzIElQVjQgb3IgSVBWNi4KKyAgICAvLyBD
YW5vbmljYWxpemVIb3N0VmVyYm9zZSgpIGFsd2F5cyBzZXRzIGl0LgorICAgIFVSTENvbXBvbmVu
dCBvdXB1dEhvc3Q7CisKKyAgICAvLyB8YWRkcmVzc3wgY29udGFpbnMgdGhlIHBhcnNlZCBJUCBB
ZGRyZXNzIChpZiBhbnkpIGluIGl0cyBmaXJzdAorICAgIC8vIEFkZHJlc3NMZW5ndGgoKSBieXRl
cywgaW4gbmV0d29yayBvcmRlci4gSWYgSXNJUEFkZHJlc3MoKSBpcyBmYWxzZQorICAgIC8vIEFk
ZHJlc3NMZW5ndGgoKSB3aWxsIHJldHVybiB6ZXJvIGFuZCB0aGUgY29udGVudCBvZiB8YWRkcmVz
c3wgaXMgdW5kZWZpbmVkLgorICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzc1sxNl07CisKKyAgICAv
LyBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhbiBJUCBh
ZGRyZXNzIGNvcnJlc3BvbmRpbmcKKyAgICAvLyB0byB0aGUgY3VycmVudCBJUCB2ZXJzaW9uIGlu
IHxmYW1pbHl8LCBpZiBhbnkuIEZvciB1c2Ugd2l0aCB8YWRkcmVzc3wuCisgICAgaW50IEFkZHJl
c3NMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbWlseSA9PSBJUFY0ID8g
NCA6IChmYW1pbHkgPT0gSVBWNiA/IDE2IDogMCk7CisgICAgfQorfTsKKworCisvLyBIb3N0Lgor
Ly8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIFVURi04IGVuY29kaW5nLiBVc2UgdGhp
cyB2ZXJzaW9uIHdoZW4geW91IG9ubHkKKy8vIG5lZWQgdG8ga25vdyB3aGV0aGVyIGNhbm9uaWNh
bGl6YXRpb24gc3VjY2VlZGVkLgorYm9vbCBDYW5vbmljYWxpemVIb3N0KGNvbnN0IGNoYXIqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9u
ZW50KiBvdXB1dEhvc3QpOworYm9vbCBDYW5vbmljYWxpemVIb3N0KGNvbnN0IFVDaGFyKiBzcGVj
LCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVu
dCogb3VwdXRIb3N0KTsKKworLy8gRXh0ZW5kZWQgdmVyc2lvbiBvZiBDYW5vbmljYWxpemVIb3N0
LCB3aGljaCByZXR1cm5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisvLyBVc2UgdGhpcyB3aGVu
IHlvdSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgaG9zdG5hbWUgd2FzIGFuIElQIGFkZHJlc3Mu
CisvLyBBIHN1Y2Nlc3NmdWwgcmV0dXJuIGlzIGluZGljYXRlZCBieSBob3N0SW5mby0+ZmFtaWx5
ICE9IEJST0tFTi4gU2VlIHRoZQorLy8gZGVmaW5pdGlvbiBvZiBDYW5vbkhvc3RJbmZvIGFib3Zl
IGZvciBkZXRhaWxzLgordm9pZCBDYW5vbmljYWxpemVIb3N0VmVyYm9zZShjb25zdCBjaGFyKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9z
dEluZm8qKTsKK3ZvaWQgQ2Fub25pY2FsaXplSG9zdFZlcmJvc2UoY29uc3QgVUNoYXIqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgQ2Fub25Ib3N0SW5m
byopOworCisKKy8vIElQIGFkZHJlc3Nlcy4KKy8vCisvLyBUcmllcyB0byBpbnRlcnByZXQgdGhl
IGdpdmVuIGhvc3QgbmFtZSBhcyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcy4gSWYgaXQgaXMKKy8v
IGFuIElQIGFkZHJlc3MsIGl0IHdpbGwgY2Fub25pY2FsaXplIGl0IGFzIHN1Y2gsIGFwcGVuZGlu
ZyBpdCB0byB8b3V0cHV0fC4KKy8vIEFkZGl0aW9uYWwgc3RhdHVzIGluZm9ybWF0aW9uIGlzIHJl
dHVybmVkIHZpYSB0aGUgfCpob3N0SW5mb3wgcGFyYW1ldGVyLgorLy8gU2VlIHRoZSBkZWZpbml0
aW9uIG9mIENhbm9uSG9zdEluZm8gYWJvdmUgZm9yIGRldGFpbHMuCisvLworLy8gVGhpcyBpcyBj
YWxsZWQgQVVUT01BVElDQUxMWSBmcm9tIHRoZSBob3N0IGNhbm9uaWNhbGl6ZXIsIHdoaWNoIGVu
c3VyZXMgdGhhdAorLy8gdGhlIGlucHV0IGlzIHVuZXNjYXBlZCBhbmQgbmFtZS1wcmVwcGVkLCBl
dGMuIEl0IHNob3VsZCBub3Qgbm9ybWFsbHkgYmUKKy8vIG5lY2Vzc2FyeSBvciB3aXNlIHRvIGNh
bGwgdGhpcyBkaXJlY3RseS4KK3ZvaWQgQ2Fub25pY2FsaXplSVBBZGRyZXNzKGNvbnN0IGNoYXIq
IHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgQ2Fub25I
b3N0SW5mbyopOwordm9pZCBDYW5vbmljYWxpemVJUEFkZHJlc3MoY29uc3QgVUNoYXIqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgQ2Fub25Ib3N0SW5m
byopOworCisvLyBQb3J0OiB0aGlzIGZ1bmN0aW9uIHdpbGwgYWRkIHRoZSBjb2xvbiBmb3IgdGhl
IHBvcnQgaWYgYSBwb3J0IGlzIHByZXNlbnQuCisvLyBUaGUgY2FsbGVyIGNhbiBwYXNzIFVSTFBh
cnNlcjo6UE9SVF9VTlNQRUNJRklFRCBhcyB0aGUKKy8vIGRlZmF1bHRQb3J0Rm9yU2NoZW1lIGFy
Z3VtZW50IGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcG9ydC4KKy8vCisvLyBUaGUgOC1iaXQgdmVy
c2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4KK2Jvb2wgQ2Fub25pY2FsaXplUG9ydChjb25z
dCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZhdWx0UG9ydEZv
clNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21w
b25lbnQqIG91cHV0UG9ydCk7Citib29sIENhbm9uaWNhbGl6ZVBvcnQoY29uc3QgVUNoYXIqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCwgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAor
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3Vw
dXRQb3J0KTsKKworLy8gUmV0dXJucyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgZ2l2ZW4gY2Fu
b25pY2FsIHNjaGVtZSwgb3IgUE9SVF9VTlNQRUNJRklFRAorLy8gaWYgdGhlIHNjaGVtZSBpcyB1
bmtub3duLgoraW50IERlZmF1bHRQb3J0Rm9yU2NoZW1lKGNvbnN0IGNoYXIqIHNjaGVtZSwgaW50
IHNjaGVtZUxlbmd0aCk7CisKKy8vIFBhdGguIElmIHRoZSBpbnB1dCBkb2VzIG5vdCBiZWdpbiBp
biBhIHNsYXNoIChpbmNsdWRpbmcgaWYgdGhlIGlucHV0IGlzCisvLyBlbXB0eSksIHdlJ2xsIHBy
ZXBlbmQgYSBzbGFzaCB0byB0aGUgcGF0aCB0byBtYWtlIGl0IGNhbm9uaWNhbC4KKy8vCisvLyBU
aGUgOC1iaXQgdmVyc2lvbiBhc3N1bWVzIFVURi04IGVuY29kaW5nLCBidXQgZG9lcyBub3QgdmVy
aWZ5IHRoZSB2YWxpZGl0eQorLy8gb2YgdGhlIFVURi04IChpLmUuLCB5b3UgY2FuIGhhdmUgaW52
YWxpZCBVVEYtOCBzZXF1ZW5jZXMsIGludmFsaWQKKy8vIGNoYXJhY3RlcnMsIGV0Yy4pLiBOb3Jt
YWxseSwgVVJMcyB3aWxsIGNvbWUgaW4gYXMgVVRGLTE2LCBzbyB0aGlzIGlzbid0CisvLyBhbiBp
c3N1ZS4gU29tZWJvZHkgZ2l2aW5nIHVzIGFuIDgtYml0IHBhdGggaXMgcmVzcG9uc2libGUgZm9y
IGdlbmVyYXRpbmcKKy8vIHRoZSBwYXRoIHRoYXQgdGhlIHNlcnZlciBleHBlY3RzICh3ZSdsbCBl
c2NhcGUgaGlnaC1iaXQgY2hhcmFjdGVycyksIHNvCisvLyBpZiBzb21ldGhpbmcgaXMgaW52YWxp
ZCwgaXQncyB0aGVpciBwcm9ibGVtLgorYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IGNoYXIq
IHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29t
cG9uZW50KiBvdXRwdXRQYXRoKTsKK2Jvb2wgQ2Fub25pY2FsaXplUGF0aChjb25zdCBVQ2hhciog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21w
b25lbnQqIG91dHB1dFBhdGgpOworCisvLyBDYW5vbmljYWxpemVzIHRoZSBpbnB1dCBhcyBhIGZp
bGUgcGF0aC4gVGhpcyBpcyBsaWtlIENhbm9uaWNhbGl6ZVBhdGggZXhjZXB0CisvLyB0aGF0IGl0
IGFsc28gaGFuZGxlcyBXaW5kb3dzIGRyaXZlIHNwZWNzLiBGb3IgZXhhbXBsZSwgdGhlIHBhdGgg
Y2FuIGJlZ2luCisvLyB3aXRoICJjfFwiIGFuZCBpdCB3aWxsIGdldCBwcm9wZXJseSBjYW5vbmlj
YWxpemVkIHRvICJDOi8iLgorLy8gVGhlIHN0cmluZyB3aWxsIGJlIGFwcGVuZGVkIHRvIHxvdXRw
dXR8IGFuZCB8b3V0cHV0UGF0aHwgd2lsbCBiZSB1cGRhdGVkLgorLy8KKy8vIFRoZSA4LWJpdCB2
ZXJzaW9uIHJlcXVpcmVzIFVURi04IGVuY29kaW5nLgorYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0
aChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCk7Citib29sIEZpbGVDYW5vbmljYWxpemVQ
YXRoKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZl
cjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCk7CisKKy8vIFF1ZXJ5OiBQcmVwZW5k
cyB0aGUgPyBpZiBuZWVkZWQuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgdGhl
IGlucHV0IHRvIGJlIFVURi04IGVuY29kaW5nLiBJbmNvcnJlY3RseQorLy8gZW5jb2RlZCBjaGFy
YWN0ZXJzIChpbiBVVEYtOCBvciBVVEYtMTYpIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgVW5p
Y29kZQorLy8gImludmFsaWQgY2hhcmFjdGVyLiIgVGhpcyBmdW5jdGlvbiBjYW4gbm90IGZhaWws
IHdlIGFsd2F5cyBqdXN0IHRyeSB0byBkbworLy8gb3VyIGJlc3QgZm9yIGNyYXp5IGlucHV0IGhl
cmUgc2luY2Ugd2ViIHBhZ2VzIGNhbiBzZXQgaXQgdGhlbXNlbHZlcy4KKy8vCisvLyBUaGlzIHdp
bGwgY29udmVydCB0aGUgZ2l2ZW4gaW5wdXQgaW50byB0aGUgb3V0cHV0IGVuY29kaW5nIHRoYXQg
dGhlIGdpdmVuCisvLyBjaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciBvYmplY3QgcHJvdmlkZXMuIFRo
ZSBjb252ZXJ0ZXIgd2lsbCBvbmx5IGJlIGNhbGxlZAorLy8gaWYgbmVjZXNzYXJ5LCBmb3IgQVND
SUkgaW5wdXQsIG5vIGNvbnZlcnNpb25zIGFyZSBuZWNlc3NhcnkuCisvLworLy8gVGhlIGNvbnZl
cnRlciBjYW4gYmUgbnVsbC4gSW4gdGhpcyBjYXNlLCB0aGUgb3V0cHV0IGVuY29kaW5nIHdpbGwg
YmUgVVRGLTguCit2b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqLCBVUkxCdWZmZXI8Y2hhcj4m
LCBVUkxDb21wb25lbnQqIG91dHB1dFF1ZXJ5KTsKK3ZvaWQgQ2Fub25pY2FsaXplUXVlcnkoY29u
c3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0
ZXIqLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dFF1ZXJ5KTsKKworLy8g
UmVmOiBQcmVwZW5kcyB0aGUgIyBpZiBuZWVkZWQuIFRoZSBvdXRwdXQgd2lsbCBiZSBVVEYtOCAo
dGhpcyBpcyB0aGUgb25seQorLy8gY2Fub25pY2FsaXplciB0aGF0IGRvZXMgbm90IHByb2R1Y2Ug
QVNDSUkgb3V0cHV0KS4gVGhlIG91dHB1dCBpcworLy8gZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBV
VEYtOC4KKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGZhaWwuIElmIHRoZSBpbnB1dCBp
cyBpbnZhbGlkIFVURi04L1VURi0xNiwgd2UnbGwgdXNlCisvLyB0aGUgIlVuaWNvZGUgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyIiBmb3IgdGhlIGNvbmZ1c2luZyBiaXRzIGFuZCBjb3B5IHRoZSByZXN0
Lgordm9pZCBDYW5vbmljYWxpemVSZWYoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dEZyYWdtZW50
KTsKK3ZvaWQgQ2Fub25pY2FsaXplUmVmKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3V0cHV0RnJhZ21l
bnQpOworCisvLyBGdWxsIGNhbm9uaWNhbGl6ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIHJl
cGxhY2UgYW55IHN0cmluZyBjb250ZW50cywgcmF0aGVyIHRoYW4gYXBwZW5kIGFzIGFib3ZlLgor
Ly8gU2VlIHRoZSBhYm92ZSBwaWVjZS1ieS1waWVjZSBmdW5jdGlvbnMgZm9yIGluZm9ybWF0aW9u
IHNwZWNpZmljIHRvCisvLyBjYW5vbmljYWxpemluZyBpbmRpdmlkdWFsIGNvbXBvbmVudHMuCisv
LworLy8gVGhlIG91dHB1dCB3aWxsIGJlIEFTQ0lJIGV4Y2VwdCB0aGUgcmVmZXJlbmNlIGZyYWdt
ZW50LCB3aGljaCBtYXkgYmUgVVRGLTguCisvLworLy8gVGhlIDgtYml0IHZlcnNpb25zIHJlcXVp
cmUgVVRGLTggZW5jb2RpbmcuCisKKy8vIFVzZSBmb3Igc3RhbmRhcmQgVVJMcyB3aXRoIGF1dGhv
cml0aWVzIGFuZCBwYXRocy4KK2Jvb2wgQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3QgY2hh
ciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIENoYXJz
ZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgQ2Fu
b25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBj
b25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIFVzZSBmb3IgZmlsZSBVUkxzLgorYm9vbCBDYW5v
bmljYWxpemVGaWxlVVJMKGNvbnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBV
UkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0
cHV0UGFyc2VkKTsKK2Jvb2wgQ2Fub25pY2FsaXplRmlsZVVSTChjb25zdCBVQ2hhciogc3BlYywg
aW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIENoYXJzZXRDb252ZXJ0
ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBVc2UgZm9yIGZpbGVzeXN0
ZW0gVVJMcy4KK2Jvb2wgQ2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBzcGVj
LCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZl
cnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIENhbm9uaWNh
bGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25z
dCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKTsKKworLy8gVXNlIGZvciBwYXRoIFVSTHMgc3VjaCBhcyBqYXZh
c2NyaXB0LiBUaGlzIGRvZXMgbm90IG1vZGlmeSB0aGUgcGF0aCBpbiBhbnkKKy8vIHdheSwgZm9y
IGV4YW1wbGUsIGJ5IGVzY2FwaW5nIGl0LgorYm9vbCBjYW5vbmljYWxpemVQYXRoVVJMKGNvbnN0
IGNoYXIqIHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0LCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpOworYm9vbCBjYW5vbmljYWxpemVQYXRo
VVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKTsKKworLy8gVXNlIGZv
ciBtYWlsdG8gVVJMcy4gVGhpcyAiY2Fub25pY2FsaXplcyIgdGhlIHVybCBpbnRvIGEgcGF0aCBh
bmQgcXVlcnkKKy8vIGNvbXBvbmVudC4gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBtZXJnZSAidG8i
IGZpZWxkcy4gSXQgdXNlcyBVVEYtOCBmb3IKKy8vIHRoZSBxdWVyeSBlbmNvZGluZyBpZiB0aGVy
ZSBpcyBhIHF1ZXJ5LiBUaGlzIGlzIGJlY2F1c2UgYSBtYWlsdG8gVVJMIGlzCisvLyByZWFsbHkg
aW50ZW5kZWQgZm9yIGFuIGV4dGVybmFsIG1haWwgcHJvZ3JhbSwgYW5kIHRoZSBlbmNvZGluZyBv
ZiBhIHBhZ2UsCisvLyBldGMuIHdoaWNoIHdvdWxkIGluZmx1ZW5jZSBhIHF1ZXJ5IGVuY29kaW5n
IG5vcm1hbGx5IGFyZSBpcnJlbGV2YW50LgorYm9vbCBDYW5vbmljYWxpemVNYWlsdG9VUkwoY29u
c3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgQ2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IFVDaGFy
KiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpOworCisvLyBQYXJ0IHJlcGxhY2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEludGVybmFsIHN0cnVj
dHVyZSB1c2VkIGZvciBzdG9yaW5nIHNlcGFyYXRlIHN0cmluZ3MgZm9yIGVhY2ggY29tcG9uZW50
LgorLy8gVGhlIGJhc2ljIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zIHVzZSB0aGlzIHN0cnVj
dHVyZSBpbnRlcm5hbGx5IHNvIHRoYXQKKy8vIGNvbXBvbmVudCByZXBsYWNlbWVudCAoZGlmZmVy
ZW50IHN0cmluZ3MgZm9yIGRpZmZlcmVudCBjb21wb25lbnRzKSBjYW4gYmUKKy8vIHRyZWF0ZWQg
b24gdGhlIHNhbWUgY29kZSBwYXRoIGFzIHJlZ3VsYXIgY2Fub25pY2FsaXphdGlvbiAodGhlIHNh
bWUgc3RyaW5nCisvLyBmb3IgZWFjaCBjb21wb25lbnQpLgorLy8KKy8vIEEgVVJMU2VnbWVudHMg
c3RydWN0dXJlIHVzdWFsbHkgZ29lcyBhbG9uZyB3aXRoIHRoaXMuIFRob3NlCisvLyBjb21wb25l
bnRzIGlkZW50aWZ5IG9mZnNldHMgd2l0aGluIHRoZXNlIHN0cmluZ3MsIHNvIHRoYXQgdGhleSBj
YW4gYWxsIGJlCisvLyBpbiB0aGUgc2FtZSBzdHJpbmcsIG9yIHNwcmVhZCBhcmJpdHJhcmlseSBh
Y3Jvc3MgZGlmZmVyZW50IG9uZXMuCisvLworLy8gVGhpcyBzdHJ1Y3R1cmVzIGRvZXMgbm90IG93
biBhbnkgZGF0YS4gSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvCisvLyBlbnN1
cmUgdGhhdCB0aGUgZGF0YSB0aGUgcG9pbnRlcnMgcG9pbnQgdG8gc3RheXMgaW4gc2NvcGUgYW5k
IGlzIG5vdAorLy8gbW9kaWZpZWQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
c3RydWN0IFVSTENvbXBvbmVudFNvdXJjZSB7CisgICAgLy8gQ29uc3RydWN0b3Igbm9ybWFsbHkg
dXNlZCBieSBjYWxsZXJzIHdpc2hpbmcgdG8gcmVwbGFjZSBjb21wb25lbnRzLiBUaGlzCisgICAg
Ly8gd2lsbCBtYWtlIHRoZW0gYWxsIG51bGwsIHdoaWNoIGlzIG5vIHJlcGxhY2VtZW50LiBUaGUg
Y2FsbGVyIHdvdWxkIHRoZW4KKyAgICAvLyBvdmVycmlkZSB0aGUgY29tcG9uZW50cyB0aGV5IHdh
bnQgdG8gcmVwbGFjZS4KKyAgICBVUkxDb21wb25lbnRTb3VyY2UoKQorICAgICAgICA6IHNjaGVt
ZSgwKQorICAgICAgICAsIHVzZXJuYW1lKDApCisgICAgICAgICwgcGFzc3dvcmQoMCkKKyAgICAg
ICAgLCBob3N0KDApCisgICAgICAgICwgcG9ydCgwKQorICAgICAgICAsIHBhdGgoMCkKKyAgICAg
ICAgLCBxdWVyeSgwKQorICAgICAgICAsIHJlZigwKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBD
b25zdHJ1Y3RvciBub3JtYWxseSB1c2VkIGludGVybmFsbHkgdG8gaW5pdGlhbGl6ZSBhbGwgdGhl
IGNvbXBvbmVudHMgdG8KKyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBzcGVjLgorICAgIGV4cGxp
Y2l0IFVSTENvbXBvbmVudFNvdXJjZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBkZWZhdWx0VmFsdWUp
CisgICAgICAgIDogc2NoZW1lKGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgLCB1c2VybmFtZShkZWZh
dWx0VmFsdWUpCisgICAgICAgICwgcGFzc3dvcmQoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIGhv
c3QoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIHBvcnQoZGVmYXVsdFZhbHVlKQorICAgICAgICAs
IHBhdGgoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIHF1ZXJ5KGRlZmF1bHRWYWx1ZSkKKyAgICAg
ICAgLCByZWYoZGVmYXVsdFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzY2hlbWU7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogdXNlcm5hbWU7CisgICAg
Y29uc3QgQ2hhcmFjdGVyVHlwZSogcGFzc3dvcmQ7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSog
aG9zdDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3J0OworICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIHBhdGg7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcXVlcnk7CisgICAgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogcmVmOworfTsKKworLy8gVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVz
IGluZm9ybWF0aW9uIG9uIG1vZGlmeWluZyBhIFVSTC4gRWFjaCBjb21wb25lbnQKKy8vIG1heSBl
aXRoZXIgYmUgbGVmdCB1bmNoYW5nZWQsIHJlcGxhY2VkLCBvciBkZWxldGVkLgorLy8KKy8vIEJ5
IGRlZmF1bHQsIGVhY2ggY29tcG9uZW50IGlzIHVuY2hhbmdlZC4gRm9yIHRob3NlIGNvbXBvbmVu
dHMgdGhhdCBzaG91bGQgYmUKKy8vIG1vZGlmaWVkLCBjYWxsIGVpdGhlciBTZXQqIG9yIENsZWFy
KiB0byBtb2RpZnkgaXQuCisvLworLy8gVGhlIHN0cmluZyBwYXNzZWQgdG8gU2V0KiBmdW5jdGlv
bnMgRE9FUyBOT1QgR0VUIENPUElFRCBBTkQgTVVTVCBCRSBLRVBUCisvLyBJTiBTQ09QRSBCWSBU
SEUgQ0FMTEVSIGZvciBhcyBsb25nIGFzIHRoaXMgb2JqZWN0IGV4aXN0cyEKKy8vCisvLyBQcmVm
ZXIgdGhlIDgtYml0IHJlcGxhY2VtZW50IHZlcnNpb24gaWYgcG9zc2libGUgc2luY2UgaXQgaXMg
bW9yZSBlZmZpY2llbnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorY2xhc3Mg
UmVwbGFjZW1lbnRzIHsKK3B1YmxpYzoKKyAgICBSZXBsYWNlbWVudHMoKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBTY2hlbWUKKyAgICB2b2lkIFNldFNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMu
c2NoZW1lID0gczsKKyAgICAgICAgbV9zZWdtZW50cy5zY2hlbWUgPSBjb21wOworICAgIH0KKyAg
ICAvLyBOb3RlOiB3ZSBkb24ndCBoYXZlIGEgQ2xlYXJTY2hlbWUgc2luY2UgdGhpcyBkb2Vzbid0
IG1ha2UgYW55IHNlbnNlLgorICAgIGJvb2wgSXNTY2hlbWVPdmVycmlkZGVuKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3NvdXJjZXMuc2NoZW1lOyB9CisKKyAgICAvLyBVc2VybmFtZQorICAgIHZvaWQg
U2V0VXNlcm5hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50JiBj
b21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnVzZXJuYW1lID0gczsKKyAgICAgICAgbV9z
ZWdtZW50cy51c2VybmFtZSA9IGNvbXA7CisgICAgfQorICAgIHZvaWQgQ2xlYXJVc2VybmFtZSgp
CisgICAgeworICAgICAgICBtX3NvdXJjZXMudXNlcm5hbWUgPSBQbGFjZWhvbGRlcigpOworICAg
ICAgICBtX3NlZ21lbnRzLnVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorICAgIGJv
b2wgSXNVc2VybmFtZU92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy51c2Vy
bmFtZTsgfQorCisgICAgLy8gUGFzc3dvcmQKKyAgICB2b2lkIFNldFBhc3N3b3JkKGNvbnN0IENo
YXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKKyAgICB7CisgICAgICAg
IG1fc291cmNlcy5wYXNzd29yZCA9IHM7CisgICAgICAgIG1fc2VnbWVudHMucGFzc3dvcmQgPSBj
b21wOworICAgIH0KKyAgICB2b2lkIENsZWFyUGFzc3dvcmQoKQorICAgIHsKKyAgICAgICAgbV9z
b3VyY2VzLnBhc3N3b3JkID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9zZWdtZW50cy5wYXNz
d29yZCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzUGFzc3dvcmRPdmVycmlk
ZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMucGFzc3dvcmQ7IH0KKworICAgIC8vIEhv
c3QKKyAgICB2b2lkIFNldEhvc3QoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29t
cG9uZW50JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLmhvc3QgPSBzOworICAgICAg
ICBtX3NlZ21lbnRzLmhvc3QgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFySG9zdCgpCisg
ICAgeworICAgICAgICBtX3NvdXJjZXMuaG9zdCA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1f
c2VnbWVudHMuaG9zdCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzSG9zdE92
ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy5ob3N0OyB9CisKKyAgICAvLyBQ
b3J0CisgICAgdm9pZCBTZXRQb3J0KGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENv
bXBvbmVudCYgY29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5wb3J0ID0gczsKKyAgICAg
ICAgbV9zZWdtZW50cy5wb3J0ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhclBvcnQoKQor
ICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnBvcnQgPSBQbGFjZWhvbGRlcigpOworICAgICAgICBt
X3NlZ21lbnRzLnBvcnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc1BvcnRP
dmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMucG9ydDsgfQorCisgICAgLy8g
UGF0aAorICAgIHZvaWQgU2V0UGF0aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxD
b21wb25lbnQmIGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMucGF0aCA9IHM7CisgICAg
ICAgIG1fc2VnbWVudHMucGF0aCA9IGNvbXA7CisgICAgfQorICAgIHZvaWQgQ2xlYXJQYXRoKCkK
KyAgICB7CisgICAgICAgIG1fc291cmNlcy5wYXRoID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAg
bV9zZWdtZW50cy5wYXRoID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorICAgIGJvb2wgSXNQYXRo
T3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICFtX3NvdXJjZXMucGF0aDsgfQorCisgICAgLy8g
UXVlcnkKKyAgICB2b2lkIFNldFF1ZXJ5KGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVS
TENvbXBvbmVudCYgY29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5xdWVyeSA9IHM7Cisg
ICAgICAgIG1fc2VnbWVudHMucXVlcnkgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFyUXVl
cnkoKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnF1ZXJ5ID0gUGxhY2Vob2xkZXIoKTsKKyAg
ICAgICAgbV9zZWdtZW50cy5xdWVyeSA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29s
IElzUXVlcnlPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gIW1fc291cmNlcy5xdWVyeTsgfQor
CisgICAgLy8gUmVmCisgICAgdm9pZCBTZXRSZWYoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29u
c3QgVVJMQ29tcG9uZW50JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnJlZiA9IHM7
CisgICAgICAgIG1fc2VnbWVudHMuZnJhZ21lbnQgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENs
ZWFyUmVmKCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5yZWYgPSBQbGFjZWhvbGRlcigpOwor
ICAgICAgICBtX3NlZ21lbnRzLmZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorICAg
IGJvb2wgSXNSZWZPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gIW1fc291cmNlcy5yZWY7IH0K
KworICAgIC8vIEdldHRlcnMgZm9yIHRoZSBpdG5lcm5hbCBkYXRhLiBTZWUgdGhlIHZhcmlhYmxl
cyBiZWxvdyBmb3IgaG93IHRoZQorICAgIC8vIGluZm9ybWF0aW9uIGlzIGVuY29kZWQuCisgICAg
Y29uc3QgVVJMQ29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+JiBzb3VyY2VzKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VzOyB9CisgICAgY29uc3QgVVJMU2VnbWVudHMmIGNvbXBvbmVudHMo
KSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzOyB9CisKK3ByaXZhdGU6CisgICAgLy8gUmV0dXJu
cyBhIHBvaW50ZXIgdG8gYSBzdGF0aWMgZW1wdHkgc3RyaW5nIHRoYXQgaXMgdXNlZCBhcyBhIHBs
YWNlaG9sZGVyCisgICAgLy8gdG8gaW5kaWNhdGUgYSBjb21wb25lbnQgc2hvdWxkIGJlIGRlbGV0
ZWQgKHNlZSBiZWxvdykuCisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogUGxhY2Vob2xkZXIoKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUgZW1wdHlTdHJpbmcgPSAw
OworICAgICAgICByZXR1cm4gJmVtcHR5U3RyaW5nOworICAgIH0KKworICAgIC8vIFdlIHN1cHBv
cnQgdGhyZWUgc3RhdGVzOgorICAgIC8vCisgICAgLy8gQWN0aW9uICAgICAgICAgICAgICAgICB8
IFNvdXJjZSAgICAgICAgICAgICAgICBDb21wb25lbnQKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIERvbid0IGNoYW5nZSBjb21wb25lbnQgfCBudWxsICAgICAgICAgICAgICAgICAg
KHVudXNlZCkKKyAgICAvLyBSZXBsYWNlIGNvbXBvbmVudCAgICAgIHwgKHJlcGxhY2VtZW50IHN0
cmluZykgIChyZXBsYWNlbWVudCBjb21wb25lbnQpCisgICAgLy8gRGVsZXRlIGNvbXBvbmVudCAg
ICAgICB8IChub24tbnVsbCkgICAgICAgICAgICAoaW52YWxpZCBjb21wb25lbnQ6ICgwLC0xKSkK
KyAgICAvLworICAgIC8vIFdlIHVzZSBhIHBvaW50ZXIgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3Ig
dGhlIHNvdXJjZSB3aGVuIHRoZSBjb21wb25lbnQKKyAgICAvLyBzaG91bGQgYmUgZGVsZXRlZC4K
KyAgICBVUkxDb21wb25lbnRTb3VyY2U8Q2hhcmFjdGVyVHlwZT4gbV9zb3VyY2VzOworICAgIFVS
TFNlZ21lbnRzIG1fc2VnbWVudHM7Cit9OworCisvLyBUaGUgYmFzZSBtdXN0IGJlIGFuIDgtYml0
IGNhbm9uaWNhbCBVUkwuCitib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25zdCBjaGFyKiBiYXNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJh
c2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNl
bWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENv
bnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxCdWZmZXI8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
U2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25zdCBj
aGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2Vn
bWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXBsYWNlbWVudHM8VUNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBGaWxlc3lzdGVtIFVSTHMg
Y2FuIG9ubHkgaGF2ZSB0aGUgcGF0aCwgcXVlcnksIG9yIHJlZiByZXBsYWNlZC4KKy8vIEFsbCBv
dGhlciBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZC4KK2Jvb2wgUmVwbGFjZUZpbGVTeXN0ZW1V
UkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jv
b2wgUmVwbGFjZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4m
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBx
dWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVu
dHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIFJlcGxhY2luZyBzb21lIHBhcnRzIG9mIGEgZmlsZSBV
UkwgaXMgbm90IHBlcm1pdHRlZC4gRXZlcnl0aGluZyBleGNlcHQKKy8vIHRoZSBob3N0LCBwYXRo
LCBxdWVyeSwgYW5kIHJlZiB3aWxsIGJlIGlnbm9yZWQuCitib29sIFJlcGxhY2VGaWxlVVJMKGNv
bnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVu
dHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxhY2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFy
c2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNo
YXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVl
cnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFy
PiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJz
ZWQpOworCisvLyBQYXRoIFVSTHMgY2FuIG9ubHkgaGF2ZSB0aGUgc2NoZW1lIGFuZCBwYXRoIHJl
cGxhY2VkLiBBbGwgb3RoZXIgY29tcG9uZW50cworLy8gd2lsbCBiZSBpZ25vcmVkLgorYm9vbCBS
ZXBsYWNlUGF0aFVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxhY2VQYXRoVVJMKGNvbnN0IGNo
YXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRz
JiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNl
bWVudHM8VUNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNo
YXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCk7CisKKy8vIE1haWx0byBVUkxzIGNhbiBvbmx5IGhhdmUgdGhlIHNjaGVtZSwgcGF0aCwg
YW5kIHF1ZXJ5IHJlcGxhY2VkLgorLy8gQWxsIG90aGVyIGNvbXBvbmVudHMgd2lsbCBiZSBpZ25v
cmVkLgorYm9vbCBSZXBsYWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBS
ZXBsYWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworLy8gUmVsYXRpdmUgVVJM
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisvLyBHaXZlbiBhbiBpbnB1dCBVUkwgb3IgVVJMIGZyYWdtZW50IHxmcmFnbWVu
dHwsIGRldGVybWluZXMgaWYgaXQgaXMgYQorLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIGFu
ZCBwbGFjZXMgdGhlIHJlc3VsdCBpbnRvIHwqaXNSZWxhdGl2ZXwuIElmIGl0IGlzCisvLyByZWxh
dGl2ZSwgdGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIFVSTCB3aWxsIGJlIHBsYWNlZCBpbnRv
CisvLyB8KnJlbGF0aXZlQ29tcG9uZW50fCAodGhlcmUgbWF5IGhhdmUgYmVlbiB0cmltbWVkIHdo
aXRlc3BhY2UsIGZvciBleGFtcGxlKS4KKy8vIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHJlc29s
dmVSZWxhdGl2ZVVSTC4gSWYgdGhlIGlucHV0IGlzIG5vdCByZWxhdGl2ZSwKKy8vIHRoaXMgdmFs
dWUgaXMgVU5ERUZJTkVEIChpdCBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZnVuY3Rpb24pLgorLy8K
Ky8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzICh3ZSBzdWNjZXNzZnVsbHkgZGV0ZXJtaW5lZCB0
aGUgVVJMIGlzIHJlbGF0aXZlIG9yCisvLyBub3QpLiBGYWlsdXJlIG1lYW5zIHRoYXQgdGhlIGNv
bWJpbmF0aW9uIG9mIFVSTHMgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4KKy8vCisvLyBUaGUgYmFz
ZSBVUkwgc2hvdWxkIGFsd2F5cyBiZSBjYW5vbmljYWwsIHRoZXJlZm9yZSBpcyBBU0NJSS4KK2Jv
b2wgaXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFz
ZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmcmFnbWVudCwgaW50IGZy
YWdtZW50TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2Fs
LAorICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzUmVsYXRpdmUsIFVSTENvbXBvbmVudCogcmVs
YXRpdmVDb21wb25lbnQpOworYm9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNv
bnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBmcmFnbWVudCwgaW50IGZyYWdtZW50TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzUmVsYXRp
dmUsIFVSTENvbXBvbmVudCogcmVsYXRpdmVDb21wb25lbnQpOworCisvLyBHaXZlbiBhIGNhbm9u
aWNhbCBwYXJzZWQgc291cmNlIFVSTCwgYSBVUkwgZnJhZ21lbnQga25vd24gdG8gYmUgcmVsYXRp
dmUsCisvLyBhbmQgdGhlIGlkZW50aWZpZWQgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgcmVsYXRp
dmUgVVJMIChjb21wdXRlZCBieQorLy8gaXNSZWxhdGl2ZVVSTCksIHRoaXMgcHJvZHVjZXMgYSBu
ZXcgcGFyc2VkIGNhbm9uaWNhbCBVUkwgaW4gfG91dHB1dHwgYW5kCisvLyB8b3V0cHV0UGFyc2Vk
fC4KKy8vCisvLyBJdCBhbHNvIHJlcXVpcmVzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhl
IGJhc2UgVVJMIGlzIGEgZmlsZTogVVJMCisvLyB3aGljaCB0cmlnZ2VycyBhZGRpdGlvbmFsIGxv
Z2ljLgorLy8KKy8vIFRoZSBiYXNlIFVSTCBzaG91bGQgYmUgY2Fub25pY2FsIGFuZCBoYXZlIGEg
aG9zdCAobWF5IGJlIGVtcHR5IGZvciBmaWxlCisvLyBVUkxzKSBhbmQgYSBwYXRoLiBJZiBpdCBk
b2Vzbid0IGhhdmUgdGhlc2UsIHdlIGNhbid0IHJlc29sdmUgcmVsYXRpdmUKKy8vIFVSTHMgb2Zm
IG9mIGl0IGFuZCB3aWxsIHJldHVybiB0aGUgYmFzZSBhcyB0aGUgb3V0cHV0IHdpdGggYW4gZXJy
b3IgZmxhZy4KKy8vIEJlY2F1c2VlIGl0IGlzIGNhbm9uaWNhbCBpcyBzaG91bGQgYWxzbyBiZSBB
U0NJSS4KKy8vCisvLyBUaGUgcXVlcnkgY2hhcnNldCBjb252ZXJ0ZXIgZm9sbG93cyB0aGUgc2Ft
ZSBydWxlcyBhcyBDYW5vbmljYWxpemVRdWVyeS4KKy8vCisvLyBSZXR1cm5zIHRydWUgb24gc3Vj
Y2Vzcy4gT24gZmFpbHVyZSwgdGhlIG91dHB1dCB3aWxsIGJlICJzb21ldGhpbmcKKy8vIHJlYXNv
bmFibGUiIHRoYXQgd2lsbCBiZSBjb25zaXN0ZW50IGFuZCB2YWxpZCwganVzdCBwcm9iYWJseSBu
b3Qgd2hhdAorLy8gd2FzIGludGVuZGVkIGJ5IHRoZSB3ZWIgcGFnZSBhdXRob3Igb3IgY2FsbGVy
LgorYm9vbCByZXNvbHZlUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwgY29uc3QgVVJM
U2VnbWVudHMmIGJhc2VQYXJzZWQsIGJvb2wgYmFzZUlzRmlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMLCBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0
aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciog
cXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
LCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlVVJMKGNv
bnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBib29sIGJh
c2VJc0ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmVV
UkwsIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQp
OworCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVSTENhbm9uX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbkV0Yy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ0M2FkMDAxMzhlZGYy
MWZiMmZlNmY5NGNlZWJiOTgxN2UyMmMxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwCkBAIC0wLDAgKzEsMzgyIEBACisvLyBDb3B5cmln
aHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAy
MDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
Ky8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIENhbm9uaWNhbGl6ZXJzIGZvciByYW5kb20g
Yml0cyB0aGF0IGFyZW4ndCBiaWcgZW5vdWdoIGZvciB0aGVpciBvd24gZmlsZXMuCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiVVJMQ2Fu
b25JbnRlcm5hbC5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBVU0UoV1RG
VVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewor
CituYW1lc3BhY2UgeworCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBz
aG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtaWRkbGUgb2YgYQorLy8gVVJMLgoraW5saW5lIGJv
b2wgaXNSZW1vdmFibGVVUkxXaGl0ZXNwYWNlKGludCBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJu
IGNoYXJhY3RlciA9PSAnXHInIHx8IGNoYXJhY3RlciA9PSAnXG4nIHx8IGNoYXJhY3RlciA9PSAn
XHQnOworfQorCisvLyBCYWNrZW5kIGZvciByZW1vdmVVUkxXaGl0ZXNwYWNlIChzZWUgZGVjbGFy
YXRpb24gaW4gVVJMQ2Fub24uaCkuCisvLyBJdCBzdWNrcyB0aGF0IHdlIGhhdmUgdG8gZG8gdGhp
cywgc2luY2UgdGhpcyB0YWtlcyBhYm91dCAxMyUgb2YgdGhlIHRvdGFsIFVSTAorLy8gY2Fub25p
Y2FsaXphdGlvbiB0aW1lLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2NvbnN0
IENoYXJhY3RlclR5cGUqIGRvUmVtb3ZlVVJMV2hpdGVzcGFjZShjb25zdCBDaGFyYWN0ZXJUeXBl
KiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZl
ciwgaW50JiBvdXRwdXRMZW5ndGgpCit7CisgICAgLy8gRmFzdCB2ZXJpZmljYXRpb24gdGhhdCB0
aGVyZSdzIG5vdGhpbmcgdGhhdCBuZWVkcyByZW1vdmFsLiBUaGlzIGlzIHRoZSA5OSUKKyAgICAv
LyBjYXNlLCBzbyB3ZSB3YW50IGl0IHRvIGJlIGZhc3QgYW5kIGRvbid0IGNhcmUgYWJvdXQgaW1w
YWN0aW5nIHRoZSBzcGVlZAorICAgIC8vIHdoZW4gd2UgZG8gZmluZCB3aGl0ZXNwYWNlLgorICAg
IGJvb2wgZm91bmRXaGl0ZXNwYWNlID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBp
bnB1dExlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICghaXNSZW1vdmFibGVVUkxXaGl0ZXNwYWNl
KGlucHV0W2ldKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZFdoaXRlc3Bh
Y2UgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kV2hpdGVz
cGFjZSkgeworICAgICAgICAvLyBEaWRuJ3QgZmluZCBhbnkgd2hpdGVzcGFjZSwgd2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4gV2UgY2FuIGp1c3QKKyAgICAgICAgLy8gcmV0dXJuIHRoZSBp
bnB1dCBhcyB0aGUgb3V0cHV0LgorICAgICAgICBvdXRwdXRMZW5ndGggPSBpbnB1dExlbmd0aDsK
KyAgICAgICAgcmV0dXJuIGlucHV0OworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgd2hpdGVz
cGFjZSBpbnRvIHRoZSBuZXcgYnVmZmVyIGFuZCByZXR1cm4gaXQuCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghaXNSZW1vdmFibGVVUkxX
aGl0ZXNwYWNlKGlucHV0W2ldKSkKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoaW5wdXRbaV0p
OworICAgIH0KKyAgICBvdXRwdXRMZW5ndGggPSBidWZmZXIubGVuZ3RoKCk7CisgICAgcmV0dXJu
IGJ1ZmZlci5kYXRhKCk7Cit9CisKKy8vIENvbnRhaW5zIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBv
ZiBlYWNoIHBvc3NpYmxlIGlucHV0IGxldHRlciBpbiB0aGUgc2NoZW1lCisvLyAoYmFzaWNhbGx5
LCBsb3dlci1jYXNlZCkuIFRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHdpbGwgYmUgMCBpZiB0aGUg
bGV0dGVyCisvLyBpcyBub3QgYWxsb3dlZCBpbiBhIHNjaGVtZS4KK2NvbnN0IGNoYXIga1NjaGVt
ZUNhbm9uaWNhbFsweDgwXSA9IHsKKy8vIDAwLTFmOiBhbGwgYXJlIGludmFsaWQKKyAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwKKyAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKy8vICAnICcgICAh
ICAgICIgICAgIyAgICAkICAgICUgICAgJiAgICAnICAgICggICAgKSAgICAqICAgICsgICAgLCAg
ICAtICAgIC4gICAgLworICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAnKycsICAwLCAgJy0nLCAnLicsICAwLAorLy8gICAwICAgIDEgICAg
MiAgICAzICAgIDQgICAgNSAgICA2ICAgIDcgICAgOCAgICA5ICAgIDogICAgOyAgICA8ICAgID0g
ICAgPiAgICA/CisgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4
JywgJzknLCAgMCAsICAwICwgIDAgLCAgMCAsICAwICwgIDAgLAorLy8gICBAICAgIEEgICAgQiAg
ICBDICAgIEQgICAgRSAgICBGICAgIEcgICAgSCAgICBJICAgIEogICAgSyAgICBMICAgIE0gICAg
TiAgICBPCisgICAgIDAgLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywg
J2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLAorLy8gICBQICAgIFEgICAgUiAgICBT
ICAgIFQgICAgVSAgICBWICAgIFcgICAgWCAgICBZICAgIFogICAgWyAgICBcICAgIF0gICAgXiAg
ICBfCisgICAgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3kn
LCAneicsICAwLCAgIDAgLCAgMCwgICAwICwgIDAsCisvLyAgIGAgICAgYSAgICBiICAgIGMgICAg
ZCAgICBlICAgIGYgICAgZyAgICBoICAgIGkgICAgaiAgICBrICAgIGwgICAgbSAgICBuICAgIG8K
KyAgICAgMCAsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdq
JywgJ2snLCAnbCcsICdtJywgJ24nLCAnbycsCisvLyAgIHAgICAgcSAgICByICAgIHMgICAgdCAg
ICB1ICAgIHYgICAgdyAgICB4ICAgIHkgICAgeiAgICB7ICAgIHwgICAgfSAgICB+CisgICAgJ3An
LCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICAwICwg
IDAgLCAgMCAsICAwICwgIDAgfTsKKworLy8gVGhpcyBjb3VsZCBiZSBhIHRhYmxlIGxvb2t1cCBh
cyB3ZWxsIGJ5IHNldHRpbmcgdGhlIGhpZ2ggYml0IGZvciBlYWNoCisvLyB2YWxpZCBjaGFyYWN0
ZXIsIGJ1dCBpdCdzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIFVSTCwgYW5kIGl0IG1ha2VzIHRoZSBs
b29rdXAKKy8vIHRhYmxlIGVhc2llciB0byByZWFkIG5vdCBoYXZpbmcgZXh0cmEgc3R1ZmYgaW4g
aXQuCitpbmxpbmUgYm9vbCBpc1NjaGVtZUZpcnN0Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3Rl
cikKK3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGNoYXJhY3Rlcik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBkb1NjaGVtZShj
b25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCYgb3V0cHV0U2NoZW1lKQoreworICAg
IGlmIChzY2hlbWUubGVuZ3RoKCkgPD0gMCkgeworICAgICAgICAvLyBTY2hlbWUgaXMgdW5zcGVj
aWZpZWQgb3IgZW1wdHksIGNvbnZlcnQgdG8gZW1wdHkgYnkgYXBwZW5kaW5nIGEgY29sb24uCisg
ICAgICAgIG91dHB1dFNjaGVtZSA9IFVSTENvbXBvbmVudChvdXRwdXQubGVuZ3RoKCksIDApOwor
ICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIFRoZSBvdXRwdXQgc2NoZW1lIHN0YXJ0cyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0
aW9uLgorICAgIG91dHB1dFNjaGVtZS5zZXRCZWdpbihvdXRwdXRTY2hlbWUuYmVnaW4oKSArIG91
dHB1dC5sZW5ndGgoKSk7CisKKyAgICAvLyBEYW5nZXI6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhp
cyBjb2RlIGRvZXMgbm90IHN0cmlwIGFueSBjaGFyYWN0ZXJzOiBpdAorICAgIC8vIG9ubHkgZW1p
dHMgdGhlIGNhbm9uaWNhbCB2ZXJzaW9uIChiZSBpdCB2YWxpZCBvciBlc2NhcGVkKSBvZiBlYWNo
IG9mCisgICAgLy8gdGhlIGlucHV0IGNoYXJhY3RlcnMuIFN0cmlwcGluZyB3b3VsZCBwdXQgaXQg
b3V0IG9mIHN5bmMgd2l0aAorICAgIC8vIFVSTFV0aWxpdGllczo6RmluZEFuZENvbXBhcmVTY2hl
bWUsIHdoaWNoIGNvdWxkIGNhdXNlIHNvbWUgc2VjdXJpdHkgY2hlY2tzIG9uCisgICAgLy8gc2No
ZW1lcyB0byBiZSBpbmNvcnJlY3QuCisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpbnQg
ZW5kID0gc2NoZW1lLmVuZCgpOworICAgIGZvciAoaW50IGkgPSBzY2hlbWUuYmVnaW4oKTsgaSA8
IGVuZDsgKytpKSB7CisgICAgICAgIFVDSEFSIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDSEFS
PihzcGVjW2ldKTsKKyAgICAgICAgY2hhciByZXBsYWNlbWVudCA9IDA7CisgICAgICAgIGlmIChj
aGFyYWN0ZXIgPCAweDgwKSB7CisgICAgICAgICAgICBpZiAoaSA9PSBzY2hlbWUuYmVnaW4oKSkg
eworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZG8gYSBzcGVjaWFsIGNoZWNrIGZvciB0aGUg
Zmlyc3QgbGV0dGVyIG9mIHRoZSBzY2hlbWUuCisgICAgICAgICAgICAgICAgaWYgKGlzU2NoZW1l
Rmlyc3RDaGFyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNoYXJhY3RlcikpKQorICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IGtTY2hlbWVDYW5vbmljYWxbY2hhcmFjdGVyXTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0ga1NjaGVt
ZUNhbm9uaWNhbFtjaGFyYWN0ZXJdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlcGxhY2Vt
ZW50KQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChyZXBsYWNlbWVudCk7CisgICAgICAgIGVs
c2UgaWYgKGNoYXJhY3RlciA9PSAnJScpIHsKKyAgICAgICAgICAgIC8vIENhbm9uaWNhbGl6aW5n
IHRoZSBzY2hlbWUgbXVsdGlwbGUgdGltZXMgc2hvdWxkIGxlYWQgdG8gdGhlIHNhbWUKKyAgICAg
ICAgICAgIC8vIHJlc3VsdC4gU2luY2UgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBl
ZCwgd2UgbmVlZCB0byBwcmVzZXJ2ZQorICAgICAgICAgICAgLy8gdGhlIHBlcmNlbnQgdG8gYXZv
aWQgbXVsdGlwbGUgZXNjYXBpbmcuIFRoZSBzY2hlbWUgd2lsbCBiZSBpbnZhbGlkLgorICAgICAg
ICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJScpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSW52YWxpZCBjaGFyYWN0ZXIsIHN0b3Jl
IGl0IGJ1dCBtYXJrIHRoaXMgc2NoZW1lIGFzIGludmFsaWQuCisgICAgICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBlc2NhcGUgdGhlIG91dHB1dCBh
bmQgYWxzbyBoYW5kbGUgZW5jb2RpbmcgaXNzdWVzLgorICAgICAgICAgICAgLy8gSWdub3JlIHRo
ZSByZXR1cm4gdmFsdWUgc2luY2Ugd2UgYWxyZWFkeSBmYWlsZWQuCisgICAgICAgICAgICBBcHBl
bmRVVEY4RXNjYXBlZENoYXIoc3BlYywgJmksIGVuZCwgb3V0cHV0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFRoZSBvdXRwdXQgc2NoZW1lIGVuZHMgd2l0aCB0aGUgdGhlIGN1cnJlbnQg
cG9zaXRpb24sIGJlZm9yZSBhcHBlbmRpbmcKKyAgICAvLyB0aGUgY29sb24uCisgICAgb3V0cHV0
U2NoZW1lLnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRTY2hlbWUuYmVnaW4oKSk7
CisgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBU
aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGNvbXBvbmVudHMgcmVmZXJlbmNlIHJhbmdlcyBpbiB0
aGUgY29ycmVzcG9uZGluZworLy8gKl9zcGVjIHN0cmluZ3MuIFR5cGljYWxseSwgdGhlc2Ugc3Bl
Y3Mgd2lsbCBiZSB0aGUgc2FtZSAod2UncmUKKy8vIGNhbm9uaWNhbGl6aW5nIGEgc2luZ2xlIHNv
dXJjZSBzdHJpbmcpLCBidXQgbWF5IGJlIGRpZmZlcmVudCB3aGVuCisvLyByZXBsYWNpbmcgY29t
cG9uZW50cy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFS
PgorYm9vbCBkb1VzZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHVzZXJuYW1lU3BlYywKKyAg
ICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLAorICAgICAgICAgICAg
ICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHBhc3N3b3JkU3BlYywKKyAgICAgICAgICAgICAgICBj
b25zdCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLAorICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCYgb3V0cHV0VXNlcm5h
bWUsCisgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50JiBvdXRwdXRQYXNzd29yZCkKK3sKKyAg
ICBpZiAodXNlcm5hbWUubGVuZ3RoKCkgPD0gMCAmJiBwYXNzd29yZC5sZW5ndGgoKSA8PSAwKSB7
CisgICAgICAgIC8vIENvbW1vbiBjYXNlOiBubyB1c2VyIGluZm8uIFdlIHN0cmlwIGVtcHR5IHVz
ZXJuYW1lL3Bhc3N3b3Jkcy4KKyAgICAgICAgb3V0cHV0VXNlcm5hbWUgPSBVUkxDb21wb25lbnQo
KTsKKyAgICAgICAgb3V0cHV0UGFzc3dvcmQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIHVzZXJuYW1lLgorICAgIG91dHB1
dFVzZXJuYW1lLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgaWYgKHVzZXJuYW1lLmxl
bmd0aCgpID4gMCkgeworICAgICAgICAvLyBUaGlzIHdpbGwgZXNjYXBlIGNoYXJhY3RlcnMgbm90
IHZhbGlkIGZvciB0aGUgdXNlcm5hbWUuCisgICAgICAgIGFwcGVuZFN0cmluZ09mVHlwZSgmdXNl
cm5hbWVTcGVjW3VzZXJuYW1lLmJlZ2luKCldLCB1c2VybmFtZS5sZW5ndGgoKSwgVVJMQ2hhcmFj
dGVyVHlwZXM6OlVzZXJJbmZvQ2hhcmFjdGVyLCBvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXRV
c2VybmFtZS5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0VXNlcm5hbWUuYmVnaW4o
KSk7CisKKyAgICAvLyBXaGVuIHRoZXJlIGlzIGEgcGFzc3dvcmQsIHdlIG5lZWQgdGhlIHNlcGFy
YXRvci4gTm90ZSB0aGF0IHdlIHN0cmlwCisgICAgLy8gZW1wdHkgYnV0IHNwZWNpZmllZCBwYXNz
d29yZHMuCisgICAgaWYgKHBhc3N3b3JkLmxlbmd0aCgpID4gMCkgeworICAgICAgICBvdXRwdXQu
YXBwZW5kKCc6Jyk7CisgICAgICAgIG91dHB1dFBhc3N3b3JkLnNldEJlZ2luKG91dHB1dC5sZW5n
dGgoKSk7CisgICAgICAgIGFwcGVuZFN0cmluZ09mVHlwZSgmcGFzc3dvcmRTcGVjW3Bhc3N3b3Jk
LmJlZ2luKCldLCBwYXNzd29yZC5sZW5ndGgoKSwgVVJMQ2hhcmFjdGVyVHlwZXM6OlVzZXJJbmZv
Q2hhcmFjdGVyLCBvdXRwdXQpOworICAgICAgICBvdXRwdXRQYXNzd29yZC5zZXRMZW5ndGgob3V0
cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGFzc3dvcmQuYmVnaW4oKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIG91dHB1dFBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisKKyAgICBvdXRwdXQuYXBwZW5k
KCdAJyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNv
bnZlcnRpbmcgcG9ydCBpbnRlZ2VycyB0byBzdHJpbmdzLgoraW5saW5lIHZvaWQgd3JpdGVQb3J0
SW50KGNoYXIqIG91dHB1dCwgaW50IG91dHB1dExlbmd0aCwgaW50IHBvcnQpCit7CisgICAgX2l0
b2Ffcyhwb3J0LCBvdXRwdXQsIG91dHB1dExlbmd0aCwgMTApOworfQorCisvLyBUaGlzIGZ1bmN0
aW9uIHdpbGwgcHJlcGVuZCB0aGUgY29sb24gaWYgdGhlcmUgd2lsbCBiZSBhIHBvcnQuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9Qb3J0
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsCisgICAgICAgICAgICBjb25zdCBVUkxDb21wb25l
bnQmIHBvcnQsCisgICAgICAgICAgICBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUsCisgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgIFVSTENvbXBvbmVudCYg
b3V0cHV0UG9ydENvbXBvbmVudCkKK3sKKyAgICBpbnQgcG9ydE51bWJlciA9IFVSTFBhcnNlcjo6
UGFyc2VQb3J0KHNwZWMsIHBvcnQpOworICAgIGlmIChwb3J0TnVtYmVyID09IFVSTFBhcnNlcjo6
UE9SVF9VTlNQRUNJRklFRCB8fCBwb3J0TnVtYmVyID09IGRlZmF1bHRQb3J0Rm9yU2NoZW1lKSB7
CisgICAgICAgIG91dHB1dFBvcnRDb21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7IC8vIExlYXZlIHBvcnQgZW1wdHkuCisgICAgfQorCisgICAgaWYgKHBvcnRO
dW1iZXIgPT0gVVJMUGFyc2VyOjpQT1JUX0lOVkFMSUQpIHsKKyAgICAgICAgLy8gSW52YWxpZCBw
b3J0OiBXZSdsbCBjb3B5IHRoZSB0ZXh0IGZyb20gdGhlIGlucHV0IHNvIHRoZSB1c2VyIGNhbiBz
ZWUKKyAgICAgICAgLy8gd2hhdCB0aGUgZXJyb3Igd2FzLCBhbmQgbWFyayB0aGUgVVJMIGFzIGlu
dmFsaWQgYnkgcmV0dXJuaW5nIGZhbHNlLgorICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7Cisg
ICAgICAgIG91dHB1dFBvcnRDb21wb25lbnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAg
ICAgICAgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhzcGVjLCBwb3J0LmJlZ2luKCksIHBvcnQu
ZW5kKCksIG91dHB1dCk7CisgICAgICAgIG91dHB1dFBvcnRDb21wb25lbnQuc2V0TGVuZ3RoKG91
dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBvcnRDb21wb25lbnQuYmVnaW4oKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0IHBvcnQgbnVtYmVyIGJhY2sgdG8g
YW4gaW50ZWdlci4gTWF4IHBvcnQgdmFsdWUgaXMgNSBkaWdpdHMsIGFuZAorICAgIC8vIHRoZSBQ
YXJzZWQ6OkV4dHJhY3RQb3J0IHdpbGwgaGF2ZSBtYWRlIHN1cmUgdGhlIGludGVnZXIgaXMgaW4g
cmFuZ2UuCisgICAgY29uc3QgaW50IGJ1ZmZlclNpemUgPSA2OworICAgIGNoYXIgYnVmZmVyW2J1
ZmZlclNpemVdOworICAgIHdyaXRlUG9ydEludChidWZmZXIsIGJ1ZmZlclNpemUsIHBvcnROdW1i
ZXIpOworCisgICAgLy8gQXBwZW5kIHRoZSBwb3J0IG51bWJlciB0byB0aGUgb3V0cHV0LCBwcmVj
ZWVkZWQgYnkgYSBjb2xvbi4KKyAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7CisgICAgb3V0cHV0UG9y
dENvbXBvbmVudC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYnVmZmVyU2l6ZSAmJiBidWZmZXJbaV07ICsraSkKKyAgICAgICAgb3V0cHV0LmFwcGVu
ZChidWZmZXJbaV0pOworCisgICAgb3V0cHV0UG9ydENvbXBvbmVudC5zZXRMZW5ndGgob3V0cHV0
Lmxlbmd0aCgpIC0gb3V0cHV0UG9ydENvbXBvbmVudC5iZWdpbigpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+
Cit2b2lkIGRvQ2Fub25pY2FsaXplRnJhZ21lbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBmcmFnbWVudCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVS
TENvbXBvbmVudCYgb3V0cHV0RnJhZ21lbnQpCit7CisgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCgp
IDwgMCkgeworICAgICAgICAvLyBDb21tb24gY2FzZSBvZiBubyBmcmFnbWVudC4KKyAgICAgICAg
b3V0cHV0RnJhZ21lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEFwcGVuZCB0aGUgZnJhZ21lbnQgc2VwYXJhdG9yLiBOb3RlIHRoYXQgd2UgbmVl
ZCB0byBkbyB0aGlzIGV2ZW4gd2hlbiB0aGUgZnJhZ21lbnQKKyAgICAvLyBpcyBlbXB0eSBidXQg
cHJlc2VudC4KKyAgICBvdXRwdXQuYXBwZW5kKCcjJyk7CisgICAgb3V0cHV0RnJhZ21lbnQuc2V0
QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKworICAgIC8vIE5vdyBpdGVyYXRlIHRocm91Z2ggYWxs
IHRoZSBjaGFyYWN0ZXJzLCBjb252ZXJ0aW5nIHRvIFVURi04IGFuZCB2YWxpZGF0aW5nLgorICAg
IGludCBlbmQgPSBmcmFnbWVudC5lbmQoKTsKKyAgICBmb3IgKGludCBpID0gZnJhZ21lbnQuYmVn
aW4oKTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlmICghc3BlY1tpXSkgeworICAgICAgICAg
ICAgLy8gSUUganVzdCBzdHJpcHMgTlVMTHMsIHNvIHdlIGRvIHRvby4KKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tp
XSkgPCAweDIwKSB7CisgICAgICAgICAgICAvLyBVbmxpbmUgSUUgc2VlbXMgdG8sIHdlIGVzY2Fw
ZSBjb250cm9sIGNoYXJhY3RlcnMuIFRoaXMgd2lsbCBwcm9iYWJseQorICAgICAgICAgICAgLy8g
bWFrZSB0aGUgcmVmZXJlbmNlIGZyYWdtZW50IHVudXNhYmxlIG9uIGEgd2ViIHBhZ2UsIGJ1dCBw
ZW9wbGUKKyAgICAgICAgICAgIC8vIHNob3VsZG4ndCBiZSB1c2luZyBjb250cm9sIGNoYXJhY3Rl
cnMgaW4gdGhlaXIgYW5jaG9yIG5hbWVzLgorICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENo
YXJhY3RlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSwgb3V0cHV0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tpXSkgPCAweDgwKSB7Cisg
ICAgICAgICAgICAvLyBOb3JtYWwgQVNDSUkgY2hhcmFjdGVycyBhcmUganVzdCBhcHBlbmRlZC4K
KyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm9uLUFTQ0lJIGNoYXJhY3RlcnMgYXJl
IGFwcGVuZGVkIHVuZXNjYXBlZCwgYnV0IG9ubHkgd2hlbiB0aGV5IGFyZQorICAgICAgICAgICAg
Ly8gdmFsaWQuIEludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCB3aXRoIHRo
ZSAiaW52YWxpZAorICAgICAgICAgICAgLy8gY2hhcmFjdGVyIiBhcyBJRSBzZWVtcyB0byAocmVh
ZFVURkNoYXIgcHV0cyB0aGUgdW5pY29kZSByZXBsYWNlbWVudAorICAgICAgICAgICAgLy8gY2hh
cmFjdGVyIGluIHRoZSBvdXRwdXQgb24gZmFpbHVyZSBmb3IgdXMpLgorICAgICAgICAgICAgdW5z
aWduZWQgY29kZVBvaW50OworICAgICAgICAgICAgcmVhZFVURkNoYXIoc3BlYywgJmksIGVuZCwg
JmNvZGVQb2ludCk7CisgICAgICAgICAgICBBcHBlbmRVVEY4VmFsdWUoY29kZVBvaW50LCBvdXRw
dXQpOworICAgICAgICB9CisgICAgfQorCisgICAgb3V0cHV0RnJhZ21lbnQuc2V0TGVuZ3RoKG91
dHB1dC5sZW5ndGgoKSAtIG91dHB1dEZyYWdtZW50LmJlZ2luKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZQorCitjb25zdCBjaGFyKiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IGNoYXIqIGlucHV0
LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgYnVmZmVyLCBpbnQqIG91dHB1dExl
bmd0aCkKK3sKKyAgICByZXR1cm4gZG9SZW1vdmVVUkxXaGl0ZXNwYWNlKGlucHV0LCBpbnB1dExl
bmd0aCwgYnVmZmVyLCAqb3V0cHV0TGVuZ3RoKTsKK30KKworY29uc3QgVUNoYXIqIHJlbW92ZVVS
TFdoaXRlc3BhY2UoY29uc3QgVUNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZl
cjxVQ2hhcj4mIGJ1ZmZlciwgaW50KiBvdXRwdXRMZW5ndGgpCit7CisgICAgcmV0dXJuIGRvUmVt
b3ZlVVJMV2hpdGVzcGFjZShpbnB1dCwgaW5wdXRMZW5ndGgsIGJ1ZmZlciwgKm91dHB1dExlbmd0
aCk7Cit9CisKK2NoYXIgY2Fub25pY2FsU2NoZW1lQ2hhcihVQ2hhciBjaGFyYWN0ZXIpCit7Cisg
ICAgaWYgKGNoYXJhY3RlciA+PSAweDgwKQorICAgICAgICByZXR1cm4gMDsgLy8gTm9uLUFTQ0lJ
IGlzIG5vdCBzdXBwb3J0ZWQgYnkgc2NoZW1lcy4KKyAgICByZXR1cm4ga1NjaGVtZUNhbm9uaWNh
bFtjaGFyYWN0ZXJdOworfQorCitib29sIENhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBjaGFyKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
IFVSTENvbXBvbmVudCogb3V0cHV0U2NoZW1lKQoreworICAgIHJldHVybiBkb1NjaGVtZTxjaGFy
LCB1bnNpZ25lZCBjaGFyPihzcGVjLCBzY2hlbWUsIG91dHB1dCwgKm91dHB1dFNjaGVtZSk7Cit9
CisKK2Jvb2wgQ2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCog
b3V0cHV0U2NoZW1lKQoreworICAgIHJldHVybiBkb1NjaGVtZTxVQ2hhciwgVUNoYXI+KHNwZWMs
IHNjaGVtZSwgb3V0cHV0LCAqb3V0cHV0U2NoZW1lKTsKK30KKworYm9vbCBDYW5vbmljYWxpemVV
c2VySW5mbyhjb25zdCBjaGFyKiB1c2VybmFtZVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcGFzc3dvcmRTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxDb21wb25lbnQqIG91dHB1dFVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxDb21wb25lbnQqIG91dHB1dFBhc3N3b3JkKQoreworICAgIHJldHVybiBkb1VzZXJJbmZvPGNo
YXIsIHVuc2lnbmVkIGNoYXI+KHVzZXJuYW1lU291cmNlLCB1c2VybmFtZSwgcGFzc3dvcmRTb3Vy
Y2UsIHBhc3N3b3JkLCBvdXRwdXQsICpvdXRwdXRVc2VybmFtZSwgKm91dHB1dFBhc3N3b3JkKTsK
K30KKworYm9vbCBDYW5vbmljYWxpemVVc2VySW5mbyhjb25zdCBVQ2hhciogdXNlcm5hbWVTb3Vy
Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgdXNlcm5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBwYXNzd29yZFNvdXJj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXNzd29y
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogb3V0cHV0VXNlcm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogb3V0cHV0UGFzc3dvcmQpCit7
CisgICAgcmV0dXJuIGRvVXNlckluZm88VUNoYXIsIFVDaGFyPih1c2VybmFtZVNvdXJjZSwgdXNl
cm5hbWUsIHBhc3N3b3JkU291cmNlLCBwYXNzd29yZCwgb3V0cHV0LCAqb3V0cHV0VXNlcm5hbWUs
ICpvdXRwdXRQYXNzd29yZCk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplUG9ydChjb25zdCBjaGFy
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZhdWx0UG9ydEZvclNjaGVt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29t
cG9uZW50KiBvdXRwdXRQb3J0Q29tcG9uZW50KQoreworICAgIHJldHVybiBkb1BvcnQ8Y2hhciwg
dW5zaWduZWQgY2hhcj4oc3BlYywgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LCAqb3V0cHV0UG9ydENvbXBvbmVudCk7Cit9CisKK2Jvb2wg
Q2Fub25pY2FsaXplUG9ydChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBw
b3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCogb3V0cHV0UG9ydENvbXBvbmVudCkK
K3sKKyAgICByZXR1cm4gZG9Qb3J0PFVDaGFyLCBVQ2hhcj4oc3BlYywgcG9ydCwgZGVmYXVsdFBv
cnRGb3JTY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgKm91
dHB1dFBvcnRDb21wb25lbnQpOworfQorCit2b2lkIENhbm9uaWNhbGl6ZVJlZihjb25zdCBjaGFy
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHJlZiwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
IFVSTENvbXBvbmVudCogb3V0cHV0RnJhZ21lbnQpCit7CisgICAgZG9DYW5vbmljYWxpemVGcmFn
bWVudDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCByZWYsIG91dHB1dCwgKm91dHB1dEZyYWdt
ZW50KTsKK30KKwordm9pZCBDYW5vbmljYWxpemVSZWYoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgcmVmLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50
KiBvdXRwdXRGcmFnbWVudCkKK3sKKyAgICBkb0Nhbm9uaWNhbGl6ZUZyYWdtZW50PFVDaGFyLCBV
Q2hhcj4oc3BlYywgcmVmLCBvdXRwdXQsICpvdXRwdXRGcmFnbWVudCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5v
bkZpbGVzeXN0ZW11cmwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNDZlYTFkOGNhNDYwZTg3ZDk0YmQwZTQ0OTU4Zjlm
YmY5MmQ0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENh
bm9uRmlsZXN5c3RlbXVybC5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8vIENvcHlyaWdodCAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworLy8gRnVuY3Rpb25zIGZvciBjYW5vbmljYWxpemluZyAiZmls
ZXN5c3RlbTpmaWxlOiIgVVJMcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVS
TENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJVUkxDYW5v
bkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUgIlVSTFBhcnNlSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxVdGlsLmgiCisjaW5jbHVkZSAiVVJMVXRpbEludGVybmFs
LmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisvLyBXZSB1c2UgdGhlIFVSTENvbXBv
bmVudFNvdXJjZSBmb3IgdGhlIG91dGVyIFVSTCwgYXMgaXQgY2FuIGhhdmUgcmVwbGFjZW1lbnRz
LAorLy8gd2hlcmVhcyB0aGUgaW5uZXJfdXJsIGNhbid0LCBzbyBpdCB1c2VzIHNwZWMuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgRG9DYW5vbmljYWxpemVG
aWxlU3lzdGVtVVJMKGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q0hBUj4mIHNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29u
dmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyog
b3V0cHV0UGFyc2VkKQoreworICAgIC8vIGZpbGVzeXN0ZW0gb25seSB1c2VzIHtzY2hlbWUsIHBh
dGgsIHF1ZXJ5LCByZWZ9IC0tIGNsZWFyIHRoZSByZXN0LgorICAgIG91dHB1dFBhcnNlZC0+dXNl
cm5hbWUgPSBVUkxDb21wb25lbnQoKTsKKyAgICBvdXRwdXRQYXJzZWQtPnBhc3N3b3JkID0gVVJM
Q29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5ob3N0ID0gVVJMQ29tcG9uZW50KCk7Cisg
ICAgb3V0cHV0UGFyc2VkLT5wb3J0ID0gVVJMQ29tcG9uZW50KCk7CisKKyAgICBjb25zdCBVUkxT
ZWdtZW50cyogaW5uZXJQYXJzZWQgPSBwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpOworICAgIFVS
TFNlZ21lbnRzIG5ld0lubmVyUGFyc2VkOworCisgICAgLy8gU2NoZW1lIChrbm93biwgc28gd2Ug
ZG9uJ3QgYm90aGVyIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUgbW9yZQorICAgIC8vIGNvbXBsaWNh
dGVkIHNjaGVtZSBjYW5vbmljYWxpemVyKS4KKyAgICBvdXRwdXRQYXJzZWQtPnNjaGVtZS5zZXRC
ZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIG91dHB1dC5hcHBlbmQoImZpbGVzeXN0ZW06Iiwg
MTEpOworICAgIG91dHB1dFBhcnNlZC0+c2NoZW1lLnNldExlbmd0aCgxMCk7CisKKyAgICBpZiAo
IXBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCkgfHwgIXBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCkt
PnNjaGVtZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CisgICAgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNvbXBvbmVu
dChzcGVjLCBpbm5lclBhcnNlZC0+c2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMVXRpbGl0aWVzOjprRmlsZVNjaGVtZSkpIHsKKyAgICAgICAg
bmV3SW5uZXJQYXJzZWQuc2NoZW1lLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgICAg
IG91dHB1dC5hcHBlbmQoImZpbGU6Ly8iLCA3KTsKKyAgICAgICAgbmV3SW5uZXJQYXJzZWQuc2No
ZW1lLnNldExlbmd0aCg0KTsKKyAgICAgICAgc3VjY2VzcyAmPSBDYW5vbmljYWxpemVQYXRoKHNw
ZWMsIGlubmVyUGFyc2VkLT5wYXRoLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbmV3SW5uZXJQYXJzZWQucGF0aCk7CisgICAgfSBlbHNlIGlmIChVUkxVdGls
aXRpZXM6OklzU3RhbmRhcmQoc3BlYywgaW5uZXJQYXJzZWQtPnNjaGVtZSkpIHsKKyAgICAgICAg
c3VjY2VzcyA9CisgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZVN0YW5kYXJk
VVJMKHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCktPmxlbmd0aCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyc2VkLmlubmVyVVJMU2VnbWVu
dHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhcnNldENvbnZlcnRlciwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmbmV3SW5uZXJQYXJzZWQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFRPRE8oZXJpY3UpOiBUaGUgVVJMIGlzIHdyb25nLCBidXQgc2hvdWxkIHdlIHRyeSB0
byBvdXRwdXQgbW9yZSBvZiB3aGF0CisgICAgICAgIC8vIHdlIHdlcmUgZ2l2ZW4/IEVjaG9pbmcg
YmFjayBmaWxlc3lzdGVtOm1haWx0byBldGMuIGRvZXNuJ3Qgc2VlbSBhbGwgdGhhdCB1c2VmdWwu
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGZpbGVzeXN0ZW0gdHlw
ZSBtdXN0IGJlIG1vcmUgdGhhbiBqdXN0IGEgbGVhZGluZyBzbGFzaCBmb3IgdmFsaWRpdHkuCisg
ICAgc3VjY2VzcyAmPSBwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpLT5wYXRoLmxlbmd0aCgpID4g
MTsKKworICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGF0aChzb3VyY2UucGF0aCwgcGFyc2Vk
LnBhdGgsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dFBh
cnNlZC0+cGF0aCk7CisKKyAgICAvLyBJZ25vcmUgZmFpbHVyZXMgZm9yIHF1ZXJ5L3JlZiBzaW5j
ZSB0aGUgVVJMIGNhbiBwcm9iYWJseSBzdGlsbCBiZSBsb2FkZWQuCisgICAgQ2Fub25pY2FsaXpl
UXVlcnkoc291cmNlLnF1ZXJ5LCBwYXJzZWQucXVlcnksIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisgICAgQ2Fu
b25pY2FsaXplUmVmKHNvdXJjZS5yZWYsIHBhcnNlZC5mcmFnbWVudCwgb3V0cHV0LCAmb3V0cHV0
UGFyc2VkLT5mcmFnbWVudCk7CisgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIG91dHB1dFBhcnNl
ZC0+c2V0SW5uZXJVUkxTZWdtZW50cyhuZXdJbm5lclBhcnNlZCk7CisKKyAgICByZXR1cm4gc3Vj
Y2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBDYW5vbmljYWxpemVGaWxlU3lzdGVt
VVJMKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFy
c2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25p
Y2FsaXplRmlsZVN5c3RlbVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBVUkxDb21wb25l
bnRTb3VyY2U8Y2hhcj4oc3BlYyksIHBhcnNlZCwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBv
dXRwdXRQYXJzZWQpOworfQorCitib29sIENhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3Qg
VUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHNwZWNM
ZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVu
dHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVy
dGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplRmls
ZVN5c3RlbVVSTDxVQ2hhciwgVUNoYXI+KHNwZWMsIFVSTENvbXBvbmVudFNvdXJjZTxVQ2hhcj4o
c3BlYyksIHBhcnNlZCwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwor
fQorCitib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxhY2VtZW50
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hhcnNldENv
bnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQp
Cit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxT
ZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNvbXBvbmVudHMo
YmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gRG9DYW5v
bmljYWxpemVGaWxlU3lzdGVtVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KGJhc2UsIHNvdXJjZSwg
cGFyc2VkLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jv
b2wgUmVwbGFjZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7Cisg
ICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+
IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAg
U2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsIHV0ZjgsICZz
b3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkw8
Y2hhciwgdW5zaWduZWQgY2hhcj4oYmFzZSwgc291cmNlLCBwYXJzZWQsIGNoYXJzZXRDb252ZXJ0
ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25p
Y2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE1
MWEzNjNiMzZiODIzZTVmMzVjYzE0NGRjZmI5ZjMyNjAwNzFiMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcApAQCAtMCwwICsxLDIy
NyBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0
cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBGdW5jdGlvbnMg
Zm9yIGNhbm9uaWNhbGl6aW5nICJmaWxlOiIgVVJMcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNs
dWRlICJVUkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUg
IlVSTFBhcnNlSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYg
eworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKKyNpZiBP
UyhXSU5ET1dTKQorCisvLyBHaXZlbiBhIHBvaW50ZXIgaW50byB0aGUgc3BlYywgdGhpcyBjb3Bp
ZXMgYW5kIGNhbm9uaWNhbGl6ZXMgdGhlIGRyaXZlCisvLyBsZXR0ZXIgYW5kIGNvbG9uIHRvIHRo
ZSBvdXRwdXQsIGlmIG9uZSBpcyBmb3VuZC4gSWYgdGhlcmUgaXMgbm90IGEgZHJpdmUKKy8vIHNw
ZWMsIGl0IHdvbid0IGRvIGFueXRoaW5nLiBUaGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVy
IGluIHRoZSBpbnB1dAorLy8gc3BlYyBpcyByZXR1cm5lZCAoYWZ0ZXIgdGhlIGNvbG9uIHdoZW4g
YSBkcml2ZSBzcGVjIGlzIGZvdW5kLCB0aGUgYmVnaW4KKy8vIG9mZnNldCBpZiBvbmUgaXMgbm90
KS4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVI+CitpbnQgRmlsZURvRHJpdmVTcGVjKGNvbnN0IENI
QVIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7
CisgICAgLy8gVGhlIHBhdGggY291bGQgYmUgb25lIG9mIHNldmVyYWwgdGhpbmdzOiAvZm9vL2Jh
ciwgYzovZm9vL2JhciwgL2M6L2ZvbywKKyAgICAvLyAod2l0aCBiYWNrc2xhc2hlcyBpbnN0ZWFk
IG9mIHNsYXNoZXMgYXMgd2VsbCkuCisgICAgaW50IG51bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNv
dW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGJlZ2luLCBlbmQpOworICAgIGludCBhZnRlclNs
YXNoZXMgPSBiZWdpbiArIG51bVNsYXNoZXM7CisKKyAgICBpZiAoIVVSTFBhcnNlcjo6ZG9lc0Jl
Z2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBhZnRlclNsYXNoZXMsIGVuZCkpCisgICAgICAgIHJl
dHVybiBiZWdpbjsgLy8gSGF2ZW4ndCBjb25zdW1lZCBhbnkgY2hhcmFjdGVycworCisgICAgLy8g
QSBkcml2ZSBzcGVjIGlzIHRoZSBzdGFydCBvZiBhIHBhdGgsIHNvIHdlIG5lZWQgdG8gYWRkIGEg
c2xhc2ggZm9yIHRoZQorICAgIC8vIGF1dGhvcml0eSB0ZXJtaW5hdG9yICh0eXBpY2FsbHkgdGhl
IHRoaXJkIHNsYXNoKS4KKyAgICBvdXRwdXQuYXBwZW5kKCcvJyk7CisKKyAgICAvLyBkb2VzQmVn
aW5XaW5kb3dzRHJpdmVTcGVjIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGRyaXZlIGxldHRlciBpcyB2
YWxpZAorICAgIC8vIGFuZCB0aGF0IGl0IGlzIGZvbGxvd2VkIGJ5IGEgY29sb24vcGlwZS4KKwor
ICAgIC8vIE5vcm1hbGl6ZSBXaW5kb3dzIGRyaXZlIGxldHRlcnMgdG8gdXBwZXJjYXNlCisgICAg
aWYgKHNwZWNbYWZ0ZXJTbGFzaGVzXSA+PSAnYScgJiYgc3BlY1thZnRlclNsYXNoZXNdIDw9ICd6
JykKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzcGVjW2FmdGVyU2xhc2hlc10gLSAnYScgKyAnQScp
OworICAgIGVsc2UKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVj
W2FmdGVyU2xhc2hlc10pKTsKKworICAgIC8vIE5vcm1hbGl6ZSB0aGUgY2hhcmFjdGVyIGZvbGxv
d2luZyBpdCB0byBhIGNvbG9uIHJhdGhlciB0aGFuIHBpcGUuCisgICAgb3V0cHV0LmFwcGVuZCgn
OicpOworICAgIHJldHVybiBhZnRlclNsYXNoZXMgKyAyOworfQorCisjZW5kaWYgLy8gT1MoV0lO
RE9XUykKKwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERv
RmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3QgQ0hBUiogc3BlYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQoreworICAgIC8vIENvcGllcyBhbmQgbm9y
bWFsaXplcyB0aGUgImM6IiBhdCB0aGUgYmVnaW5uaW5nLCBpZiBwcmVzZW50LgorICAgIG91dHB1
dFBhdGgtPnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgaW50IGFmdGVyRHJpdmU7Cisj
aWYgT1MoV0lORE9XUykKKyAgICBhZnRlckRyaXZlID0gRmlsZURvRHJpdmVTcGVjKHNwZWMsIHBh
dGguYmVnaW4sIHBhdGguZW5kKCksIG91dHB1dCk7CisjZWxzZQorICAgIGFmdGVyRHJpdmUgPSBw
YXRoLmJlZ2luKCk7CisjZW5kaWYKKworICAgIC8vIENvcGllcyB0aGUgcmVzdCBvZiB0aGUgcGF0
aCwgc3RhcnRpbmcgZnJvbSB0aGUgc2xhc2ggZm9sbG93aW5nIHRoZQorICAgIC8vIGRyaXZlIGNv
bG9uIChpZiBhbnksIFdpbmRvd3Mgb25seSksIG9yIHRoZSBmaXJzdCBzbGFzaCBvZiB0aGUgcGF0
aC4KKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGlmIChhZnRlckRyaXZlIDwgcGF0aC5l
bmQoKSkgeworICAgICAgICAvLyBVc2UgdGhlIHJlZ3VsYXIgcGF0aCBjYW5vbmljYWxpemVyIHRv
IGNhbm9uaWNhbGl6ZSB0aGUgcmVzdCBvZiB0aGUKKyAgICAgICAgLy8gcGF0aC4gR2l2ZSBpdCBh
IGZha2Ugb3V0cHV0IGNvbXBvbmVudCB0byB3cml0ZSBpbnRvLiBEb0Nhbm9uaWNhbGl6ZUZpbGUK
KyAgICAgICAgLy8gd2lsbCBjb21wdXRlIHRoZSBmdWxsIHBhdGggY29tcG9uZW50LgorICAgICAg
ICBVUkxDb21wb25lbnQgc3ViUGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGFmdGVyRHJp
dmUsIHBhdGguZW5kKCkpOworICAgICAgICBVUkxDb21wb25lbnQgZmFrZU91dHB1dFBhdGg7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBDYW5vbmljYWxpemVQYXRoKHNwZWMsIHN1YlBhdGgsIG91dHB1dCwg
JmZha2VPdXRwdXRQYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBpbnB1dCBwYXRo
LCBjYW5vbmljYWxpemUgdG8gYSBzbGFzaC4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOwor
ICAgIH0KKworICAgIG91dHB1dFBhdGgtPnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRw
dXRQYXRoLT5iZWdpbigpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvQ2Fub25pY2FsaXplRmlsZVVSTChj
b25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q0hBUj4mIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICAvLyBUaGluZ3Mgd2Ug
ZG9uJ3Qgc2V0IGluIGZpbGU6IFVSTHMuCisgICAgb3V0cHV0UGFyc2VkLT51c2VybmFtZSA9IFVS
TENvbXBvbmVudCgpOworICAgIG91dHB1dFBhcnNlZC0+cGFzc3dvcmQgPSBVUkxDb21wb25lbnQo
KTsKKyAgICBvdXRwdXRQYXJzZWQtPnBvcnQgPSBVUkxDb21wb25lbnQoKTsKKworICAgIC8vIFNj
aGVtZSAoa25vd24sIHNvIHdlIGRvbid0IGJvdGhlciBydW5uaW5nIGl0IHRocm91Z2ggdGhlIG1v
cmUKKyAgICAvLyBjb21wbGljYXRlZCBzY2hlbWUgY2Fub25pY2FsaXplcikuCisgICAgb3V0cHV0
UGFyc2VkLT5zY2hlbWUuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBvdXRwdXQuYXBw
ZW5kKCJmaWxlOi8vIiwgNyk7CisgICAgb3V0cHV0UGFyc2VkLT5zY2hlbWUuc2V0TGVuZ3RoKDQp
OworCisgICAgLy8gQXBwZW5kIHRoZSBob3N0LiBGb3IgbWFueSBmaWxlIFVSTHMsIHRoaXMgd2ls
bCBiZSBlbXB0eS4gRm9yIFVOQywgdGhpcworICAgIC8vIHdpbGwgYmUgcHJlc2VudC4KKyAgICAv
LyBUT0RPKGJyZXR0dykgVGhpcyBkb2Vzbid0IGRvIGFueSBjaGVja2luZyBmb3IgaG9zdCBuYW1l
IHZhbGlkaXR5LiBXZQorICAgIC8vIHNob3VsZCBwcm9iYWJseSBoYW5kbGUgdmFsaWRpdHkgY2hl
Y2tpbmcgb2YgVU5DIGhvc3RzIGRpZmZlcmVudGx5IHRoYW4KKyAgICAvLyBmb3IgcmVndWxhciBJ
UCBob3N0cy4KKyAgICBib29sIHN1Y2Nlc3MgPSBDYW5vbmljYWxpemVIb3N0KHNvdXJjZS5ob3N0
LCBwYXJzZWQuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgJm91dHB1dFBhcnNlZC0+aG9zdCk7CisgICAgc3VjY2VzcyAmPSBEb0ZpbGVDYW5vbmljYWxp
emVQYXRoPENIQVIsIFVDSEFSPihzb3VyY2UucGF0aCwgcGFyc2VkLnBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQ
YXJzZWQtPnBhdGgpOworICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHNvdXJjZS5xdWVyeSwgcGFyc2Vk
LnF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZv
dXRwdXRQYXJzZWQtPnF1ZXJ5KTsKKworICAgIC8vIElnbm9yZSBmYWlsdXJlIGZvciByZWZzIHNp
bmNlIHRoZSBVUkwgY2FuIHByb2JhYmx5IHN0aWxsIGJlIGxvYWRlZC4KKyAgICBDYW5vbmljYWxp
emVSZWYoc291cmNlLnJlZiwgcGFyc2VkLmZyYWdtZW50LCBvdXRwdXQsICZvdXRwdXRQYXJzZWQt
PmZyYWdtZW50KTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQor
Citib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAg
IENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplRmls
ZVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4oc3BlYyks
IHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wg
Q2Fub25pY2FsaXplRmlsZVVSTChjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJz
ZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplRmlsZVVSTDxV
Q2hhciwgVUNoYXI+KFVSTENvbXBvbmVudFNvdXJjZTxVQ2hhcj4oc3BlYyksIHBhcnNlZCwgcXVl
cnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0
aChjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFy
PiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1
dFBhdGgpCit7CisgICAgcmV0dXJuIERvRmlsZUNhbm9uaWNhbGl6ZVBhdGg8Y2hhciwgdW5zaWdu
ZWQgY2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCBvdXRwdXRQYXRoKTsKK30KKworYm9vbCBGaWxl
Q2Fub25pY2FsaXplUGF0aChjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
Q29tcG9uZW50KiBvdXRwdXRQYXRoKQoreworICAgIHJldHVybiBEb0ZpbGVDYW5vbmljYWxpemVQ
YXRoPFVDaGFyLCBVQ2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCBvdXRwdXRQYXRoKTsKK30KKwor
Ym9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAg
IENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMq
IG91dHB1dFBhcnNlZCkKK3sKKyAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJh
c2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cE92ZXJy
aWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJzZWQpOworICAg
IHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNl
LCBwYXJzZWQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jv
b2wgUmVwbGFjZUZpbGVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAg
Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyog
b3V0cHV0UGFyc2VkKQoreworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OworICAgIFVSTENv
bXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMgcGFyc2Vk
KGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVw
bGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gRG9DYW5vbmlj
YWxpemVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBxdWVyeUNv
bnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxD
YW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVS
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25Ib3N0LmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25Ib3N0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDJh
Y2U2ZDk1MjQzN2JmZjFhOTMxODE3NTliMjcyYmRjOTI0MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwCkBAIC0wLDAgKzEsNDE1IEBA
CisvLyBDb3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Ky8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
Ky8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisj
aW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNw
YWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsK
KworLy8gRm9yIHJlZmVyZW5jZSwgaGVyZSdzIHdoYXQgSUUgc3VwcG9ydHM6CisvLyBLZXk6IDAg
KGRpc2FsbG93ZWQ6IGZhaWx1cmUgaWYgcHJlc2VudCBpbiB0aGUgaW5wdXQpCisvLyAgICAgICsg
KGFsbG93ZWQgZWl0aGVyIGVzY2FwZWQgb3IgdW5lc2NhcGVkLCBhbmQgdW5tb2RpZmllZCkKKy8v
ICAgICAgVSAoYWxsb3dlZCBlc2NhcGVkIG9yIHVuZXNjYXBlZCBidXQgYWx3YXlzIHVuZXNjYXBl
ZCBpZiBwcmVzZW50IGluCisvLyAgICAgICAgIGVzY2FwZWQgZm9ybSkKKy8vICAgICAgRSAoYWxs
b3dlZCBlc2NhcGVkIG9yIHVuZXNjYXBlZCBidXQgYWx3YXlzIGVzY2FwZWQgaWYgcHJlc2VudCBp
bgorLy8gICAgICAgICB1bmVzY2FwZWQgZm9ybSkKKy8vICAgICAgJSAob25seSBhbGxvd2VkIGVz
Y2FwZWQgaW4gdGhlIGlucHV0LCB3aWxsIGJlIHVubW9kaWZpZWQpLgorLy8gICAgICBJIGxlZnQg
YmxhbmsgYWxwaGEgbnVtZXJpYyBjaGFyYWN0ZXJzLgorLy8KKy8vICAgIDAwIDAxIDAyIDAzIDA0
IDA1IDA2IDA3IDA4IDA5IDBhIDBiIDBjIDBkIDBlIDBmCisvLyAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gMCAgIDAgIEUgIEUgIEUgIEUgIEUg
IEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUKKy8vIDEgICBFICBFICBFICBFICBFICBFICBF
ICBFICBFICBFICBFICBFICBFICBFICBFICBFCisvLyAyICAgRSAgKyAgRSAgRSAgKyAgRSAgKyAg
KyAgKyAgKyAgKyAgKyAgKyAgVSAgVSAgMAorLy8gMyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICUgICUgIEUgICsgIEUgIDAgIDwtLSBUaG9zZSBhcmUgIDogOyA8ID0gPiA/CisvLyA0
ICAgJQorLy8gNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUgIDAgIFUgIFUg
IFUgIDwtLSBUaG9zZSBhcmUgIFsgXCBdIF4gXworLy8gNiAgIEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLSBUaGF0J3MgIGAKKy8vIDcgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFICBFICBFICBVICBFICA8LS0gVGhvc2UgYXJlIHsg
fCB9IH4gKFVOUFJJTlRBQkxFKQorLy8KKy8vIE5PVEU6IEkgZGlkbid0IGFjdHVhbGx5IHRlc3Qg
YWxsIHRoZSBjb250cm9sIGNoYXJhY3RlcnMuIFNvbWUgbWF5IGJlCisvLyBkaXNhbGxvd2VkIGlu
IHRoZSBpbnB1dCwgYnV0IHRoZXkgYXJlIGFsbCBhY2NlcHRlZCBlc2NhcGVkIGV4Y2VwdCBmb3Ig
MC4KKy8vIEkgYWxzbyBkaWRuJ3QgdGVzdCBpZiBjaGFyYWN0ZXJzIGFmZmVjdGluZyBIVE1MIHBh
cnNpbmcgYXJlIGFsbG93ZWQKKy8vIHVuZXNjYXBlZCwgZWcuICgiKSBvciAoIyksIHdoaWNoIHdv
dWxkIGluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguCisvLyBTdXJwcmlzaW5nbHks
IHNwYWNlIGlzIGFjY2VwdGVkIGluIHRoZSBpbnB1dCBhbmQgYWx3YXlzIGVzY2FwZWQuCisKKy8v
IFRoaXMgdGFibGUgbGlzdHMgdGhlIGNhbm9uaWNhbCB2ZXJzaW9uIG9mIGFsbCBjaGFyYWN0ZXJz
IHdlIGFsbG93IGluIHRoZQorLy8gaW5wdXQsIHdpdGggMCBpbmRpY2F0aW5nIGl0IGlzIGRpc2Fs
bG93ZWQuIFdlIHVzZSB0aGUgbWFnaWMga0VzY2FwZWRIb3N0Q2hhcgorLy8gdmFsdWUgdG8gaW5k
aWNhdGUgdGhhdCB0aGlzIGNoYXJhY3RlciBzaG91bGQgYmUgZXNjYXBlZC4gV2UgYXJlIGEgbGl0
dGxlIG1vcmUKKy8vIHJlc3RyaWN0aXZlIHRoYW4gSUUsIGJ1dCBsZXNzIHJlc3RyaWN0aXZlIHRo
YW4gRmlyZWZveC4KKy8vCisvLyBOb3RlIHRoYXQgd2UgZGlzYWxsb3cgdGhlICUgY2hhcmFjdGVy
LiBXZSB3aWxsIGFsbG93IGl0IHdoZW4gcGFydCBvZiBhbgorLy8gZXNjYXBlIHNlcXVlbmNlLCBv
ZiBjb3Vyc2UsIGJ1dCB0aGlzIGRpc2FsbG93cyAiJTI1Ii4gRXZlbiB0aG91Z2ggSUUgYWxsb3dz
CisvLyBpdCwgYWxsb3dpbmcgaXQgd291bGQgcHV0IHVzIGluIGEgZnVubnkgc3RhdGUuIElmIHRo
ZXJlIHdhcyBhbiBpbnZhbGlkCisvLyBlc2NhcGUgc2VxdWVuY2UgbGlrZSAiJXp6Iiwgd2UnbGwg
YWRkICIlMjV6eiIgdG8gdGhlIG91dHB1dCBhbmQgZmFpbC4KKy8vIEFsbG93aW5nIHBlcmNlbnRz
IG1lYW5zIHdlJ2xsIHN1Y2NlZWQgYSBzZWNvbmQgdGltZSwgc28gdmFsaWRpdHkgd291bGQgY2hh
bmdlCisvLyBiYXNlZCBvbiBob3cgbWFueSB0aW1lcyB5b3UgcnVuIHRoZSBjYW5vbmljYWxpemVy
LiBXZSBwcmVmZXIgdG8gYWx3YXlzIHJlcG9ydAorLy8gdGhlIHNhbWUgdmFpbGlkaXR5LCBzbyBy
ZWplY3QgdGhpcy4KK2NvbnN0IHVuc2lnbmVkIGNoYXIga0VzYyA9IDB4ZmY7Citjb25zdCB1bnNp
Z25lZCBjaGFyIGtIb3N0Q2hhckxvb2t1cFsweDgwXSA9IHsKKyAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCisvLyAgJyAnICAgISAgICAgIiAgICAgIyAgICAgJCAgICAgJSAgICAgJiAgICAgJyAgICAg
KCAgICAgKSAgICAgKiAgICAgKyAgICAgLCAgICAgLSAgICAgLiAgICAgLworICAgIGtFc2MsIGtF
c2MsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCwgIGtFc2MsIGtFc2MsIGtFc2MsIGtFc2MsIGtFc2Ms
ICAnKycsIGtFc2MsICAnLScsICAnLicsICAgMCwKKy8vICAgMCAgICAxICAgIDIgICAgMyAgICA0
ICAgIDUgICAgNiAgICA3ICAgIDggICAgOSAgICA6ICAgIDsgICAgPCAgICA9ICAgID4gICAgPwor
ICAgICcwJywgICcxJywgICcyJywgICczJywgICc0JywgICc1JywgICc2JywgICc3JywgICc4Jywg
ICc5JywgICc6JywgICAwICwga0VzYywga0VzYywga0VzYywgICAwICwKKy8vICAgQCAgICAgIEEg
ICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgICAgIEggICAgIEkgICAgIEogICAg
IEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8KKyAgICBrRXNjLCAgJ2EnLCAgJ2InLCAgJ2MnLCAg
J2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLCAgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20n
LCAgJ24nLCAgJ28nLAorLy8gICBQICAgICBRICAgICBSICAgICBTICAgICBUICAgICBVICAgICBW
ICAgICBXICAgICBYICAgICBZICAgICBaICAgICBbICAgICBcICAgICBdICAgICBeICAgICBfCisg
ICAgJ3AnLCAgJ3EnLCAgJ3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cnLCAgJ3gnLCAg
J3knLCAgJ3onLCAgJ1snLCAgIDAgLCAgJ10nLCAgIDAgLCAgJ18nLAorLy8gICBgICAgICAgYSAg
ICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAgICAgaCAgICAgaSAgICAgaiAgICAg
ayAgICAgbCAgICAgbSAgICAgbiAgICAgbworICAgIGtFc2MsICAnYScsICAnYicsICAnYycsICAn
ZCcsICAnZScsICAnZicsICAnZycsICAnaCcsICAnaScsICAnaicsICAnaycsICAnbCcsICAnbScs
ICAnbicsICAnbycsCisvLyAgIHAgICAgIHEgICAgIHIgICAgIHMgICAgIHQgICAgIHUgICAgIHYg
ICAgIHcgICAgIHggICAgIHkgICAgIHogICAgIHsgICAgIHwgICAgIH0gICAgIH4KKyAgICAncCcs
ICAncScsICAncicsICAncycsICAndCcsICAndScsICAndicsICAndycsICAneCcsICAneScsICAn
eicsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCAsICAgMCB9OworCit0eXBlZGVmIFJhd1VSTEJ1ZmZl
cjxjaGFyPiBTdGFja0J1ZmZlcjsKK3R5cGVkZWYgUmF3VVJMQnVmZmVyPFVDaGFyPiBTdGFja0J1
ZmZlclc7CisKKy8vIFNjYW5zIGEgaG9zdCBuYW1lIGFuZCBmaWxscyBpbiB0aGUgb3V0cHV0IGZs
YWdzIGFjY29yZGluZyB0byB3aGF0IHdlIGZpbmQuCisvLyB8aGFzTm9uQVNDSUl8IHdpbGwgYmUg
dHJ1ZSBpZiB0aGVyZSBhcmUgYW55IG5vbi03LWJpdCBjaGFyYWN0ZXJzLCBhbmQKKy8vIHxoYXNF
c2NhcGVkfCB3aWxsIGJlIHRydWUgaWYgdGhlcmUgaXMgYSBwZXJjZW50IHNpZ24uCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4KK3ZvaWQgU2Nhbkhvc3RuYW1lKGNvbnN0
IENIQVIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgYm9vbCogaGFzTm9uQVNDSUks
IGJvb2wqIGhhc0VzY2FwZWQpCit7CisgICAgaW50IGVuZCA9IGhvc3QuZW5kKCk7CisgICAgKmhh
c05vbkFTQ0lJID0gZmFsc2U7CisgICAgKmhhc0VzY2FwZWQgPSBmYWxzZTsKKyAgICBmb3IgKGlu
dCBpID0gaG9zdC5iZWdpbigpOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgaWYgKHN0YXRpY19j
YXN0PFVDSEFSPihzcGVjW2ldKSA+PSAweDgwKQorICAgICAgICAgICAgKmhhc05vbkFTQ0lJID0g
dHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoc3BlY1tpXSA9PSAnJScpCisgICAgICAgICAgICAqaGFz
RXNjYXBlZCA9IHRydWU7CisgICAgfQorfQorCisvLyBDYW5vbmljYWxpemVzIGEgaG9zdCBuYW1l
IHRoYXQgaXMgZW50aXJlbHkgOC1iaXQgY2hhcmFjdGVycyAoZXZlbiB0aG91Z2gKKy8vIHRoZSB0
eXBlIGhvbGRpbmcgdGhlbSBtYXkgYmUgMTYgYml0cy4gRXNjYXBlZCBjaGFyYWN0ZXJzIHdpbGwg
YmUgdW5lc2NhcGVkLgorLy8gTm9uLTctYml0IGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBVVEYt
OCkgd2lsbCBiZSBwYXNzZWQgdW5jaGFuZ2VkLgorLy8KKy8vIFRoZSB8Kmhhc05vbkFTQ0lJfCBm
bGFnIHdpbGwgYmUgdHJ1ZSBpZiB0aGVyZSBhcmUgbm9uLTctYml0IGNoYXJhY3RlcnMgaW4KKy8v
IHRoZSBvdXRwdXQuCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIHR3byBzaXR1YXRp
b25zOgorLy8KKy8vICAqIFdoZW4gdGhlIGNhbGxlciBrbm93cyB0aGVyZSBpcyBubyBub24tQVND
SUkgb3IgcGVyY2VudCBlc2NhcGVkCisvLyAgICBjaGFyYWN0ZXJzLiBUaGlzIGlzIHdoYXQgRG9I
b3N0IGRvZXMuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGNvbXBsZXRlbHkKKy8vICAgIGNhbm9uaWNh
bGl6ZWQgaG9zdCBzaW5jZSB3ZSBrbm93IG5vdGhpbmcgd2VpcmQgY2FuIGhhcHBlbiAoZXNjYXBl
ZAorLy8gICAgY2hhcmFjdGVycyBjb3VsZCBiZSB1bmVzY2FwZWQgdG8gbm9uLTctYml0LCBzbyB0
aGV5IGhhdmUgdG8gYmUgdHJlYXRlZAorLy8gICAgd2l0aCBzdXNwaWNpb24gYXQgdGhpcyBwb2lu
dCkuIEl0IGRvZXMgbm90IHVzZSB0aGUgfGhhc05vbkFTQ0lJfCBmbGFnLgorLy8KKy8vICAqIFdo
ZW4gdGhlIGNhbGxlciBoYXMgYW4gOC1iaXQgc3RyaW5nIHRoYXQgbWF5IG5lZWQgdW5lc2NhcGlu
Zy4KKy8vICAgIERvQ29tcGxleEhvc3QgY2FsbHMgdXMgdGhpcyBzaXR1YXRpb24gdG8gZG8gdW5l
c2NhcGluZyBhbmQgdmFsaWRhdGlvbi4KKy8vICAgIEFmdGVyIHRoaXMsIGl0IG1heSBkbyBvdGhl
ciBJRE4gb3BlcmF0aW9ucyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZQorLy8gICAgfCpo
YXNOb25BU0NJSXwgZmxhZy4KKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0
aGUgb3V0cHV0IGlzIGEgcG90ZW50aWFsbHkgdmFsaWQgaG9zdCBuYW1lLgordGVtcGxhdGU8dHlw
ZW5hbWUgSU5DSEFSLCB0eXBlbmFtZSBPVVRDSEFSPgorYm9vbCBEb1NpbXBsZUhvc3QoY29uc3Qg
SU5DSEFSKiBob3N0LAorICAgICAgICAgICAgICAgICAgaW50IGhvc3RMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8T1VUQ0hBUj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAg
IGJvb2wqIGhhc05vbkFTQ0lJKQoreworICAgICpoYXNOb25BU0NJSSA9IGZhbHNlOworCisgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhvc3RMZW5ndGg7
ICsraSkgeworICAgICAgICB1bnNpZ25lZCBzb3VyY2UgPSBob3N0W2ldOworICAgICAgICBpZiAo
c291cmNlID09ICclJykgeworICAgICAgICAgICAgLy8gVW5lc2NhcGUgZmlyc3QsIGlmIHBvc3Np
YmxlLgorICAgICAgICAgICAgLy8gU291cmNlIHdpbGwgYmUgdXNlZCBvbmx5IGlmIGRlY29kZSBv
cGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgICAgICAgICAgICBpZiAoIURlY29kZUVzY2FwZWQo
aG9zdCwgJmksIGhvc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oJnNvdXJjZSkpKSB7CisgICAgICAgICAgICAg
ICAgLy8gSW52YWxpZCBlc2NhcGVkIGNoYXJhY3Rlci4gVGhlcmUgaXMgbm90aGluZyB0aGF0IGNh
biBtYWtlIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBob3N0IHZhbGlkLiBXZSBhcHBlbmQgYW4g
ZXNjYXBlZCBwZXJjZW50IHNvIHRoZSBVUkwgbG9va3MgcmVhc29uYWJsZQorICAgICAgICAgICAg
ICAgIC8vIGFuZCBtYXJrIGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2Nh
cGVkQ2hhcmFjdGVyKCclJywgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc291cmNlIDwgMHg4MCkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBB
U0NJSSBpbnB1dCwgd2UgY2FuIHVzZSBvdXIgbG9va3VwIHRhYmxlLgorICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZXBsYWNlbWVudCA9IGtIb3N0Q2hhckxvb2t1cFtzb3VyY2VdOworICAgICAg
ICAgICAgaWYgKCFyZXBsYWNlbWVudCkgeworICAgICAgICAgICAgICAgIC8vIEludmFsaWQgY2hh
cmFjdGVyLCBhZGQgaXQgYXMgcGVyY2VudC1lc2NhcGVkIGFuZCBtYXJrIGFzIGZhaWxlZC4KKyAg
ICAgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHNvdXJjZSwgb3V0cHV0KTsK
KyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHJlcGxhY2VtZW50ID09IGtFc2MpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNoYXJhY3Rl
ciBpcyB2YWxpZCBidXQgc2hvdWxkIGJlIGVzY2FwZWQuCisgICAgICAgICAgICAgICAgYXBwZW5k
VVJMRXNjYXBlZENoYXJhY3Rlcihzb3VyY2UsIG91dHB1dCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIENvbW1vbiBjYXNlLCB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGlz
IHZhbGlkIGluIGEgaG9zdG5hbWUsIHRoZSBsb29rdXAKKyAgICAgICAgICAgICAgICAvLyB0YWJs
ZSB0ZWxscyB1cyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgY2hhcmFjdGVy
IChsb3dlcgorICAgICAgICAgICAgICAgIC8vIGNhc2VkKS4KKyAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEl0J3MgYSBub24tYXNjaWkgY2hhci4gSnVzdCBwdXNoIGl0IHRvIHRo
ZSBvdXRwdXQuCisgICAgICAgICAgICAvLyBJbiBjYXNlIHdoZXJlIHdlIGhhdmUgVUNoYXIgaW5w
dXQsIGFuZCBjaGFyIG91dHB1dCBpdCdzIHNhZmUgdG8KKyAgICAgICAgICAgIC8vIGNhc3QgVUNo
YXItPmNoYXIgb25seSBpZiBpbnB1dCBzdHJpbmcgd2FzIGNvbnZlcnRlZCB0byBBU0NJSS4KKyAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8T1VUQ0hBUj4oc291cmNlKSk7Cisg
ICAgICAgICAgICAqaGFzTm9uQVNDSUkgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIENhbm9uaWNhbGl6ZXMgYSBob3N0IHRoYXQgcmVxdWly
ZXMgSUROIGNvbnZlcnNpb24uIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCitib29sIERvSUROSG9z
dChjb25zdCBVQ2hhciogc3JjLCBpbnQgc291cmNlTGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGVzY2FwZSBVUkwgYmVmb3JlIGRvaW5nIElETiBj
b252ZXJzaW9uLCBzaW5jZSBwdW5pY29kZSBzdHJpbmdzCisgICAgLy8gY2Fubm90IGJlIGVzY2Fw
ZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4KKyAgICBSYXdVUkxCdWZmZXI8VUNoYXI+IHVybEVz
Y2FwZWRIb3N0OworICAgIGJvb2wgaGFzTm9uQVNDSUk7CisgICAgRG9TaW1wbGVIb3N0KHNyYywg
c291cmNlTGVuZ3RoLCB1cmxFc2NhcGVkSG9zdCwgJmhhc05vbkFTQ0lJKTsKKworICAgIFN0YWNr
QnVmZmVyVyB3aWRlT3V0cHV0OworICAgIGlmICghSUROVG9BU0NJSSh1cmxFc2NhcGVkSG9zdC5k
YXRhKCksCisgICAgICAgICAgICAgICAgICAgIHVybEVzY2FwZWRIb3N0Lmxlbmd0aCgpLAorICAg
ICAgICAgICAgICAgICAgICB3aWRlT3V0cHV0KSkgeworICAgICAgICAvLyBTb21lIGVycm9yLCBn
aXZlIHVwLiBUaGlzIHdpbGwgd3JpdGUgc29tZSByZWFzb25hYmxlIGxvb2tpbmcKKyAgICAgICAg
Ly8gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyB0byB0aGUgb3V0cHV0LgorICAgICAgICBB
cHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKHNyYywgMCwgc291cmNlTGVuZ3RoLCBvdXRwdXQpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gTm93IHdlIGNoZWNrIHRoZSBB
U0NJSSBvdXRwdXQgbGlrZSBhIG5vcm1hbCBob3N0LiBJdCB3aWxsIGFsc28gaGFuZGxlCisgICAg
Ly8gdW5lc2NhcGluZy4gQWx0aG91Z2ggd2UgdW5lc2NhcGVkIGV2ZXJ5dGhpbmcgYmVmb3JlIHRo
aXMgZnVuY3Rpb24gY2FsbCwgaWYKKyAgICAvLyBzb21lYm9keSBkb2VzICUwMCBhcyBmdWxsd2lk
dGgsIElDVSB3aWxsIGNvbnZlcnQgdGhpcyB0byBBU0NJSS4KKyAgICBib29sIHN1Y2Nlc3MgPSBE
b1NpbXBsZUhvc3Qod2lkZU91dHB1dC5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZGVPdXRwdXQubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dCwgJmhhc05vbkFTQ0lJKTsKKyAgICBBU1NFUlQoIWhhc05vbkFTQ0lJKTsKKyAg
ICByZXR1cm4gc3VjY2VzczsKK30KKworLy8gOC1iaXQgY29udmVydCBob3N0IHRvIGl0cyBBU0NJ
SSB2ZXJzaW9uOiB0aGlzIGNvbnZlcnRzIHRoZSBVVEYtOCBpbnB1dCB0bworLy8gVVRGLTE2LiBU
aGUgaGFzRXNjYXBlZCBmbGFnIHNob3VsZCBiZSBzZXQgaWYgdGhlIGlucHV0IHN0cmluZyByZXF1
aXJlcworLy8gdW5lc2NhcGluZy4KK2Jvb2wgRG9Db21wbGV4SG9zdChjb25zdCBjaGFyKiBob3N0
LCBpbnQgaG9zdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICBib29sIGhhc05vbkFTQ0lJLCBi
b29sIGhhc0VzY2FwZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIFNhdmUg
dGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIG91dHB1dC4gV2UgbWF5IHdyaXRlIHN0dWZmIGFu
ZCByZXdpbmQgaXQKKyAgICAvLyBiZWxvdywgc28gd2UgbmVlZCB0byBrbm93IHdoZXJlIHRvIHJl
d2luZCB0by4KKyAgICBpbnQgYmVnaW5MZW5ndGggPSBvdXRwdXQubGVuZ3RoKCk7CisKKyAgICAv
LyBQb2ludHMgdG8gdGhlIFVURi04IGRhdGEgd2Ugd2FudCB0byBjb252ZXJ0LiBUaGlzIHdpbGwg
ZWl0aGVyIGJlIHRoZQorICAgIC8vIGlucHV0IG9yIHRoZSB1bmVzY2FwZWQgdmVyc2lvbiB3cml0
dGVuIHRvIHxvdXRwdXR8IGlmIG5lY2Vzc2FyeS4KKyAgICBjb25zdCBjaGFyKiB1dGY4U291cmNl
OworICAgIGludCB1dGY4U291cmNlTGVuZ3RoOworICAgIGlmIChoYXNFc2NhcGVkKSB7CisgICAg
ICAgIC8vIFVuZXNjYXBlIGJlZm9yZSBjb252ZXJ0aW5nIHRvIFVURi0xNiBmb3IgSUROLiBXZSB3
cml0ZSB0aGlzIGludG8gdGhlCisgICAgICAgIC8vIG91dHB1dCBiZWNhdXNlIGl0IG1vc3QgbGlr
ZWx5IGRvZXMgbm90IHJlcXVpcmUgSUROaXphdGlvbiwgYW5kIHdlIGNhbgorICAgICAgICAvLyBz
YXZlIGFub3RoZXIgaHVnZSBzdGFjayBidWZmZXIuIEl0IHdpbGwgYmUgcmVwbGFjZWQgYmVsb3cg
aWYgaXQgcmVxdWlyZXMKKyAgICAgICAgLy8gSUROLiBUaGlzIHdpbGwgYWxzbyB1cGRhdGUgb3Vy
IG5vbi1BU0NJSSBmbGFnIHNvIHdlIGtub3cgd2hldGhlciB0aGUKKyAgICAgICAgLy8gdW5lc2Nh
cGVkIGlucHV0IHJlcXVpcmVzIElETi4KKyAgICAgICAgaWYgKCFEb1NpbXBsZUhvc3QoaG9zdCwg
aG9zdExlbmd0aCwgb3V0cHV0LCAmaGFzTm9uQVNDSUkpKSB7CisgICAgICAgICAgICAvLyBFcnJv
ciB3aXRoIHNvbWUgZXNjYXBlIHNlcXVlbmNlLiBXZSdsbCBjYWxsIHRoZSBjdXJyZW50IG91dHB1
dAorICAgICAgICAgICAgLy8gY29tcGxldGUuIERvU2ltcGxlSG9zdCB3aWxsIGhhdmUgd3JpdHRl
biBzb21lICJyZWFzb25hYmxlIiBvdXRwdXQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBVbmVzY2FwaW5nIG1heSBoYXZlIGxlZnQgdXMgd2l0aCBB
U0NJSSBpbnB1dCwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAgICAgLy8gdW5lc2NhcGVkIHZlcnNp
b24gd2Ugd3JvdGUgdG8gb3V0cHV0IGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoIWhhc05vbkFT
Q0lJKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgcG9p
bnRlciBpbnRvIHRoZSBkYXRhIHdhcyBqdXN0IGNvbnZlcnRlZCAoaXQgbWF5IGJlIGFwcGVuZGVk
IHRvCisgICAgICAgIC8vIG90aGVyIGRhdGEgaW4gdGhlIG91dHB1dCBidWZmZXIpLgorICAgICAg
ICB1dGY4U291cmNlID0gJm91dHB1dC5kYXRhKClbYmVnaW5MZW5ndGhdOworICAgICAgICB1dGY4
U291cmNlTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCgpIC0gYmVnaW5MZW5ndGg7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byB1bmVzY2FwZSwgdXNlIGlucHV0IGZvciBJ
RE5pemF0aW9uIGxhdGVyLiAoV2Uga25vdyB0aGUKKyAgICAgICAgLy8gaW5wdXQgaGFzIG5vbi1B
U0NJSSwgb3IgdGhlIHNpbXBsZSB2ZXJzaW9uIHdvdWxkIGhhdmUgYmVlbiBjYWxsZWQKKyAgICAg
ICAgLy8gaW5zdGVhZCBvZiB1cy4pCisgICAgICAgIHV0ZjhTb3VyY2UgPSBob3N0OworICAgICAg
ICB1dGY4U291cmNlTGVuZ3RoID0gaG9zdExlbmd0aDsKKyAgICB9CisKKyAgICAvLyBOb24tQVND
SUkgaW5wdXQgcmVxdWlyZXMgSUROLCBjb252ZXJ0IHRvIFVURi0xNiBhbmQgZG8gdGhlIElETiBj
b252ZXJzaW9uLgorICAgIC8vIEFib3ZlLCB3ZSBtYXkgaGF2ZSB1c2VkIHRoZSBvdXRwdXQgdG8g
d3JpdGUgdGhlIHVuZXNjYXBlZCB2YWx1ZXMgdG8sIHNvCisgICAgLy8gd2UgaGF2ZSB0byByZXdp
bmQgaXQgdG8gd2hlcmUgd2Ugc3RhcnRlZCBhZnRlciB3ZSBjb252ZXJ0IGl0IHRvIFVURi0xNi4K
KyAgICBTdGFja0J1ZmZlclcgdXRmMTY7CisgICAgaWYgKCFDb252ZXJ0VVRGOFRvVVRGMTYodXRm
OFNvdXJjZSwgdXRmOFNvdXJjZUxlbmd0aCwgdXRmMTYpKSB7CisgICAgICAgIC8vIEluIHRoaXMg
ZXJyb3IgY2FzZSwgdGhlIGlucHV0IG1heSBvciBtYXkgbm90IGJlIHRoZSBvdXRwdXQuCisgICAg
ICAgIFN0YWNrQnVmZmVyIHV0Zjg7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXRmOFNv
dXJjZUxlbmd0aDsgaSsrKQorICAgICAgICAgICAgdXRmOC5hcHBlbmQodXRmOFNvdXJjZVtpXSk7
CisgICAgICAgIG91dHB1dC5zZXRMZW5ndGgoYmVnaW5MZW5ndGgpOworICAgICAgICBBcHBlbmRJ
bnZhbGlkTmFycm93U3RyaW5nKHV0ZjguZGF0YSgpLCAwLCB1dGY4Lmxlbmd0aCgpLCBvdXRwdXQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG91dHB1dC5zZXRMZW5ndGgoYmVn
aW5MZW5ndGgpOworCisgICAgLy8gVGhpcyB3aWxsIGNhbGwgRG9TaW1wbGVIb3N0IHdoaWNoIHdp
bGwgZG8gbm9ybWFsIEFTQ0lJIGNhbm9uaWNhbGl6YXRpb24KKyAgICAvLyBhbmQgYWxzbyBjaGVj
ayBmb3IgSVAgYWRkcmVzc2VzIGluIHRoZSBvdXRwdC4KKyAgICByZXR1cm4gRG9JRE5Ib3N0KHV0
ZjE2LmRhdGEoKSwgdXRmMTYubGVuZ3RoKCksIG91dHB1dCk7Cit9CisKKy8vIFVURi0xNiBjb252
ZXJ0IGhvc3QgdG8gaXRzIEFTQ0lJIHZlcnNpb24uIFRoZSBzZXQgdXAgaXMgYWxyZWFkeSByZWFk
eSBmb3IKKy8vIHRoZSBiYWNrZW5kLCBzbyB3ZSBqdXN0IHBhc3MgdGhyb3VnaC4gVGhlIGhhc0Vz
Y2FwZWQgZmxhZyBzaG91bGQgYmUgc2V0IGlmCisvLyB0aGUgaW5wdXQgc3RyaW5nIHJlcXVpcmVz
IHVuZXNjYXBpbmcuCitib29sIERvQ29tcGxleEhvc3QoY29uc3QgVUNoYXIqIGhvc3QsIGludCBo
b3N0TGVuZ3RoLCBib29sIGhhc05vbkFTQ0lJLCBib29sIGhhc0VzY2FwZWQsIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0KQoreworICAgIGlmIChoYXNFc2NhcGVkKSB7CisgICAgICAgIC8vIFlpa2Vz
LCB3ZSBoYXZlIGVzY2FwZWQgY2hhcmFjdGVycyB3aXRoIHdpZGUgaW5wdXQuIFRoZSBlc2NhcGVk
CisgICAgICAgIC8vIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIFVURi04LiBU
byBzb2x2ZSB0aGlzIHByb2JsZW0sCisgICAgICAgIC8vIHdlIGNvbnZlcnQgdG8gVVRGLTgsIHVu
ZXNjYXBlLCB0aGVuIGNvbnZlcnQgYmFjayB0byBVVEYtMTYgZm9yIElETi4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gV2UgZG9uJ3QgYm90aGVyIHRvIG9wdGltaXplIHRoZSBjb252ZXJzaW9uIGlu
IHRoZSBBU0NJSSBjYXNlICh3aGljaAorICAgICAgICAvLyAqY291bGQqIGp1c3QgYmUgYSBjb3B5
KSBhbmQgdXNlIHRoZSBVVEYtOCBwYXRoLCBiZWNhdXNlIGl0IHNob3VsZCBiZQorICAgICAgICAv
LyB2ZXJ5IHJhcmUgdGhhdCBob3N0IG5hbWVzIGhhdmUgZXNjYXBlZCBjaGFyYWN0ZXJzLCBhbmQg
aXQgaXMgcmVsYXRpdmVseQorICAgICAgICAvLyBmYXN0IHRvIGRvIHRoZSBjb252ZXJzaW9uIGFu
eXdheS4KKyAgICAgICAgU3RhY2tCdWZmZXIgdXRmODsKKyAgICAgICAgaWYgKCFDb252ZXJ0VVRG
MTZUb1VURjgoaG9zdCwgaG9zdExlbmd0aCwgdXRmOCkpIHsKKyAgICAgICAgICAgIEFwcGVuZElu
dmFsaWROYXJyb3dTdHJpbmcoaG9zdCwgMCwgaG9zdExlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9uY2Ugd2UgY29udmVy
dCB0byBVVEYtOCwgd2UgY2FuIHVzZSB0aGUgOC1iaXQgdmVyc2lvbiBvZiB0aGUgY29tcGxleAor
ICAgICAgICAvLyBob3N0IGhhbmRsaW5nIGNvZGUgYWJvdmUuCisgICAgICAgIHJldHVybiBEb0Nv
bXBsZXhIb3N0KHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpLCBoYXNOb25BU0NJSSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXNjYXBlZCwgb3V0cHV0KTsKKyAgICB9CisKKyAg
ICAvLyBObyB1bmVzY2FwaW5nIG5lY2Vzc2FyeSwgd2UgY2FuIHNhZmVseSBwYXNzIHRoZSBpbnB1
dCB0byBJQ1UuIFRoaXMKKyAgICAvLyBmdW5jdGlvbiB3aWxsIG9ubHkgZ2V0IGNhbGxlZCBpZiB3
ZSBlaXRoZXIgaGF2ZSBlc2NhcGVkIG9yIG5vbi1hc2NpaQorICAgIC8vIGlucHV0LCBzbyBpdCdz
IHNhZmUgdG8ganVzdCB1c2UgSUNVIG5vdy4gRXZlbiBpZiB0aGUgaW5wdXQgaXMgQVNDSUksCisg
ICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIGRvIHRoZSByaWdodCB0aGluZyAoanVzdCBzbG93ZXIg
dGhhbiB3ZSBjb3VsZCkuCisgICAgcmV0dXJuIERvSUROSG9zdChob3N0LCBob3N0TGVuZ3RoLCBv
dXRwdXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4KK3Zv
aWQgRG9Ib3N0KGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAgICBjb25zdCBVUkxDb21wb25l
bnQmIGhvc3QsCisgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAg
ICAgIENhbm9uSG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIGlmIChob3N0Lmxlbmd0aCgpIDw9
IDApIHsKKyAgICAgICAgLy8gRW1wdHkgaG9zdHMgZG9uJ3QgbmVlZCBhbnl0aGluZy4KKyAgICAg
ICAgaG9zdEluZm8tPmZhbWlseSA9IENhbm9uSG9zdEluZm86Ok5FVVRSQUw7CisgICAgICAgIGhv
c3RJbmZvLT5vdXB1dEhvc3QgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgaGFzTm9uQVNDSUk7CisgICAgYm9vbCBoYXNFc2NhcGVkOworICAgIFNj
YW5Ib3N0bmFtZTxDSEFSLCBVQ0hBUj4oc3BlYywgaG9zdCwgJmhhc05vbkFTQ0lJLCAmaGFzRXNj
YXBlZCk7CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIG91dHB1dCdzIGluaXRpYWwgbGVuZ3RoLCBz
byB3ZSBjYW4gcmV3aW5kIGxhdGVyLgorICAgIGNvbnN0IGludCBvdXRwdXRCZWdpbiA9IG91dHB1
dC5sZW5ndGgoKTsKKworICAgIGJvb2wgc3VjY2VzczsKKyAgICBpZiAoIWhhc05vbkFTQ0lJICYm
ICFoYXNFc2NhcGVkKSB7CisgICAgICAgIHN1Y2Nlc3MgPSBEb1NpbXBsZUhvc3QoJnNwZWNbaG9z
dC5iZWdpbigpXSwgaG9zdC5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQsICZoYXNOb25BU0NJSSk7CisgICAgICAgIEFTU0VSVCghaGFzTm9uQVNDSUkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN1Y2Nlc3MgPSBEb0NvbXBsZXhIb3N0KCZzcGVjW2hvc3Qu
YmVnaW4oKV0sIGhvc3QubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhhc05vbkFTQ0lJLCBoYXNFc2NhcGVkLCBvdXRwdXQpOworICAgIH0KKworICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAvLyBDYW5vbmljYWxpemF0aW9uIGZhaWxlZC4gU2V0IEJST0tFTiB0
byBub3RpZnkgdGhlIGNhbGxlci4KKyAgICAgICAgaG9zdEluZm8tPmZhbWlseSA9IENhbm9uSG9z
dEluZm86OkJST0tFTjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBZnRlciBhbGwgdGhlIG90
aGVyIGNhbm9uaWNhbGl6YXRpb24sIGNoZWNrIGlmIHdlIGVuZGVkIHVwIHdpdGggYW4gSVAKKyAg
ICAgICAgLy8gYWRkcmVzcy4gSVAgYWRkcmVzc2VzIGFyZSBzbWFsbCwgc28gd3JpdGluZyBpbnRv
IHRoaXMgdGVtcG9yYXJ5IGJ1ZmZlcgorICAgICAgICAvLyBzaG91bGQgbm90IGNhdXNlIGFuIGFs
bG9jYXRpb24uCisgICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyLCA2ND4gY2Fub25faXA7CisgICAg
ICAgIENhbm9uaWNhbGl6ZUlQQWRkcmVzcyhvdXRwdXQuZGF0YSgpLCBVUkxDb21wb25lbnQ6OmZy
b21SYW5nZShvdXRwdXRCZWdpbiwgb3V0cHV0Lmxlbmd0aCgpKSwgY2Fub25faXAsIGhvc3RJbmZv
KTsKKworICAgICAgICAvLyBJZiB3ZSBnb3QgYW4gSVB2NC9JUHY2IGFkZHJlc3MsIGNvcHkgdGhl
IGNhbm9uaWNhbCBmb3JtIGJhY2sgdG8gdGhlCisgICAgICAgIC8vIHJlYWwgYnVmZmVyLiBPdGhl
cndpc2UsIGl0J3MgYSBob3N0bmFtZSBvciBicm9rZW4gSVAsIGluIHdoaWNoIGNhc2UKKyAgICAg
ICAgLy8gd2UganVzdCBsZWF2ZSBpdCBpbiBwbGFjZS4KKyAgICAgICAgaWYgKGhvc3RJbmZvLT5J
c0lQQWRkcmVzcygpKSB7CisgICAgICAgICAgICBvdXRwdXQuc2V0TGVuZ3RoKG91dHB1dEJlZ2lu
KTsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoY2Fub25faXAuZGF0YSgpLCBjYW5vbl9pcC5s
ZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBob3N0SW5mby0+b3VwdXRIb3N0ID0g
VVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uob3V0cHV0QmVnaW4sIG91dHB1dC5sZW5ndGgoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgQ2Fub25pY2FsaXplSG9zdChjb25zdCBjaGFyKiBz
cGVjLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwKKyAg
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAg
ICAgICAgICAgICBVUkxDb21wb25lbnQqIG91cHV0SG9zdCkKK3sKKyAgICBDYW5vbkhvc3RJbmZv
IGhvc3RJbmZvOworICAgIERvSG9zdDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBob3N0LCBv
dXRwdXQsICZob3N0SW5mbyk7CisgICAgKm91cHV0SG9zdCA9IGhvc3RJbmZvLm91cHV0SG9zdDsK
KyAgICByZXR1cm4gKGhvc3RJbmZvLmZhbWlseSAhPSBDYW5vbkhvc3RJbmZvOjpCUk9LRU4pOwor
fQorCitib29sIENhbm9uaWNhbGl6ZUhvc3QoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIFVSTENv
bXBvbmVudCogb3VwdXRIb3N0KQoreworICAgIENhbm9uSG9zdEluZm8gaG9zdEluZm87CisgICAg
RG9Ib3N0PFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCAmaG9zdEluZm8pOworICAg
ICpvdXB1dEhvc3QgPSBob3N0SW5mby5vdXB1dEhvc3Q7CisgICAgcmV0dXJuIChob3N0SW5mby5m
YW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOKTsKK30KKwordm9pZCBDYW5vbmljYWxpemVI
b3N0VmVyYm9zZShjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
YW5vbkhvc3RJbmZvKiBob3N0SW5mbykKK3sKKyAgICBEb0hvc3Q8Y2hhciwgdW5zaWduZWQgY2hh
cj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0SW5mbyk7Cit9CisKK3ZvaWQgQ2Fub25pY2FsaXpl
SG9zdFZlcmJvc2UoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhbm9uSG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIERvSG9zdDxVQ2hhciwgVUNoYXI+KHNw
ZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5v
bmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3BwIGIvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbklDVS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg1MmIwYTkx
MDc4YzgzMDA4Y2Q4YjNiY2EyNGEzMDY0YTQyYzVmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3BwCkBAIC0wLDAgKzEsMTg1IEBACisvLyBD
b3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIElDVSBpbnRlZ3JhdGlvbiBmdW5j
dGlvbnMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJu
YWwuaCIgLy8gZm9yIF9pdG9hX3MKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjbnZf
Y2IuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VpZG5hLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCitu
YW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3Bh
Y2UgeworCisvLyBDYWxsZWQgd2hlbiBjb252ZXJ0aW5nIGEgY2hhcmFjdGVyIHRoYXQgY2FuIG5v
dCBiZSByZXByZXNlbnRlZCwgdGhpcyB3aWxsCisvLyBhcHBlbmQgYW4gZXNjYXBlZCB2ZXJzaW9u
IG9mIHRoZSBudW1lcmljYWwgY2hhcmFjdGVyIHJlZmVyZW5jZSBmb3IgdGhhdCBjb2RlCisvLyBw
b2ludC4gSXQgaXMgb2YgdGhlIGZvcm0gIiYjMTIzNDsiIGFuZCB3ZSB3aWxsIGVzY2FwZSB0aGUg
bm9uLWRpZ2l0cyB0bworLy8gIiUyNiUyMzEyMzQlM0IiLiBXaHk/IFRoaXMgaXMgd2hhdCBOZXRz
Y2FwZSBkaWQgYmFjayBpbiB0aGUgb2xkZW4gZGF5cy4KK3ZvaWQgYXBwZW5kVVJMRXNjYXBlZENo
YXIoY29uc3Qgdm9pZCogLyogY29udGV4dCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJvbUFyZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiAvKiBjb2RlX3VuaXRzICovLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90IC8qIGxlbmd0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VUNoYXIzMiBjb2RlUG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJD
YWxsYmFja1JlYXNvbiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNv
ZGUqIGVycikKK3sKKyAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCkgeworICAgICAg
ICAqZXJyID0gVV9aRVJPX0VSUk9SOworCisgICAgICAgIGNvbnN0IHN0YXRpYyBpbnQgcHJlZml4
TGVuZ3RoID0gNjsKKyAgICAgICAgY29uc3Qgc3RhdGljIGNoYXIgcHJlZml4W3ByZWZpeExlbmd0
aCArIDFdID0gIiUyNiUyMyI7IC8vICImIyIgcGVyY2VudC1lc2NhcGVkCisgICAgICAgIHVjbnZf
Y2JGcm9tVVdyaXRlQnl0ZXMoZnJvbUFyZ3MsIHByZWZpeCwgcHJlZml4TGVuZ3RoLCAwLCBlcnIp
OworCisgICAgICAgIEFTU0VSVChjb2RlUG9pbnQgPCAweDExMDAwMCk7CisgICAgICAgIGNoYXIg
bnVtYmVyWzhdOyAvLyBNYXggVW5pY29kZSBjb2RlIHBvaW50IGlzIDcgZGlnaXRzLgorICAgICAg
ICBfaXRvYV9zKGNvZGVQb2ludCwgbnVtYmVyLCAxMCk7CisgICAgICAgIGludCBudW1iZXJMZW5n
dGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihudW1iZXIpKTsKKyAgICAgICAgdWNudl9jYkZy
b21VV3JpdGVCeXRlcyhmcm9tQXJncywgbnVtYmVyLCBudW1iZXJMZW5ndGgsIDAsIGVycik7CisK
KyAgICAgICAgY29uc3Qgc3RhdGljIGludCBwb3N0Zml4TGVuZ3RoID0gMzsKKyAgICAgICAgY29u
c3Qgc3RhdGljIGNoYXIgcG9zdGZpeFtwb3N0Zml4TGVuZ3RoICsgMV0gPSAiJTNCIjsgLy8gIjsi
IHBlcmNlbnQtZXNjYXBlZAorICAgICAgICB1Y252X2NiRnJvbVVXcml0ZUJ5dGVzKGZyb21Bcmdz
LCBwb3N0Zml4LCBwb3N0Zml4TGVuZ3RoLCAwLCBlcnIpOworICAgIH0KK30KKworLy8gQSBjbGFz
cyBmb3Igc2NvcGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBj
YWxsYmFjay4KK2NsYXNzIEFwcGVuZEhhbmRsZXJJbnN0YWxsZXIgeworcHVibGljOgorICAgIC8v
IFRoZSBvd25lciBvZiB0aGlzIG9iamVjdCBtdXN0IGVuc3VyZSB0aGF0IHRoZSBjb252ZXJ0ZXIg
aXMgYWxpdmUgZm9yIHRoZQorICAgIC8vIGR1cmF0aW9uIG9mIHRoaXMgb2JqZWN0J3MgbGlmZXRp
bWUuCisgICAgQXBwZW5kSGFuZGxlckluc3RhbGxlcihVQ29udmVydGVyKiBjb252ZXJ0ZXIpCisg
ICAgICAgIDogbV9jb252ZXJ0ZXIoY29udmVydGVyKQorICAgIHsKKyAgICAgICAgVUVycm9yQ29k
ZSBlcnIgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2Nv
bnZlcnRlciwgYXBwZW5kVVJMRXNjYXBlZENoYXIsIDAsICZtX29sZENhbGxiYWNrLCAmbV9vbGRD
b250ZXh0LCAmZXJyKTsKKyAgICB9CisKKyAgICB+QXBwZW5kSGFuZGxlckluc3RhbGxlcigpCisg
ICAgeworICAgICAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNu
dl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVyLCBtX29sZENhbGxiYWNrLCBtX29sZENvbnRl
eHQsIDAsIDAsICZlcnIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBVQ29udmVydGVyKiBtX2Nv
bnZlcnRlcjsKKworICAgIFVDb252ZXJ0ZXJGcm9tVUNhbGxiYWNrIG1fb2xkQ2FsbGJhY2s7Cisg
ICAgY29uc3Qgdm9pZCogbV9vbGRDb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UKKworLy8g
Q29udmVydHMgdGhlIFVuaWNvZGUgaW5wdXQgcmVwcmVzZW50aW5nIGEgaG9zdG5hbWUgdG8gQVND
SUkgdXNpbmcgSUROIHJ1bGVzLgorLy8gVGhlIG91dHB1dCBtdXN0IGJlIEFTQ0lJLCBidXQgaXMg
cmVwcmVzZW50ZWQgYXMgd2lkZSBjaGFyYWN0ZXJzLgorLy8KKy8vIE9uIHN1Y2Nlc3MsIHRoZSBv
dXRwdXQgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgQVNDSUkgaG9zdCBuYW1lIGFuZCBpdCB3aWxs
CisvLyByZXR1cm4gdHJ1ZS4gVW5saWtlIG1vc3Qgb3RoZXIgY2Fub25pY2FsaXphdGlvbiBmdW5j
dGlvbnMsIHRoaXMgYXNzdW1lcyB0aGF0CisvLyB0aGUgb3V0cHV0IGlzIGVtcHR5LiBUaGUgYmVn
aW5uaW5nIG9mIHRoZSBob3N0IHdpbGwgYmUgYXQgb2Zmc2V0IDAsIGFuZAorLy8gdGhlIGxlbmd0
aCBvZiB0aGUgb3V0cHV0IHdpbGwgYmUgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBob3N0
IG5hbWUuCisvLworLy8gT24gZXJyb3IsIHRoaXMgd2lsbCByZXR1cm4gZmFsc2UuIFRoZSBvdXRw
dXQgaW4gdGhpcyBjYXNlIGlzIHVuZGVmaW5lZC4KK2Jvb2wgSUROVG9BU0NJSShjb25zdCBVQ2hh
ciogc3JjLCBpbnQgc291cmNlTGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpCit7Cisg
ICAgQVNTRVJUKCFvdXRwdXQubGVuZ3RoKCkpOyAvLyBPdXRwdXQgYnVmZmVyIGlzIGFzc3VtZWQg
ZW1wdHkuCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgLy8gVXNlIEFMTE9XX1VOQVNTSUdO
RUQgdG8gYmUgbW9yZSB0b2xlcmFudCBvZiBob3N0bmFtZXMgdGhhdCB2aW9sYXRlCisgICAgICAg
IC8vIHRoZSBzcGVjICh3aGljaCBkbyBleGlzdCkuIFRoaXMgZG9lcyBub3QgcHJlc2VudCBhbnkg
cmlzayBhbmQgaXMgYQorICAgICAgICAvLyBsaXR0bGUgbW9yZSBmdXR1cmUgcHJvb2YuCisgICAg
ICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOworICAgICAgICBpbnQgbnVtQ29udmVy
dGVkID0gdWlkbmFfSUROVG9BU0NJSShzcmMsIHNvdXJjZUxlbmd0aCwgb3V0cHV0LmRhdGEoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5jYXBh
Y2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlE
TkFfQUxMT1dfVU5BU1NJR05FRCwgMCwgJmVycik7CisgICAgICAgIGlmIChlcnIgPT0gVV9aRVJP
X0VSUk9SKSB7CisgICAgICAgICAgICBvdXRwdXQuc2V0TGVuZ3RoKG51bUNvbnZlcnRlZCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXJyICE9IFVf
QlVGRkVSX09WRVJGTE9XX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBVbmtu
b3duIGVycm9yLCBnaXZlIHVwLgorCisgICAgICAgIC8vIE5vdCBlbm91Z2ggcm9vbSBpbiBvdXIg
YnVmZmVyLCBleHBhbmQuCisgICAgICAgIG91dHB1dC5yZXNpemUob3V0cHV0LmNhcGFjaXR5KCkg
KiAyKTsKKyAgICB9Cit9CisKK2Jvb2wgcmVhZFVURkNoYXIoY29uc3QgY2hhciogc3RyLCBpbnQq
IGJlZ2luLCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCogY29kZVBvaW50T3V0KQoreworICAgIGludCBj
b2RlUG9pbnQ7IC8vIEF2b2lkcyB3YXJuaW5nIHdoZW4gVThfTkVYVCB3cml0ZXMgLTEgdG8gaXQu
CisgICAgVThfTkVYVChzdHIsICpiZWdpbiwgbGVuZ3RoLCBjb2RlUG9pbnQpOworICAgICpjb2Rl
UG9pbnRPdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVBvaW50KTsKKworICAgIC8vIFRo
ZSBJQ1UgbWFjcm8gYWJvdmUgbW92ZXMgdG8gdGhlIG5leHQgY2hhciwgd2Ugd2FudCB0byBwb2lu
dCB0byB0aGUgbGFzdAorICAgIC8vIGNoYXIgY29uc3VtZWQuCisgICAgKCpiZWdpbiktLTsKKwor
ICAgIC8vIFZhbGlkYXRlIHRoZSBkZWNvZGVkIHZhbHVlLgorICAgIGlmIChVX0lTX1VOSUNPREVf
Q0hBUihjb2RlUG9pbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAqY29kZVBvaW50T3V0
ID0ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgcmVhZFVURkNoYXIoY29uc3QgVUNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0
aCwgdW5zaWduZWQqIGNvZGVQb2ludCkKK3sKKyAgICBpZiAoVTE2X0lTX1NVUlJPR0FURShzdHJb
KmJlZ2luXSkpIHsKKyAgICAgICAgaWYgKCFVMTZfSVNfU1VSUk9HQVRFX0xFQUQoc3RyWypiZWdp
bl0pIHx8ICpiZWdpbiArIDEgPj0gbGVuZ3RoIHx8ICFVMTZfSVNfVFJBSUwoc3RyWypiZWdpbiAr
IDFdKSkgeworICAgICAgICAgICAgLy8gSW52YWxpZCBzdXJyb2dhdGUgcGFpci4KKyAgICAgICAg
ICAgICpjb2RlUG9pbnQgPSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVmFsaWQgc3Vycm9nYXRl
IHBhaXIuCisgICAgICAgICpjb2RlUG9pbnQgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoc3RyWypi
ZWdpbl0sIHN0clsqYmVnaW4gKyAxXSk7CisgICAgICAgICgqYmVnaW4pKys7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gTm90IGEgc3Vycm9nYXRlLCBqdXN0IG9uZSAxNi1iaXQgd29yZC4KKyAg
ICAgICAgKmNvZGVQb2ludCA9IHN0clsqYmVnaW5dOworICAgIH0KKworICAgIGlmIChVX0lTX1VO
SUNPREVfQ0hBUigqY29kZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJ
bnZhbGlkIGNvZGUgcG9pbnQuCisgICAgKmNvZGVQb2ludCA9IGtVbmljb2RlUmVwbGFjZW1lbnRD
aGFyYWN0ZXI7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5v
bmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSVAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MzJkOWJkYjAz
NGRkOTBlNTZhM2QzYjkzOGQxOWJkNGYwYTJhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSVAuY3BwCkBAIC0wLDAgKzEsNzAxIEBACisvLyBDb3B5
cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5o
IgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
VVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKKy8vIENvbnZlcnRzIG9uZSBvZiB0
aGUgY2hhcmFjdGVyIHR5cGVzIHRoYXQgcmVwcmVzZW50IGEgbnVtZXJpY2FsIGJhc2UgdG8gdGhl
CisvLyBjb3JyZXNwb25kaW5nIGJhc2UuCitzdGF0aWMgaW5saW5lIGludCBiYXNlRm9yVHlwZShV
UkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFVSTENoYXJhY3RlclR5cGVzOjpIZXhhZGVjaW1hbENoYXJhY3RlcjoK
KyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgVVJMQ2hhcmFjdGVyVHlwZXM6OkRlY2ltYWxD
aGFyYWN0ZXI6CisgICAgICAgIHJldHVybiAxMDsKKyAgICBjYXNlIFVSTENoYXJhY3RlclR5cGVz
OjpPY3RhbENoYXJhY3RlcjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBDb252ZXJ0cyBhbiBJUHY0IGNvbXBvbmVudCB0
byBhIDMyLWJpdCBudW1iZXIsIHdoaWxlIGNoZWNraW5nIGZvciBvdmVyZmxvdy4KKy8vCisvLyBQ
b3NzaWJsZSByZXR1cm4gdmFsdWVzOgorLy8gLSBJUFY0ICAgIC0gVGhlIG51bWJlciB3YXMgdmFs
aWQsIGFuZCBkaWQgbm90IG92ZXJmbG93LgorLy8gLSBCUk9LRU4gIC0gVGhlIGlucHV0IHdhcyBu
dW1lcmljLCBidXQgdG9vIGxhcmdlIGZvciBhIDMyLWJpdCBmaWVsZC4KKy8vIC0gTkVVVFJBTCAt
IElucHV0IHdhcyBub3QgbnVtZXJpYy4KKy8vCisvLyBUaGUgaW5wdXQgaXMgYXNzdW1lZCB0byBi
ZSBBU0NJSS4gRmluZElQdjRDb21wb25lbnRzIHNob3VsZCBoYXZlIHN0cmlwcGVkCisvLyBvdXQg
YW55IGlucHV0IHRoYXQgaXMgZ3JlYXRlciB0aGFuIDcgYml0cy4gVGhlIGNvbXBvbmVudHMgYXJl
IGFzc3VtZWQKKy8vIHRvIGJlIG5vbi1lbXB0eS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+CitDYW5vbkhvc3RJbmZvOjpGYW1pbHkgSVB2NENvbXBvbmVudFRvTnVtYmVyKGNvbnN0
IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50LCB1aW50
MzJfdCogbnVtYmVyKQoreworICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGJhc2UKKyAgICBVUkxDaGFy
YWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgYmFzZTsKKyAgICBpbnQgYmFzZVByZWZpeExlbmd0
aCA9IDA7IC8vIFNpemUgb2YgdGhlIHByZWZpeCBmb3IgdGhpcyBiYXNlLgorICAgIGlmIChzcGVj
W2NvbXBvbmVudC5iZWdpbigpXSA9PSAnMCcpIHsKKyAgICAgICAgLy8gRWl0aGVyIGhleCBvciBk
ZWMsIG9yIGEgc3RhbmRhbG9uZSB6ZXJvLgorICAgICAgICBpZiAoY29tcG9uZW50Lmxlbmd0aCgp
ID09IDEpIHsKKyAgICAgICAgICAgIGJhc2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6RGVjaW1hbENo
YXJhY3RlcjsKKyAgICAgICAgfSBlbHNlIGlmIChzcGVjW2NvbXBvbmVudC5iZWdpbigpICsgMV0g
PT0gJ1gnIHx8IHNwZWNbY29tcG9uZW50LmJlZ2luKCkgKyAxXSA9PSAneCcpIHsKKyAgICAgICAg
ICAgIGJhc2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6SGV4YWRlY2ltYWxDaGFyYWN0ZXI7CisgICAg
ICAgICAgICBiYXNlUHJlZml4TGVuZ3RoID0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGJhc2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6T2N0YWxDaGFyYWN0ZXI7CisgICAgICAgICAg
ICBiYXNlUHJlZml4TGVuZ3RoID0gMTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBi
YXNlID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkRlY2ltYWxDaGFyYWN0ZXI7CisKKyAgICAvLyBFeHRl
bmQgdGhlIHByZWZpeCB0byBjb25zdW1lIGFsbCBsZWFkaW5nIHplcm9zLgorICAgIHdoaWxlIChi
YXNlUHJlZml4TGVuZ3RoIDwgY29tcG9uZW50Lmxlbmd0aCgpICYmIHNwZWNbY29tcG9uZW50LmJl
Z2luKCkgKyBiYXNlUHJlZml4TGVuZ3RoXSA9PSAnMCcpCisgICAgICAgICsrYmFzZVByZWZpeExl
bmd0aDsKKworICAgIC8vIFB1dCB0aGUgY29tcG9uZW50LCBtaW51cyBhbnkgYmFzZSBwcmVmaXgs
IGludG8gYSB6ZXJvLXRlcm1pbmF0ZWQgYnVmZmVyIHNvCisgICAgLy8gd2UgY2FuIGNhbGwgdGhl
IHN0YW5kYXJkIGxpYnJhcnkuIEJlY2F1c2UgbGVhZGluZyB6ZXJvcyBoYXZlIGFscmVhZHkgYmVl
bgorICAgIC8vIGRpc2NhcmRlZCwgZmlsbGluZyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBndWFyYW50
ZWVkIHRvIHRyaWdnZXIgdGhlIDMyLWJpdAorICAgIC8vIG92ZXJmbG93IGNoZWNrLgorICAgIGNv
bnN0IGludCBrTWF4Q29tcG9uZW50TGVuID0gMTY7CisgICAgY2hhciBidWZba01heENvbXBvbmVu
dExlbiArIDFdOyAvLyBkaWdpdHMgKyAnXDAnCisgICAgaW50IGRlc3RJID0gMDsKKyAgICBmb3Ig
KGludCBpID0gY29tcG9uZW50LmJlZ2luKCkgKyBiYXNlUHJlZml4TGVuZ3RoOyBpIDwgY29tcG9u
ZW50LmVuZCgpOyBpKyspIHsKKyAgICAgICAgLy8gV2Uga25vdyB0aGUgaW5wdXQgaXMgNy1iaXQs
IHNvIGNvbnZlcnQgdG8gbmFycm93IChpZiB0aGlzIGlzIHRoZSB3aWRlCisgICAgICAgIC8vIHZl
cnNpb24gb2YgdGhlIHRlbXBsYXRlKSBieSBjYXN0aW5nLgorICAgICAgICBjaGFyIGlucHV0ID0g
c3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSk7CisKKyAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0
aGlzIGNoYXJhY3RlciBpcyBPSyBmb3IgdGhlIGdpdmVuIGJhc2UuCisgICAgICAgIGlmICghVVJM
Q2hhcmFjdGVyVHlwZXM6OmlzQ2hhcmFjdGVyT2ZUeXBlKGlucHV0LCBiYXNlKSkKKyAgICAgICAg
ICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpORVVUUkFMOworCisgICAgICAgIC8vIEZpbGwgdGhl
IGJ1ZmZlciwgaWYgdGhlcmUncyBzcGFjZSByZW1haW5pbmcuIFRoaXMgY2hlY2sgYWxsb3dzIHVz
IHRvCisgICAgICAgIC8vIHZlcmlmeSB0aGF0IGFsbCBjaGFyYWN0ZXJzIGFyZSBudW1lcmljLCBl
dmVuIHRob3NlIHRoYXQgZG9uJ3QgZml0LgorICAgICAgICBpZiAoZGVzdEkgPCBrTWF4Q29tcG9u
ZW50TGVuKQorICAgICAgICAgICAgYnVmW2Rlc3RJKytdID0gaW5wdXQ7CisgICAgfQorCisgICAg
YnVmW2Rlc3RJXSA9ICdcMCc7CisKKyAgICAvLyBVc2UgdGhlIDY0LWJpdCBzdHJ0b2kgc28gd2Ug
Z2V0IGEgYmlnIG51bWJlciAobm8gaGV4LCBkZWNpbWFsLCBvciBvY3RhbAorICAgIC8vIG51bWJl
ciBjYW4gb3ZlcmZsb3cgYSA2NC1iaXQgbnVtYmVyIGluIDw9IDE2IGNoYXJhY3RlcnMpLgorICAg
IHVpbnQ2NF90IG51bSA9IF9zdHJ0b3VpNjQoYnVmLCAwLCBiYXNlRm9yVHlwZShiYXNlKSk7CisK
KyAgICAvLyBDaGVjayBmb3IgMzItYml0IG92ZXJmbG93LgorICAgIGlmIChudW0gPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBDYW5vbkhvc3RJ
bmZvOjpCUk9LRU47CisKKyAgICAvLyBObyBvdmVyZmxvdy4gU3VjY2VzcyEKKyAgICAqbnVtYmVy
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bSk7CisgICAgcmV0dXJuIENhbm9uSG9zdEluZm86
OklQVjQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVD
SEFSPgorYm9vbCBEb0ZpbmRJUHY0Q29tcG9uZW50cyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVj
LCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTENvbXBvbmVudCBjb21wb25lbnRzWzRdKQor
eworICAgIGlmICghaG9zdC5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGludCBjdXJyZW50Q29tcG9uZW50ID0gMDsgLy8gSW5kZXggb2YgdGhlIGNvbXBvbmVudCB3
ZSdyZSB3b3JraW5nIG9uLgorICAgIGludCBjdXJyZW50Q29tcG9uZW50QmVnaW4gPSBob3N0LmJl
Z2luKCk7IC8vIFN0YXJ0IG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudC4KKyAgICBpbnQgZW5kID0g
aG9zdC5lbmQoKTsKKyAgICBmb3IgKGludCBpID0gaG9zdC5iZWdpbigpOyAvKiBub3RoaW5nICov
OyArK2kpIHsKKyAgICAgICAgaWYgKGkgPj0gZW5kIHx8IHNwZWNbaV0gPT0gJy4nKSB7CisgICAg
ICAgICAgICAvLyBGb3VuZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudC4KKyAgICAg
ICAgICAgIGludCBjb21wb25lbnRMZW5ndGggPSBpIC0gY3VycmVudENvbXBvbmVudEJlZ2luOwor
ICAgICAgICAgICAgY29tcG9uZW50c1tjdXJyZW50Q29tcG9uZW50XSA9IFVSTENvbXBvbmVudChj
dXJyZW50Q29tcG9uZW50QmVnaW4sIGNvbXBvbmVudExlbmd0aCk7CisKKyAgICAgICAgICAgIC8v
IFRoZSBuZXh0IGNvbXBvbmVudCBzdGFydHMgYWZ0ZXIgdGhlIGRvdC4KKyAgICAgICAgICAgIGN1
cnJlbnRDb21wb25lbnRCZWdpbiA9IGkgKyAxOworICAgICAgICAgICAgY3VycmVudENvbXBvbmVu
dCsrOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBlbXB0eSBjb21wb25lbnRzICh0d28g
ZG90cyBpbiBhIHJvdyksIGV4Y2VwdCB3ZSBtYXkKKyAgICAgICAgICAgIC8vIGFsbG93IGFuIGVt
cHR5IGNvbXBvbmVudCBhdCB0aGUgZW5kICh0aGlzIHdvdWxkIGluZGljYXRlIHRoYXQgdGhlCisg
ICAgICAgICAgICAvLyBpbnB1dCBlbmRzIGluIGEgZG90KS4gV2UgYWxzbyB3YW50IHRvIGVycm9y
IGlmIHRoZSBjb21wb25lbnQgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5IGFuZCBpdCdzIHRoZSBv
bmx5IGNvbXBvbmVudCAoY3VycmVudENvbXBvbmVudCA9PSAxKS4KKyAgICAgICAgICAgIGlmICgh
Y29tcG9uZW50TGVuZ3RoICYmIChpIDwgZW5kIHx8IGN1cnJlbnRDb21wb25lbnQgPT0gMSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoaSA+PSBlbmQp
CisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIEVuZCBvZiB0aGUgaW5wdXQuCisKKyAgICAgICAg
ICAgIGlmIChjdXJyZW50Q29tcG9uZW50ID09IDQpIHsKKyAgICAgICAgICAgICAgICAvLyBBbnl0
aGluZyBlbHNlIGFmdGVyIHRoZSA0dGggY29tcG9uZW50IGlzIGFuIGVycm9yIHVubGVzcyBpdCBp
cyBhCisgICAgICAgICAgICAgICAgLy8gZG90IHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHRyZWF0
ZWQgYXMgdGhlIGVuZCBvZiBpbnB1dC4KKyAgICAgICAgICAgICAgICBpZiAoc3BlY1tpXSA9PSAn
LicgJiYgaSArIDEgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
c3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pID49IDB4ODAgfHwgIVVSTENoYXJhY3RlclR5cGVz
Ojppc0lQdjRDaGFyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbaV0pKSkgeworICAg
ICAgICAgICAgLy8gSW52YWxpZCBjaGFyYWN0ZXIgZm9yIGFuIElQdjQgYWRkcmVzcy4KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbGwgaW4g
YW55IHVudXNlZCBjb21wb25lbnRzLgorICAgIHdoaWxlIChjdXJyZW50Q29tcG9uZW50IDwgNCkK
KyAgICAgICAgY29tcG9uZW50c1tjdXJyZW50Q29tcG9uZW50KytdID0gVVJMQ29tcG9uZW50KCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIEZpbmRJUHY0Q29tcG9uZW50cyhj
b25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTENvbXBvbmVudCBj
b21wb25lbnRzWzRdKQoreworICAgIHJldHVybiBEb0ZpbmRJUHY0Q29tcG9uZW50czxjaGFyLCB1
bnNpZ25lZCBjaGFyPihzcGVjLCBob3N0LCBjb21wb25lbnRzKTsKK30KKworc3RhdGljIGJvb2wg
RmluZElQdjRDb21wb25lbnRzKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IGhvc3QsIFVSTENvbXBvbmVudCBjb21wb25lbnRzWzRdKQoreworICAgIHJldHVybiBEb0ZpbmRJ
UHY0Q29tcG9uZW50czxVQ2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIGNvbXBvbmVudHMpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorQ2Fub25Ib3N0SW5mbzo6RmFtaWx5IERvSVB2NEFk
ZHJlc3NUb051bWJlcihjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzc1s0
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBpcHY0
Q29tcG9uZW50c0NvdW50KQoreworICAgIC8vIFRoZSBpZGVudGlmaWVkIGNvbXBvbmVudHMuIE5v
dCBhbGwgbWF5IGV4aXN0LgorICAgIFVSTENvbXBvbmVudCBjb21wb25lbnRzWzRdOworICAgIGlm
ICghRmluZElQdjRDb21wb25lbnRzKHNwZWMsIGhvc3QsIGNvbXBvbmVudHMpKQorICAgICAgICBy
ZXR1cm4gQ2Fub25Ib3N0SW5mbzo6TkVVVFJBTDsKKworICAgIC8vIENvbnZlcnQgZXhpc3Rpbmcg
Y29tcG9uZW50cyB0byBkaWdpdHMuIFZhbHVlcyB1cCB0bworICAgIC8vIHxleGlzdGluZ0NvbXBv
bmVudHN8IHdpbGwgYmUgdmFsaWQuCisgICAgdWludDMyX3QgY29tcG9uZW50VmFsdWVzWzRdOwor
ICAgIGludCBleGlzdGluZ0NvbXBvbmVudHMgPSAwOworCisgICAgLy8gU2V0IHRvIHRydWUgaWYg
b25lIG9yIG1vcmUgY29tcG9uZW50cyBhcmUgQlJPS0VOLiBCUk9LRU4gaXMgb25seQorICAgIC8v
IHJldHVybmVkIGlmIGFsbCBjb21wb25lbnRzIGFyZSBJUFY0IG9yIEJST0tFTiwgc28sIGZvciBl
eGFtcGxlLAorICAgIC8vIDEyMzQ1Njc4OTEyMzQ1LmRlIHJldHVybnMgTkVVVFJBTCByYXRoZXIg
dGhhbiBicm9rZW4uCisgICAgYm9vbCBicm9rZW4gPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDQ7IGkrKykgeworICAgICAgICBpZiAoY29tcG9uZW50c1tpXS5sZW5ndGgoKSA8PSAw
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENhbm9uSG9zdEluZm86OkZhbWlseSBm
YW1pbHkgPSBJUHY0Q29tcG9uZW50VG9OdW1iZXIoc3BlYywgY29tcG9uZW50c1tpXSwgJmNvbXBv
bmVudFZhbHVlc1tleGlzdGluZ0NvbXBvbmVudHNdKTsKKworICAgICAgICBpZiAoZmFtaWx5ID09
IENhbm9uSG9zdEluZm86OkJST0tFTikKKyAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKGZhbWlseSAhPSBDYW5vbkhvc3RJbmZvOjpJUFY0KSB7CisgICAgICAgICAg
ICAvLyBTdG9wIGlmIHdlIGhpdCBhIG5vbi1CUk9LRU4gaW52YWxpZCBub24tZW1wdHkgY29tcG9u
ZW50LgorICAgICAgICAgICAgcmV0dXJuIGZhbWlseTsKKyAgICAgICAgfQorCisgICAgICAgIGV4
aXN0aW5nQ29tcG9uZW50cysrOworICAgIH0KKworICAgIGlmIChicm9rZW4pCisgICAgICAgIHJl
dHVybiBDYW5vbkhvc3RJbmZvOjpCUk9LRU47CisKKyAgICAvLyBVc2UgdGhhdCBzZXF1ZW5jZSBv
ZiBudW1iZXJzIHRvIGZpbGwgb3V0IHRoZSA0LWNvbXBvbmVudCBJUCBhZGRyZXNzLgorCisgICAg
Ly8gRmlyc3QsIHByb2Nlc3MgYWxsIGNvbXBvbmVudHMgYnV0IHRoZSBsYXN0LCB3aGlsZSBtYWtp
bmcgc3VyZSBlYWNoIGZpdHMKKyAgICAvLyB3aXRoaW4gYW4gOC1iaXQgZmllbGQuCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBleGlzdGluZ0NvbXBvbmVudHMgLSAxOyBpKyspIHsKKyAgICAgICAg
aWYgKGNvbXBvbmVudFZhbHVlc1tpXSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1h
eCgpKQorICAgICAgICAgICAgcmV0dXJuIENhbm9uSG9zdEluZm86OkJST0tFTjsKKyAgICAgICAg
YWRkcmVzc1tpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbXBvbmVudFZhbHVlc1tp
XSk7CisgICAgfQorCisgICAgLy8gTmV4dCwgY29uc3VtZSB0aGUgbGFzdCBjb21wb25lbnQgdG8g
ZmlsbCBpbiB0aGUgcmVtYWluaW5nIGJ5dGVzLgorICAgIHVpbnQzMl90IGxhc3RWYWx1ZSA9IGNv
bXBvbmVudFZhbHVlc1tleGlzdGluZ0NvbXBvbmVudHMgLSAxXTsKKyAgICBmb3IgKGludCBpID0g
MzsgaSA+PSBleGlzdGluZ0NvbXBvbmVudHMgLSAxOyBpLS0pIHsKKyAgICAgICAgYWRkcmVzc1tp
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGxhc3RWYWx1ZSk7CisgICAgICAgIGxhc3RW
YWx1ZSA+Pj0gODsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbGFzdCBjb21wb25lbnQgaGFzIHJl
c2lkdWFsIGJpdHMsIHJlcG9ydCBvdmVyZmxvdy4KKyAgICBpZiAobGFzdFZhbHVlKQorICAgICAg
ICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOworCisgICAgLy8gVGVsbCB0aGUgY2FsbGVy
IGhvdyBtYW55IGNvbXBvbmVudHMgd2Ugc2F3LgorICAgICppcHY0Q29tcG9uZW50c0NvdW50ID0g
ZXhpc3RpbmdDb21wb25lbnRzOworCisgICAgLy8gU3VjY2VzcyEKKyAgICByZXR1cm4gQ2Fub25I
b3N0SW5mbzo6SVBWNDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZElQdjRBZGRyZXNz
KGNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkcmVzc1s0XSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
Cit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgY2hhciBidWZm
ZXJbMTZdOworICAgICAgICBfaXRvYV9zKGFkZHJlc3NbaV0sIGJ1ZmZlciwgMTApOworCisgICAg
ICAgIGZvciAoaW50IGNoID0gMDsgYnVmZmVyW2NoXTsgY2grKykKKyAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoYnVmZmVyW2NoXSk7CisKKyAgICAgICAgaWYgKGkgIT0gMykKKyAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoJy4nKTsKKyAgICB9Cit9CisKKy8vIFJldHVybiB0cnVlIGlmIHdlJ3Zl
IG1hZGUgYSBmaW5hbCBJUFY0L0JST0tFTiBkZWNpc2lvbiwgZmFsc2UgaWYgdGhlIHJlc3VsdAor
Ly8gaXMgTkVVVFJBTCwgYW5kIHdlIGNvdWxkIHVzZSBhIHNlY29uZCBvcGluaW9uLgordGVtcGxh
dGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvQ2Fub25pY2FsaXplSVB2
NEFkZHJlc3MoY29uc3QgQ0hBUiogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ2Fub25Ib3N0SW5mbyogaG9zdEluZm8pCit7CisgICAgaG9zdEluZm8tPmZhbWlseSA9IERv
SVB2NEFkZHJlc3NUb051bWJlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWMsIGhvc3QsIGhvc3RJbmZvLT5hZGRyZXNzLCAmaG9zdEluZm8tPmlwdjRD
b21wb25lbnRzQ291bnQpOworCisgICAgc3dpdGNoIChob3N0SW5mby0+ZmFtaWx5KSB7CisgICAg
Y2FzZSBDYW5vbkhvc3RJbmZvOjpJUFY0OgorICAgICAgICAvLyBEZWZpbml0ZWx5IGFuIElQdjQg
YWRkcmVzcy4KKyAgICAgICAgaG9zdEluZm8tPm91cHV0SG9zdC5zZXRCZWdpbihvdXRwdXQubGVu
Z3RoKCkpOworICAgICAgICBhcHBlbmRJUHY0QWRkcmVzcyhob3N0SW5mby0+YWRkcmVzcywgb3V0
cHV0KTsKKyAgICAgICAgaG9zdEluZm8tPm91cHV0SG9zdC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0
aCgpIC0gaG9zdEluZm8tPm91cHV0SG9zdC5iZWdpbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBDYW5vbkhvc3RJbmZvOjpCUk9LRU46CisgICAgICAgIC8vIERlZmluaXRlbHkg
YnJva2VuLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBD
b3VsZCBiZSBJUHY2IG9yIGEgaG9zdG5hbWUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKKy8vIEhlbHBlciBjbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgbWFpbiBjb21wb25lbnRz
IG9mIGFuIElQdjYgaW5wdXQgc3RyaW5nLgorLy8gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMg
dG8gdW5kZXJzdGFuZCBob3cgaXQgYnJlYWtzIHVwIGFuIGlucHV0IHN0cmluZzoKKy8vCisvLyBb
RXhhbXBsZSAxXTogaW5wdXQgPSAiWzo6YWE6YmJdIgorLy8gID09PiBudW1IZXhDb21wb25lbnRz
ID0gMgorLy8gID09PiBoZXhDb21wb25lbnRzWzBdID0gQ29tcG9uZW50KDMsMikgImFhIgorLy8g
ID09PiBoZXhDb21wb25lbnRzWzFdID0gQ29tcG9uZW50KDYsMikgImJiIgorLy8gID09PiBpbmRl
eE9mQ29udHJhY3Rpb24gPSAwCisvLyAgPT0+IGlwdjRDb21wb25lbnQgPSBDb21wb25lbnQoMCwg
LTEpCisvLworLy8gW0V4YW1wbGUgMl06IGlucHV0ID0gIlsxOjI6OjM6NDo1XSIKKy8vICA9PT4g
bnVtSGV4Q29tcG9uZW50cyA9IDUKKy8vICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVu
dCgxLDEpICIxIgorLy8gID09PiBoZXhDb21wb25lbnRzWzFdID0gQ29tcG9uZW50KDMsMSkgIjIi
CisvLyAgPT0+IGhleENvbXBvbmVudHNbMl0gPSBDb21wb25lbnQoNiwxKSAiMyIKKy8vICA9PT4g
aGV4Q29tcG9uZW50c1szXSA9IENvbXBvbmVudCg4LDEpICI0IgorLy8gID09PiBoZXhDb21wb25l
bnRzWzRdID0gQ29tcG9uZW50KDEwLDEpICI1IgorLy8gID09PiBpbmRleE9mQ29udHJhY3Rpb24g
PSAyCisvLyAgPT0+IGlwdjRDb21wb25lbnQgPSBDb21wb25lbnQoMCwgLTEpCisvLworLy8gW0V4
YW1wbGUgM106IGlucHV0ID0gIls6OmZmZmY6MTkyLjE2OC4wLjFdIgorLy8gID09PiBudW1IZXhD
b21wb25lbnRzID0gMQorLy8gID09PiBoZXhDb21wb25lbnRzWzBdID0gQ29tcG9uZW50KDMsNCkg
ImZmZmYiCisvLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDAKKy8vICA9PT4gaXB2NENvbXBv
bmVudCA9IENvbXBvbmVudCg4LCAxMSkgIjE5Mi4xNjguMC4xIgorLy8KKy8vIFtFeGFtcGxlIDRd
OiBpbnB1dCA9ICJbMTo6XSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9IDEKKy8vICA9PT4g
aGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgxLDEpICIxIgorLy8gID09PiBpbmRleE9mQ29u
dHJhY3Rpb24gPSAxCisvLyAgPT0+IGlwdjRDb21wb25lbnQgPSBDb21wb25lbnQoMCwgLTEpCisv
LworLy8gW0V4YW1wbGUgNV06IGlucHV0ID0gIls6OjE5Mi4xNjguMC4xXSIKKy8vICA9PT4gbnVt
SGV4Q29tcG9uZW50cyA9IDAKKy8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9uID0gMAorLy8gID09
PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDgsIDExKSAiMTkyLjE2OC4wLjEiCisvLworc3Ry
dWN0IElQdjZQYXJzZWQgeworICAgIC8vIFplcm8tb3V0IHRoZSBwYXJzZSBpbmZvcm1hdGlvbi4K
KyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG51bUhleENvbXBvbmVudHMgPSAwOwor
ICAgICAgICBpbmRleE9mQ29udHJhY3Rpb24gPSAtMTsKKyAgICAgICAgaXB2NENvbXBvbmVudC5y
ZXNldCgpOworICAgIH0KKworICAgIC8vIFRoZXJlIGNhbiBiZSB1cCB0byA4IGhleCBjb21wb25l
bnRzIChjb2xvbiBzZXBhcmF0ZWQpIGluIHRoZSBsaXRlcmFsLgorICAgIFVSTENvbXBvbmVudCBo
ZXhDb21wb25lbnRzWzhdOworCisgICAgLy8gVGhlIGNvdW50IG9mIGhleCBjb21wb25lbnRzIHBy
ZXNlbnQuIFJhbmdlcyBmcm9tIFswLDhdLgorICAgIGludCBudW1IZXhDb21wb25lbnRzOworCisg
ICAgLy8gVGhlIGluZGV4IG9mIHRoZSBoZXggY29tcG9uZW50IHRoYXQgdGhlICI6OiIgY29udHJh
Y3Rpb24gcHJlY2VkZXMsIG9yCisgICAgLy8gLTEgaWYgdGhlcmUgaXMgbm8gY29udHJhY3Rpb24u
CisgICAgaW50IGluZGV4T2ZDb250cmFjdGlvbjsKKworICAgIC8vIFRoZSByYW5nZSBvZiBjaGFy
YWN0ZXJzIHdoaWNoIGFyZSBhbiBJUHY0IGxpdGVyYWwuCisgICAgVVJMQ29tcG9uZW50IGlwdjRD
b21wb25lbnQ7Cit9OworCisvLyBQYXJzZSB0aGUgSVB2NiBpbnB1dCBzdHJpbmcuIElmIHBhcnNp
bmcgc3VjY2VlZGVkIHJldHVybnMgdHJ1ZSBhbmQgZmlsbHMKKy8vIHxwYXJzZWR8IHdpdGggdGhl
IGluZm9ybWF0aW9uLiBJZiBwYXJzaW5nIGZhaWxlZCAoYmVjYXVzZSB0aGUgaW5wdXQgaXMKKy8v
IGludmFsaWQpIHJldHVybnMgZmFsc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFt
ZSBVQ0hBUj4KK2Jvb2wgRG9QYXJzZUlQdjYoY29uc3QgQ0hBUiogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBob3N0LCBJUHY2UGFyc2VkKiBwYXJzZWQpCit7CisgICAgLy8gWmVyby1vdXQgdGhl
IGluZm8uCisgICAgcGFyc2VkLT5yZXNldCgpOworCisgICAgaWYgKCFob3N0LmlzTm9uRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGluZGV4IGZvciBzdGFydCBh
bmQgZW5kIG9mIGFkZHJlc3MgcmFuZ2UgKG5vIGJyYWNrZXRzKS4KKyAgICBpbnQgYmVnaW4gPSBo
b3N0LmJlZ2luKCk7CisgICAgaW50IGVuZCA9IGhvc3QuZW5kKCk7CisKKyAgICBpbnQgY3VycmVu
dENvbXBvbmVudEJlZ2luID0gYmVnaW47IC8vIFN0YXJ0IG9mIHRoZSBjdXJyZW50IGNvbXBvbmVu
dC4KKworICAgIC8vIFNjYW4gdGhyb3VnaCB0aGUgaW5wdXQsIHNlYXJjaGluZyBmb3IgaGV4IGNv
bXBvbmVudHMsICI6OiIgY29udHJhY3Rpb25zLAorICAgIC8vIGFuZCBJUHY0IGNvbXBvbmVudHMu
CisgICAgZm9yIChpbnQgaSA9IGJlZ2luOyAvKiBpIDw9IGVuZCAqLzsgaSsrKSB7CisgICAgICAg
IGJvb2wgaXNDb2xvbiA9IHNwZWNbaV0gPT0gJzonOworICAgICAgICBib29sIGlzQ29udHJhY3Rp
b24gPSBpc0NvbG9uICYmIGkgPCBlbmQgLSAxICYmIHNwZWNbaSArIDFdID09ICc6JzsKKworICAg
ICAgICAvLyBXZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50IGlmIHdl
IGVuY291bnRlciBhIGNvbG9uCisgICAgICAgIC8vIChzZXBhcmF0b3IgYmV0d2VlbiBoZXggY29t
cG9uZW50cywgb3Igc3RhcnQgb2YgYSBjb250cmFjdGlvbiksIG9yIGVuZCBvZgorICAgICAgICAv
LyBpbnB1dC4KKyAgICAgICAgaWYgKGlzQ29sb24gfHwgaSA9PSBlbmQpIHsKKyAgICAgICAgICAg
IGludCBjb21wb25lbnRMZW5ndGggPSBpIC0gY3VycmVudENvbXBvbmVudEJlZ2luOworCisgICAg
ICAgICAgICAvLyBBIGNvbXBvbmVudCBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuIDQgaGV4IGRp
Z2l0cy4KKyAgICAgICAgICAgIGlmIChjb21wb25lbnRMZW5ndGggPiA0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZW1wdHkgY29t
cG9uZW50cy4KKyAgICAgICAgICAgIGlmICghY29tcG9uZW50TGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGV4Y2VwdGlvbiBpcyB3aGVuIGNvbnRyYWN0aW9ucyBhcHBlYXIgYXQgYmVn
aW5uaW5nIG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIGlucHV0IG9yIGF0IHRoZSBlbmQgb2Yg
dGhlIGlucHV0LgorICAgICAgICAgICAgICAgIGlmICghKChpc0NvbnRyYWN0aW9uICYmIGkgPT0g
YmVnaW4pIHx8IChpID09IGVuZCAmJiBwYXJzZWQtPmluZGV4T2ZDb250cmFjdGlvbiA9PSBwYXJz
ZWQtPm51bUhleENvbXBvbmVudHMpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgdGhlIGhleCBjb21wb25lbnQg
d2UganVzdCBmb3VuZCB0byBydW5uaW5nIGxpc3QuCisgICAgICAgICAgICBpZiAoY29tcG9uZW50
TGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIC8vIENhbid0IGhhdmUgbW9yZSB0aGFuIDgg
Y29tcG9uZW50cyEKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkLT5udW1IZXhDb21wb25lbnRz
ID49IDgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIHBhcnNlZC0+aGV4Q29tcG9uZW50c1twYXJzZWQtPm51bUhleENvbXBvbmVudHMrK10gPQor
ICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudChjdXJyZW50Q29tcG9uZW50QmVnaW4sIGNvbXBv
bmVudExlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA9
PSBlbmQpCisgICAgICAgICAgICBicmVhazsgLy8gUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbnB1
dCwgRE9ORS4KKworICAgICAgICAvLyBXZSBmb3VuZCBhICI6OiIgY29udHJhY3Rpb24uCisgICAg
ICAgIGlmIChpc0NvbnRyYWN0aW9uKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBjYW4gYmUgYXQg
bW9zdCBvbmUgY29udHJhY3Rpb24gaW4gdGhlIGxpdGVyYWwuCisgICAgICAgICAgICBpZiAocGFy
c2VkLT5pbmRleE9mQ29udHJhY3Rpb24gIT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcGFyc2VkLT5pbmRleE9mQ29udHJhY3Rpb24gPSBwYXJzZWQtPm51
bUhleENvbXBvbmVudHM7CisgICAgICAgICAgICArK2k7IC8vIENvbnN1bWUgdGhlIGNvbG9uIHdl
IHBlZWtlZC4KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0NvbG9uKSB7CisgICAgICAgICAg
ICAvLyBDb2xvbnMgYXJlIHNlcGFyYXRvcnMgYmV0d2VlbiBjb21wb25lbnRzLCBrZWVwIHRyYWNr
IG9mIHdoZXJlIHRoZQorICAgICAgICAgICAgLy8gY3VycmVudCBjb21wb25lbnQgc3RhcnRlZCAo
YWZ0ZXIgdGhpcyBjb2xvbikuCisgICAgICAgICAgICBjdXJyZW50Q29tcG9uZW50QmVnaW4gPSBp
ICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hB
Uj4oc3BlY1tpXSkgPj0gMHg4MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5v
dCBBU0NJSS4KKworICAgICAgICAgICAgaWYgKCFVUkxDaGFyYWN0ZXJUeXBlczo6aXNIZXhDaGFy
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbaV0pKSkgeworICAgICAgICAgICAgICAg
IC8vIFJlZ3VsYXIgY29tcG9uZW50cyBhcmUgaGV4IG51bWJlcnMuIEl0IGlzIGFsc28gcG9zc2li
bGUgZm9yCisgICAgICAgICAgICAgICAgLy8gYSBjb21wb25lbnQgdG8gYmUgYW4gSVB2NCBhZGRy
ZXNzIGluIGRvdHRlZCBmb3JtLgorICAgICAgICAgICAgICAgIGlmIChVUkxDaGFyYWN0ZXJUeXBl
czo6aXNJUHY0Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gU2luY2UgSVB2NCBhZGRyZXNzIGNhbiBvbmx5IGFwcGVhciBh
dCB0aGUgZW5kLCBhc3N1bWUgdGhlIHJlc3QKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhl
IHN0cmluZyBpcyBhbiBJUHY0IGFkZHJlc3MuIChXZSB3aWxsIHBhcnNlIHRoaXMgc2VwYXJhdGVs
eQorICAgICAgICAgICAgICAgICAgICAvLyBsYXRlcikuCisgICAgICAgICAgICAgICAgICAgIHBh
cnNlZC0+aXB2NENvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGN1cnJlbnRDb21w
b25lbnRCZWdpbiwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRoZSBjaGFyYWN0ZXIgd2FzIG5laXRoZXIgYSBo
ZXggZGlnaXQsIG5vciBhbiBJUHY0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gVmVyaWZpZXMgdGhlIHBhcnNlZCBJUHY2IGluZm9ybWF0aW9uLCBjaGVja2lu
ZyB0aGF0IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMKKy8vIGFkZCB1cCB0byB0aGUgcmlnaHQgbnVt
YmVyIG9mIGJpdHMgKGhleCBjb21wb25lbnRzIGFyZSAxNiBiaXRzLCB3aGlsZQorLy8gZW1iZWRk
ZWQgSVB2NCBmb3JtYXRzIGFyZSAzMiBiaXRzLCBhbmQgY29udHJhY3Rpb25zIGFyZSBwbGFjZWhv
bGRlcyBmb3IKKy8vIDE2IG9yIG1vcmUgYml0cykuIFJldHVybnMgdHJ1ZSBpZiBzaXplcyBtYXRj
aCB1cCwgZmFsc2Ugb3RoZXJ3aXNlLiBPbgorLy8gc3VjY2VzcyB3cml0ZXMgdGhlIGxlbmd0aCBv
ZiB0aGUgY29udHJhY3Rpb24gKGlmIGFueSkgdG8KKy8vIHxvdXROdW1CeXRlc09mQ29udHJhY3Rp
b258LgorYm9vbCBDaGVja0lQdjZDb21wb25lbnRzU2l6ZShjb25zdCBJUHY2UGFyc2VkJiBwYXJz
ZWQsIGludCogb3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9uKQoreworICAgIC8vIEVhY2ggZ3JvdXAg
b2YgZm91ciBoZXggZGlnaXRzIGNvbnRyaWJ1dGVzIDE2IGJpdHMuCisgICAgaW50IG51bUJ5dGVz
V2l0aG91dENvbnRyYWN0aW9uID0gcGFyc2VkLm51bUhleENvbXBvbmVudHMgKiAyOworCisgICAg
Ly8gSWYgYW4gSVB2NCBhZGRyZXNzIHdhcyBlbWJlZGRlZCBhdCB0aGUgZW5kLCBpdCBjb250cmli
dXRlcyAzMiBiaXRzLgorICAgIGlmIChwYXJzZWQuaXB2NENvbXBvbmVudC5pc1ZhbGlkKCkpCisg
ICAgICAgIG51bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uICs9IDQ7CisKKyAgICAvLyBJZiB0aGVy
ZSB3YXMgYSAiOjoiIGNvbnRyYWN0aW9uLCBpdHMgc2l6ZSBpcyBnb2luZyB0byBiZToKKyAgICAv
LyBNQVgoWzE2Yml0c10sIFsxMjhiaXRzXSAtIG51bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uKS4K
KyAgICBpbnQgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0gMDsKKyAgICBpZiAocGFyc2VkLmluZGV4
T2ZDb250cmFjdGlvbiAhPSAtMSkgeworICAgICAgICBudW1CeXRlc09mQ29udHJhY3Rpb24gPSAx
NiAtIG51bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uOworICAgICAgICBpZiAobnVtQnl0ZXNPZkNv
bnRyYWN0aW9uIDwgMikKKyAgICAgICAgICAgIG51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IDI7Cisg
ICAgfQorCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVycyBhZGQgdXAuCisgICAgaWYgKG51
bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uICsgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uICE9IDE2KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqb3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0g
bnVtQnl0ZXNPZkNvbnRyYWN0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb252ZXJ0
cyBhIGhleCBjb21vbmVudCBpbnRvIGEgbnVtYmVyLiBUaGlzIGNhbm5vdCBmYWlsIHNpbmNlIHRo
ZSBjYWxsZXIgaGFzCisvLyBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgZWFjaCBjaGFyYWN0ZXIgaW4g
dGhlIHN0cmluZyB3YXMgYSBoZXggZGlnaXQsIGFuZAorLy8gdGhhdCB0aGVyZSB3ZXJlIG5vIG1v
cmUgdGhhbiA0IGNoYXJhY3RlcnMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
dWludDE2X3QgSVB2NkhleENvbXBvbmVudFRvTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50KQoreworICAgIEFTU0VSVChjb21wb25l
bnQubGVuZ3RoKCkgPD0gNCk7CisKKyAgICAvLyBDb3B5IHRoZSBoZXggc3RyaW5nIGludG8gYSBD
LXN0cmluZy4KKyAgICBjaGFyIGJ1Zls1XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBv
bmVudC5sZW5ndGgoKTsgKytpKQorICAgICAgICBidWZbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihz
cGVjW2NvbXBvbmVudC5iZWdpbigpICsgaV0pOworICAgIGJ1Zltjb21wb25lbnQubGVuZ3RoKCld
ID0gJ1wwJzsKKworICAgIC8vIENvbnZlcnQgaXQgdG8gYSBudW1iZXIgKG92ZXJmbG93IGlzIG5v
dCBwb3NzaWJsZSwgc2luY2Ugd2l0aCA0IGhleAorICAgIC8vIGNoYXJhY3RlcnMgd2UgY2FuIGF0
IG1vc3QgaGF2ZSBhIDE2IGJpdCBudW1iZXIpLgorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
MTZfdD4oX3N0cnRvdWk2NChidWYsIDAsIDE2KSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIElQdjYg
YWRkcmVzcyB0byBhIDEyOC1iaXQgbnVtYmVyIChuZXR3b3JrIGJ5dGUgb3JkZXIpLCByZXR1cm5p
bmcKKy8vIHRydWUgb24gc3VjY2Vzcy4gRmFsc2UgbWVhbnMgdGhhdCB0aGUgaW5wdXQgd2FzIG5v
dCBhIHZhbGlkIElQdjYgYWRkcmVzcy4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1l
IFVDSEFSPgorYm9vbCBEb0lQdjZBZGRyZXNzVG9OdW1iZXIoY29uc3QgQ0hBUiogc3BlYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzc1sxNl0pCit7CisgICAg
Ly8gTWFrZSBzdXJlIHRoZSBjb21wb25lbnQgaXMgYm91bmRlZCBieSAnWycgYW5kICddJy4KKyAg
ICBpbnQgZW5kID0gaG9zdC5lbmQoKTsKKyAgICBpZiAoIWhvc3QuaXNOb25FbXB0eSgpIHx8IHNw
ZWNbaG9zdC5iZWdpbigpXSAhPSAnWycgfHwgc3BlY1tlbmQgLSAxXSAhPSAnXScpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEV4Y2x1ZGUgdGhlIHNxdWFyZSBicmFja2V0cy4KKyAg
ICBVUkxDb21wb25lbnQgaXB2NkNvbXBvbmVudChob3N0LmJlZ2luKCkgKyAxLCBob3N0Lmxlbmd0
aCgpIC0gMik7CisKKyAgICAvLyBQYXJzZSB0aGUgSVB2NiBhZGRyZXNzIC0tIGlkZW50aWZ5IHdo
ZXJlIGFsbCB0aGUgY29sb24gc2VwYXJhdGVkIGhleAorICAgIC8vIGNvbXBvbmVudHMgYXJlLCB0
aGUgIjo6IiBjb250cmFjdGlvbiwgYW5kIHRoZSBlbWJlZGRlZCBJUHY0IGFkZHJlc3MuCisgICAg
SVB2NlBhcnNlZCBpcHY2UGFyc2VkOworICAgIGlmICghRG9QYXJzZUlQdjY8Q0hBUiwgVUNIQVI+
KHNwZWMsIGlwdjZDb21wb25lbnQsICZpcHY2UGFyc2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gRG8gc29tZSBiYXNpYyBzaXplIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhhdCB0
aGUgYWRkcmVzcyBkb2Vzbid0CisgICAgLy8gc3BlY2lmeSBtb3JlIHRoYW4gMTI4IGJpdHMgb3Ig
ZmV3ZXIgdGhhbiAxMjggYml0cy4gVGhpcyBhbHNvIHJlc29sdmVzCisgICAgLy8gaG93IG1heSB6
ZXJvIGJ5dGVzIHRoZSAiOjoiIGNvbnRyYWN0aW9uIHJlcHJlc2VudHMuCisgICAgaW50IG51bUJ5
dGVzT2ZDb250cmFjdGlvbjsKKyAgICBpZiAoIUNoZWNrSVB2NkNvbXBvbmVudHNTaXplKGlwdjZQ
YXJzZWQsICZudW1CeXRlc09mQ29udHJhY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpbnQgY3VycmVudEluZGV4SW5BZGRyZXNzID0gMDsKKworICAgIC8vIExvb3AgdGhyb3Vn
aCBlYWNoIGhleCBjb21wb25lbnRzLCBhbmQgY29udHJhY3Rpb24gaW4gb3JkZXIuCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gaXB2NlBhcnNlZC5udW1IZXhDb21wb25lbnRzOyArK2kpIHsKKyAg
ICAgICAgLy8gQXBwZW5kIHRoZSBjb250cmFjdGlvbiBpZiBpdCBhcHBlYXJzIGJlZm9yZSB0aGlz
IGNvbXBvbmVudC4KKyAgICAgICAgaWYgKGkgPT0gaXB2NlBhcnNlZC5pbmRleE9mQ29udHJhY3Rp
b24pIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQnl0ZXNPZkNvbnRyYWN0
aW9uOyArK2opCisgICAgICAgICAgICAgICAgYWRkcmVzc1tjdXJyZW50SW5kZXhJbkFkZHJlc3Mr
K10gPSAwOworICAgICAgICB9CisgICAgICAgIC8vIEFwcGVuZCB0aGUgaGV4IGNvbXBvbmVudCdz
IHZhbHVlLgorICAgICAgICBpZiAoaSAhPSBpcHY2UGFyc2VkLm51bUhleENvbXBvbmVudHMpIHsK
KyAgICAgICAgICAgIC8vIEdldCB0aGUgMTYtYml0IHZhbHVlIGZvciB0aGlzIGhleCBjb21wb25l
bnQuCisgICAgICAgICAgICB1aW50MTZfdCBudW1iZXIgPSBJUHY2SGV4Q29tcG9uZW50VG9OdW1i
ZXI8Q0hBUj4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3BlYywgaXB2NlBhcnNlZC5oZXhDb21wb25lbnRzW2ldKTsKKyAgICAg
ICAgICAgIC8vIEFwcGVuZCB0byB8YWRkcmVzc3wsIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAg
ICAgICAgICAgIGFkZHJlc3NbY3VycmVudEluZGV4SW5BZGRyZXNzKytdID0gKG51bWJlciAmIDB4
RkYwMCkgPj4gODsKKyAgICAgICAgICAgIGFkZHJlc3NbY3VycmVudEluZGV4SW5BZGRyZXNzKytd
ID0gKG51bWJlciAmIDB4MDBGRik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB0aGVy
ZSB3YXMgYW4gSVB2NCBzZWN0aW9uLCBjb252ZXJ0IGl0IGludG8gYSAzMi1iaXQgbnVtYmVyIGFu
ZCBhcHBlbmQKKyAgICAvLyBpdCB0byB8YWRkcmVzc3wuCisgICAgaWYgKGlwdjZQYXJzZWQuaXB2
NENvbXBvbmVudC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQXBwZW5kIHRoZSAzMi1iaXQgbnVt
YmVyIHRvIHxhZGRyZXNzfC4KKyAgICAgICAgaW50IGlnbm9yZWRJUHY0Q29tcG9uZW50c0NvdW50
OworICAgICAgICBpZiAoQ2Fub25Ib3N0SW5mbzo6SVBWNCAhPQorICAgICAgICAgICAgRG9JUHY0
QWRkcmVzc1RvTnVtYmVyKHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXB2NlBhcnNlZC5pcHY0Q29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzc10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmlnbm9yZWRJUHY0Q29tcG9uZW50c0NvdW50KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gU2VhcmNo
ZXMgZm9yIHRoZSBsb25nZXN0IHNlcXVlbmNlIG9mIHplcm9zIGluIHxhZGRyZXNzfCwgYW5kIHdy
aXRlcyB0aGUKKy8vIHJhbmdlIGludG8gfGNvbnRyYWN0aW9uUmFuZ2V8LiBUaGUgcnVuIG9mIHpl
cm9zIG11c3QgYmUgYXQgbGVhc3QgMTYgYml0cywKKy8vIGFuZCBpZiB0aGVyZSBpcyBhIHRpZSB0
aGUgZmlyc3QgaXMgY2hvc2VuLgordm9pZCBDaG9vc2VJUHY2Q29udHJhY3Rpb25SYW5nZShjb25z
dCB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdLCBVUkxDb21wb25lbnQqIGNvbnRyYWN0aW9uUmFu
Z2UpCit7CisgICAgLy8gVGhlIGxvbmdlc3QgcnVuIG9mIHplcm9zIGluIHxhZGRyZXNzfCBzZWVu
IHNvIGZhci4KKyAgICBVUkxDb21wb25lbnQgbWF4UmFuZ2U7CisKKyAgICAvLyBUaGUgY3VycmVu
dCBydW4gb2YgemVyb3MgaW4gfGFkZHJlc3N8IGJlaW5nIGl0ZXJhdGVkIG92ZXIuCisgICAgVVJM
Q29tcG9uZW50IGN1cnJlbnRSYW5nZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkg
Kz0gMikgeworICAgICAgICAvLyBUZXN0IGZvciAxNiBiaXRzIHdvcnRoIG9mIHplcm8uCisgICAg
ICAgIGJvb2wgaXNaZXJvID0gKCFhZGRyZXNzW2ldICYmICFhZGRyZXNzW2kgKyAxXSk7CisKKyAg
ICAgICAgaWYgKGlzWmVybykgeworICAgICAgICAgICAgLy8gQWRkIHRoZSB6ZXJvIHRvIHRoZSBj
dXJyZW50IHJhbmdlIChvciBzdGFydCBhIG5ldyBvbmUpLgorICAgICAgICAgICAgaWYgKCFjdXJy
ZW50UmFuZ2UuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRSYW5nZSA9IFVSTENv
bXBvbmVudChpLCAwKTsKKyAgICAgICAgICAgIGN1cnJlbnRSYW5nZS5zZXRMZW5ndGgoY3VycmVu
dFJhbmdlLmxlbmd0aCgpICsgMik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlzWmVybyB8
fCBpID09IDE0KSB7CisgICAgICAgICAgICAvLyBKdXN0IGNvbXBsZXRlZCBhIHJ1biBvZiB6ZXJv
cy4gSWYgdGhlIHJ1biBpcyBncmVhdGVyIHRoYW4gMTYgYml0cywKKyAgICAgICAgICAgIC8vIGl0
IGlzIGEgY2FuZGlkYXRlIGZvciB0aGUgY29udHJhY3Rpb24uCisgICAgICAgICAgICBpZiAoY3Vy
cmVudFJhbmdlLmxlbmd0aCgpID4gMiAmJiBjdXJyZW50UmFuZ2UubGVuZ3RoKCkgPiBtYXhSYW5n
ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IGN1cnJlbnRSYW5nZTsKKwor
ICAgICAgICAgICAgY3VycmVudFJhbmdlLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
KmNvbnRyYWN0aW9uUmFuZ2UgPSBtYXhSYW5nZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFw
cGVuZElQdjZBZGRyZXNzKGNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkcmVzc1sxNl0sIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIFdlIHdpbGwgb3V0cHV0IHRoZSBhZGRyZXNzIGFj
Y29yZGluZyB0byB0aGUgcnVsZXMgaW46CisgICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0
bWwvZHJhZnQta2F3YW11cmEtaXB2Ni10ZXh0LXJlcHJlc2VudGF0aW9uLTAxI3NlY3Rpb24tNAor
CisgICAgLy8gU3RhcnQgYnkgZmluZGluZyB3aGVyZSB0byBwbGFjZSB0aGUgIjo6IiBjb250cmFj
dGlvbiAoaWYgYW55KS4KKyAgICBVUkxDb21wb25lbnQgY29udHJhY3Rpb25SYW5nZTsKKyAgICBD
aG9vc2VJUHY2Q29udHJhY3Rpb25SYW5nZShhZGRyZXNzLCAmY29udHJhY3Rpb25SYW5nZSk7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8PSAxNDspIHsKKyAgICAgICAgLy8gV2UgY2hlY2sgMiBi
eXRlcyBhdCBhIHRpbWUsIGZyb20gYnl0ZXMgKDAsIDEpIHRvICgxNCwgMTUpLCBpbmNsdXNpdmUu
CisgICAgICAgIEFTU0VSVCghKGkgJSAyKSk7CisgICAgICAgIGlmIChpID09IGNvbnRyYWN0aW9u
UmFuZ2UuYmVnaW4oKSAmJiBjb250cmFjdGlvblJhbmdlLmxlbmd0aCgpID4gMCkgeworICAgICAg
ICAgICAgLy8gSnVtcCBvdmVyIHRoZSBjb250cmFjdGlvbi4KKyAgICAgICAgICAgIGlmICghaSkK
KyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCc6Jyk7CisgICAgICAgICAgICBpID0gY29udHJhY3Rpb25SYW5nZS5lbmQoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN1bWUgdGhlIG5leHQgMTYgYml0cyBm
cm9tIHxhZGRyZXNzfC4KKyAgICAgICAgICAgIGludCB4ID0gYWRkcmVzc1tpXSA8PCA4IHwgYWRk
cmVzc1tpICsgMV07CisKKyAgICAgICAgICAgIGkgKz0gMjsKKworICAgICAgICAgICAgLy8gU3Ry
aW5naWZ5IHRoZSAxNiBiaXQgbnVtYmVyIChhdCBtb3N0IHJlcXVpcmVzIDQgaGV4IGRpZ2l0cyku
CisgICAgICAgICAgICBjaGFyIHN0cls1XTsKKyAgICAgICAgICAgIF9pdG9hX3MoeCwgc3RyLCAx
Nik7CisgICAgICAgICAgICBmb3IgKGludCBjaCA9IDA7IHN0cltjaF07ICsrY2gpCisgICAgICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbY2hdKTsKKworICAgICAgICAgICAgLy8gUHV0IGEg
Y29sb24gYWZ0ZXIgZWFjaCBudW1iZXIsIGV4Y2VwdCB0aGUgbGFzdC4KKyAgICAgICAgICAgIGlm
IChpIDwgMTYpCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICB9
CisgICAgfQorfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBtYWRlIGEgZmluYWwgSVBWNi9C
Uk9LRU4gZGVjaXNpb24sIGZhbHNlIGlmIHRoZSByZXN1bHQKKy8vIGlzIE5FVVRSQUwsIGFuZCB3
ZSBjb3VsZCB1c2UgYSBzZWNvbmQgb3Bpbmlvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5
cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZUlQdjZBZGRyZXNzKGNvbnN0IENIQVIq
IHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbm9uSG9zdEluZm8qIGhv
c3RJbmZvKQoreworICAgIC8vIFR1cm4gdGhlIElQIGFkZHJlc3MgaW50byBhIDEyOCBiaXQgbnVt
YmVyLgorICAgIGlmICghRG9JUHY2QWRkcmVzc1RvTnVtYmVyPENIQVIsIFVDSEFSPihzcGVjLCBo
b3N0LCBob3N0SW5mby0+YWRkcmVzcykpIHsKKyAgICAgICAgLy8gSWYgaXQncyBub3QgYW4gSVB2
NiBhZGRyZXNzLCBzY2FuIGZvciBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkICpvbmx5KgorICAgICAg
ICAvLyBleGlzdCBpbiBhbiBJUHY2IGFkZHJlc3MuCisgICAgICAgIGZvciAoaW50IGkgPSBob3N0
LmJlZ2luKCk7IGkgPCBob3N0LmVuZCgpOyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3Bl
Y1tpXSkgeworICAgICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICBjYXNlICddJzoKKyAg
ICAgICAgICAgIGNhc2UgJzonOgorICAgICAgICAgICAgICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBD
YW5vbkhvc3RJbmZvOjpCUk9LRU47CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBObyBpbnZhbGlkIGNoYXJhY3RlcnMu
IENvdWxkIHN0aWxsIGJlIElQdjQgb3IgYSBob3N0bmFtZS4KKyAgICAgICAgaG9zdEluZm8tPmZh
bWlseSA9IENhbm9uSG9zdEluZm86Ok5FVVRSQUw7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBob3N0SW5mby0+b3VwdXRIb3N0LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7
CisgICAgb3V0cHV0LmFwcGVuZCgnWycpOworICAgIGFwcGVuZElQdjZBZGRyZXNzKGhvc3RJbmZv
LT5hZGRyZXNzLCBvdXRwdXQpOworICAgIG91dHB1dC5hcHBlbmQoJ10nKTsKKyAgICBob3N0SW5m
by0+b3VwdXRIb3N0LnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBob3N0SW5mby0+b3VwdXRI
b3N0LmJlZ2luKCkpOworCisgICAgaG9zdEluZm8tPmZhbWlseSA9IENhbm9uSG9zdEluZm86OklQ
VjY7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgQ2Fub25p
Y2FsaXplSVBBZGRyZXNzKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENh
bm9uSG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIGlmIChEb0Nhbm9uaWNhbGl6ZUlQdjRBZGRy
ZXNzPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKERvQ2Fub25pY2FsaXplSVB2NkFkZHJlc3M8Y2hhciwg
dW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0SW5mbykpCisgICAgcmV0dXJu
OworfQorCit2b2lkIENhbm9uaWNhbGl6ZUlQQWRkcmVzcyhjb25zdCBVQ2hhciogc3BlYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2Fub25Ib3N0SW5mbyogaG9zdEluZm8pCit7CisgICAgaWYgKERv
Q2Fub25pY2FsaXplSVB2NEFkZHJlc3M8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0LCBvdXRwdXQs
IGhvc3RJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChEb0Nhbm9uaWNhbGl6ZUlQdjZB
ZGRyZXNzPFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0SW5mbykpCisgICAg
ICAgIHJldHVybjsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuY3BwIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzlkOTM1NDVhMGJiYTkw
YTM4OWFhMWRiZDE1OTk1MmZhMWJiMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcApAQCAtMCwwICsxLDMyOCBAQAorLy8gQ29w
eXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUg
PGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYg
VVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxp
emVyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUg
VUNIQVI+Cit2b2lkIERvYXBwZW5kU3RyaW5nT2ZUeXBlKGNvbnN0IENIQVIqIHNvdXJjZSwgaW50
IGxlbmd0aCwgVVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHR5cGUsIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PFVDSEFSPihzb3VyY2VbaV0pID49IDB4ODApIHsK
KyAgICAgICAgICAgIC8vIFJlYWRDaGFyIHdpbGwgZmlsbCB0aGUgY29kZSBwb2ludCB3aXRoIGtV
bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhlIGlucHV0
IGlzIGludmFsaWQsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgIHVuc2lnbmVk
IGNvZGVQb2ludDsKKyAgICAgICAgICAgIHJlYWRVVEZDaGFyKHNvdXJjZSwgJmksIGxlbmd0aCwg
JmNvZGVQb2ludCk7CisgICAgICAgICAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNvZGVQb2lu
dCwgb3V0cHV0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEp1c3QgYXBwZW5k
IHRoZSA3LWJpdCBjaGFyYWN0ZXIsIHBvc3NpYmx5IGVzY2FwaW5nIGl0LgorICAgICAgICAgICAg
dW5zaWduZWQgY2hhciB1Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0p
OworICAgICAgICAgICAgaWYgKCFVUkxDaGFyYWN0ZXJUeXBlczo6aXNDaGFyYWN0ZXJPZlR5cGUo
dWNoLCB0eXBlKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHVj
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKHVjaCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gYXNzdW1l
cyB0aGUgaW5wdXQgdmFsdWVzIGFyZSBhbGwgY29udGFpbmVkIGluIDgtYml0LAorLy8gYWx0aG91
Z2ggaXQgYWxsb3dzIGFueSB0eXBlLiBSZXR1cm5zIHRydWUgaWYgaW5wdXQgaXMgdmFsaWQsIGZh
bHNlIGlmIG5vdC4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgordm9p
ZCBEb0FwcGVuZEludmFsaWROYXJyb3dTdHJpbmcoY29uc3QgQ0hBUiogc3BlYywgaW50IGJlZ2lu
LCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBmb3IgKGludCBpID0g
YmVnaW47IGkgPCBlbmQ7IGkrKykgeworICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxV
Q0hBUj4oc3BlY1tpXSk7CisgICAgICAgIGlmICh1Y2ggPj0gMHg4MCkgeworICAgICAgICAgICAg
Ly8gSGFuZGxlIFVURi04LzE2IGVuY29kaW5ncy4gVGhpcyBjYWxsIHdpbGwgY29ycmVjdGx5IGhh
bmRsZSB0aGUgZXJyb3IKKyAgICAgICAgICAgIC8vIGNhc2UgYnkgYXBwZW5kaW5nIHRoZSBpbnZh
bGlkIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAm
aSwgZW5kLCBvdXRwdXQpOworICAgICAgICB9IGVsc2UgaWYgKHVjaCA8PSAnICcgfHwgdWNoID09
IDB4N2YpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGVycm9yIGhhbmRs
aW5nLCBzbyB3ZSBlc2NhcGUgYWxsIGNvbnRyb2wKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMg
YW5kIHNwYWNlcywgYnV0IG5vdCBhbnl0aGluZyBlbHNlIHNpbmNlIHdlIGxhY2sKKyAgICAgICAg
ICAgIC8vIGNvbnRleHQgdG8gZG8gc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuCisgICAgICAgICAg
ICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHVj
aCksIG91dHB1dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChz
dGF0aWNfY2FzdDxjaGFyPih1Y2gpKTsKKyAgICB9Cit9CisKKy8vIE92ZXJyaWRlcyBvbmUgY29t
cG9uZW50LCBzZWUgdGhlIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50cyBzdHJ1Y3R1cmUg
Zm9yCisvLyB3aGF0IHRoZSB2YXJpb3VzIGNvbWJpb25hdGlvbnMgb2Ygc291cmNlIHBvaW50ZXIg
YW5kIGNvbXBvbmVudCBtZWFuLgordm9pZCBEb092ZXJyaWRlQ29tcG9uZW50KGNvbnN0IGNoYXIq
IG92ZXJyaWRlU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBv
bmVudCYgb3ZlcnJpZGVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcioqIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBkZXN0
aW5hdGlvbkNvbXBvbmVudCkKK3sKKyAgICBpZiAob3ZlcnJpZGVTb3VyY2UpIHsKKyAgICAgICAg
KmRlc3QgPSBvdmVycmlkZVNvdXJjZTsKKyAgICAgICAgKmRlc3RpbmF0aW9uQ29tcG9uZW50ID0g
b3ZlcnJpZGVDb21wb25lbnQ7CisgICAgfQorfQorCisvLyBTaW1pbGFyIHRvIERvT3ZlcnJpZGVD
b21wb25lbnQgZXhjZXB0IHRoYXQgaXQgdGFrZXMgYSBVVEYtMTYgaW5wdXQgYW5kIGRvZXMKKy8v
IG5vdCBhY3R1YWxseSBzZXQgdGhlIG91dHB1dCBjaGFyYWN0ZXIgcG9pbnRlci4KKy8vCisvLyBU
aGUgaW5wdXQgaXMgY29udmVydGVkIHRvIFVURi04IGF0IHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1
ZmZlciBhcyBhIHRlbXBvcmFyeQorLy8gaG9sZGluZyBwbGFjZS4gVGhlIGNvbXBvbmVudCBpbmRl
bnRpZnlpbmcgdGhlIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciB1c2VkIGluCisvLyB0aGUgfHV0ZjhC
dWZmZXJ8IHdpbGwgYmUgc3BlY2lmaWVkIGluIHwqZGVzdGluYXRpb25Db21wb25lbnR8LgorLy8K
Ky8vIFRoaXMgd2lsbCBub3QgYWN0dWFsbHkgc2V0IGFueSB8ZGVzdHwgcG9pbnRlciBsaWtlIERv
T3ZlcnJpZGVDb21wb25lbnQKKy8vIGRvZXMgYmVjYXVzZSBhbGwgb2YgdGhlIHBvaW50ZXJzIHdp
bGwgcG9pbnQgaW50byB0aGUgfHV0ZjhCdWZmZXJ8LCB3aGljaAorLy8gbWF5IGdldCByZXNpemVk
IHdoaWxlIHdlJ3JlIG92ZXJyaWRpbmcgYSBzdWJzZXF1ZW50IGNvbXBvbmVudC4gSW5zdGVhZCwg
dGhlCisvLyBjYWxsZXIgc2hvdWxkIHVzZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB8dXRmOEJ1ZmZl
cnwgYXMgdGhlIHN0cmluZyBwb2ludGVyCisvLyBmb3IgYWxsIGNvbXBvbmVudHMgb25jZSBhbGwg
b3ZlcnJpZGVzIGhhdmUgYmVlbiBwcmVwYXJlZC4KK2Jvb2wgUHJlcGFyZVVURjE2T3ZlcnJpZGVD
b21wb25lbnQoCisgICAgY29uc3QgVUNoYXIqIG92ZXJyaWRlU291cmNlLAorICAgIGNvbnN0IFVS
TENvbXBvbmVudCYgb3ZlcnJpZGVDb21wb25lbnQsCisgICAgVVJMQnVmZmVyPGNoYXI+JiB1dGY4
QnVmZmVyLAorICAgIFVSTENvbXBvbmVudCogZGVzdGluYXRpb25Db21wb25lbnQpCit7CisgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAob3ZlcnJpZGVTb3VyY2UpIHsKKyAgICAgICAg
aWYgKCFvdmVycmlkZUNvbXBvbmVudC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIC8vIE5vbi0i
dmFsaWQiIGNvbXBvbmVudCAobWVhbnMgZGVsZXRlKSwgc28gd2UgbmVlZCB0byBwcmVzZXJ2ZSB0
aGF0LgorICAgICAgICAgICAgKmRlc3RpbmF0aW9uQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50KCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIFVURi04LgorICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQtPnNldEJlZ2luKHV0ZjhCdWZmZXIubGVuZ3Ro
KCkpOworICAgICAgICAgICAgc3VjY2VzcyA9IENvbnZlcnRVVEYxNlRvVVRGOCgmb3ZlcnJpZGVT
b3VyY2Vbb3ZlcnJpZGVDb21wb25lbnQuYmVnaW4oKV0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29tcG9uZW50Lmxlbmd0aCgpLCB1dGY4QnVmZmVy
KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50LT5zZXRMZW5ndGgodXRmOEJ1ZmZl
ci5sZW5ndGgoKSAtIGRlc3RpbmF0aW9uQ29tcG9uZW50LT5iZWdpbigpKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworY29uc3Qg
Y2hhciBrQ2hhclRvSGV4TG9va3VwWzhdID0geworICAgIDAsIC8vIDB4MDAgLSAweDFmCisgICAg
JzAnLCAvLyAweDIwIC0gMHgzZjogZGlnaXRzIDAgLSA5IGFyZSAweDMwIC0gMHgzOQorICAgICdB
JyAtIDEwLCAvLyAweDQwIC0gMHg1ZjogbGV0dGVycyBBIC0gRiBhcmUgMHg0MSAtIDB4NDYKKyAg
ICAnYScgLSAxMCwgLy8gMHg2MCAtIDB4N2Y6IGxldHRlcnMgYSAtIGYgYXJlIDB4NjEgLSAweDY2
CisgICAgMCwgLy8gMHg4MCAtIDB4OUYKKyAgICAwLCAvLyAweEEwIC0gMHhCRgorICAgIDAsIC8v
IDB4QzAgLSAweERGCisgICAgMCwgLy8gMHhFMCAtIDB4RkYKK307CisKK2NvbnN0IFVDaGFyIGtV
bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSAweGZmZmQ7CisKK3ZvaWQgYXBwZW5kU3RyaW5n
T2ZUeXBlKGNvbnN0IGNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFjdGVyVHlwZXM6
OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
KQoreworICAgIERvYXBwZW5kU3RyaW5nT2ZUeXBlPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJj
ZSwgbGVuZ3RoLCB1cmxDb21wb25lbnRUeXBlLCBvdXRwdXQpOworfQorCit2b2lkIGFwcGVuZFN0
cmluZ09mVHlwZShjb25zdCBVQ2hhciogc291cmNlLCBpbnQgbGVuZ3RoLCBVUkxDaGFyYWN0ZXJU
eXBlczo6Q2hhcmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlwZSwgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpCit7CisgICAgRG9hcHBlbmRTdHJpbmdPZlR5cGU8VUNoYXIsIFVDaGFyPihzb3VyY2Us
IGxlbmd0aCwgdXJsQ29tcG9uZW50VHlwZSwgb3V0cHV0KTsKK30KKwordm9pZCBBcHBlbmRJbnZh
bGlkTmFycm93U3RyaW5nKGNvbnN0IGNoYXIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgRG9BcHBlbmRJbnZhbGlkTmFycm93U3RyaW5n
PGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIGJlZ2luLCBlbmQsIG91dHB1dCk7Cit9CisKK3Zv
aWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBVQ2hhciogc3BlYywgaW50IGJlZ2lu
LCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBEb0FwcGVuZEludmFs
aWROYXJyb3dTdHJpbmc8VUNoYXIsIFVDaGFyPihzcGVjLCBiZWdpbiwgZW5kLCBvdXRwdXQpOwor
fQorCitib29sIENvbnZlcnRVVEYxNlRvVVRGOChjb25zdCBVQ2hhciogaW5wdXQsIGludCBpbnB1
dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgdW5zaWduZWQgY29kZVBvaW50OworICAgICAgICBzdWNjZXNzICY9IHJlYWRVVEZDaGFyKGlu
cHV0LCAmaSwgaW5wdXRMZW5ndGgsICZjb2RlUG9pbnQpOworICAgICAgICBBcHBlbmRVVEY4VmFs
dWUoY29kZVBvaW50LCBvdXRwdXQpOworICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwor
Ym9vbCBDb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgY2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0
aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CisgICAgICAgIHVu
c2lnbmVkIGNvZGVQb2ludDsKKyAgICAgICAgc3VjY2VzcyAmPSByZWFkVVRGQ2hhcihpbnB1dCwg
JmksIGlucHV0TGVuZ3RoLCAmY29kZVBvaW50KTsKKyAgICAgICAgQXBwZW5kVVRGMTZWYWx1ZShj
b2RlUG9pbnQsIG91dHB1dCk7CisgICAgfQorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lk
IFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIC8qIGJhc2UgKi8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KiBzb3Vy
Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7
CisgICAgLy8gR2V0IHRoZSBzb3VyY2UgYW5kIHBhcnNlZCBzdHJ1Y3R1cmVzIG9mIHRoZSB0aGlu
Z3Mgd2UgYXJlIHJlcGxhY2luZy4KKyAgICBjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4m
IHJlcGxTb3VyY2UgPSByZXBsLnNvdXJjZXMoKTsKKyAgICBjb25zdCBVUkxTZWdtZW50cyYgcmVw
bFBhcnNlZCA9IHJlcGwuY29tcG9uZW50cygpOworCisgICAgRG9PdmVycmlkZUNvbXBvbmVudChy
ZXBsU291cmNlLnNjaGVtZSwgcmVwbFBhcnNlZC5zY2hlbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAmc291cmNlLT5zY2hlbWUsICZwYXJzZWQtPnNjaGVtZSk7CisgICAgRG9PdmVycmlkZUNv
bXBvbmVudChyZXBsU291cmNlLnVzZXJuYW1lLCByZXBsUGFyc2VkLnVzZXJuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+dXNlcm5hbWUsICZwYXJzZWQtPnVzZXJuYW1lKTsK
KyAgICBEb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucGFzc3dvcmQsIHJlcGxQYXJzZWQu
cGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlLT5wYXNzd29yZCwgJnBh
cnNlZC0+cGFzc3dvcmQpOworCisgICAgLy8gT3VyIGhvc3Qgc2hvdWxkIGJlIGVtcHR5IGlmIG5v
dCBwcmVzZW50LCBzbyBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR1cC4KKyAgICBEb092ZXJyaWRl
Q29tcG9uZW50KHJlcGxTb3VyY2UuaG9zdCwgcmVwbFBhcnNlZC5ob3N0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgJnNvdXJjZS0+aG9zdCwgJnBhcnNlZC0+aG9zdCk7CisgICAgaWYgKHBhcnNl
ZC0+aG9zdC5sZW5ndGgoKSA9PSAtMSkKKyAgICAgICAgcGFyc2VkLT5ob3N0LnNldExlbmd0aCgw
KTsKKworICAgIERvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5wb3J0LCByZXBsUGFyc2Vk
LnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlLT5wb3J0LCAmcGFyc2VkLT5w
b3J0KTsKKyAgICBEb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucGF0aCwgcmVwbFBhcnNl
ZC5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cGF0aCwgJnBhcnNlZC0+
cGF0aCk7CisgICAgRG9PdmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnF1ZXJ5LCByZXBsUGFy
c2VkLnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cXVlcnksICZwYXJz
ZWQtPnF1ZXJ5KTsKKyAgICBEb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucmVmLCByZXBs
UGFyc2VkLmZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cmVmLCAm
cGFyc2VkLT5mcmFnbWVudCk7Cit9CisKK2Jvb2wgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50
cyhjb25zdCBjaGFyKiAvKiBiYXNlICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiB1dGY4QnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiogc291cmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBwYXJzZWQpCisg
ICAgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgICAgIC8vIEdldCB0aGUg
c291cmNlIGFuZCBwYXJzZWQgc3RydWN0dXJlcyBvZiB0aGUgdGhpbmdzIHdlIGFyZSByZXBsYWNp
bmcuCisgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxVQ2hhcj4mIHJlcGxTb3VyY2Ug
PSByZXBsLnNvdXJjZXMoKTsKKyAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHJlcGxQYXJzZWQg
PSByZXBsLmNvbXBvbmVudHMoKTsKKworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92
ZXJyaWRlQ29tcG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcGxTb3VyY2Uuc2NoZW1lLCByZXBsUGFyc2VkLnNjaGVtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFy
c2VkLT5zY2hlbWUpOworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29t
cG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGxTb3VyY2UudXNlcm5hbWUsIHJlcGxQYXJzZWQudXNlcm5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+
dXNlcm5hbWUpOworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9u
ZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGxTb3VyY2UucGFzc3dvcmQsIHJlcGxQYXJzZWQucGFzc3dvcmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+cGFz
c3dvcmQpOworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxT
b3VyY2UuaG9zdCwgcmVwbFBhcnNlZC5ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPmhvc3QpOworICAgICAg
ICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxTb3VyY2UucG9ydCwgcmVw
bFBhcnNlZC5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBvcnQpOworICAgICAgICBzdWNjZXNzICY9IFBy
ZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcGxTb3VyY2UucGF0aCwgcmVwbFBhcnNlZC5wYXRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZm
ZXIsICZwYXJzZWQtPnBhdGgpOworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJy
aWRlQ29tcG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxTb3VyY2UucXVlcnksIHJlcGxQYXJzZWQucXVlcnksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+
cXVlcnkpOworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxT
b3VyY2UucmVmLCByZXBsUGFyc2VkLmZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPmZyYWdtZW50KTsK
KworICAgICAgICAvLyBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCB3aWxsIG5vdCBoYXZl
IHNldCB0aGUgZGF0YSBwb2ludGVyIHNpbmNlIHRoZQorICAgICAgICAvLyBidWZmZXIgY291bGQg
YmUgcmVzaXplZCwgaW52YWxpZGF0aW5nIHRoZSBwb2ludGVycy4gV2Ugc2V0IHRoZSBkYXRhCisg
ICAgICAgIC8vIHBvaW50ZXJzIGZvciBhZmZlY3RlZCBjb21wb25lbnRzIG5vdyB0aGF0IHRoZSBi
dWZmZXIgaXMgZmluYWxpemVkLgorICAgICAgICBpZiAocmVwbFNvdXJjZS5zY2hlbWUpCisgICAg
ICAgICAgICBzb3VyY2UtPnNjaGVtZSA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAo
cmVwbFNvdXJjZS51c2VybmFtZSkKKyAgICAgICAgICAgIHNvdXJjZS0+dXNlcm5hbWUgPSB1dGY4
QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucGFzc3dvcmQpCisgICAgICAg
ICAgICBzb3VyY2UtPnBhc3N3b3JkID0gdXRmOEJ1ZmZlci5kYXRhKCk7CisgICAgICAgIGlmIChy
ZXBsU291cmNlLmhvc3QpCisgICAgICAgICAgICBzb3VyY2UtPmhvc3QgPSB1dGY4QnVmZmVyLmRh
dGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucG9ydCkKKyAgICAgICAgICAgIHNvdXJjZS0+
cG9ydCA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNvdXJjZS5wYXRoKQor
ICAgICAgICAgICAgc291cmNlLT5wYXRoID0gdXRmOEJ1ZmZlci5kYXRhKCk7CisgICAgICAgIGlm
IChyZXBsU291cmNlLnF1ZXJ5KQorICAgICAgICAgICAgc291cmNlLT5xdWVyeSA9IHV0ZjhCdWZm
ZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNvdXJjZS5yZWYpCisgICAgICAgICAgICBzb3Vy
Y2UtPnJlZiA9IHV0ZjhCdWZmZXIuZGF0YSgpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzOwor
fQorCisjaWYgIU9TKFdJTkRPV1MpCitpbnQgX2l0b2FfcyhpbnQgdmFsdWUsIGNoYXIqIGJ1ZmZl
ciwgc2l6ZV90IHNpemVJbkNoYXJzLCBpbnQgcmFkaXgpCit7CisgICAgaW50IHdyaXR0ZW47Cisg
ICAgaWYgKHJhZGl4ID09IDEwKQorICAgICAgICB3cml0dGVuID0gc25wcmludGYoYnVmZmVyLCBz
aXplSW5DaGFycywgIiVkIiwgdmFsdWUpOworICAgIGVsc2UgaWYgKHJhZGl4ID09IDE2KQorICAg
ICAgICB3cml0dGVuID0gc25wcmludGYoYnVmZmVyLCBzaXplSW5DaGFycywgIiV4IiwgdmFsdWUp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIGlmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KHdyaXR0ZW4pID49IHNpemVJbkNoYXJzKSB7CisgICAgICAgIC8vIE91dHB1dCB3
YXMgdHJ1bmNhdGVkLCBvciB3cml0dGVuIHdhcyBuZWdhdGl2ZS4KKyAgICAgICAgcmV0dXJuIEVJ
TlZBTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBfaXRvd19zKGludCB2YWx1ZSwg
VUNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJzLCBpbnQgcmFkaXgpCit7CisgICAgaWYg
KHJhZGl4ICE9IDEwKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgLy8gTm8gbW9yZSB0
aGFuIDEyIGNoYXJhY3RlcnMgd2lsbCBiZSByZXF1aXJlZCBmb3IgYSAzMi1iaXQgaW50ZWdlci4K
KyAgICAvLyBBZGQgYW4gZXh0cmEgYnl0ZSBmb3IgdGhlIHRlcm1pbmF0aW5nIG51bGwuCisgICAg
Y2hhciB0ZW1wWzEzXTsKKyAgICBpbnQgd3JpdHRlbiA9IHNucHJpbnRmKHRlbXAsIHNpemVvZih0
ZW1wKSwgIiVkIiwgdmFsdWUpOworICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHdyaXR0ZW4p
ID49IHNpemVJbkNoYXJzKSB7CisgICAgICAgIC8vIE91dHB1dCB3YXMgdHJ1bmNhdGVkLCBvciB3
cml0dGVuIHdhcyBuZWdhdGl2ZS4KKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHdyaXR0ZW47ICsraSkKKyAgICAgICAgYnVmZmVyW2ldID0g
c3RhdGljX2Nhc3Q8VUNoYXI+KHRlbXBbaV0pOworICAgIGJ1ZmZlclt3cml0dGVuXSA9ICdcMCc7
CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvLyAhT1MoV0lORE9XUykKKworfSAvLyBuYW1l
c3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9u
SW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JbnRlcm5hbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmMwZjNiYzMyYTFlOGZjYjdmNTNmNThmNTk5ZjM4ZDYwMzMyMjNjNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuaApA
QCAtMCwwICsxLDM5MiBAQAorLy8gQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisv
LyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW4gYW5vdGhlciBDKysgZmls
ZSB3aGVyZSB0aGUgY2hhcmFjdGVyCisvLyB0eXBlcyBhcmUgZGVmaW5lZC4gVGhpcyBhbGxvd3Mg
dXMgdG8gd3JpdGUgbW9zdGx5IGdlbmVyaWMgY29kZSwgYnV0IG5vdCBoYXZlCisvLyB0ZW1wbGFj
ZSBibG9hdCBiZWNhdXNlIGV2ZXJ5dGhpbmcgaXMgaW5saW5lZCB3aGVuIGFueWJvZHkgY2FsbHMg
YW55IG9mIG91cgorLy8gZnVuY3Rpb25zLgorCisjaWZuZGVmIFVSTENhbm9uSW50ZXJuYWxfaAor
I2RlZmluZSBVUkxDYW5vbkludGVybmFsX2gKKworI2luY2x1ZGUgIlVSTENhbm9uLmgiCisjaW5j
bHVkZSAiVVJMQ2hhcmFjdGVyVHlwZXMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDx3dGYvSGV4TnVtYmVyLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsK
KworbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCisvLyBBcHBlbmRzIHRoZSBnaXZlbiBz
dHJpbmcgdG8gdGhlIG91dHB1dCwgZXNjYXBpbmcgY2hhcmFjdGVycyB0aGF0IGRvIG5vdAorLy8g
bWF0Y2ggdGhlIGdpdmVuIHx0eXBlfCBpbiBTaGFyZWRDaGFyVHlwZXMuCit2b2lkIGFwcGVuZFN0
cmluZ09mVHlwZShjb25zdCBjaGFyKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTENoYXJhY3RlclR5
cGVzOjpDaGFyYWN0ZXJUeXBlcyB1cmxDb21wb25lbnRUeXBlLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCk7Cit2b2lkIGFwcGVuZFN0cmluZ09mVHlwZShjb25zdCBVQ2hhciogc291cmNlLCBpbnQg
bGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlw
ZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOworCisvLyBUaGlzIGxvb2t1cCB0YWJsZSBhbGxv
d3MgZmFzdCBjb252ZXJzaW9uIGJldHdlZW4gQVNDSUkgaGV4IGxldHRlcnMgYW5kIHRoZWlyCisv
LyBjb3JyZXNwb25kaW5nIG51bWVyaWNhbCB2YWx1ZS4gVGhlIDgtYml0IHJhbmdlIGlzIGRpdmlk
ZWQgdXAgaW50byA4CisvLyByZWdpb25zIG9mIDB4MjAgY2hhcmFjdGVycyBlYWNoLiBFYWNoIG9m
IHRoZSB0aHJlZSBjaGFyYWN0ZXIgdHlwZXMgKG51bWJlcnMsCisvLyB1cHBlcmNhc2UsIGxvd2Vy
Y2FzZSkgZmFsbHMgaW50byBkaWZmZXJlbnQgcmVnaW9ucyBvZiB0aGlzIHJhbmdlLiBUaGUgdGFi
bGUKKy8vIGNvbnRhaW5zIHRoZSBhbW91bnQgdG8gc3VidHJhY3QgZnJvbSBjaGFyYWN0ZXJzIGlu
IHRoYXQgcmFuZ2UgdG8gZ2V0IGF0CisvLyB0aGUgY29ycmVzcG9uZGluZyBudW1lcmljYWwgdmFs
dWUuCisvLworLy8gU2VlIEhleERpZ2l0VG9WYWx1ZSBmb3IgdGhlIGxvb2t1cC4KK2V4dGVybiBj
b25zdCBjaGFyIGtDaGFyVG9IZXhMb29rdXBbOF07CisKKy8vIEFzc3VtZXMgdGhlIGlucHV0IGlz
IGEgdmFsaWQgaGV4IGRpZ2l0ISBDYWxsIGlzSGV4Q2hhciBiZWZvcmUgdXNpbmcgdGhpcy4KK2lu
bGluZSB1bnNpZ25lZCBjaGFyIGhleENoYXJUb1ZhbHVlKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVy
KQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgLSBrQ2hhclRvSGV4TG9va3VwW2NoYXJhY3RlciAv
IDB4MjBdOworfQorCisvLyBJbmRpY2F0ZXMgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBhIGRv
dCBvciBkb3QgZXF1aXZhbGVudCwgcmV0dXJuaW5nIHRoZQorLy8gbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgdGFrZW4gYnkgaXQuIFRoaXMgd2lsbCBiZSBvbmUgZm9yIGEgbGl0ZXJhbCBkb3QsIDMgZm9y
CisvLyBhbiBlc2NhcGVkIGRvdC4gSWYgdGhlIGNoYXJhY3RlciBpcyBub3QgYSBkb3QsIHRoaXMg
d2lsbCByZXR1cm4gMC4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUg
aW50IGlzRG90KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBvZmZzZXQsIGludCBlbmQp
Cit7CisgICAgaWYgKHNwZWNbb2Zmc2V0XSA9PSAnLicpCisgICAgICAgIHJldHVybiAxOworCisg
ICAgaWYgKHNwZWNbb2Zmc2V0XSA9PSAnJScgJiYgb2Zmc2V0ICsgMyA8PSBlbmQgJiYgc3BlY1tv
ZmZzZXQgKyAxXSA9PSAnMicgJiYgKHNwZWNbb2Zmc2V0ICsgMl0gPT0gJ2UnIHx8IHNwZWNbb2Zm
c2V0ICsgMl0gPT0gJ0UnKSkgeworICAgICAgICAvLyBGb3VuZCAiJTJlIgorICAgICAgICByZXR1
cm4gMzsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFJldHVybnMgdGhlIGNhbm9uaWNh
bGl6ZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQgY2hhcmFjdGVyIGFjY29yZGluZyB0byBzY2hlbWUK
Ky8vIHJ1bGVzLiBUaGlzIGlzIGltcGxlbWVudGVkIGFsb25nc2lkZSB0aGUgc2NoZW1lIGNhbm9u
aWNhbGl6ZXIsIGFuZCBpcworLy8gcmVxdWlyZWQgZm9yIHJlbGF0aXZlIFVSTCByZXNvbHZpbmcg
dG8gdGVzdCBmb3Igc2NoZW1lIGVxdWFsaXR5LgorLy8KKy8vIFJldHVybnMgMCBpZiB0aGUgaW5w
dXQgY2hhcmFjdGVyIGlzIG5vdCBhIHZhbGlkIHNjaGVtZSBjaGFyYWN0ZXIuCitjaGFyIGNhbm9u
aWNhbFNjaGVtZUNoYXIoVUNoYXIpOworCisvLyBXcml0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIsIGVz
Y2FwZWQsIHRvIHRoZSBvdXRwdXQuIFRoaXMgYWx3YXlzIGVzY2FwZXM6IGl0CisvLyBkb2VzIG5v
IGNoZWNraW5nIHRoYXQgdGhlZSBjaGFyYWN0ZXIgcmVxdWlyZXMgZXNjYXBpbmcuCisvLyBFc2Nh
cGluZyBtYWtlcyBzZW5zZSBvbmx5IDggYml0IGNoYXJzLCBzbyBjb2RlIHdvcmtzIGluIGFsbCBj
YXNlcyBvZgorLy8gaW5wdXQgcGFyYW1ldGVycyAoOC8xNmJpdCkuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbkNoYXIsIHR5cGVuYW1lIE91dENoYXI+CitpbmxpbmUgdm9pZCBhcHBlbmRVUkxFc2NhcGVk
Q2hhcmFjdGVyKEluQ2hhciBjaGFyYWN0ZXIsIFVSTEJ1ZmZlcjxPdXRDaGFyPiYgYnVmZmVyKQor
eworICAgIGJ1ZmZlci5hcHBlbmQoJyUnKTsKKyAgICBidWZmZXIuYXBwZW5kKFdURjo6SW50ZXJu
YWw6OnVwcGVySGV4RGlnaXRzW2NoYXJhY3RlciA+PiA0XSk7CisgICAgYnVmZmVyLmFwcGVuZChX
VEY6OkludGVybmFsOjp1cHBlckhleERpZ2l0c1tjaGFyYWN0ZXIgJiAweGZdKTsKK30KKworLy8g
VGhlIGNoYXJhY3RlciB3ZSdsbCBzdWJzdGl0dXRlIGZvciB1bmRlY29kYWJsZSBvciBpbnZhbGlk
IGNoYXJhY3RlcnMuCitleHRlcm4gY29uc3QgVUNoYXIga1VuaWNvZGVSZXBsYWNlbWVudENoYXJh
Y3RlcjsKKworLy8gVVRGLTggZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWFkcyBvbmUgY2hhcmFjdGVy
IGluIFVURi04IHN0YXJ0aW5nIGF0IHwqYmVnaW58IGluIHxzdHJ8IGFuZCBwbGFjZXMKKy8vIHRo
ZSBkZWNvZGVkIHZhbHVlIGludG8gfCpjb2RlUG9pbnR8LiBJZiB0aGUgY2hhcmFjdGVyIGlzIHZh
bGlkLCB3ZSB3aWxsCisvLyByZXR1cm4gdHJ1ZS4gSWYgaW52YWxpZCwgd2UnbGwgcmV0dXJuIGZh
bHNlIGFuZCBwdXQgdGhlCisvLyBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyIGludG8gfCpj
b2RlUG9pbnR8LgorLy8KKy8vIHwqYmVnaW58IHdpbGwgYmUgdXBkYXRlZCB0byBwb2ludCB0byB0
aGUgbGFzdCBjaGFyYWN0ZXIgY29uc3VtZWQgc28gaXQKKy8vIGNhbiBiZSBpbmNyZW1lbnRlZCBp
biBhIGxvb3AgYW5kIHdpbGwgYmUgcmVhZHkgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlci4KKy8vIChm
b3IgYSBzaW5nbGUtYnl0ZSBBU0NJSSBjaGFyYWN0ZXIsIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQp
LgorLy8KKy8vIEltcGxlbWVudGF0aW9uIGlzIGluIFVSTENhbm9uaWNhbGl6ZXJfaWN1LmNjLgor
Ym9vbCByZWFkVVRGQ2hhcihjb25zdCBjaGFyKiBzdHIsIGludCogYmVnaW4sIGludCBsZW5ndGgs
IHVuc2lnbmVkKiBjb2RlUG9pbnRPdXQpOworCisvLyBHZW5lcmljIFRvLVVURi04IGNvbnZlcnRl
ci4gVGhpcyB3aWxsIGNhbGwgdGhlIGdpdmVuIGFwcGVuZCBtZXRob2QgZm9yIGVhY2gKKy8vIGNo
YXJhY3RlciB0aGF0IHNob3VsZCBiZSBhcHBlbmRlZCwgd2l0aCB0aGUgZ2l2ZW4gb3V0cHV0IG1l
dGhvZC4gV3JhcHBlcnMKKy8vIGFyZSBwcm92aWRlZCBiZWxvdyBmb3IgZXNjYXBlZCBhbmQgbm9u
LWVzY2FwZWQgdmVyc2lvbnMgb2YgdGhpcy4KKy8vCisvLyBUaGUgY2hhcmFjdGVydmFsdWUgbXVz
dCBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkIHRoYXQgaXQncyBhIHZhbGlkIFVuaWNvZGUKKy8v
IGNoYXJhY3Rlci4KK3RlbXBsYXRlPGNsYXNzIE91dHB1dCwgdm9pZCBhcHBlbmRGdW5jdGlvbih1
bnNpZ25lZCBjaGFyLCBPdXRwdXQmKT4KK2lubGluZSB2b2lkIGRvQXBwZW5kVVRGOCh1bnNpZ25l
ZCBjaGFyYWN0ZXJ2YWx1ZSwgT3V0cHV0JiBvdXRwdXQpCit7CisgICAgaWYgKGNoYXJhY3RlcnZh
bHVlIDw9IDB4N2YpIHsKKyAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oY2hhcmFjdGVydmFsdWUpLCBvdXRwdXQpOworICAgIH0gZWxzZSBpZiAoY2hhcmFj
dGVydmFsdWUgPD0gMHg3ZmYpIHsKKyAgICAgICAgLy8gMTEweHh4eHggMTB4eHh4eHgKKyAgICAg
ICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHhDMCB8IChjaGFy
YWN0ZXJ2YWx1ZSA+PiA2KSksIG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVydmFsdWUgJiAweDNmKSksIG91
dHB1dCk7CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAweGZmZmYpIHsKKyAgICAg
ICAgLy8gMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHgKKyAgICAgICAgYXBwZW5kRnVuY3Rpb24o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHhlMCB8IChjaGFyYWN0ZXJ2YWx1ZSA+PiAxMikp
LCBvdXRwdXQpOworICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigweDgwIHwgKChjaGFyYWN0ZXJ2YWx1ZSA+PiA2KSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAg
ICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8IChj
aGFyYWN0ZXJ2YWx1ZSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAgICB9IGVsc2UgaWYgKGNoYXJhY3Rl
cnZhbHVlIDw9IDB4MTBGRkZGKSB7IC8vIE1heCB1bmljb2RlIGNvZGUgcG9pbnQuCisgICAgICAg
IC8vIDExMTEweHh4IDEweHh4eHh4IDEweHh4eHh4IDEweHh4eHh4CisgICAgICAgIGFwcGVuZEZ1
bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ZjAgfCAoY2hhcmFjdGVydmFsdWUg
Pj4gMTgpKSwgb3V0cHV0KTsKKyAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMHg4MCB8ICgoY2hhcmFjdGVydmFsdWUgPj4gMTIpICYgMHgzZikpLCBvdXRw
dXQpOworICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigw
eDgwIHwgKChjaGFyYWN0ZXJ2YWx1ZSA+PiA2KSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAgICAgICAg
YXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8IChjaGFyYWN0
ZXJ2YWx1ZSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJbnZh
bGlkIFVURi04IGNoYXJhY3RlciAoPjIwIGJpdHMpLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKKy8vIEhlbHBlciB1c2VkIGJ5IEFwcGVuZFVURjhWYWx1ZSBiZWxv
dy4gV2UgdXNlIGFuIHVuc2lnbmVkIHBhcmFtZXRlciBzbyB0aGVyZQorLy8gYXJlIG5vIGZ1bm55
IHNpZ24gcHJvYmxlbXMgd2l0aCB0aGUgaW5wdXQsIGJ1dCB0aGVuIGhhdmUgdG8gY29udmVydCBp
dCB0bworLy8gYSByZWd1bGFyIGNoYXIgZm9yIGFwcGVuZGluZy4KK2lubGluZSB2b2lkIEFwcGVu
ZENoYXJUb091dHB1dCh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlciwgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpCit7CisgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXIp
KTsKK30KKworLy8gV3JpdGVzIHRoZSBnaXZlbiBjaGFyYWN0ZXIgdG8gdGhlIG91dHB1dCBhcyBV
VEYtOC4gVGhpcyBkb2VzIE5PIGNoZWNraW5nCisvLyBvZiB0aGUgdmFsaWRpdHkgb2YgdGhlIHVu
aWNvZGUgY2hhcmFjdGVyczsgdGhlIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQKKy8vIHRoZSB2
YWx1ZSBpdCBpcyBhcHBlbmRpbmcgaXMgdmFsaWQgdG8gYXBwZW5kLgoraW5saW5lIHZvaWQgQXBw
ZW5kVVRGOFZhbHVlKHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVlLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCkKK3sKKyAgICBkb0FwcGVuZFVURjg8VVJMQnVmZmVyPGNoYXI+LCBBcHBlbmRDaGFyVG9P
dXRwdXQ+KGNoYXJhY3RlcnZhbHVlLCBvdXRwdXQpOworfQorCisvLyBXcml0ZXMgdGhlIGdpdmVu
IGNoYXJhY3RlciB0byB0aGUgb3V0cHV0IGFzIFVURi04LCBlc2NhcGluZyBBTEwKKy8vIGNoYXJh
Y3RlcnMgKGV2ZW4gd2hlbiB0aGV5IGFyZSBBU0NJSSkuIFRoaXMgZG9lcyBOTyBjaGVja2luZyBv
ZiB0aGUKKy8vIHZhbGlkaXR5IG9mIHRoZSB1bmljb2RlIGNoYXJhY3RlcnM7IHRoZSBjYWxsZXIg
c2hvdWxkIGVuc3VyZSB0aGF0IHRoZSB2YWx1ZQorLy8gaXQgaXMgYXBwZW5kaW5nIGlzIHZhbGlk
IHRvIGFwcGVuZC4KK2lubGluZSB2b2lkIEFwcGVuZFVURjhFc2NhcGVkVmFsdWUodW5zaWduZWQg
Y2hhcmFjdGVydmFsdWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGRvQXBwZW5k
VVRGODxVUkxCdWZmZXI8Y2hhcj4sIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXI+KGNoYXJhY3Rl
cnZhbHVlLCBvdXRwdXQpOworfQorCisvLyBVVEYtMTYgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFJlYWRz
IG9uZSBjaGFyYWN0ZXIgaW4gVVRGLTE2IHN0YXJ0aW5nIGF0IHwqYmVnaW58IGluIHxzdHJ8IGFu
ZCBwbGFjZXMKKy8vIHRoZSBkZWNvZGVkIHZhbHVlIGludG8gfCpjb2RlUG9pbnR8LiBJZiB0aGUg
Y2hhcmFjdGVyIGlzIHZhbGlkLCB3ZSB3aWxsCisvLyByZXR1cm4gdHJ1ZS4gSWYgaW52YWxpZCwg
d2UnbGwgcmV0dXJuIGZhbHNlIGFuZCBwdXQgdGhlCisvLyBrVW5pY29kZVJlcGxhY2VtZW50Q2hh
cmFjdGVyIGludG8gfCpjb2RlUG9pbnR8LgorLy8KKy8vIHwqYmVnaW58IHdpbGwgYmUgdXBkYXRl
ZCB0byBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgY29uc3VtZWQgc28gaXQKKy8vIGNhbiBi
ZSBpbmNyZW1lbnRlZCBpbiBhIGxvb3AgYW5kIHdpbGwgYmUgcmVhZHkgZm9yIHRoZSBuZXh0IGNo
YXJhY3Rlci4KKy8vIChmb3IgYSBzaW5nbGUtMTYtYml0LXdvcmQgY2hhcmFjdGVyLCBpdCB3aWxs
IG5vdCBiZSBjaGFuZ2VkKS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBpcyBpbiBVUkxDYW5vbmlj
YWxpemVyX2ljdS5jYy4KK2Jvb2wgcmVhZFVURkNoYXIoY29uc3QgVUNoYXIqIHN0ciwgaW50KiBi
ZWdpbiwgaW50IGxlbmd0aCwgdW5zaWduZWQqIGNvZGVQb2ludCk7CisKKy8vIEVxdWl2YWxlbnQg
dG8gVTE2X0FQUEVORF9VTlNBRkUgaW4gSUNVIGJ1dCB1c2VzIG91ciBvdXRwdXQgbWV0aG9kLgor
aW5saW5lIHZvaWQgQXBwZW5kVVRGMTZWYWx1ZSh1bnNpZ25lZCBjb2RlUG9pbnQsIFVSTEJ1ZmZl
cjxVQ2hhcj4mIG91dHB1dCkKK3sKKyAgICBpZiAoY29kZVBvaW50ID4gMHhmZmZmKSB7CisgICAg
ICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KChjb2RlUG9pbnQgPj4gMTApICsg
MHhkN2MwKSk7CisgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KChjb2Rl
UG9pbnQgJiAweDNmZikgfCAweGRjMDApKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3V0cHV0LmFw
cGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZVBvaW50KSk7Cit9CisKKy8vIEVzY2FwaW5nIGZ1
bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworLy8gV3JpdGVzIHRoZSBnaXZlbiBjaGFyYWN0ZXIgdG8gdGhlIG91dHB1dCBh
cyBVVEYtOCwgZXNjYXBlZC4gQ2FsbCB0aGlzCisvLyBmdW5jdGlvbiBvbmx5IHdoZW4gdGhlIGlu
cHV0IGlzIHdpZGUuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLiBGYWlsdXJlCisvLyBtZWFucyB0
aGVyZSB3YXMgc29tZSBwcm9ibGVtIHdpdGggdGhlIGVuY29kaW5nLCB3ZSdsbCBzdGlsbCB0cnkg
dG8KKy8vIHVwZGF0ZSB0aGUgfCpiZWdpbnwgcG9pbnRlciBhbmQgYWRkIGEgcGxhY2Vob2xkZXIg
Y2hhcmFjdGVyIHRvIHRoZQorLy8gb3V0cHV0IHNvIHByb2Nlc3NpbmcgY2FuIGNvbnRpbnVlLgor
Ly8KKy8vIFdlIHdpbGwgYXBwZW5kIHRoZSBjaGFyYWN0ZXIgc3RhcnRpbmcgYXQgY2hbYmVnaW5d
IHdpdGggdGhlIGJ1ZmZlciBjaAorLy8gYmVpbmcgfGxlbmd0aHwuIHwqYmVnaW58IHdpbGwgYmUg
dXBkYXRlZCB0byBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIKKy8vIGNvbnN1bWVkICh3ZSBt
YXkgY29uc3VtZSBtb3JlIHRoYW4gb25lIGZvciBVVEYtMTYpIHNvIHRoYXQgaWYgY2FsbGVkIGlu
CisvLyBhIGxvb3AsIGluY3JlbWVudGluZyB0aGUgcG9pbnRlciB3aWxsIG1vdmUgdG8gdGhlIG5l
eHQgY2hhcmFjdGVyLgorLy8KKy8vIEV2ZXJ5IHNpbmdsZSBvdXRwdXQgY2hhcmFjdGVyIHdpbGwg
YmUgZXNjYXBlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdQorLy8gZ2l2ZSBpdCBhbiBBU0NJSSBj
aGFyYWN0ZXIgYXMgaW5wdXQsIGl0IHdpbGwgYmUgZXNjYXBlZC4gU29tZSBjb2RlIHVzZXMKKy8v
IHRoaXMgd2hlbiBpdCBrbm93cyB0aGF0IGEgY2hhcmFjdGVyIGlzIGludmFsaWQgYWNjb3JkaW5n
IHRvIGl0cyBydWxlcworLy8gZm9yIHZhbGlkaXR5LiBJZiB5b3UgZG9uJ3Qgd2FudCBlc2NhcGlu
ZyBmb3IgQVNDSUkgY2hhcmFjdGVycywgeW91IHdpbGwKKy8vIGhhdmUgdG8gZmlsdGVyIHRoZW0g
b3V0IHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vCisvLyBBc3N1bWVzIHRoYXQg
Y2hbYmVnaW5dIGlzIHdpdGhpbiByYW5nZSBpbiB0aGUgYXJyYXksIGJ1dCBkb2VzIG5vdCBhc3N1
bWUKKy8vIHRoYXQgYW55IGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZS4KK2lubGluZSBib29sIEFw
cGVuZFVURjhFc2NhcGVkQ2hhcihjb25zdCBVQ2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVu
Z3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICAvLyBVVEYtMTYgaW5wdXQuIFJl
YWRVQ2hhciB3aWxsIGhhbmRsZSBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIHVzIGFuZCBnaXZlCisg
ICAgLy8gdXMgdGhlIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIsIHNvIHdlIGRvbid0IGhh
dmUgdG8gZG8gc3BlY2lhbAorICAgIC8vIGNoZWNraW5nIGFmdGVyIGZhaWx1cmUsIGp1c3QgcGFz
cyB0aHJvdWdoIHRoZSBmYWlsdXJlIHRvIHRoZSBjYWxsZXIuCisgICAgdW5zaWduZWQgY2hhcmFj
dGVydmFsdWU7CisgICAgYm9vbCBzdWNjZXNzID0gcmVhZFVURkNoYXIoc3RyLCBiZWdpbiwgbGVu
Z3RoLCAmY2hhcmFjdGVydmFsdWUpOworICAgIEFwcGVuZFVURjhFc2NhcGVkVmFsdWUoY2hhcmFj
dGVydmFsdWUsIG91dHB1dCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIEhhbmRsZXMg
VVRGLTggaW5wdXQuIFNlZSB0aGUgd2lkZSB2ZXJzaW9uIGFib3ZlIGZvciB1c2FnZS4KK2lubGlu
ZSBib29sIEFwcGVuZFVURjhFc2NhcGVkQ2hhcihjb25zdCBjaGFyKiBzdHIsIGludCogYmVnaW4s
IGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIFJlYWRVVEY4
Q2hhciB3aWxsIGhhbmRsZSBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIHVzIGFuZCBnaXZlIHVzIHRo
ZQorICAgIC8vIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIsIHNvIHdlIGRvbid0IGhhdmUg
dG8gZG8gc3BlY2lhbCBjaGVja2luZworICAgIC8vIGFmdGVyIGZhaWx1cmUsIGp1c3QgcGFzcyB0
aHJvdWdoIHRoZSBmYWlsdXJlIHRvIHRoZSBjYWxsZXIuCisgICAgdW5zaWduZWQgY2g7CisgICAg
Ym9vbCBzdWNjZXNzID0gcmVhZFVURkNoYXIoc3RyLCBiZWdpbiwgbGVuZ3RoLCAmY2gpOworICAg
IEFwcGVuZFVURjhFc2NhcGVkVmFsdWUoY2gsIG91dHB1dCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7
Cit9CisKKy8vIEdpdmVuIGEgJyUnIGNoYXJhY3RlciBhdCB8KmJlZ2lufCBpbiB0aGUgc3RyaW5n
IHxzcGVjfCwgdGhpcyB3aWxsIGRlY29kZQorLy8gdGhlIGVzY2FwZWQgdmFsdWUgYW5kIHB1dCBp
dCBpbnRvIHwqdW5lc2NhcGVkVmFsdWV8IG9uIHN1Y2Nlc3MgKHJldHVybnMKKy8vIHRydWUpLiBP
biBmYWlsdXJlLCB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlLCBhbmQgd2lsbCBub3Qgd3JpdGUgaW50
bworLy8gfCp1bmVzY2FwZWRWYWx1ZXwuCisvLworLy8gfCpiZWdpbnwgd2lsbCBiZSB1cGRhdGVk
IHRvIHBvaW50IHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgZXNjYXBlCisvLyBzZXF1ZW5j
ZSBzbyB0aGF0IHdoZW4gY2FsbGVkIHdpdGggdGhlIGluZGV4IG9mIGEgZm9yIGxvb3AsIHRoZSBu
ZXh0IHRpbWUKKy8vIHRocm91Z2ggaXQgd2lsbCBwb2ludCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIg
dG8gYmUgY29uc2lkZXJlZC4gT24gZmFpbHVyZSwKKy8vIHwqYmVnaW58IHdpbGwgYmUgdW5jaGFu
Z2VkLgoraW5saW5lIGJvb2wgSXM4Qml0Q2hhcihjaGFyKQoreworICAgIHJldHVybiB0cnVlOyAv
LyB0aGlzIGNhc2UgaXMgc3BlY2lhbGl6ZWQgdG8gYXZvaWQgYSB3YXJuaW5nCit9CitpbmxpbmUg
Ym9vbCBJczhCaXRDaGFyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGMgPD0gMjU1OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgoraW5saW5lIGJvb2wgRGVjb2RlRXNjYXBlZChjb25zdCBD
SEFSKiBzcGVjLCBpbnQqIGJlZ2luLCBpbnQgZW5kLCB1bnNpZ25lZCBjaGFyKiB1bmVzY2FwZWRW
YWx1ZSkKK3sKKyAgICBpZiAoKmJlZ2luICsgMyA+IGVuZCB8fCAhSXM4Qml0Q2hhcihzcGVjWypi
ZWdpbiArIDFdKSB8fCAhSXM4Qml0Q2hhcihzcGVjWypiZWdpbiArIDJdKSkgeworICAgICAgICAv
LyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBiZWNhdXNlIHRoZXJlJ3Mgbm90IGVub3VnaCByb29t
LCBvciB0aGUKKyAgICAgICAgLy8gZGlnaXRzIGFyZSBub3QgQVNDSUkuCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oc3BlY1sqYmVnaW4gKyAxXSk7CisgICAgdW5zaWduZWQgY2hhciBzZWNv
bmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjWypiZWdpbiArIDJdKTsKKyAgICBp
ZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc0hleENoYXIoZmlyc3QpIHx8ICFVUkxDaGFyYWN0ZXJU
eXBlczo6aXNIZXhDaGFyKHNlY29uZCkpIHsKKyAgICAgICAgLy8gSW52YWxpZCBoZXggZGlnaXRz
LCBmYWlsLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVmFsaWQgZXNj
YXBlIHNlcXVlbmNlLgorICAgICp1bmVzY2FwZWRWYWx1ZSA9IChoZXhDaGFyVG9WYWx1ZShmaXJz
dCkgPDwgNCkgKyBoZXhDaGFyVG9WYWx1ZShzZWNvbmQpOworICAgICpiZWdpbiArPSAyOworICAg
IHJldHVybiB0cnVlOworfQorCisvLyBBcHBlbmRzIHRoZSBnaXZlbiBzdWJzdHJpbmcgdG8gdGhl
IG91dHB1dCwgZXNjYXBpbmcgInNvbWUiIGNoYXJhY3RlcnMgdGhhdAorLy8gaXQgZmVlbHMgbWF5
IG5vdCBiZSBzYWZlLiBJdCBhc3N1bWVzIHRoZSBpbnB1dCB2YWx1ZXMgYXJlIGFsbCBjb250YWlu
ZWQgaW4KKy8vIDgtYml0IGFsdGhvdWdoIGl0IGFsbG93cyBhbnkgdHlwZS4KKy8vCisvLyBUaGlz
IGlzIHVzZWQgaW4gZXJyb3IgY2FzZXMgdG8gYXBwZW5kIGludmFsaWQgb3V0cHV0IHNvIHRoYXQg
aXQgbG9va3MKKy8vIGFwcHJveGltYXRlbHkgY29ycmVjdC4gTm9uLWVycm9yIGNhc2VzIHNob3Vs
ZCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHNpbmNlCisvLyB0aGUgZXNjYXBpbmcgcnVsZXMgYXJl
IG5vdCBndWFyYW50ZWVkIQordm9pZCBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKGNvbnN0IGNo
YXIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwor
dm9pZCBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgYmVn
aW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKKworLy8gTWlzYyBjYW5vbmlj
YWxpemF0aW9uIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisvLyBDb252ZXJ0cyBiZXR3ZWVuIFVURi04IGFuZCBVVEYtMTYsIHJldHVybmlu
ZyB0cnVlIG9uIHN1Y2Nlc3NmdWwgY29udmVyc2lvbi4KKy8vIFRoZSBvdXRwdXQgd2lsbCBiZSBh
cHBlbmRlZCB0byB0aGUgZ2l2ZW4gY2Fub25pY2FsaXplciBvdXRwdXQgKHNvIG1ha2Ugc3VyZQor
Ly8gaXQncyBlbXB0eSBpZiB5b3Ugd2FudCB0byByZXBsYWNlKS4KKy8vCisvLyBPbiBpbnZhbGlk
IGlucHV0LCB0aGlzIHdpbGwgc3RpbGwgd3JpdGUgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUs
CisvLyByZXBsYWNpbmcgdGhlIGludmFsaWQgY2hhcmFjdGVycyB3aXRoIHRoZSAiaW52YWxpZCBj
aGFyYWN0ZXIiLiBJdCB3aWxsCisvLyByZXR1cm4gZmFsc2UgaW4gdGhlIGZhaWx1cmUgY2FzZSwg
YW5kIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBjb250aW51ZSBhcworLy8gbm9ybWFsLgorYm9vbCBD
b252ZXJ0VVRGMTZUb1VURjgoY29uc3QgVUNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKK2Jvb2wgQ29udmVydFVURjhUb1VURjE2KGNvbnN0IGNo
YXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCk7CisK
Ky8vIENvbnZlcnRzIGZyb20gVVRGLTE2IHRvIDgtYml0IHVzaW5nIHRoZSBjaGFyYWN0ZXIgc2V0
IGNvbnZlcnRlci4gSWYgdGhlCisvLyBjb252ZXJ0ZXIgaXMgbnVsbCwgdGhpcyB3aWxsIHVzZSBV
VEYtOC4KK3ZvaWQgQ29udmVydFVURjE2VG9RdWVyeUVuY29kaW5nKGNvbnN0IFVDaGFyKiBpbnB1
dCwgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hhcnNldENvbnZlcnRlciosIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0KTsKKworLy8gQXBwbGllcyB0aGUgcmVwbGFjZW1lbnRzIHRvIHRoZSBn
aXZlbiBjb21wb25lbnQgc291cmNlLiBUaGUgY29tcG9uZW50IHNvdXJjZQorLy8gc2hvdWxkIGJl
IHByZS1pbml0aWFsaXplZCB0byB0aGUgIm9sZCIgYmFzZS4gVGhhdCBpcywgYWxsIHBvaW50ZXJz
IHdpbGwKKy8vIHBvaW50IHRvIHRoZSBzcGVjIG9mIHRoZSBvbGQgVVJMLCBhbmQgYWxsIG9mIHRo
ZSBQYXJzZWQgY29tcG9uZW50cyB3aWxsCisvLyBiZSBpbmRpY2VzIGludG8gdGhhdCBzdHJpbmcu
CisvLworLy8gVGhlIHBvaW50ZXJzIGFuZCBjb21wb25lbnRzIGluIHRoZSB8c291cmNlfCBmb3Ig
YWxsIG5vbi1udWxsIHN0cmluZ3MgaW4gdGhlCisvLyB8cmVwbHwgKHJlcGxhY2VtZW50cykgd2ls
bCBiZSB1cGRhdGVkIHRvIHJlZmVyZW5jZSB0aG9zZSBzdHJpbmdzLgorLy8gQ2Fub25pY2FsaXpp
bmcgd2l0aCB0aGUgbmV3IHxzb3VyY2V8IGFuZCB8cGFyc2VkfCBjYW4gdGhlbiBjb21iaW5lIFVS
TAorLy8gY29tcG9uZW50cyBmcm9tIG1hbnkgZGlmZmVyZW50IHN0cmluZ3MuCit2b2lkIFNldHVw
T3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFNlZ21lbnRzKiBwYXJzZWQpOworCisvLyBMaWtlIHRoZSBhYm92ZSA4LWJp
dCB2ZXJzaW9uLCBleGNlcHQgdGhhdCBpdCBhZGRpdGlvbmFsbHkgY29udmVydHMgdGhlCisvLyBV
VEYtMTYgaW5wdXQgdG8gVVRGLTggYmVmb3JlIGRvaW5nIHRoZSBvdmVycmlkZXMuCisvLworLy8g
VGhlIGdpdmVuIHV0ZjhCdWZmZXIgaXMgdXNlZCB0byBzdG9yZSB0aGUgY29udmVydGVkIGNvbXBv
bmVudHMuIFRoZXkgd2lsbAorLy8gYmUgYXBwZW5kZWQgb25lIGFmdGVyIGFub3RoZXIsIHdpdGgg
dGhlIHBhcnNlZCBzdHJ1Y3R1cmUgaWRlbnRpZnlpbmcgdGhlCisvLyBhcHByb3ByaWF0ZSBzdWJz
dHJpbmdzLiBUaGlzIGJ1ZmZlciBpcyBhIHBhcmFtZXRlciBiZWNhdXNlIHRoZSBzb3VyY2UgaGFz
CisvLyBubyBzdG9yYWdlLCBzbyB0aGUgYnVmZmVyIG11c3QgaGF2ZSB0aGUgc2FtZSBsaWZldGlt
ZSBhcyB0aGUgc291cmNlCisvLyBwYXJhbWV0ZXIgb3duZWQgYnkgdGhlIGNhbGxlci4KKy8vCisv
LyBUSEUgQ0FMTEVSIE1VU1QgTk9UIEFERCBUTyBUSEUgfHV0ZjhCdWZmZXJ8IEFGVEVSIFRISVMg
Q0FMTC4gTWVtYmVycyBvZgorLy8gfHNvdXJjZXwgd2lsbCBwb2ludCBpbnRvIHRoaXMgYnVmZmVy
LCB3aGljaCBjb3VsZCBiZSBpbnZhbGlkYXRlZCBpZgorLy8gYWRkaXRpb25hbCBkYXRhIGlzIGFk
ZGVkIGFuZCB0aGUgQ2Fub25PdXRwdXQgcmVzaXplcyBpdHMgYnVmZmVyLgorLy8KKy8vIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzLiBGYWxlcyBtZWFucyB0aGF0IHRoZSBpbnB1dCB3YXMgbm90IHZh
bGlkIFVURi0xNiwKKy8vIGFsdGhvdWdoIHdlIHdpbGwgaGF2ZSBzdGlsbCBkb25lIHRoZSBvdmVy
cmlkZSB3aXRoICJpbnZhbGlkIGNoYXJhY3RlcnMiIGluCisvLyBwbGFjZSBvZiBlcnJvcnMuCiti
b29sIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoY29uc3QgY2hhciogYmFzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIHV0ZjhC
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50U291
cmNlPGNoYXI+KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogcGFyc2VkKTsKKworLy8gSW1wbGVtZW50ZWQgaW4gVVJMQ2Fub25pY2FsaXplcl9wYXRoLmNj
LCB0aGVzZSBhcmUgcmVxdWlyZWQgYnkgdGhlIHJlbGF0aXZlIFVSTAorLy8gcmVzb2x2ZXIgYXMg
d2VsbCwgc28gd2UgZGVjbGFyZSB0aGVtIGhlcmUuCitib29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQ
YXRoKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBh
dGhCZWdpbkluT3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCk7Citib29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKGNvbnN0IFVDaGFy
KiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
OworCisjaWYgIU9TKFdJTkRPV1MpCisvLyBJbXBsZW1lbnRhdGlvbnMgb2YgV2luZG93cycgaW50
LXRvLXN0cmluZyBjb252ZXJzaW9ucworaW50IF9pdG9hX3MoaW50IHZhbHVlLCBjaGFyKiBidWZm
ZXIsIHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KTsKK2ludCBfaXRvd19zKGludCB2YWx1
ZSwgVUNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJzLCBpbnQgcmFkaXgpOworCisvLyBT
ZWN1cmUgdGVtcGxhdGUgb3ZlcmxvYWRzIGZvciB0aGVzZSBmdW5jdGlvbnMKK3RlbXBsYXRlPHNp
emVfdCBOPgoraW5saW5lIGludCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciAoJmJ1ZmZlcilbTl0s
IGludCByYWRpeCkKK3sKKyAgICByZXR1cm4gX2l0b2Ffcyh2YWx1ZSwgYnVmZmVyLCBOLCByYWRp
eCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBOPgoraW5saW5lIGludCBfaXRvd19zKGludCB2YWx1
ZSwgVUNoYXIgKCZidWZmZXIpW05dLCBpbnQgcmFkaXgpCit7CisgICAgcmV0dXJuIF9pdG93X3Mo
dmFsdWUsIGJ1ZmZlciwgTiwgcmFkaXgpOworfQorCisvLyBfc3RydG91aTY0IGFuZCBzdHJ0b3Vs
bCBiZWhhdmUgdGhlIHNhbWUKK2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX3N0cnRvdWk2NChj
b25zdCBjaGFyKiBucHRyLCBjaGFyKiogZW5kcHRyLCBpbnQgYmFzZSkKK3sKKyAgICByZXR1cm4g
c3RydG91bGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKK30KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQor
Cit9IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVSTENhbm9uSW50ZXJuYWxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbk1haWx0by5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uTWFpbHRvLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWJh
ZjFkYjEzMGMyN2Y0ZmI5YWRmMWE1N2EzMjFmMDk1Mzk1ZGNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbk1haWx0by5jcHAKQEAgLTAsMCArMSwxNDcg
QEAKKy8vIENvcHlyaWdodCAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gRnVuY3Rpb25zIGZv
ciBjYW5vbmljYWxpemluZyAibWFpbHRvOiIgVVJMcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNs
dWRlICJVUkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUg
IlVSTFBhcnNlSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYg
eworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKKwordGVt
cGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvQ2Fub25pY2FsaXpl
TWFpbHRvVVJMKGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxDSEFSPiYgc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICAv
LyBtYWlsdG86IG9ubHkgdXNlcyB7c2NoZW1lLCBwYXRoLCBxdWVyeX0gLS0gY2xlYXIgdGhlIHJl
c3QuCisgICAgb3V0cHV0UGFyc2VkLT51c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOworICAgIG91
dHB1dFBhcnNlZC0+cGFzc3dvcmQgPSBVUkxDb21wb25lbnQoKTsKKyAgICBvdXRwdXRQYXJzZWQt
Pmhvc3QgPSBVUkxDb21wb25lbnQoKTsKKyAgICBvdXRwdXRQYXJzZWQtPnBvcnQgPSBVUkxDb21w
b25lbnQoKTsKKyAgICBvdXRwdXRQYXJzZWQtPmZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisK
KyAgICAvLyBTY2hlbWUgKGtub3duLCBzbyB3ZSBkb24ndCBib3RoZXIgcnVubmluZyBpdCB0aHJv
dWdoIHRoZSBtb3JlCisgICAgLy8gY29tcGxpY2F0ZWQgc2NoZW1lIGNhbm9uaWNhbGl6ZXIpLgor
ICAgIG91dHB1dFBhcnNlZC0+c2NoZW1lLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAg
b3V0cHV0LmFwcGVuZCgibWFpbHRvOiIsIDcpOworICAgIG91dHB1dFBhcnNlZC0+c2NoZW1lLnNl
dExlbmd0aCg2KTsKKworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBQYXRoCisg
ICAgaWYgKHBhcnNlZC5wYXRoLmlzVmFsaWQoKSkgeworICAgICAgICBvdXRwdXRQYXJzZWQtPnBh
dGguc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKworICAgICAgICAvLyBDb3B5IHRoZSBwYXRo
IHVzaW5nIHBhdGggVVJMJ3MgbW9yZSBsYXggZXNjYXBpbmcgcnVsZXMuCisgICAgICAgIC8vIFdl
IGNvbnZlcnQgdG8gVVRGLTggYW5kIGVzY2FwZSBub24tQVNDSUksIGJ1dCBsZWF2ZSBhbGwKKyAg
ICAgICAgLy8gQVNDSUkgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAgaW50IGVuZCA9IHBhcnNl
ZC5wYXRoLmVuZCgpOworICAgICAgICBmb3IgKGludCBpID0gcGFyc2VkLnBhdGguYmVnaW4oKTsg
aSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxVQ0hB
Uj4oc291cmNlLnBhdGhbaV0pOworICAgICAgICAgICAgaWYgKHVjaCA8IDB4MjAgfHwgdWNoID49
IDB4ODApCisgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSBBcHBlbmRVVEY4RXNjYXBlZENoYXIo
c291cmNlLnBhdGgsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih1Y2gpKTsKKyAgICAgICAg
fQorCisgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgp
IC0gb3V0cHV0UGFyc2VkLT5wYXRoLmJlZ2luKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE5vIHBhdGggYXQgYWxsCisgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aC5yZXNldCgpOworICAg
IH0KKworICAgIC8vIFF1ZXJ5IC0tIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgdXRmOCBjaGFyc2V0
IGNvbnZlcnRlci4KKyAgICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnksIHBhcnNlZC5x
dWVyeSwgMCwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisKKyAgICByZXR1cm4gc3Vj
Y2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBDYW5vbmljYWxpemVNYWlsdG9VUkwo
Y29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHNwZWNM
ZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQor
eworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZU1haWx0b1VSTDxjaGFyLCB1bnNpZ25lZCBjaGFy
PihVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4oc3BlYyksIHBhcnNlZCwgb3V0cHV0LCBvdXRwdXRQ
YXJzZWQpOworfQorCitib29sIENhbm9uaWNhbGl6ZU1haWx0b1VSTChjb25zdCBVQ2hhciogc3Bl
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICovLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1
cm4gRG9DYW5vbmljYWxpemVNYWlsdG9VUkw8VUNoYXIsIFVDaGFyPihVUkxDb21wb25lbnRTb3Vy
Y2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9v
bCBSZXBsYWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgVVJM
U2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4g
c291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBT
ZXR1cE92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJz
ZWQpOworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZU1haWx0b1VSTDxjaGFyLCB1bnNpZ25lZCBj
aGFyPihzb3VyY2UsIHBhcnNlZCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIFJl
cGxhY2VNYWlsdG9VUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKKyAg
ICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRz
IHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJh
c2UsIHJlcGxhY2VtZW50cywgdXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERv
Q2Fub25pY2FsaXplTWFpbHRvVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2Vk
LCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNh
bGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwIGIvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxM2ZjMTc1YmEx
YzkyMjY4ZGY5MDc5NGVmNzQ0OTUzY2JjMTlhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aC5jcHAKQEAgLTAsMCArMSwzOTAgQEAKKy8vIENv
cHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vIENhbm9uaWNhbGl6YXRpb24gZnVuY3Rp
b25zIGZvciB0aGUgcGF0aHMgb2YgVVJMcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVk
ZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdU
RiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsKKworZW51
bSBDaGFyYWN0ZXJGbGFncyB7CisgICAgLy8gUGFzcyB0aHJvdWdoIHVuY2hhbmdlZCwgd2hldGhl
ciBlc2NhcGVkIG9yIHVuZXNjYXBlZC4gVGhpcyBkb2Vzbid0CisgICAgLy8gYWN0dWFsbHkgc2V0
IGFueXRoaW5nIHNvIHlvdSBjYW4ndCBPUiBpdCB0byBjaGVjaywgaXQncyBqdXN0IHRvIG1ha2Ug
dGhlCisgICAgLy8gdGFibGUgYmVsb3cgbW9yZSBjbGVhciB3aGVuIG5laXRoZXIgRVNDQVBFIG9y
IFVORVNDQVBFIGlzIHNldC4KKyAgICBQQVNTID0gMCwKKworICAgIC8vIFRoaXMgY2hhcmFjdGVy
IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgaW4gRG9QYXJ0aWFsUGF0aC4gRG9pbmcgdGhpcyB0
ZXN0CisgICAgLy8gZmlyc3QgYWxsb3dzIHVzIHRvIGZpbHRlciBvdXQgdGhlIGNvbW1vbiBjYXNl
cyBvZiByZWd1bGFyIGNoYXJhY3RlcnMgdGhhdAorICAgIC8vIGNhbiBiZSBkaXJlY3RseSBjb3Bp
ZWQuCisgICAgU1BFQ0lBTCA9IDEsCisKKyAgICAvLyBUaGlzIGNoYXJhY3RlciBtdXN0IGJlIGVz
Y2FwZWQgaW4gdGhlIGNhbm9uaWNhbCBvdXRwdXQuIE5vdGUgdGhhdCBhbGwKKyAgICAvLyBlc2Nh
cGVkIGNoYXJzIGFsc28gaGF2ZSB0aGUgInNwZWNpYWwiIGJpdCBzZXQgc28gdGhhdCB0aGUgY29k
ZSB0aGF0IGxvb2tzCisgICAgLy8gZm9yIHRoaXMgaXMgdHJpZ2dlcmVkLiBOb3QgdmFsaWQgd2l0
aCBQQVNTIG9yIEVTQ0FQRQorICAgIEVTQ0FQRV9CSVQgPSAyLAorICAgIEVTQ0FQRSA9IEVTQ0FQ
RV9CSVQgfCBTUEVDSUFMLAorCisgICAgLy8gVGhpcyBjaGFyYWN0ZXIgbXVzdCBiZSB1bmVzY2Fw
ZWQgaW4gY2Fub25pY2FsIG91dHB1dC4gTm90IHZhbGlkIHdpdGgKKyAgICAvLyBFU0NBUEUgb3Ig
UEFTUy4gV2UgRE9OJ1Qgc2V0IHRoZSBTUEVDSUFMIGZsYWcgc2luY2UgaWYgd2UgZW5jb3VudGVy
IHRoZXNlCisgICAgLy8gY2hhcmFjdGVycyB1bmVzY2FwZWQsIHRoZXkgc2hvdWxkIGp1c3QgYmUg
Y29waWVkLgorICAgIFVORVNDQVBFID0gNCwKKworICAgIC8vIFRoaXMgY2hhcmFjdGVyIGlzIGRp
c2FsbG93ZWQgaW4gVVJMcy4gTm90ZSB0aGF0IHRoZSAic3BlY2lhbCIgYml0IGlzIGFsc28KKyAg
ICAvLyBzZXQgdG8gdHJpZ2dlciBoYW5kbGluZy4KKyAgICBJTlZBTElEX0JJVCA9IDgsCisgICAg
SU5WQUxJRCA9IElOVkFMSURfQklUIHwgU1BFQ0lBTCwKK307CisKKy8vIFRoaXMgdGFibGUgY29u
dGFpbnMgb25lIG9mIHRoZSBhYm92ZSBmbGFnIHZhbHVlcy4gTm90ZSBzb21lIGZsYWdzIGFyZSBt
b3JlCisvLyB0aGFuIG9uZSBiaXRzIGJlY2F1c2UgdGhleSBhbHNvIHR1cm4gb24gdGhlICJzcGVj
aWFsIiBmbGFnLiBTcGVjaWFsIGlzIHRoZQorLy8gb25seSBmbGFnIHRoYXQgbWF5IGJlIGNvbWJp
bmVkIHdpdGggb3RoZXJzLgorLy8KKy8vIFRoaXMgdGFibGUgaXMgZGVzaWduZWQgdG8gbWF0Y2gg
ZXhhY3RseSB3aGF0IElFIGRvZXMgd2l0aCB0aGUgY2hhcmFjdGVycy4KKy8vCisvLyBEb3QgaXMg
ZXZlbiBtb3JlIHNwZWNpYWwsIGFuZCB0aGUgZXNjYXBlZCB2ZXJzaW9uIGlzIGhhbmRsZWQgc3Bl
Y2lhbGx5IGJ5CisvLyBpc0RvdC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRoZSAiZXNjYXBl
IiBmbGFnLCBhbmQgZXZlbiB0aGUgInVuZXNjYXBlIgorLy8gYml0IGlzIG5ldmVyIGhhbmRsZWQg
KHdlIGp1c3QgbmVlZCB0aGUgInNwZWNpYWwiKSBiaXQuCitjb25zdCB1bnNpZ25lZCBjaGFyIGtQ
YXRoQ2hhckxvb2t1cFsweDEwMF0gPSB7CisvLyAgIG51bGwgICAgIGNvbnRyb2wgY2hhcnMuLi4K
KyAgICAgSU5WQUxJRCwgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorLy8gICBj
b250cm9sIGNoYXJzLi4uCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwKKy8vICAgJyAnICAgICAgICEgICAgICAgICAiICAgICAgICAgIyAgICAgICAgICQg
ICAgICAgICAlICAgICAgICAgJiAgICAgICAgICcgICAgICAgICAoICAgICAgICAgKSAgICAgICAg
ICogICAgICAgICArICAgICAgICAgLCAgICAgICAgIC0gICAgICAgICAuICAgICAgICAgLworICAg
ICBFU0NBUEUsICAgUEFTUywgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgUEFTUywgICAgIEVTQ0FQ
RSwgICBQQVNTLCAgICAgUEFTUywgICAgIFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywgICAgIFBB
U1MsICAgICBQQVNTLCAgICAgVU5FU0NBUEUsIFNQRUNJQUwsICBQQVNTLAorLy8gICAwICAgICAg
ICAgMSAgICAgICAgIDIgICAgICAgICAzICAgICAgICAgNCAgICAgICAgIDUgICAgICAgICA2ICAg
ICAgICAgNyAgICAgICAgIDggICAgICAgICA5ICAgICAgICAgOiAgICAgICAgIDsgICAgICAgICA8
ICAgICAgICAgPSAgICAgICAgICA+ICAgICAgICA/CisgICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBQQVNTLCAgICAgUEFTUywgICAgIEVTQ0FQRSwgICBQQVNT
LCAgICAgRVNDQVBFLCAgIEVTQ0FQRSwKKy8vICAgQCAgICAgICAgIEEgICAgICAgICBCICAgICAg
ICAgQyAgICAgICAgIEQgICAgICAgICBFICAgICAgICAgRiAgICAgICAgIEcgICAgICAgICBIICAg
ICAgICAgSSAgICAgICAgIEogICAgICAgICBLICAgICAgICAgTCAgICAgICAgIE0gICAgICAgICBO
ICAgICAgICAgTworICAgICBQQVNTLCAgICAgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwKKy8vICAgUCAgICAgICAgIFEgICAgICAgICBSICAgICAgICAgUyAgICAgICAgIFQgICAg
ICAgICBVICAgICAgICAgViAgICAgICAgIFcgICAgICAgICBYICAgICAgICAgWSAgICAgICAgIFog
ICAgICAgICBbICAgICAgICAgXCAgICAgICAgIF0gICAgICAgICBeICAgICAgICAgXworICAgICBV
TkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFBBU1Ms
ICAgICBFU0NBUEUsICAgUEFTUywgICAgIEVTQ0FQRSwgICBVTkVTQ0FQRSwKKy8vICAgYCAgICAg
ICAgIGEgICAgICAgICBiICAgICAgICAgYyAgICAgICAgIGQgICAgICAgICBlICAgICAgICAgZiAg
ICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAgICAgICAgIGogICAgICAgICBrICAgICAgICAg
bCAgICAgICAgIG0gICAgICAgICBuICAgICAgICAgbworICAgICBFU0NBUEUsICAgVU5FU0NBUEUs
IFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5F
U0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwKKy8vICAgcCAgICAgICAgIHEgICAgICAgICByICAg
ICAgICAgcyAgICAgICAgIHQgICAgICAgICB1ICAgICAgICAgdiAgICAgICAgIHcgICAgICAgICB4
ICAgICAgICAgeSAgICAgICAgIHogICAgICAgICB7ICAgICAgICAgfCAgICAgICAgIH0gICAgICAg
ICB+ICAgICAgICAgPE5CU1A+CisgICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVO
RVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUs
IFVORVNDQVBFLCBVTkVTQ0FQRSwgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgVU5FU0NB
UEUsIEVTQ0FQRSwKKy8vICAgLi4uYWxsIHRoZSBoaWdoLWJpdCBjaGFyYWN0ZXJzIGFyZSBlc2Nh
cGVkCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKyAg
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorICAgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFfTsKKworZW51bSBEb3REaXNwb3NpdGlvbiB7CisgICAgLy8gVGhlIGdpdmVuIGRvdCBpcyBq
dXN0IHBhcnQgb2YgYSBmaWxlbmFtZSBhbmQgaXMgbm90IHNwZWNpYWwuCisgICAgTk9UX0FfRElS
RUNUT1JZLAorCisgICAgLy8gVGhlIGdpdmVuIGRvdCBpcyB0aGUgY3VycmVudCBkaXJlY3Rvcnku
CisgICAgRElSRUNUT1JZX0NVUiwKKworICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMgdGhlIGZpcnN0
IG9mIGEgZG91YmxlIGRvdCB0aGF0IHNob3VsZCB0YWtlIHVzIHVwIG9uZS4KKyAgICBESVJFQ1RP
UllfVVAKK307CisKKy8vIFdoZW4gdGhlIHBhdGggcmVzb2x2ZXIgZmluZHMgYSBkb3QsIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlCisvLyBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoYXQg
ZG90IHRvIHNlZSB3aGF0IGl0IGlzLiBUaGUgcmV0dXJuIHZhbHVlCisvLyBpbmRpY2F0ZXMgd2hh
dCB0eXBlIHRoaXMgZG90IGlzIChzZWUgYWJvdmUpLiBUaGlzIGNvZGUgaGFuZGxlcyB0aGUgY2Fz
ZQorLy8gd2hlcmUgdGhlIGRvdCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4KKy8vCisvLyB8
KmNvbnN1bWVkTGVuZ3RofCB3aWxsIGNvbnRhaW4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlu
IHRoZSBpbnB1dCB0aGF0CisvLyBleHByZXNzIHdoYXQgd2UgZm91bmQuCisvLworLy8gSWYgdGhl
IGlucHV0IGlzICIuLi9mb28iLCB8YWZ0ZXJEb3R8ID0gMSwgfGVuZHwgPSA2LCBhbmQKKy8vIGF0
IHRoZSBlbmQsIHwqY29uc3VtZWRMZW5ndGh8ID0gMiBmb3IgdGhlICIuLyIgdGhpcyBmdW5jdGlv
biBjb25zdW1lZC4gVGhlCisvLyBvcmlnaW5hbCBkb3QgbGVuZ3RoIHNob3VsZCBiZSBoYW5kbGVk
IGJ5IHRoZSBjYWxsZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorRG90RGlzcG9zaXRpb24g
Q2xhc3NpZnlBZnRlckRvdChjb25zdCBDSEFSKiBzcGVjLCBpbnQgYWZ0ZXJEb3QsIGludCBlbmQs
IGludCogY29uc3VtZWRMZW5ndGgpCit7CisgICAgaWYgKGFmdGVyRG90ID09IGVuZCkgeworICAg
ICAgICAvLyBTaW5nbGUgZG90IGF0IHRoZSBlbmQuCisgICAgICAgICpjb25zdW1lZExlbmd0aCA9
IDA7CisgICAgICAgIHJldHVybiBESVJFQ1RPUllfQ1VSOworICAgIH0KKyAgICBpZiAoVVJMUGFy
c2VyOjppc1VSTFNsYXNoKHNwZWNbYWZ0ZXJEb3RdKSkgeworICAgICAgICAvLyBTaW5nbGUgZG90
IGZvbGxvd2VkIGJ5IGEgc2xhc2guCisgICAgICAgICpjb25zdW1lZExlbmd0aCA9IDE7IC8vIENv
bnN1bWUgdGhlIHNsYXNoCisgICAgICAgIHJldHVybiBESVJFQ1RPUllfQ1VSOworICAgIH0KKwor
ICAgIGludCBzZWNvbmREb3RMZW5ndGggPSBpc0RvdChzcGVjLCBhZnRlckRvdCwgZW5kKTsKKyAg
ICBpZiAoc2Vjb25kRG90TGVuZ3RoKSB7CisgICAgICAgIGludCBhZnRlclNlY29uZERvdCA9IGFm
dGVyRG90ICsgc2Vjb25kRG90TGVuZ3RoOworICAgICAgICBpZiAoYWZ0ZXJTZWNvbmREb3QgPT0g
ZW5kKSB7CisgICAgICAgICAgICAvLyBEb3VibGUgZG90IGF0IHRoZSBlbmQuCisgICAgICAgICAg
ICAqY29uc3VtZWRMZW5ndGggPSBzZWNvbmREb3RMZW5ndGg7CisgICAgICAgICAgICByZXR1cm4g
RElSRUNUT1JZX1VQOworICAgICAgICB9CisgICAgICAgIGlmIChVUkxQYXJzZXI6OmlzVVJMU2xh
c2goc3BlY1thZnRlclNlY29uZERvdF0pKSB7CisgICAgICAgICAgICAvLyBEb3VibGUgZG90IGZv
bGxvd2VkIGJ5IGEgc2xhc2guCisgICAgICAgICAgICAqY29uc3VtZWRMZW5ndGggPSBzZWNvbmRE
b3RMZW5ndGggKyAxOworICAgICAgICAgICAgcmV0dXJuIERJUkVDVE9SWV9VUDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFRoZSBkb3RzIGFyZSBmb2xsb3dlZCBieSBzb21ldGhpbmcgZWxz
ZSwgbm90IGEgZGlyZWN0b3J5LgorICAgICpjb25zdW1lZExlbmd0aCA9IDA7CisgICAgcmV0dXJu
IE5PVF9BX0RJUkVDVE9SWTsKK30KKworLy8gUmV3aW5kcyB0aGUgb3V0cHV0IHRvIHRoZSBwcmV2
aW91cyBzbGFzaC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBvdXRwdXQKKy8vIGVuZHMgd2l0aCBh
IHNsYXNoIGFuZCB0aGlzIGRvZXNuJ3QgY291bnQgKHdlIGNhbGwgdGhpcyB3aGVuIHdlIGFyZQor
Ly8gYXBwZW5kaW5nIGRpcmVjdG9yeSBwYXRocywgc28gdGhlIHByZXZpb3VzIHBhdGggY29tcG9u
ZW50IGhhcyBhbmQgZW5kaW5nCisvLyBzbGFzaCkuCisvLworLy8gVGhpcyB3aWxsIHN0b3AgYXQg
dGhlIGZpcnN0IHNsYXNoIChhc3N1bWVkIHRvIGJlIGF0IHBvc2l0aW9uCisvLyB8cGF0aEJlZ2lu
SW5PdXRwdXR8IGFuZCBub3QgZ28gYW55IGhpZ2hlciB0aGFuIHRoYXQuIFNvbWUgd2ViIHBhZ2Vz
CisvLyBkbyAiLi4iIHRvbyBtYW55IHRpbWVzLCBzbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGF0IGJy
b2tlbm5lc3MuCisvLworLy8gSXQgc2VhcmNoZXMgZm9yIGEgbGl0ZXJhbCBzbGFzaCByYXRoZXIg
dGhhbiBpbmNsdWRpbmcgYSBiYWNrc2xhc2ggYXMgd2VsbAorLy8gYmVjYXVzZSBpdCBpcyBydW4g
b25seSBvbiB0aGUgY2Fub25pY2FsIG91dHB1dC4KKy8vCisvLyBUaGUgb3V0cHV0IGlzIGd1YXJh
bnRlZWQgdG8gZW5kIGluIGEgc2xhc2ggd2hlbiB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlcy4KK3Zv
aWQgQmFja1VwVG9QcmV2aW91c1NsYXNoKGludCBwYXRoQmVnaW5Jbk91dHB1dCwgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQpCit7CisgICAgQVNTRVJUKG91dHB1dC5sZW5ndGgoKSA+IDApOworCisg
ICAgaW50IGkgPSBvdXRwdXQubGVuZ3RoKCkgLSAxOworICAgIEFTU0VSVChvdXRwdXQuYXQoaSkg
PT0gJy8nKTsKKyAgICBpZiAoaSA9PSBwYXRoQmVnaW5Jbk91dHB1dCkKKyAgICAgICAgcmV0dXJu
OyAvLyBXZSdyZSBhdCB0aGUgZmlyc3Qgc2xhc2gsIG5vdGhpbmcgdG8gZG8uCisKKyAgICAvLyBO
b3cgYmFjayB1cCAoc2tpcHBpbmcgdGhlIHRyYWlsaW5nIHNsYXNoKSB1bnRpbCB3ZSBmaW5kIGFu
b3RoZXIgc2xhc2guCisgICAgaS0tOworICAgIHdoaWxlIChvdXRwdXQuYXQoaSkgIT0gJy8nICYm
IGkgPiBwYXRoQmVnaW5Jbk91dHB1dCkKKyAgICAgICAgaS0tOworCisgICAgLy8gTm93IHNocmlu
ayB0aGUgb3V0cHV0IHRvIGp1c3QgaW5jbHVkZSB0aGF0IGxhc3Qgc2xhc2ggd2UgZm91bmQuCisg
ICAgb3V0cHV0LnNldExlbmd0aChpICsgMSk7Cit9CisKKy8vIEFwcGVuZHMgdGhlIGdpdmVuIHBh
dGggdG8gdGhlIG91dHB1dC4gSXQgYXNzdW1lcyB0aGF0IGlmIHRoZSBpbnB1dCBwYXRoCisvLyBz
dGFydHMgd2l0aCBhIHNsYXNoLCBpdCBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQuIElm
IG5vIHBhdGggaGFzCisvLyBhbHJlYWR5IGJlZW4gYXBwZW5kZWQgdG8gdGhlIG91dHB1dCAodGhl
IGNhc2Ugd2hlbiBub3QgcmVzb2x2aW5nCisvLyByZWxhdGl2ZSBVUkxzKSwgdGhlIHBhdGggc2hv
dWxkIGJlZ2luIHdpdGggYSBzbGFzaC4KKy8vCisvLyBJZiB0aGVyZSBhcmUgYWxyZWFkeSBwYXRo
IGNvbXBvbmVudHMgKHRoaXMgbW9kZSBpcyB1c2VkIHdoZW4gYXBwZW5kaW5nCisvLyByZWxhdGl2
ZSBwYXRocyBmb3IgcmVzb2x2aW5nKSwgaXQgYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQgYWxyZWFk
eSBoYXMKKy8vIGEgdHJhaWxpbmcgc2xhc2ggYW5kIHRoYXQgaWYgdGhlIGlucHV0IGJlZ2lucyB3
aXRoIGEgc2xhc2gsIGl0IHNob3VsZCBiZQorLy8gY29waWVkIHRvIHRoZSBvdXRwdXQuCisvLwor
Ly8gV2UgZG8gbm90IGNvbGxhcHNlIG11bHRpcGxlIHNsYXNoZXMgaW4gYSByb3cgdG8gYSBzaW5n
bGUgc2xhc2guIEl0IHNlZW1zCisvLyBubyB3ZWIgYnJvd3NlcnMgZG8gdGhpcywgYW5kIHdlIGRv
bid0IHdhbnQgaW5jb21wYWJhYmlsaXRpZXMsIGV2ZW4gdGhvdWdoCisvLyBpdCB3b3VsZCBiZSBj
b3JyZWN0IGZvciBtb3N0IHN5c3RlbXMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFt
ZSBVQ0hBUj4KK2Jvb2wgRG9QYXJ0aWFsUGF0aChjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICBp
bnQgcGF0aEJlZ2luSW5PdXRwdXQsCisgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQpCit7CisgICAgaW50IGVuZCA9IHBhdGguZW5kKCk7CisKKyAgICBib29sIHN1Y2Nl
c3MgPSB0cnVlOworICAgIGZvciAoaW50IGkgPSBwYXRoLmJlZ2luKCk7IGkgPCBlbmQ7IGkrKykg
eworICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tpXSk7CisgICAg
ICAgIGlmIChzaXplb2YoQ0hBUikgPiBzaXplb2YoY2hhcikgJiYgdWNoID49IDB4ODApIHsKKyAg
ICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byB0ZXN0IHdpZGUgaW5wdXQgZm9yIGhhdmluZyBu
b24tQVNDSUkgY2hhcmFjdGVycy4gRm9yCisgICAgICAgICAgICAvLyBuYXJyb3cgaW5wdXQsIHdl
J2xsIGFsd2F5cyBqdXN0IHVzZSB0aGUgbG9va3VwIHRhYmxlLiBXZSBkb24ndCB0cnkgdG8KKyAg
ICAgICAgICAgIC8vIGRvIGFueXRoaW5nIHRyaWNreSB3aXRoIGRlY29kaW5nL3ZhbGlkYXRpbmcg
VVRGLTguIFRoaXMgZnVuY3Rpb24gd2lsbAorICAgICAgICAgICAgLy8gcmVhZCBvbmUgb3IgdHdv
IFVURi0xNiBjaGFyYWN0ZXJzIGFuZCBhcHBlbmQgdGhlIG91dHB1dCBhcyBVVEYtOC4gVGhpcwor
ICAgICAgICAgICAgLy8gY2FsbCB3aWxsIGJlIHJlbW92ZWQgaW4gOC1iaXQgbW9kZS4KKyAgICAg
ICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRDaGFyKHNwZWMsICZpLCBlbmQsIG91
dHB1dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3JtYWwgQVNDSUkgY2hh
cmFjdGVyIG9yIDgtYml0IGlucHV0LCB1c2UgdGhlIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgb3V0Q2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1Y2gpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBmbGFncyA9IGtQYXRoQ2hhckxvb2t1cFtvdXRDaF07
CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUEVDSUFMKSB7CisgICAgICAgICAgICAgICAgLy8g
TmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBzb21lIHNvcnQuCisgICAgICAgICAgICAgICAgaW50
IGRvdGxlbjsKKyAgICAgICAgICAgICAgICBpZiAoKGRvdGxlbiA9IGlzRG90KHNwZWMsIGksIGVu
ZCkpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhpcyBkb3Qgd2FzIHBy
ZWNlZWRlZCBieSBhIHNsYXNoIGluIHRoZSBvdXRwdXQuIFdlCisgICAgICAgICAgICAgICAgICAg
IC8vIGFzc3VtZSB0aGF0IHdoZW4gY2Fub25pY2FsaXppbmcgcGF0aHMsIHRoZXkgd2lsbCBhbHdh
eXMKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgd2l0aCBhIHNsYXNoIGFuZCBub3QgYSBk
b3QsIHNvIHdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gYm91bmRzIGNo
ZWNrIHRoZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCB3ZSBjaGVjayB0aGlzIGluIHRoZSBjYXNlIG9mIGRvdHMgc28gd2Ug
ZG9uJ3QgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugc2xhc2hl
cy4gU2luY2Ugc2xhc2hlcyBhcmUgbXVjaCBtb3JlIGNvbW1vbiB0aGFuCisgICAgICAgICAgICAg
ICAgICAgIC8vIGRvdHMsIHRoaXMgYWN0dWFsbHkgaW5jcmVhc2VzIHBlcmZvcm1hbmNlIG1lYXN1
cmFibHkgKHRob3VnaAorICAgICAgICAgICAgICAgICAgICAvLyBzbGlnaHRseSkuCisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChvdXRwdXQubGVuZ3RoKCkgPiBwYXRoQmVnaW5Jbk91dHB1dCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKCkgPiBwYXRoQmVnaW5Jbk91
dHB1dCAmJiBvdXRwdXQuYXQob3V0cHV0Lmxlbmd0aCgpIC0gMSkgPT0gJy8nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTbGFzaCBmb2xsb3dlZCBieSBhIGRvdCwgY2hlY2sgdG8gc2Vl
IGlmIHRoaXMgaXMgbWVhbnMgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
b25zdW1lZExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoQ2xhc3NpZnlB
ZnRlckRvdDxDSEFSPihzcGVjLCBpICsgZG90bGVuLCBlbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnN1bWVkTGVuZ3RoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTk9UX0FfRElSRUNUT1JZOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSBkb3QgdG8gdGhlIG91dHB1dCwg
aXQgbWVhbnMgbm90aGluZyBzcGVjaWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkg
Kz0gZG90bGVuIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVJFQ1RPUllfQ1VSOiAvLyBDdXJyZW50
IGRpcmVjdG9yeSwganVzdCBza2lwIHRoZSBpbnB1dC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaSArPSBkb3RsZW4gKyBjb25zdW1lZExlbmd0aCAtIDE7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRElSRUNUT1JZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrVXBU
b1ByZXZpb3VzU2xhc2gocGF0aEJlZ2luSW5PdXRwdXQsIG91dHB1dCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGkgKz0gZG90bGVuICsgY29uc3VtZWRMZW5ndGggLSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgZG90IGlzIG5vdCBwcmVjZWVkZWQgYnkgYSBzbGFzaCwgaXQgaXMganVzdCBw
YXJ0IG9mIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGUgbmFtZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGkgKz0gZG90bGVuIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChvdXRDaCA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIENvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzCisgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
b3V0Q2ggPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBlc2NhcGUgc2Vx
dWVuY2VzLgorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHVuZXNjYXBlZFZhbHVl
OworICAgICAgICAgICAgICAgICAgICBpZiAoRGVjb2RlRXNjYXBlZChzcGVjLCAmaSwgZW5kLCAm
dW5lc2NhcGVkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBlc2Nh
cGUgc2VxdWVuY2UsIHNlZSBpZiB3ZSBrZWVwLCByZWplY3QsIG9yIHVuZXNjYXBlIGl0LgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciB1bmVzY2FwZWRGbGFncyA9IGtQYXRoQ2hhckxvb2t1
cFt1bmVzY2FwZWRWYWx1ZV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2Fw
ZWRGbGFncyAmIFVORVNDQVBFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBlc2NhcGVkIHZhbHVlIHNob3VsZG4ndCBiZSBlc2NhcGVkLCBjb3B5IGl0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQodW5lc2NhcGVkVmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bmVzY2FwZWRGbGFncyAmIElOVkFMSURfQklU
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGVkIGNoYXJh
Y3RlciwgY29weSBpdCBhbmQgcmVtZW1iZXIgdGhlIGVycm9yLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaSAtIDFdKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVj
W2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBWYWxpZCBlc2NhcGVkIGNoYXJhY3RlciBidXQgd2Ugc2hvdWxkIGtlZXAgaXQgZXNjYXBl
ZC4gV2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCB3YW50IHRvIGNoYW5n
ZSB0aGUgY2FzZSBvZiBhbnkgaGV4IGxldHRlcnMgaW4gY2FzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBzZXJ2ZXIgaXMgc2Vuc2l0aXZlIHRvIHRoYXQsIHNvIHdlIGp1c3Qg
Y29weSB0aGUgdHdvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB3
aXRob3V0IGNoZWNraW5nIChEZWNvZGVFc2NhcGUgd2lsbCBoYXZlIGFkdmFuY2VkCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBwYWly
KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclJyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihz
cGVjW2kgLSAxXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
c3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuIElFNyByZWplY3RzIGFueSBVUkxzIHdpdGggc3VjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VxdWVuY2VzLCB3aGlsZSBGaXJlZm94LCBJRTYs
IGFuZCBTYWZhcmkgYWxsIHBhc3MgaXQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdW5jaGFuZ2VkLiBXZSBhcmUgbW9yZSBwZXJtaXNzaXZlIHVubGlrZSBJRTcuIEkgZG9uJ3Qg
dGhpbmsgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIGNhdXNlIHNpZ25pZmlj
YW50IHByb2JsZW1zLCBpZiBpdCBkb2VzLCB3ZSBzaG91bGQgY2hhbmdlCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0byBiZSBtb3JlIGxpa2UgSUU3LgorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgnJScpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgSU5WQUxJRF9CSVQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yIE5VTExzLCBldGMuIGZhaWwuCisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFVSTEVzY2FwZWRDaGFyYWN0ZXIob3V0Q2gsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBF
U0NBUEVfQklUKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hhcmFjdGVyIHNob3Vs
ZCBiZSBlc2NhcGVkLgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFj
dGVyKG91dENoLCBvdXRwdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gTm90aGluZyBzcGVjaWFsIGFib3V0IHRoaXMgY2hhcmFj
dGVyLCBqdXN0IGFwcGVuZCBpdC4KKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKG91dENo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvUGF0
aChjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRo
LAorICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICBVUkxD
b21wb25lbnQqIG91dHB1dFBhdGgpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBv
dXRwdXRQYXRoLT5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGlmIChwYXRoLmxlbmd0
aCgpID4gMCkgeworICAgICAgICAvLyBXcml0ZSBvdXQgYW4gaW5pdGlhbCBzbGFzaCBpZiB0aGUg
aW5wdXQgaGFzIG5vbmUuIElmIHdlIGp1c3QgcGFyc2UgYSBVUkwKKyAgICAgICAgLy8gYW5kIHRo
ZW4gY2Fub25pY2FsaXplIGl0LCBpdCB3aWxsIG9mIGNvdXJzZSBoYXZlIGEgc2xhc2ggYWxyZWFk
eS4gVGhpcworICAgICAgICAvLyBjaGVjayBpcyBmb3IgdGhlIHJlcGxhY2VtZW50IGFuZCByZWxh
dGl2ZSBVUkwgcmVzb2x2aW5nIGNhc2VzIG9mIGZpbGUKKyAgICAgICAgLy8gVVJMcy4KKyAgICAg
ICAgaWYgKCFVUkxQYXJzZXI6OmlzVVJMU2xhc2goc3BlY1twYXRoLmJlZ2luKCldKSkKKyAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKworICAgICAgICBzdWNjZXNzID0gRG9QYXJ0aWFs
UGF0aDxDSEFSLCBVQ0hBUj4oc3BlYywgcGF0aCwgb3V0cHV0UGF0aC0+YmVnaW4oKSwgb3V0cHV0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBpbnB1dCwgY2Fub25pY2FsIHBhdGggaXMg
YSBzbGFzaC4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOworICAgIH0KKyAgICBvdXRwdXRQ
YXRoLT5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGF0aC0+YmVnaW4oKSk7Cisg
ICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgQ2Fub25pY2Fs
aXplUGF0aChjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVS
TENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgp
Cit7CisgICAgcmV0dXJuIERvUGF0aDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBwYXRoLCBv
dXRwdXQsIG91dHB1dFBhdGgpOworfQorCitib29sIENhbm9uaWNhbGl6ZVBhdGgoY29uc3QgVUNo
YXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRo
LAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAg
ICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCkKK3sKKyAgICByZXR1cm4g
RG9QYXRoPFVDaGFyLCBVQ2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCBvdXRwdXRQYXRoKTsKK30K
KworYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBjaGFyKiBzcGVjLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgcmV0dXJu
IERvUGFydGlhbFBhdGg8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcGF0aCwgcGF0aEJlZ2lu
SW5PdXRwdXQsIG91dHB1dCk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplUGFydGlhbFBhdGgoY29u
c3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENv
bXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhdGhCZWdp
bkluT3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCkKK3sKKyAgICByZXR1cm4gRG9QYXJ0aWFsUGF0aDxVQ2hhciwgVUNoYXI+KHNwZWMs
IHBhdGgsIHBhdGhCZWdpbkluT3V0cHV0LCBvdXRwdXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBV
UkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdU
RlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRodXJs
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRodXJsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mODE5Yzg5ZDExNDU1MjNhN2FkOWFhY2ZiZTgzYjU0ZjAwZDY2ZTA3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGh1cmwuY3BwCkBAIC0w
LDAgKzEsMTIwIEBACisvLyBDb3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
Ky8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIEZ1
bmN0aW9ucyBmb3IgY2Fub25pY2FsaXppbmcgInBhdGgiIFVSTHMuIE5vdCB0byBiZSBjb25mdXNl
ZCB3aXRoIHRoZSBwYXRoCisvLyBvZiBhIFVSTCwgdGhlc2UgYXJlIFVSTHMgdGhhdCBoYXZlIG5v
IGF1dGhvcml0eSBzZWN0aW9uLCBvbmx5IGEgcGF0aC4gRm9yCisvLyBleGFtcGxlLCAiamF2YXNj
cmlwdDoiIGFuZCAiZGF0YToiLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJM
Q2Fub24uaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTENhbm9u
SW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1l
c3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBkb0Nhbm9uaWNhbGl6ZVBh
dGhVUkwoY29uc3QgVVJMQ29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+JiBzb3VyY2UsIGNv
bnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdt
ZW50cyYgb3VwdXRQYXJzZWQpCit7CisgICAgLy8gU2NoZW1lOiB0aGlzIHdpbGwgYXBwZW5kIHRo
ZSBjb2xvbi4KKyAgICBib29sIHN1Y2Nlc3MgPSBDYW5vbmljYWxpemVTY2hlbWUoc291cmNlLnNj
aGVtZSwgcGFyc2VkLnNjaGVtZSwgb3V0cHV0LCAmb3VwdXRQYXJzZWQuc2NoZW1lKTsKKworICAg
IC8vIFdlIGFzc3VtZSB0aGVyZSdzIG5vIGF1dGhvcml0eSBmb3IgcGF0aCBVUkxzLiBOb3RlIHRo
YXQgaG9zdHMgc2hvdWxkIG5ldmVyCisgICAgLy8gaGF2ZSAtMSBsZW5ndGguCisgICAgb3VwdXRQ
YXJzZWQudXNlcm5hbWUucmVzZXQoKTsKKyAgICBvdXB1dFBhcnNlZC5wYXNzd29yZC5yZXNldCgp
OworICAgIG91cHV0UGFyc2VkLmhvc3QucmVzZXQoKTsKKyAgICBvdXB1dFBhcnNlZC5wb3J0LnJl
c2V0KCk7CisKKyAgICBpZiAocGFyc2VkLnBhdGguaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIENv
cHkgdGhlIHBhdGggdXNpbmcgcGF0aCBVUkwncyBtb3JlIGxheCBlc2NhcGluZyBydWxlcyAodGhp
bmsgZm9yCisgICAgICAgIC8vIGphdmFzY3JpcHQ6KS4gV2UgY29udmVydCB0byBVVEYtOCBhbmQg
ZXNjYXBlIG5vbi1BU0NJSSwgYnV0IGxlYXZlIGFsbAorICAgICAgICAvLyBBU0NJSSBjaGFyYWN0
ZXJzIGFsb25lLiBUaGlzIGhlbHBzIHJlYWRhYmlsaXR5IG9mIEphdmFTdHJpcHQuCisgICAgICAg
IG91cHV0UGFyc2VkLnBhdGguc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICAgICAgaW50
IGVuZCA9IHBhcnNlZC5wYXRoLmVuZCgpOworICAgICAgICBmb3IgKGludCBpID0gcGFyc2VkLnBh
dGguYmVnaW4oKTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0
aWNfY2FzdDxVQ0hBUj4oc291cmNlLnBhdGhbaV0pOworICAgICAgICAgICAgaWYgKHVjaCA8IDB4
MjAgfHwgdWNoID49IDB4ODApCisgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSBBcHBlbmRVVEY4
RXNjYXBlZENoYXIoc291cmNlLnBhdGgsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih1Y2gp
KTsKKyAgICAgICAgfQorICAgICAgICBvdXB1dFBhcnNlZC5wYXRoLnNldExlbmd0aChvdXRwdXQu
bGVuZ3RoKCkgLSBvdXB1dFBhcnNlZC5wYXRoLmJlZ2luKCkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIEVtcHR5IHBhdGguCisgICAgICAgIG91cHV0UGFyc2VkLnBhdGgucmVzZXQoKTsKKyAg
ICB9CisKKyAgICAvLyBBc3N1bWUgdGhlcmUncyBubyBxdWVyeSBvciByZWYuCisgICAgb3VwdXRQ
YXJzZWQucXVlcnkucmVzZXQoKTsKKyAgICBvdXB1dFBhcnNlZC5mcmFnbWVudC5yZXNldCgpOwor
CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgY2Fub25p
Y2FsaXplUGF0aFVSTChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2Vk
LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKQorewor
ICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJM
Q29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3VwdXRQYXJzZWQp
OworfQorCitib29sIGNhbm9uaWNhbGl6ZVBhdGhVUkwoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0
IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50
cyYgb3VwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplUGF0aFVSTDxVQ2hh
ciwgVUNoYXI+KFVSTENvbXBvbmVudFNvdXJjZTxVQ2hhcj4oc3BlYyksIHBhcnNlZCwgb3V0cHV0
LCBvdXB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgUmVwbGFjZVBhdGhVUkwoY29uc3QgY2hhciogYmFz
ZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsIGNvbnN0IFJlcGxhY2VtZW50czxjaGFy
PiYgcmVwbGFjZW1lbnRzLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91
cHV0UGFyc2VkKQoreworICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7
CisgICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwT3ZlcnJpZGVD
b21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50cywgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0
dXJuIGRvQ2Fub25pY2FsaXplUGF0aFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBh
cnNlZCwgb3V0cHV0LCAqb3VwdXRQYXJzZWQpOworfQorCitib29sIFJlcGxhY2VQYXRoVVJMKGNv
bnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBjb25zdCBSZXBs
YWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBV
UkxTZWdtZW50cyogb3VwdXRQYXJzZWQpCit7CisgICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7
CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdt
ZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50
cyhiYXNlLCByZXBsYWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVy
biBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJz
ZWQsIG91dHB1dCwgKm91cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25p
Y2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUXVlcnkuY3BwIGIvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblF1ZXJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2YyNWEy
MGNkNWI1YmU4MTBhNzE0YmJiYzNiODdjOWY1YTI3MjhiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblF1ZXJ5LmNwcApAQCAtMCwwICsxLDE4NiBAQAor
Ly8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisv
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRp
b24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaD4KKworLy8gUXVlcnkgY2Fub25p
Y2FsaXphdGlvbiBpbiBJRQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSUUg
aXMgdmVyeSBwZXJtaXNzaXZlIGZvciBxdWVyeSBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiBsaW5r
cyBvbiB0aGUgcGFnZQorLy8gKGluIGNvbnRyYXN0IHRvIGxpbmtzIHRoYXQgaXQgY29uc3RydWN0
cyBpdHNlbGYgYmFzZWQgb24gZm9ybSBkYXRhKS4gSXQgZG9lcworLy8gbm90IHVuZXNjYXBlIGFu
eSBjaGFyYWN0ZXIuIEl0IGRvZXMgbm90IHJlamVjdCBhbnkgZXNjYXBlIHNlcXVlbmNlIChiZSB0
aGV5CisvLyBpbnZhbGlkIGxpa2UgIiUyeSIgb3IgZnJlYWt5IGxpa2UgJTAwKS4KKy8vCisvLyBJ
RSBvbmx5IGVzY2FwZXMgc3BhY2VzIGFuZCBub3RoaW5nIGVsc2UuIEVtYmVkZGVkIE5VTExzLCB0
YWJzICgweDA5KSwKKy8vIExGICgweDBhKSwgYW5kIENSICgweDBkKSBhcmUgcmVtb3ZlZCAodGhp
cyBwcm9iYWJseSBoYXBwZW5zIGF0IGFuIGVhcmxpZXIKKy8vIGxheWVyIHNpbmNlIHRoZXkgYXJl
IHJlbW92ZWQgZnJvbSBhbGwgcG9ydGlvbnMgb2YgdGhlIFVSTCkuIEFsbCBvdGhlcgorLy8gY2hh
cmFjdGVycyBhcmUgcGFzc2VkIHVubW9kaWZpZWQuIEludmFsaWQgVVRGLTE2IHNlcXVlbmNlcyBh
cmUgcHJlc2VydmVkIGFzCisvLyB3ZWxsLCB3aXRoIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBpbnB1
dCBiZWluZyBjb252ZXJ0ZWQgdG8gVVRGLTguIEl0IGlzIHRoZQorLy8gc2VydmVyJ3Mgam9iIHRv
IG1ha2Ugc2Vuc2Ugb2YgdGhpcyBpbnZhbGlkIHF1ZXJ5LgorLy8KKy8vIEludmFsaWQgbXVsdGli
eXRlIHNlcXVlbmNlcyAoZm9yIGV4YW1wbGUsIGludmFsaWQgVVRGLTggb24gYSBVVEYtOCBwYWdl
KQorLy8gYXJlIGNvbnZlcnRlZCB0byB0aGUgaW52YWxpZCBjaGFyYWN0ZXIgYW5kIHNlbnQgYXMg
dW5lc2NhcGVkIFVURi04ICgweGVmLAorLy8gMHhiZiwgMHhiZCkuIFRoaXMgbWF5IG5vdCBiZSBj
YW5vbmljYWxpemF0aW9uLCB0aGUgcGFyc2VyIG1heSBnZW5lcmF0ZSB0aGVzZQorLy8gc3RyaW5n
cyBiZWZvcmUgdGhlIFVSTCBoYW5kbGVyIGV2ZXIgc2VlcyB0aGVtLgorLy8KKy8vIE91ciBxdWVy
eSBjYW5vbmljYWxpemF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2Ug
ZXNjYXBlIGFsbCBub24tQVNDSUkgY2hhcmFjdGVycyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLCBs
aWtlIEZpcmVmb3guCisvLyBUaGlzIGlzIG1vcmUgY29uZm9ybWFudCB0byB0aGUgVVJMIHNwZWMs
IGFuZCB0aGVyZSBkbyBub3Qgc2VlbSB0byBiZSBtYW55CisvLyBwcm9ibGVtcyByZWxhdGluZyB0
byBGaXJlZm94J3MgYmVoYXZpb3IuCisvLworLy8gTGlrZSBJRSwgd2Ugd2lsbCBuZXZlciB1bmVz
Y2FwZSAoYWx0aG91Z2ggdGhlIGFwcGxpY2F0aW9uIG1heSB3YW50IHRvIHRyeQorLy8gdW5lc2Nh
cGluZyB0byBwcmVzZW50IHRoZSB1c2VyIHdpdGggYSBtb3JlIHVuZGVyc3RhbmRhYmxlIFVSTCku
IFdlIHdpbGwKKy8vIHJlcGxhY2UgYWxsIGludmFsaWQgc2VxdWVuY2VzIChpbmNsdWRpbmcgaW52
YWxpZCBVVEYtMTYgc2VxdWVuY2VzLCB3aGljaCBJRQorLy8gZG9lc24ndCkgd2l0aCB0aGUgImlu
dmFsaWQgY2hhcmFjdGVyLCIgYW5kIHdlIHdpbGwgZXNjYXBlIGl0LgorCisjaWYgVVNFKFdURlVS
TCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKwor
bmFtZXNwYWNlIHsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjaGFyYWN0ZXJzIHN0YXJ0aW5n
IGF0IHxiZWdpbnwgYW5kIGdvaW5nIHVudGlsIHxlbmR8CisvLyAobm9uLWluY2x1c2l2ZSkgYXJl
IGFsbCByZXByZXNlbnRhYmxlIGluIDctYml0cy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Citib29sIGlzQWxsQVNDSUkoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBxdWVyeSkKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJ
KHNwZWMgKyBxdWVyeS5iZWdpbigpLCBxdWVyeS5sZW5ndGgoKSk7Cit9CisKKy8vIEZJWE1FOiBC
ZW5qYW1pbjogZ2V0IHJpZCBvZiB0aGlzIHdoZW4gZXZlcnl0aGluZyBpcyBiYXNlZCBvbiBMQ2hh
ci4KK3RlbXBsYXRlPD4KK2Jvb2wgaXNBbGxBU0NJSTxjaGFyPihjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5KQoreworICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxs
QVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHNwZWMgKyBxdWVyeS5iZWdpbigp
KSwgcXVlcnkubGVuZ3RoKCkpOworfQorCisvLyBBcHBlbmRzIHRoZSBnaXZlbiBzdHJpbmcgdG8g
dGhlIG91dHB1dCwgZXNjYXBpbmcgY2hhcmFjdGVycyB0aGF0IGRvIG5vdAorLy8gbWF0Y2ggdGhl
IGdpdmVuIHx0eXBlfCBpbiBTaGFyZWRDaGFyVHlwZXMuIFRoaXMgdmVyc2lvbiB3aWxsIGFjY2Vw
dCA4IG9yIDE2CisvLyBiaXQgY2hhcmFjdGVycywgYnV0IGFzc3VtZXMgdGhhdCB0aGV5IGhhdmUg
b25seSA3LWJpdCB2YWx1ZXMuIEl0IGFsc28gYXNzdW1lcworLy8gdGhhdCBhbGwgVVRGLTggdmFs
dWVzIGFyZSBjb3JyZWN0LCBzbyBkb2Vzbid0IGJvdGhlciBjaGVja2luZwordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgYXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5nKGNvbnN0
IENoYXJhY3RlclR5cGUqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBp
ZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc1F1ZXJ5Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihzb3VyY2VbaV0pKSkKKyAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc291cmNlW2ldKSwgb3V0cHV0KTsKKyAgICAgICAg
ZWxzZSAvLyBEb2Vzbid0IG5lZWQgZXNjYXBpbmcuCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KHN0YXRpY19jYXN0PGNoYXI+KHNvdXJjZVtpXSkpOworICAgIH0KK30KKworLy8gUnVucyB0aGUg
Y29udmVydGVyIG9uIHRoZSBnaXZlbiBVVEYtOCBpbnB1dC4gU2luY2UgdGhlIGNvbnZlcnRlciBl
eHBlY3RzCisvLyBVVEYtMTYsIHdlIGhhdmUgdG8gY29udmVydCBmaXJzdC4gVGhlIGNvbnZlcnRl
ciBtdXN0IGJlIG5vbi1udWxsLgordm9pZCBydW5Db252ZXJ0ZXIoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hhcnNldENvbnZlcnRlciogY29udmVydGVyLCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVw
bGFjZSBhbnkgbWlzZW5jb2RlZCB2YWx1ZXMgd2l0aCB0aGUgaW52YWxpZAorICAgIC8vIGNoYXJh
Y3Rlci4gVGhpcyBpcyB3aGF0IHdlIHdhbnQgc28gd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3Ig
ZXJyb3IuCisgICAgUmF3VVJMQnVmZmVyPFVDaGFyPiB1dGYxNjsKKyAgICBDb252ZXJ0VVRGOFRv
VVRGMTYoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCB1dGYxNik7CisgICAg
Y29udmVydGVyLT5Db252ZXJ0RnJvbVVURjE2KHV0ZjE2LmRhdGEoKSwgdXRmMTYubGVuZ3RoKCks
IG91dHB1dCk7Cit9CisKKy8vIFJ1bnMgdGhlIGNvbnZlcnRlciB3aXRoIHRoZSBnaXZlbiBVVEYt
MTYgaW5wdXQuIFdlIGRvbid0IGhhdmUgdG8gZG8KKy8vIGFueXRoaW5nLCBidXQgdGhpcyBvdmVy
cmlkZGRlbiBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gdXNlIHRoZSBzYW1lIGNvZGUKKy8vIGZvciBi
b3RoIFVURi04IGFuZCBVVEYtMTYgaW5wdXQuCit2b2lkIHJ1bkNvbnZlcnRlcihjb25zdCBVQ2hh
ciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hhcnNldENvbnZlcnRlciogY29u
dmVydGVyLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBjb252ZXJ0ZXItPkNvbnZl
cnRGcm9tVVRGMTYoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBvdXRwdXQp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBkb0NvbnZlcnRU
b1F1ZXJ5RW5jb2RpbmcoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBxdWVyeSwgQ2hhcnNldENvbnZlcnRlciogY29udmVydGVyLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCkKK3sKKyAgICBpZiAoaXNBbGxBU0NJSShzcGVjLCBxdWVyeSkpIHsKKyAgICAgICAg
Ly8gRWFzeTogdGhlIGlucHV0IGNhbiBqdXN0IGFwcGVuZGVkIHdpdGggbm8gY2hhcmFjdGVyIHNl
dCBjb252ZXJzaW9ucy4KKyAgICAgICAgYXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5nKCZzcGVjW3F1
ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgb3V0cHV0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBIYXJkZXI6IGNvbnZlcnQgdG8gdGhlIHByb3BlciBlbmNvZGluZyBmaXJzdC4KKyAg
ICAgICAgaWYgKGNvbnZlcnRlcikgeworICAgICAgICAgICAgLy8gUnVuIHRoZSBjb252ZXJ0ZXIg
dG8gZ2V0IGFuIDgtYml0IHN0cmluZywgdGhlbiBhcHBlbmQgaXQsIGVzY2FwaW5nCisgICAgICAg
ICAgICAvLyBuZWNlc3NhcnkgdmFsdWVzLgorICAgICAgICAgICAgUmF3VVJMQnVmZmVyPGNoYXI+
IGVpZ2h0Qml0UXVlcnlTdHJpbmc7CisgICAgICAgICAgICBydW5Db252ZXJ0ZXIoc3BlYywgcXVl
cnksIGNvbnZlcnRlciwgZWlnaHRCaXRRdWVyeVN0cmluZyk7CisgICAgICAgICAgICBhcHBlbmRS
YXc4Qml0UXVlcnlTdHJpbmcoZWlnaHRCaXRRdWVyeVN0cmluZy5kYXRhKCksIGVpZ2h0Qml0UXVl
cnlTdHJpbmcubGVuZ3RoKCksIG91dHB1dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBObyBjb252ZXJ0ZXIsIGRvIG91ciBvd24gVVRGLTggY29udmVyc2lvbi4KKyAgICAgICAg
ICAgIGFwcGVuZFN0cmluZ09mVHlwZSgmc3BlY1txdWVyeS5iZWdpbigpXSwgcXVlcnkubGVuZ3Ro
KCksIFVSTENoYXJhY3RlclR5cGVzOjpRdWVyeUNoYXJhY3Rlciwgb3V0cHV0KTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9D
YW5vbmljYWxpemVRdWVyeShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCYgb3V0cHV0
UXVlcnlDb21wb25lbnQpCit7CisgICAgaWYgKHF1ZXJ5Lmxlbmd0aCgpIDwgMCkgeworICAgICAg
ICBvdXRwdXRRdWVyeUNvbXBvbmVudCA9IFVSTENvbXBvbmVudCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgb3V0cHV0LmFwcGVuZCgnPycpOworICAgIG91dHB1dFF1ZXJ5Q29tcG9u
ZW50LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisKKyAgICBkb0NvbnZlcnRUb1F1ZXJ5RW5j
b2Rpbmc8Q2hhcmFjdGVyVHlwZT4oc3BlYywgcXVlcnksIGNvbnZlcnRlciwgb3V0cHV0KTsKKwor
ICAgIG91dHB1dFF1ZXJ5Q29tcG9uZW50LnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRw
dXRRdWVyeUNvbXBvbmVudC5iZWdpbigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwordm9pZCBD
YW5vbmljYWxpemVRdWVyeShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1
ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFF1ZXJ5Q29tcG9u
ZW50KQoreworICAgIGRvQ2Fub25pY2FsaXplUXVlcnkoc3BlYywgcXVlcnksIGNvbnZlcnRlciwg
b3V0cHV0LCAqb3V0cHV0UXVlcnlDb21wb25lbnQpOworfQorCit2b2lkIENhbm9uaWNhbGl6ZVF1
ZXJ5KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0
Q29udmVydGVyKiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFF1ZXJ5Q29tcG9uZW50KQoreworICAg
IGRvQ2Fub25pY2FsaXplUXVlcnkoc3BlYywgcXVlcnksIGNvbnZlcnRlciwgb3V0cHV0LCAqb3V0
cHV0UXVlcnlDb21wb25lbnQpOworfQorCit2b2lkIENvbnZlcnRVVEYxNlRvUXVlcnlFbmNvZGlu
Zyhjb25zdCBVQ2hhciogaW5wdXQsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRD
b252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZG9D
b252ZXJ0VG9RdWVyeUVuY29kaW5nPFVDaGFyPihpbnB1dCwgcXVlcnksIGNvbnZlcnRlciwgb3V0
cHV0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uUmVsYXRpdmUuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblJlbGF0aXZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODA3NzIyZWRjOTQzMTBmMzQzOTZj
ZmI3NzVmNzJiOWEzZWFhY2RjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblJlbGF0aXZlLmNwcApAQCAtMCwwICsxLDU4NyBAQAorLy8gQ29weXJpZ2h0
IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBDYW5vbmljYWxpemVyIGZ1bmN0aW9ucyBmb3Ig
d29ya2luZyB3aXRoIGFuZCByZXNvbHZpbmcgcmVsYXRpdmUgVVJMcy4KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJVUkxDYW5vbkludGVy
bmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwu
aCIKKyNpbmNsdWRlICJVUkxVdGlsSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIEZpcmVmb3ggZG9lcyBhIGNhc2Utc2Vuc2l0aXZlIGNvbXBhcmUgKHdoaWNoIGlz
IHByb2JhYmx5IHdyb25nLS1Nb3ppbGxhIGJ1ZworLy8gMzc5MDM0KSwgd2hlcmVhcyBJRSBpcyBj
YXNlLWluc2Vuc2V0aXZlLgorLy8KKy8vIFdlIGNob29zZSB0byBiZSBtb3JlIHBlcm1pc3NpdmUg
bGlrZSBJRS4gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dAorLy8gdW5lc2NhcGluZyBvciBh
bnl0aGluZyBoZXJlOiBuZWl0aGVyIElFIG9yIEZpcmVmb3ggYWxsb3cgdGhpcy4gV2UgYWxzbwor
Ly8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbnZhbGlkIHNjaGVtZSBjaGFyYWN0ZXJzIHNp
bmNlIHdlIGFyZSBjb21wYXJpbmcKKy8vIGFnYWluc3QgdGhlIGNhbm9uaWNhbCBzY2hlbWUgb2Yg
dGhlIGJhc2UuCisvLworLy8gVGhlIGJhc2UgVVJMIHNob3VsZCBhbHdheXMgYmUgY2Fub25pY2Fs
LCB0aGVyZWZvcmUgaXMgQVNDSUkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorYm9vbCBBcmVT
Y2hlbWVzRXF1YWwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTENvbXBvbmVudCYgYmFzZVNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENI
QVIqIGNtcCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgY21wU2No
ZW1lKQoreworICAgIGlmIChiYXNlU2NoZW1lLmxlbmd0aCgpICE9IGNtcFNjaGVtZS5sZW5ndGgo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmFzZVNj
aGVtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGUgYmFzZSBpcyBh
bHJlYWR5IGNhbm9uaWNhbCwgc28gd2UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAvLyBjYW5vbmlj
YWxpemUgaXQuCisgICAgICAgIGlmIChjYW5vbmljYWxTY2hlbWVDaGFyKGNtcFtjbXBTY2hlbWUu
YmVnaW4oKSArIGldKSAhPQorICAgICAgICAgICAgYmFzZVtiYXNlU2NoZW1lLmJlZ2luKCkgKyBp
XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKyNpZiBPUyhXSU5ET1dTKQorLy8gSGVyZSwgd2UgYWxzbyBhbGxvdyBXaW5kb3dzIHBhdGhz
IHRvIGJlIHJlcHJlc2VudGVkIGFzICIvQzovIiBzbyB3ZSBjYW4gYmUKKy8vIGNvbnNpc3RlbnQg
YWJvdXQgVVJMIHBhdGhzIGJlZ2lubmluZyB3aXRoIHNsYXNoZXMuIFRoaXMgZnVuY3Rpb24gaXMg
bGlrZQorLy8gRG9lc0JlZ2luV2luZG93c0RyaXZlUGF0aCBleGNlcHQgdGhhdCBpdCBhbHNvIHJl
cXVpcmVzIGEgc2xhc2ggYXQgdGhlCisvLyBiZWdpbm5pbmcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
SEFSPgorYm9vbCBEb2VzQmVnaW5TbGFzaFdpbmRvd3NEcml2ZVNwZWMoY29uc3QgQ0hBUiogc3Bl
YywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgc3BlY0xlbmd0aCkKK3sKKyAgICBpZiAoc3RhcnRPZmZz
ZXQgPj0gc3BlY0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBVUkxQ
YXJzZXI6OmlzVVJMU2xhc2goc3BlY1tzdGFydE9mZnNldF0pICYmIFVSTFBhcnNlcjo6ZG9lc0Jl
Z2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBzdGFydE9mZnNldCArIDEsIHNwZWNMZW5ndGgpOwor
fQorCisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworLy8gU2VlIGlzUmVsYXRpdmVVUkwgaW4gdGhl
IGhlYWRlciBmaWxlIGZvciB1c2FnZS4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVI+Citib29sIERv
SXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
SEFSKiB1cmwsCisgICAgICAgICAgICAgICAgICAgICBpbnQgdXJsTGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc0Jhc2VIaWVyYXJjaGljYWwsCisgICAgICAgICAgICAgICAgICAg
ICBib29sKiBpc1JlbGF0aXZlLAorICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBy
ZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICAqaXNSZWxhdGl2ZSA9IGZhbHNlOyAvLyBTbyB3ZSBj
YW4gZGVmYXVsdCBsYXRlciB0byBub3QgcmVsYXRpdmUuCisKKyAgICAvLyBUcmltIHdoaXRlc3Bh
Y2UgYW5kIGNvbnN0cnVjdCBhIG5ldyByYW5nZSBmb3IgdGhlIHN1YnN0cmluZy4KKyAgICBpbnQg
YmVnaW4gPSAwOworICAgIFVSTFBhcnNlcjo6dHJpbVVSTCh1cmwsICZiZWdpbiwgJnVybExlbmd0
aCk7CisgICAgaWYgKGJlZ2luID49IHVybExlbmd0aCkgeworICAgICAgICAvLyBFbXB0eSBVUkxz
IGFyZSByZWxhdGl2ZSwgYnV0IGRvIG5vdGhpbmcuCisgICAgICAgICpyZWxhdGl2ZUNvbXBvbmVu
dCA9IFVSTENvbXBvbmVudChiZWdpbiwgMCk7CisgICAgICAgICppc1JlbGF0aXZlID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBX
ZSBzcGVjaWFsIGNhc2UgcGF0aHMgbGlrZSAiQzpcZm9vIiBzbyB0aGV5IGNhbiBsaW5rIGRpcmVj
dGx5IHRvIHRoZQorICAgIC8vIGZpbGUgb24gV2luZG93cyAoSUUgY29tcGF0YWJpbGl0eSkuIFRo
ZSBzZWN1cml0eSBkb21haW4gc3R1ZmYgc2hvdWxkCisgICAgLy8gcHJldmVudCBhIGxpbmsgbGlr
ZSB0aGlzIGZyb20gYWN0dWFsbHkgYmVpbmcgZm9sbG93ZWQgaWYgaXRzIG9uIGEKKyAgICAvLyB3
ZWIgcGFnZS4KKyAgICAvLworICAgIC8vIFdlIHRyZWF0ICJDOi9mb28iIGFzIGFuIGFic29sdXRl
IFVSTC4gV2UgY2FuIGdvIGFoZWFkIGFuZCB0cmVhdCAiL2M6LyIKKyAgICAvLyBhcyByZWxhdGl2
ZSwgYXMgdGhpcyB3aWxsIGp1c3QgcmVwbGFjZSB0aGUgcGF0aCB3aGVuIHRoZSBiYXNlIHNjaGVt
ZQorICAgIC8vIGlzIGEgZmlsZSBhbmQgdGhlIGFuc3dlciB3aWxsIHN0aWxsIGJlIGNvcnJlY3Qu
CisgICAgLy8KKyAgICAvLyBXZSByZXF1aXJlIHN0cmljdCBiYWNrc2xhc2hlcyB3aGVuIGRldGVj
dGluZyBVTkMgc2luY2UgdHdvIGZvcndhcmQKKyAgICAvLyBzaGFzaGVzIHNob3VsZCBiZSB0cmVh
dGVkIGEgYSByZWxhdGl2ZSBVUkwgd2l0aCBhIGhvc3RuYW1lLgorICAgIGlmIChVUkxQYXJzZXI6
OmRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWModXJsLCBiZWdpbiwgdXJsTGVuZ3RoKSB8fCBVUkxQ
YXJzZXI6OmRvZXNCZWdpblVOQ1BhdGgodXJsLCBiZWdpbiwgdXJsTGVuZ3RoLCB0cnVlKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworICAgIC8vIFNlZSBp
ZiB3ZSd2ZSBnb3QgYSBzY2hlbWUsIGlmIG5vdCwgd2Uga25vdyB0aGlzIGlzIGEgcmVsYXRpdmUg
VVJMLgorICAgIC8vIEJVVDogSnVzdCBiZWNhdXNlIHdlIGhhdmUgYSBzY2hlbWUsIGRvZXNuJ3Qg
bWFrZSBpdCBhYnNvbHV0ZS4KKyAgICAvLyAiaHR0cDpmb28uaHRtbCIgaXMgYSByZWxhdGl2ZSBV
Ukwgd2l0aCBwYXRoICJmb28uaHRtbCIuIElmIHRoZSBzY2hlbWUgaXMKKyAgICAvLyBlbXB0eSwg
d2UgdHJlYXQgaXQgYXMgcmVsYXRpdmUgKCI6Zm9vIikgbGlrZSBJRSBkb2VzLgorICAgIFVSTENv
bXBvbmVudCBzY2hlbWU7CisgICAgaWYgKCFVUkxQYXJzZXI6OkV4dHJhY3RTY2hlbWUodXJsLCB1
cmxMZW5ndGgsICZzY2hlbWUpIHx8ICFzY2hlbWUubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gRG9u
J3QgYWxsb3cgcmVsYXRpdmUgVVJMcyBpZiB0aGUgYmFzZSBzY2hlbWUgZG9lc24ndCBzdXBwb3J0
IGl0LgorICAgICAgICBpZiAoIWlzQmFzZUhpZXJhcmNoaWNhbCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAqcmVsYXRpdmVDb21wb25lbnQgPSBVUkxDb21wb25lbnQ6OmZy
b21SYW5nZShiZWdpbiwgdXJsTGVuZ3RoKTsKKyAgICAgICAgKmlzUmVsYXRpdmUgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgc2NoZW1lIGlzbid0
IHZhbGlkLCB0aGVuIGl0J3MgcmVsYXRpdmUuCisgICAgaW50IHNjaGVtZUVuZCA9IHNjaGVtZS5l
bmQoKTsKKyAgICBmb3IgKGludCBpID0gc2NoZW1lLmJlZ2luKCk7IGkgPCBzY2hlbWVFbmQ7IGkr
KykgeworICAgICAgICBpZiAoIWNhbm9uaWNhbFNjaGVtZUNoYXIodXJsW2ldKSkgeworICAgICAg
ICAgICAgKnJlbGF0aXZlQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4s
IHVybExlbmd0aCk7CisgICAgICAgICAgICAqaXNSZWxhdGl2ZSA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZSBzY2hlbWUg
aXMgbm90IHRoZSBzYW1lLCB0aGVuIHdlIGNhbid0IGNvdW50IGl0IGFzIHJlbGF0aXZlLgorICAg
IGlmICghQXJlU2NoZW1lc0VxdWFsKGJhc2UsIGJhc2VQYXJzZWQuc2NoZW1lLCB1cmwsIHNjaGVt
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2hlbiB0aGUgc2NoZW1lIHRoYXQg
dGhleSBib3RoIHNoYXJlIGlzIG5vdCBoaWVyYXJjaGljYWwsIHRyZWF0IHRoZQorICAgIC8vIGlu
Y29taW5nIHNjaGVtZSBhcyBhYnNvbHV0ZSAodGhpcyB3YXkgd2l0aCB0aGUgYmFzZSBvZiAiZGF0
YTpmb28iLAorICAgIC8vICJkYXRhOmJhciIgd2lsbCBiZSByZXBvcnRlZCBhcyBhYnNvbHV0ZS4K
KyAgICBpZiAoIWlzQmFzZUhpZXJhcmNoaWNhbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpbnQgY29sb25PZmZzZXQgPSBzY2hlbWUuZW5kKCk7CisKKyAgICAvLyBJZiBpdCdzIGEgZmls
ZXN5c3RlbSBVUkwsIHRoZSBvbmx5IHZhbGlkIHdheSB0byBtYWtlIGl0IHJlbGF0aXZlIGlzIG5v
dCB0bworICAgIC8vIHN1cHBseSBhIHNjaGVtZS4gVGhlcmUncyBubyBlcXVpdmFsZW50IHRvIGUu
Zy4gaHR0cDppbmRleC5odG1sLgorICAgIGlmIChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVD
b21wb25lbnQodXJsLCBzY2hlbWUsICJmaWxlc3lzdGVtIikpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gRXh0cmFjdFNjaGVtZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbG9uIGltbWVk
aWF0ZWx5IGZvbGxvd3Mgd2hhdCBpdAorICAgIC8vIGNvbnNpZGVycyB0byBiZSB0aGUgc2NoZW1l
LiBjb3VudENvbnNlY3V0aXZlU2xhc2hlcyB3aWxsIGhhbmRsZSB0aGUKKyAgICAvLyBjYXNlIHdo
ZXJlIHRoZSBiZWdpbiBvZmZzZXQgaXMgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgaW50IG51
bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHVybCwgY29sb25P
ZmZzZXQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmxMZW5ndGgpOworCisgICAgaWYgKCFudW1TbGFzaGVzIHx8IG51bVNsYXNo
ZXMgPT0gMSkgeworICAgICAgICAvLyBObyBzbGFzaGVzIG1lYW5zIGl0J3MgYSByZWxhdGl2ZSBw
YXRoIGxpa2UgImh0dHA6Zm9vLmh0bWwiLiBPbmUgc2xhc2gKKyAgICAgICAgLy8gaXMgYW4gYWJz
b2x1dGUgcGF0aC4gImh0dHA6L2hvbWUvZm9vLmh0bWwiCisgICAgICAgICppc1JlbGF0aXZlID0g
dHJ1ZTsKKyAgICAgICAgKnJlbGF0aXZlQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UoY29sb25PZmZzZXQgKyAxLCB1cmxMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBUd28gb3IgbW9yZSBzbGFzaGVzIGFmdGVyIHRoZSBzY2hlbWUgd2UgdHJl
YXQgYXMgYWJzb2x1dGUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIENvcGllcyBhbGwgY2hh
cmFjdGVycyBpbiB0aGUgcmFuZ2UgW2JlZ2luLCBlbmQpIG9mIHxzcGVjfCB0byB0aGUgb3V0cHV0
LAorLy8gdXAgdW50aWwgYW5kIGluY2x1ZGluZyB0aGUgbGFzdCBzbGFzaC4gVGhlcmUgc2hvdWxk
IGJlIGEgc2xhc2ggaW4gdGhlCisvLyByYW5nZSwgaWYgbm90LCBub3RoaW5nIHdpbGwgYmUgY29w
aWVkLgorLy8KKy8vIFRoZSBpbnB1dCBpcyBhc3N1bWVkIHRvIGJlIGNhbm9uaWNhbCwgc28gd2Ug
c2VhcmNoIG9ubHkgZm9yIGV4YWN0IHNsYXNoZXMKKy8vIGFuZCBub3QgYmFja3NsYXNoZXMgYXMg
d2VsbC4gV2UgYWxzbyBrbm93IHRoYXQgaXQncyBBU0NJSS4KK3ZvaWQgQ29weVRvTGFzdFNsYXNo
KGNvbnN0IGNoYXIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpCit7CisgICAgLy8gRmluZCB0aGUgbGFzdCBzbGFzaC4KKyAgICBpbnQgbGFzdFNsYXNo
ID0gLTE7CisgICAgZm9yIChpbnQgaSA9IGVuZCAtIDE7IGkgPj0gYmVnaW47IC0taSkgeworICAg
ICAgICBpZiAoc3BlY1tpXSA9PSAnLycpIHsKKyAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobGFzdFNsYXNoIDwg
MCkKKyAgICAgICAgcmV0dXJuOyAvLyBObyBzbGFzaC4KKworICAgIC8vIENvcHkuCisgICAgZm9y
IChpbnQgaSA9IGJlZ2luOyBpIDw9IGxhc3RTbGFzaDsgKytpKQorICAgICAgICBvdXRwdXQuYXBw
ZW5kKHNwZWNbaV0pOworfQorCisvLyBDb3BpZXMgYSBzaW5nbGUgY29tcG9uZW50IGZyb20gdGhl
IHNvdXJjZSB0byB0aGUgb3V0cHV0LiBUaGlzIGlzIHVzZWQKKy8vIHdoZW4gcmVzb2x2aW5nIHJl
bGF0aXZlIFVSTHMgYW5kIGEgZ2l2ZW4gY29tcG9uZW50IGlzIHVuY2hhbmdlZC4gU2luY2UgdGhl
CisvLyBzb3VyY2Ugc2hvdWxkIGFscmVhZHkgYmUgY2Fub25pY2FsLCB3ZSBkb24ndCBoYXZlIHRv
IGRvIGFueXRoaW5nIHNwZWNpYWwsCisvLyBhbmQgdGhlIGlucHV0IGlzIEFTQ0lJLgordm9pZCBD
b3B5T25lQ29tcG9uZW50KGNvbnN0IGNoYXIqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxDb21wb25lbnQmIHNvdXJjZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxD
b21wb25lbnQqIG91dHB1dENvbXBvbmVudCkKK3sKKyAgICBpZiAoc291cmNlQ29tcG9uZW50Lmxl
bmd0aCgpIDwgMCkgeworICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBub3QgcHJlc2VudC4K
KyAgICAgICAgKm91dHB1dENvbXBvbmVudCA9IFVSTENvbXBvbmVudCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgb3V0cHV0Q29tcG9uZW50LT5zZXRCZWdpbihvdXRwdXQubGVuZ3Ro
KCkpOworICAgIGludCBzb3VyY2VFbmQgPSBzb3VyY2VDb21wb25lbnQuZW5kKCk7CisgICAgZm9y
IChpbnQgaSA9IHNvdXJjZUNvbXBvbmVudC5iZWdpbigpOyBpIDwgc291cmNlRW5kOyBpKyspCisg
ICAgICAgIG91dHB1dC5hcHBlbmQoc291cmNlW2ldKTsKKyAgICBvdXRwdXRDb21wb25lbnQtPnNl
dExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRDb21wb25lbnQtPmJlZ2luKCkpOworfQor
CisjaWYgT1MoV0lORE9XUykKKworLy8gQ2FsbGVkIG9uIFdpbmRvd3Mgd2hlbiB0aGUgYmFzZSBV
UkwgaXMgYSBmaWxlIFVSTCwgdGhpcyB3aWxsIGNvcHkgdGhlICJDOiIKKy8vIHRvIHRoZSBvdXRw
dXQsIGlmIHRoZXJlIGlzIGEgZHJpdmUgbGV0dGVyIGFuZCBpZiB0aGF0IGRyaXZlIGxldHRlciBp
cyBub3QKKy8vIGJlaW5nIG92ZXJyaWRkZW4gYnkgdGhlIHJlbGF0aXZlIFVSTC4gT3RoZXJ3aXNl
LCBkbyBub3RoaW5nLgorLy8KKy8vIEl0IHdpbGwgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgYmVn
aW5uaW5nIG9mIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUKKy8vIGJhc2UgdG8gYmUgcHJvY2Vz
c2VkOiBpZiB0aGVyZSBpcyBhICJDOiIsIHRoZSBzbGFzaCBhZnRlciBpdCwgb3IgaWYKKy8vIHRo
ZXJlIGlzIG5vIGRyaXZlIGxldHRlciwgdGhlIHNsYXNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IHBhdGgsIG9yCisvLyB0aGUgZW5kIG9mIHRoZSBiYXNlLiBUaGlzIGNhbiBiZSB1c2VkIGFzIHRo
ZSBzdGFydGluZyBvZmZzZXQgZm9yIGZ1cnRoZXIKKy8vIHBhdGggcHJvY2Vzc2luZy4KK3RlbXBs
YXRlPHR5cGVuYW1lIENIQVI+CitpbnQgQ29weUJhc2VEcml2ZVNwZWNJZk5lY2Vzc2FyeShjb25z
dCBjaGFyKiBiYXNlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJh
c2VQYXRoQmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZVBh
dGhFbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSKiByZWxh
dGl2ZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoU3RhcnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVsYXRpdmVVcmxMZW5ndGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCkKK3sKKyAgICBpZiAoYmFzZVBhdGhCZWdpbiA+PSBiYXNlUGF0aEVuZCkKKyAgICAgICAgcmV0
dXJuIGJhc2VQYXRoQmVnaW47IC8vIE5vIHBhdGguCisKKyAgICAvLyBJZiB0aGUgcmVsYXRpdmUg
YmVnaW5zIHdpdGggYSBkcml2ZSBzcGVjLCBkb24ndCBkbyBhbnl0aGluZy4gVGhlIGV4aXN0aW5n
CisgICAgLy8gZHJpdmUgc3BlYyBpbiB0aGUgYmFzZSB3aWxsIGJlIHJlcGxhY2VkLgorICAgIGlm
IChVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMocmVsYXRpdmVVUkwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoU3RhcnQsIHJlbGF0
aXZlVXJsTGVuZ3RoKSkgeworICAgICAgICByZXR1cm4gYmFzZVBhdGhCZWdpbjsgLy8gUmVsYXRp
dmUgVVJMIHBhdGggaXMgIkM6L2ZvbyIKKyAgICB9CisKKyAgICAvLyBUaGUgcGF0aCBzaG91bGQg
YmVnaW4gd2l0aCBhIHNsYXNoIChhcyBhbGwgY2Fub25pY2FsIHBhdGhzIGRvKS4gV2UgY2hlY2sK
KyAgICAvLyBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIGRyaXZlIGxldHRlciBhbmQgY29weSBpdC4K
KyAgICBpZiAoRG9lc0JlZ2luU2xhc2hXaW5kb3dzRHJpdmVTcGVjKGJhc2VVUkwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlUGF0aEJlZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVBhdGhFbmQpKSB7CisgICAgICAgIC8v
IENvcHkgdGhlIHR3by1jaGFyYWN0ZXIgZHJpdmUgc3BlYyB0byB0aGUgb3V0cHV0LiBJdCB3aWxs
IG5vdyBsb29rIGxpa2UKKyAgICAgICAgLy8gImZpbGU6Ly8vQzoiIHNvIHRoZSByZXN0IG9mIGl0
IGNhbiBiZSB0cmVhdGVkIGxpa2UgYSBzdGFuZGFyZCBwYXRoLgorICAgICAgICBvdXRwdXQuYXBw
ZW5kKCcvJyk7CisgICAgICAgIG91dHB1dC5hcHBlbmQoYmFzZVVSTFtiYXNlUGF0aEJlZ2luICsg
MV0pOworICAgICAgICBvdXRwdXQuYXBwZW5kKGJhc2VVUkxbYmFzZVBhdGhCZWdpbiArIDJdKTsK
KyAgICAgICAgcmV0dXJuIGJhc2VQYXRoQmVnaW4gKyAzOworICAgIH0KKworICAgIHJldHVybiBi
YXNlUGF0aEJlZ2luOworfQorCisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworLy8gQSBzdWJyb3V0
aW5lIG9mIGRvUmVzb2x2ZVJlbGF0aXZlVVJMLCB0aGlzIHJlc29sdmVzIHRoZSBVUkwga25vd25p
bmcgdGhhdAorLy8gdGhlIGlucHV0IGlzIGEgcmVsYXRpdmUgcGF0aCBvciBsZXNzIChxeXVlcnkg
b3IgcmVmKS4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVI+Citib29sIGRvUmVzb2x2ZVJlbGF0aXZl
UGF0aChjb25zdCBjaGFyKiBiYXNlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIC8qIGJhc2VJc0ZpbGUgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
SEFSKiByZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENv
bXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBD
aGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
CisgICAgLy8gV2Uga25vdyB0aGUgYXV0aG9yaXR5IHNlY3Rpb24gZGlkbid0IGNoYW5nZSwgY29w
eSBpdCB0byB0aGUgb3V0cHV0LiBXZQorICAgIC8vIGFsc28ga25vdyB3ZSBoYXZlIGEgcGF0aCBz
byBjYW4gY29weSB1cCB0byB0aGVyZS4KKyAgICBVUkxDb21wb25lbnQgcGF0aCwgcXVlcnksIHJl
ZjsKKyAgICBVUkxQYXJzZXI6OnBhcnNlUGF0aEludGVybmFsKHJlbGF0aXZlVVJMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWYpOwor
ICAgIC8vIENhbm9uaWNhbCBVUkxzIGFsd2F5cyBoYXZlIGEgcGF0aCwgc28gd2UgY2FuIHVzZSB0
aGF0IG9mZnNldC4KKyAgICBvdXRwdXQuYXBwZW5kKGJhc2VVUkwsIGJhc2VQYXJzZWQucGF0aC5i
ZWdpbigpKTsKKworICAgIGlmIChwYXRoLmxlbmd0aCgpID4gMCkgeworICAgICAgICAvLyBUaGUg
cGF0aCBpcyByZXBsYWNlZCBvciBtb2RpZmllZC4KKyAgICAgICAgaW50IHRydWVQYXRoQmVnaW4g
PSBvdXRwdXQubGVuZ3RoKCk7CisKKyAgICAgICAgLy8gRm9yIGZpbGU6IFVSTHMgb24gV2luZG93
cywgd2UgZG9uJ3Qgd2FudCB0byB0cmVhdCB0aGUgZHJpdmUgbGV0dGVyIGFuZAorICAgICAgICAv
LyBjb2xvbiBhcyBwYXJ0IG9mIHRoZSBwYXRoIGZvciByZWxhdGl2ZSBmaWxlIHJlc29sdXRpb24g
d2hlbiB0aGUKKyAgICAgICAgLy8gaW5jb21pbmcgVVJMIGRvZXMgbm90IHByb3ZpZGUgYSBkcml2
ZSBzcGVjLiBXZSBzYXZlIHRoZSB0cnVlIHBhdGgKKyAgICAgICAgLy8gYmVnaW5uaW5nIHNvIHdl
IGNhbiBmaXggaXQgdXAgYWZ0ZXIgd2UgYXJlIGRvbmUuCisgICAgICAgIGludCBiYXNlUGF0aEJl
Z2luID0gYmFzZVBhcnNlZC5wYXRoLmJlZ2luKCk7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAg
aWYgKGJhc2VJc0ZpbGUpIHsKKyAgICAgICAgICAgIGJhc2VQYXRoQmVnaW4gPSBDb3B5QmFzZURy
aXZlU3BlY0lmTmVjZXNzYXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTCwgYmFzZVBhcnNlZC5wYXRoLmJlZ2luKCksIGJh
c2VQYXJzZWQucGF0aC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdp
bigpLCByZWxhdGl2ZUNvbXBvbmVudC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisgICAgICAgICAgICAvLyBO
b3cgdGhlIG91dHB1dCBsb29rcyBsaWtlIGVpdGhlciAiZmlsZTovLyIgb3IgImZpbGU6Ly8vQzoi
CisgICAgICAgICAgICAvLyBhbmQgd2UgY2FuIHN0YXJ0IGFwcGVuZGluZyB0aGUgcmVzdCBvZiB0
aGUgcGF0aC4gfGJhc2VQYXRoQmVnaW58CisgICAgICAgICAgICAvLyBwb2ludHMgdG8gdGhlIGNo
YXJhY3RlciBpbiB0aGUgYmFzZSB0aGF0IGNvbWVzIG5leHQuCisgICAgICAgIH0KKyNlbmRpZiAv
LyBPUyhXSU5ET1dTKQorCisgICAgICAgIGlmIChVUkxQYXJzZXI6OmlzVVJMU2xhc2gocmVsYXRp
dmVVUkxbcGF0aC5iZWdpbigpXSkpIHsKKyAgICAgICAgICAgIC8vIEVhc3kgY2FzZTogdGhlIHBh
dGggaXMgYW4gYWJzb2x1dGUgcGF0aCBvbiB0aGUgc2VydmVyLCBzbyB3ZSBjYW4KKyAgICAgICAg
ICAgIC8vIGp1c3QgcmVwbGFjZSBldmVyeXRoaW5nIGZyb20gdGhlIHBhdGggb24gd2l0aCB0aGUg
bmV3IHZlcnNpb25zLgorICAgICAgICAgICAgLy8gU2luY2UgdGhlIGlucHV0IHNob3VsZCBiZSBj
YW5vbmljYWwgaGllcmFyY2hpY2FsIFVSTCwgd2Ugc2hvdWxkCisgICAgICAgICAgICAvLyBhbHdh
eXMgaGF2ZSBhIHBhdGguCisgICAgICAgICAgICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgo
cmVsYXRpdmVVUkwsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5wYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIFJlbGF0aXZlIHBhdGgsIHJlcGxhY2UgdGhlIHF1ZXJ5LCBhbmQgcmVmZXJlbmNl
LiBXZSB0YWtlIHRoZQorICAgICAgICAgICAgLy8gb3JpZ2luYWwgcGF0aCB3aXRoIHRoZSBmaWxl
IHBhcnQgc3RyaXBwZWQsIGFuZCBhcHBlbmQgdGhlIG5ldyBwYXRoLgorICAgICAgICAgICAgLy8g
VGhlIGNhbm9uaWNhbGl6ZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzb2x2aW5nICIuLiIgYW5kICIu
IgorICAgICAgICAgICAgaW50IHBhdGhCZWdpbiA9IG91dHB1dC5sZW5ndGgoKTsKKyAgICAgICAg
ICAgIENvcHlUb0xhc3RTbGFzaChiYXNlVVJMLCBiYXNlUGF0aEJlZ2luLCBiYXNlUGFyc2VkLnBh
dGguZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KTsKKyAgICAgICAg
ICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGFydGlhbFBhdGgocmVsYXRpdmVVUkwsIHBhdGgs
IHBhdGhCZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0KTsKKyAgICAgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aCA9IFVSTENvbXBvbmVu
dDo6ZnJvbVJhbmdlKHBhdGhCZWdpbiwgb3V0cHV0Lmxlbmd0aCgpKTsKKworICAgICAgICAgICAg
Ly8gQ29weSB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgYWZ0ZXIgdGhlIHBhdGggZnJvbSB0aGUgcmVs
YXRpdmUgcGF0aC4KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmlzaCB3aXRoIHRoZSBxdWVy
eSBhbmQgcmVmZXJlbmNlIHBhcnQgKHRoZXNlIGNhbid0IGZhaWwpLgorICAgICAgICBDYW5vbmlj
YWxpemVRdWVyeShyZWxhdGl2ZVVSTCwgcXVlcnksIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnF1ZXJ5KTsKKyAgICAgICAg
Q2Fub25pY2FsaXplUmVmKHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
ZnJhZ21lbnQpOworCisgICAgICAgIC8vIEZpeCB0aGUgcGF0aCBiZWdpbm5pbmcgdG8gYWRkIGJh
Y2sgdGhlICJDOiIgd2UgbWF5IGhhdmUgd3JpdHRlbiBhYm92ZS4KKyAgICAgICAgb3V0cHV0UGFy
c2VkLT5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UodHJ1ZVBhdGhCZWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UGFy
c2VkLT5wYXRoLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorCisgICAg
Ly8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBwYXRoIGlzIHVuY2hhbmdlZDogY29weSB0byBvdXRwdXQu
CisgICAgQ29weU9uZUNvbXBvbmVudChiYXNlVVJMLCBiYXNlUGFyc2VkLnBhdGgsIG91dHB1dCwg
Jm91dHB1dFBhcnNlZC0+cGF0aCk7CisKKyAgICBpZiAocXVlcnkuaXNWYWxpZCgpKSB7CisgICAg
ICAgIC8vIEp1c3QgdGhlIHF1ZXJ5IHNwZWNpZmllZCwgcmVwbGFjZSB0aGUgcXVlcnkgYW5kIHJl
ZmVyZW5jZSAoaWdub3JlCisgICAgICAgIC8vIGZhaWx1cmVzIGZvciByZWZzKQorICAgICAgICBD
YW5vbmljYWxpemVRdWVyeShyZWxhdGl2ZVVSTCwgcXVlcnksIHF1ZXJ5Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnF1ZXJ5KTsKKyAg
ICAgICAgQ2Fub25pY2FsaXplUmVmKHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwgJm91dHB1dFBh
cnNlZC0+ZnJhZ21lbnQpOworICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisKKyAgICAv
LyBJZiB3ZSBnZXQgaGVyZSwgdGhlIHF1ZXJ5IGlzIHVuY2hhbmdlZDogY29weSB0byBvdXRwdXQu
IE5vdGUgdGhhdCB0aGUKKyAgICAvLyByYW5nZSBvZiB0aGUgcXVlcnkgcGFyYW1ldGVyIGRvZXNu
J3QgaW5jbHVkZSB0aGUgcXVlc3Rpb24gbWFyaywgc28gd2UKKyAgICAvLyBoYXZlIHRvIGFkZCBp
dCBtYW51YWxseSBpZiB0aGVyZSBpcyBhIGNvbXBvbmVudC4KKyAgICBpZiAoYmFzZVBhcnNlZC5x
dWVyeS5pc1ZhbGlkKCkpCisgICAgICAgIG91dHB1dC5hcHBlbmQoJz8nKTsKKyAgICBDb3B5T25l
Q29tcG9uZW50KGJhc2VVUkwsIGJhc2VQYXJzZWQucXVlcnksIG91dHB1dCwgJm91dHB1dFBhcnNl
ZC0+cXVlcnkpOworCisgICAgaWYgKHJlZi5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gSnVzdCB0
aGUgcmVmZXJlbmNlIHNwZWNpZmllZDogcmVwbGFjZSBpdCAoaWdub3JpbmcgZmFpbHVyZXMpLgor
ICAgICAgICBDYW5vbmljYWxpemVSZWYocmVsYXRpdmVVUkwsIHJlZiwgb3V0cHV0LCAmb3V0cHV0
UGFyc2VkLT5mcmFnbWVudCk7CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKworICAg
IC8vIFdlIHNob3VsZCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgdG8gZG8gaW4gdGhpcyBmdW5jdGlv
biwgdGhlIGNhbGxlciBjaGVja3MKKyAgICAvLyB0aGF0IHNvbWUgY29tcG9uZW50IGlzIGJlaW5n
IHJlcGxhY2VkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdWNjZXNz
OworfQorCisvLyBSZXNvbHZlcyBhIHJlbGF0aXZlIFVSTCB0aGF0IGNvbnRhaW5zIGEgaG9zdC4g
VHlwaWNhbGx5LCB0aGVzZSB3aWxsCisvLyBiZSBvZiB0aGUgZm9ybSAiLy93d3cuYXBwbGUuY29t
L2Zvby9iYXI/YmF6I2ZyYWdtZW50IiBhbmQgdGhlIG9ubHkgdGhpbmcgd2hpY2gKKy8vIHNob3Vs
ZCBiZSBrZXB0IGZyb20gdGhlIG9yaWdpbmFsIFVSTCBpcyB0aGUgc2NoZW1lLgordGVtcGxhdGU8
dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgZG9SZXNvbHZlUmVsYXRpdmVIb3N0KGNvbnN0IGNoYXIqIGJh
c2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFz
ZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZl
VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxh
dGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0
ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyog
b3V0cHV0UGFyc2VkKQoreworICAgIC8vIFBhcnNlIHRoZSByZWxhdGl2ZSBVUkwsIGp1c3QgbGlr
ZSB3ZSB3b3VsZCBmb3IgYW55dGhpbmcgZm9sbG93aW5nIGEKKyAgICAvLyBzY2hlbWUuCisgICAg
VVJMU2VnbWVudHMgcmVsYXRpdmVQYXJzZWQ7IC8vIEV2ZXJ5dGhpbmcgYnV0IHRoZSBzY2hlbWUg
aXMgdmFsaWQuCisgICAgVVJMUGFyc2VyOjpQYXJzZUFmdGVyU2NoZW1lKCZyZWxhdGl2ZVVSTFty
ZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVsYXRpdmVDb21wb25lbnQubGVuZ3RoKCksIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWxhdGl2ZVBhcnNlZCk7CisKKyAg
ICAvLyBOb3cgd2UgY2FuIGp1c3QgdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0byByZXBs
YWNlIGFsbCB0aGUgbmVjZXNzYXJ5CisgICAgLy8gcGFydHMgb2YgdGhlIG9sZCBVUkwgd2l0aCB0
aGUgbmV3IG9uZS4KKyAgICBSZXBsYWNlbWVudHM8Q0hBUj4gcmVwbGFjZW1lbnRzOworICAgIHJl
cGxhY2VtZW50cy5TZXRVc2VybmFtZShyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQudXNlcm5h
bWUpOworICAgIHJlcGxhY2VtZW50cy5TZXRQYXNzd29yZChyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQ
YXJzZWQucGFzc3dvcmQpOworICAgIHJlcGxhY2VtZW50cy5TZXRIb3N0KHJlbGF0aXZlVVJMLCBy
ZWxhdGl2ZVBhcnNlZC5ob3N0KTsKKyAgICByZXBsYWNlbWVudHMuU2V0UG9ydChyZWxhdGl2ZVVS
TCwgcmVsYXRpdmVQYXJzZWQucG9ydCk7CisgICAgcmVwbGFjZW1lbnRzLlNldFBhdGgocmVsYXRp
dmVVUkwsIHJlbGF0aXZlUGFyc2VkLnBhdGgpOworICAgIHJlcGxhY2VtZW50cy5TZXRRdWVyeShy
ZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQucXVlcnkpOworICAgIHJlcGxhY2VtZW50cy5TZXRS
ZWYocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLmZyYWdtZW50KTsKKworICAgIHJldHVybiBS
ZXBsYWNlU3RhbmRhcmRVUkwoYmFzZVVSTCwgYmFzZVBhcnNlZCwgcmVwbGFjZW1lbnRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0
UGFyc2VkKTsKK30KKworLy8gUmVzb2x2ZXMgYSByZWxhdGl2ZSBVUkwgdGhhdCBoYXBwZW5zIHRv
IGJlIGFuIGFic29sdXRlIGZpbGUgcGF0aC4gRXhhbXBsZXMKKy8vIGluY2x1ZGU6ICIvL2hvc3Ru
YW1lL3BhdGgiLCAiL2M6L2ZvbyIsIGFuZCAiLy9ob3N0bmFtZS9jOi9mb28iLgordGVtcGxhdGU8
dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgRG9SZXNvbHZlQWJzb2x1dGVGaWxlKGNvbnN0IENIQVIqIHJl
bGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRD
b252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIC8vIFBhcnNlIHRoZSBmaWxlIFVSTC4gVGhlIGZp
bGUgVVJsIHBhcnNpbmcgZnVuY3Rpb24gdXNlcyB0aGUgc2FtZSBsb2dpYworICAgIC8vIGFzIHdl
IGRvIGZvciBkZXRlcm1pbmluZyBpZiB0aGUgZmlsZSBpcyBhYnNvbHV0ZSwgaW4gd2hpY2ggY2Fz
ZSBpdCB3aWxsCisgICAgLy8gbm90IGJvdGhlciB0byBsb29rIGZvciBhIHNjaGVtZS4KKyAgICBV
UkxTZWdtZW50cyByZWxhdGl2ZVBhcnNlZDsKKyAgICBVUkxQYXJzZXI6OlBhcnNlRmlsZVVSTCgm
cmVsYXRpdmVVUkxbcmVsYXRpdmVDb21wb25lbnQuYmVnaW4oKV0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQubGVuZ3RoKCksICZyZWxhdGl2ZVBhcnNlZCk7
CisKKyAgICByZXR1cm4gQ2Fub25pY2FsaXplRmlsZVVSTCgmcmVsYXRpdmVVUkxbcmVsYXRpdmVD
b21wb25lbnQuYmVnaW4oKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRp
dmVDb21wb25lbnQubGVuZ3RoKCksIHJlbGF0aXZlUGFyc2VkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisK
Ky8vIFRPRE8oYnJldHR3KSB0cmVhdCB0d28gc2xhc2hlcyBhcyByb290IGxpa2UgTW96aWxsYSBm
b3IgRlRQPwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgZG9SZXNvbHZlUmVsYXRpdmVV
UkwoY29uc3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmFzZUlzRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVsYXRp
dmVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVs
YXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0
ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICAvLyBTdGFydGluZyBwb2ludCBmb3Igb3VyIG91dHB1dCBwYXJz
ZWQuIFdlJ2xsIGZpeCB3aGF0IHdlIGNoYW5nZS4KKyAgICAqb3V0cHV0UGFyc2VkID0gYmFzZVBh
cnNlZDsKKworICAgIC8vIFNhbml0eSBjaGVjazogdGhlIGlucHV0IHNob3VsZCBoYXZlIGEgaG9z
dCBvciB3ZSdsbCBicmVhayBiYWRseSBiZWxvdy4KKyAgICAvLyBXZSBjYW4gb25seSByZXNvbHZl
IHJlbGF0aXZlIFVSTHMgd2l0aCBiYXNlIFVSTHMgdGhhdCBoYXZlIGhvc3RzIGFuZAorICAgIC8v
IHBhdGhzIChldmVuIHRoZSBkZWZhdWx0IHBhdGggb2YgIi8iIGlzIE9LKS4KKyAgICAvLworICAg
IC8vIFdlIGFsbG93IGhvc3RzIHdpdGggbm8gbGVuZ3RoIHNvIHdlIGNhbiBoYW5kbGUgZmlsZSBV
UkxzLCBmb3IgZXhhbXBsZS4KKyAgICBpZiAoYmFzZVBhcnNlZC5wYXRoLmxlbmd0aCgpIDw9IDAp
IHsKKyAgICAgICAgLy8gT24gZXJyb3IsIHJldHVybiB0aGUgaW5wdXQgKHJlc29sdmluZyBhIHJl
bGF0aXZlIFVSTCBvbiBhIG5vbi1yZWxhdGl2ZQorICAgICAgICAvLyBiYXNlID0gdGhlIGJhc2Up
LgorICAgICAgICBpbnQgYmFzZUxlbmd0aCA9IGJhc2VQYXJzZWQubGVuZ3RoKCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYmFzZUxlbmd0aDsgaSsrKQorICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChiYXNlVVJMW2ldKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChyZWxhdGl2ZUNvbXBvbmVudC5sZW5ndGgoKSA8PSAwKSB7CisgICAgICAgIC8vIEVtcHR5
IHJlbGF0aXZlIFVSTCwgbGVhdmUgdW5jaGFuZ2VkLCBvbmx5IHJlbW92aW5nIHRoZSByZWYgY29t
cG9uZW50LgorICAgICAgICBpbnQgYmFzZUxlbmd0aCA9IGJhc2VQYXJzZWQubGVuZ3RoKCk7Cisg
ICAgICAgIGJhc2VMZW5ndGggLT0gYmFzZVBhcnNlZC5mcmFnbWVudC5sZW5ndGgoKSArIDE7Cisg
ICAgICAgIG91dHB1dFBhcnNlZC0+ZnJhZ21lbnQucmVzZXQoKTsKKyAgICAgICAgb3V0cHV0LmFw
cGVuZChiYXNlVVJMLCBiYXNlTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgaW50IG51bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVz
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWxhdGl2ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQuYmVnaW4oKSwgcmVsYXRpdmVDb21wb25l
bnQuZW5kKCkpOworCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBPbiBXaW5kb3dzLCB0d28gc2xh
c2hlcyBmb3IgYSBmaWxlIHBhdGggKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggZGlyZWN0aW9uCisgICAg
Ly8gdGhleSBhcmUpIG1lYW5zIHRoYXQgaXQncyBVTkMuIFR3byBiYWNrc2xhc2hlcyBvbiBhbnkg
YmFzZSBzY2hlbWUgbWVhbgorICAgIC8vIHRoYXQgaXQncyBhbiBhYnNvbHV0ZSBVTkMgcGF0aCAo
d2UgdXNlIHRoZSBiYXNlSXNGaWxlIGZsYWcgdG8gY29udHJvbAorICAgIC8vIGhvdyBzdHJpY3Qg
dGhlIFVOQyBmaW5kZXIgaXMpLgorICAgIC8vCisgICAgLy8gV2UgYWxzbyBhbGxvdyBXaW5kb3dz
IGFic29sdXRlIGRyaXZlIHNwZWNzIG9uIGFueSBzY2hlbWUgKGZvciBleGFtcGxlCisgICAgLy8g
ImM6XGZvbyIpIGxpa2UgSUUgZG9lcy4gVGhlcmUgbXVzdCBiZSBubyBwcmVjZWVkaW5nIHNsYXNo
ZXMgaW4gdGhpcworICAgIC8vIGNhc2UgKHdlIHJlamVjdCBhbnl0aGluZyBsaWtlICIvYzovZm9v
IikgYmVjYXVzZSB0aGF0IHNob3VsZCBiZSB0cmVhdGVkCisgICAgLy8gYXMgYSBwYXRoLiBGb3Ig
ZmlsZSBVUkxzLCB3ZSBhbGxvdyBhbnkgbnVtYmVyIG9mIHNsYXNoZXMgc2luY2UgdGhhdCB3b3Vs
ZAorICAgIC8vIGJlIHNldHRpbmcgdGhlIHBhdGguCisgICAgLy8KKyAgICAvLyBUaGlzIGFzc3Vt
ZXMgdGhlIGFic29sdXRlIHBhdGggcmVzb2x2ZXIgaGFuZGxlcyBhYnNvbHV0ZSBVUkxzIGxpa2Ug
dGhpcworICAgIC8vIHByb3Blcmx5LiBVUkxVdGlsaXRpZXM6OkRvQ2Fub25pY2FsaXplIGRvZXMg
dGhpcy4KKyAgICBpbnQgYWZ0ZXJTbGFzaGVzID0gcmVsYXRpdmVDb21wb25lbnQuYmVnaW4gKyBu
dW1TbGFzaGVzOworICAgIGlmIChVUkxQYXJzZXI6OmRvZXNCZWdpblVOQ1BhdGgocmVsYXRpdmVV
UkwsIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCksIHJlbGF0aXZlQ29tcG9uZW50LmVuZCgpLCAh
YmFzZUlzRmlsZSkKKyAgICAgICAgfHwgKCghbnVtU2xhc2hlcyB8fCBiYXNlSXNGaWxlKSAmJiBV
UkxQYXJzZXI6OmRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMocmVsYXRpdmVVUkwsIGFmdGVyU2xh
c2hlcywgcmVsYXRpdmVDb21wb25lbnQuZW5kKCkpKSkgeworICAgICAgICAgICAgIHJldHVybiBE
b1Jlc29sdmVBYnNvbHV0ZUZpbGUocmVsYXRpdmVVUkwsIHJlbGF0aXZlQ29tcG9uZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlDb252ZXJ0ZXIsIG91
dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICAgICAgIH0KKyNlbHNlCisgICAgLy8gT3RoZXIgcGxh
dGZvcm1zIG5lZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIGZpbGU6IFVSTHMgd2l0aCBtdWx0aXBs
ZQorICAgIC8vIHNsYXNoZXMgYmVjYXVzZSB0aGUgZ2VuZXJpYyBzY2hlbWUgcGFyc2luZyBhbHdh
eXMgZXh0cmFjdHMgYSBob3N0LCBidXQgYQorICAgIC8vIGZpbGU6IFVSTCBvbmx5IGhhcyBhIGhv
c3QgaWYgaXQgaGFzIGV4YWN0bHkgMiBzbGFzaGVzLiBUaGlzIGFsc28KKyAgICAvLyBoYW5kbGVz
IHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIFVSTCBpcyBvbmx5IHNsYXNoZXMsIHNpbmNlIHRo
YXQKKyAgICAvLyBkb2Vzbid0IGhhdmUgYSBob3N0IHBhcnQgZWl0aGVyLgorICAgIGlmIChiYXNl
SXNGaWxlICYmIChudW1TbGFzaGVzID4gMiB8fCBudW1TbGFzaGVzID09IHJlbGF0aXZlQ29tcG9u
ZW50Lmxlbmd0aCgpKSkgeworICAgICAgICByZXR1cm4gRG9SZXNvbHZlQWJzb2x1dGVGaWxlKHJl
bGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0K
KyNlbmRpZgorCisgICAgLy8gQW55IG90aGVyIGRvdWJsZS1zbGFzaGVzIG1lYW4gdGhhdCB0aGlz
IGlzIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWUuCisgICAgaWYgKG51bVNsYXNoZXMgPj0gMikgewor
ICAgICAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVIb3N0KGJhc2VVUkwsIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVUkwsIHJlbGF0
aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5
Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7CisgICAgfQorCisgICAgLy8gV2hlbiB3
ZSBnZXQgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSByZWxhdGl2ZSBVUkwgaXMgb24gdGhlIHNhbWUg
aG9zdC4KKyAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVQYXRoKGJhc2VVUkwsIGJhc2VQYXJz
ZWQsIGJhc2VJc0ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2
ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCit9IC8vIG5hbWVz
cGFjZQorCitib29sIGlzUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAg
ICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQgZnJhZ21lbnRM
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Jhc2VIaWVyYXJjaGljYWwsCisgICAg
ICAgICAgICAgICAgICAgYm9vbCogaXNSZWxhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICBVUkxD
b21wb25lbnQqIHJlbGF0aXZlQ29tcG9uZW50KQoreworICAgIHJldHVybiBEb0lzUmVsYXRpdmVV
Ukw8Y2hhcj4oYmFzZSwgYmFzZVBhcnNlZCwgZnJhZ21lbnQsIGZyYWdtZW50TGVuZ3RoLCBpc0Jh
c2VIaWVyYXJjaGljYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0
aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Cit9CisKK2Jvb2wgaXNSZWxhdGl2ZVVSTChjb25zdCBj
aGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFy
c2VkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBmcmFnbWVudCwKKyAgICAgICAg
ICAgICAgICAgICBpbnQgZnJhZ21lbnRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgYm9vbCBp
c0Jhc2VIaWVyYXJjaGljYWwsCisgICAgICAgICAgICAgICAgICAgYm9vbCogaXNSZWxhdGl2ZSwK
KyAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIHJlbGF0aXZlQ29tcG9uZW50KQorewor
ICAgIHJldHVybiBEb0lzUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2UsIGJhc2VQYXJzZWQsIGZyYWdt
ZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUsIHJlbGF0aXZlQ29tcG9uZW50KTsKK30KKwor
Ym9vbCByZXNvbHZlUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBiYXNlSXNGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogcmVsYXRpdmVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxD
b21wb25lbnQmIHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hh
cnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlVVJMPGNo
YXI+KGJhc2VVUkwsIGJhc2VQYXJzZWQsIGJhc2VJc0ZpbGUsIHJlbGF0aXZlVVJMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCwgcXVlcnlD
b252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9vbCByZXNvbHZlUmVsYXRp
dmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBi
YXNlSXNGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0aXZl
VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2
ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2Vk
KQoreworICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZVVSTDxVQ2hhcj4oYmFzZVVSTCwgYmFz
ZVBhcnNlZCwgYmFzZUlzRmlsZSwgcmVsYXRpdmVVUkwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1
dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uU3RkVVJMLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25TdGRVUkwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ZjZhOGZmNTcwMzQx
Yzg1Nzc2NTgwYTE2YmI5ZjlhM2Q0Y2JiMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uU3RkVVJMLmNwcApAQCAtMCwwICsxLDIyMiBAQAorLy8gQ29w
eXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBGdW5jdGlvbnMgdG8gY2Fub25pY2Fs
aXplICJzdGFuZGFyZCIgVVJMcywgd2hpY2ggYXJlIG9uZXMgdGhhdCBoYXZlIGFuCisvLyBhdXRo
b3JpdHkgc2VjdGlvbiBpbmNsdWRpbmcgYSBob3N0IG5hbWUuCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisj
aW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNw
YWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvQ2Fub25p
Y2FsaXplU3RhbmRhcmRVUkwoY29uc3QgVVJMQ29tcG9uZW50U291cmNlPENIQVI+JiBzb3VyY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyog
b3V0cHV0UGFyc2VkKQoreworICAgIC8vIFNjaGVtZTogdGhpcyB3aWxsIGFwcGVuZCB0aGUgY29s
b24uCisgICAgYm9vbCBzdWNjZXNzID0gQ2Fub25pY2FsaXplU2NoZW1lKHNvdXJjZS5zY2hlbWUs
IHBhcnNlZC5zY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dCwgJm91dHB1dFBhcnNlZC0+c2NoZW1lKTsKKworICAgIC8vIEF1dGhvcml0eSAodXNlcm5h
bWUsIHBhc3N3b3JkLCBob3N0LCBwb3J0KQorICAgIGJvb2wgaGF2ZUF1dGhvcml0eTsKKyAgICBp
ZiAocGFyc2VkLnVzZXJuYW1lLmlzTm9uRW1wdHkoKSB8fCBwYXJzZWQucGFzc3dvcmQuaXNWYWxp
ZCgpIHx8IHBhcnNlZC5ob3N0LmlzTm9uRW1wdHkoKSB8fCBwYXJzZWQucG9ydC5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgaGF2ZUF1dGhvcml0eSA9IHRydWU7CisKKyAgICAgICAgLy8gT25seSB3cml0
ZSB0aGUgYXV0aG9yaXR5IHNlcGFyYXRvcnMgd2hlbiB3ZSBoYXZlIGEgc2NoZW1lLgorICAgICAg
ICBpZiAocGFyc2VkLnNjaGVtZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoJy8nKTsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFVzZXIgaW5mbzogdGhlIGNhbm9uaWNhbGl6ZXIgd2lsbCBoYW5kbGUgdGhlIDog
YW5kIEAuCisgICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplVXNlckluZm8oc291cmNlLnVz
ZXJuYW1lLCBwYXJzZWQudXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlLnBhc3N3b3JkLCBwYXJzZWQucGFzc3dvcmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvdXRwdXRQYXJzZWQtPnVzZXJuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXRQYXJzZWQtPnBhc3N3b3JkKTsKKwor
ICAgICAgICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZUhvc3Qoc291cmNlLmhvc3QsIHBhcnNlZC5o
b3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0
UGFyc2VkLT5ob3N0KTsKKworICAgICAgICAvLyBIb3N0IG11c3Qgbm90IGJlIGVtcHR5IGZvciBz
dGFuZGFyZCBVUkxzLgorICAgICAgICBpZiAoIXBhcnNlZC5ob3N0LmlzTm9uRW1wdHkoKSkKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICAvLyBQb3J0OiB0aGUgcG9ydCBj
YW5vbmljYWxpemVyIHdpbGwgaGFuZGxlIHRoZSBjb2xvbi4KKyAgICAgICAgaW50IGRlZmF1bHRQ
b3J0ID0gRGVmYXVsdFBvcnRGb3JTY2hlbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmb3V0cHV0LmRhdGEoKVtvdXRwdXRQYXJzZWQtPnNjaGVtZS5i
ZWdpbigpXSwgb3V0cHV0UGFyc2VkLT5zY2hlbWUubGVuZ3RoKCkpOworICAgICAgICBzdWNjZXNz
ICY9IENhbm9uaWNhbGl6ZVBvcnQoc291cmNlLnBvcnQsIHBhcnNlZC5wb3J0LCBkZWZhdWx0UG9y
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBh
cnNlZC0+cG9ydCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gYXV0aG9yaXR5LCBjbGVh
ciB0aGUgY29tcG9uZW50cy4KKyAgICAgICAgaGF2ZUF1dGhvcml0eSA9IGZhbHNlOworICAgICAg
ICBvdXRwdXRQYXJzZWQtPmhvc3QucmVzZXQoKTsKKyAgICAgICAgb3V0cHV0UGFyc2VkLT51c2Vy
bmFtZS5yZXNldCgpOworICAgICAgICBvdXRwdXRQYXJzZWQtPnBhc3N3b3JkLnJlc2V0KCk7Cisg
ICAgICAgIG91dHB1dFBhcnNlZC0+cG9ydC5yZXNldCgpOworICAgICAgICBzdWNjZXNzID0gZmFs
c2U7IC8vIFN0YW5kYXJkIFVSTHMgbXVzdCBoYXZlIGFuIGF1dGhvcml0eS4KKyAgICB9CisKKyAg
ICAvLyBQYXRoCisgICAgaWYgKHBhcnNlZC5wYXRoLmlzTm9uRW1wdHkoKSkgeworICAgICAgICBz
dWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgoc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5w
YXRoKTsKKyAgICB9IGVsc2UgaWYgKGhhdmVBdXRob3JpdHkgfHwgcGFyc2VkLnF1ZXJ5LmlzTm9u
RW1wdHkoKSB8fCBwYXJzZWQuZnJhZ21lbnQuaXNOb25FbXB0eSgpKSB7CisgICAgICAgIC8vIFdo
ZW4gd2UgaGF2ZSBhbiBlbXB0eSBwYXRoLCBtYWtlIHVwIGEgcGF0aCB3aGVuIHdlIGhhdmUgYW4g
YXV0aG9yaXR5CisgICAgICAgIC8vIG9yIHNvbWV0aGluZyBmb2xsb3dpbmcgdGhlIHBhdGguIFRo
ZSBvbmx5IHRpbWUgd2UgYWxsb3cgYW4gZW1wdHkKKyAgICAgICAgLy8gb3V0cHV0IHBhdGggaXMg
d2hlbiB0aGVyZSBpcyBub3RoaW5nIGVsc2UuCisgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aCA9
IFVSTENvbXBvbmVudChvdXRwdXQubGVuZ3RoKCksIDEpOworICAgICAgICBvdXRwdXQuYXBwZW5k
KCcvJyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gcGF0aCBhdCBhbGwKKyAgICAgICAg
b3V0cHV0UGFyc2VkLT5wYXRoLnJlc2V0KCk7CisgICAgfQorCisgICAgLy8gUXVlcnkKKyAgICBD
YW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnksIHBhcnNlZC5xdWVyeSwgcXVlcnlDb252ZXJ0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7
CisKKyAgICAvLyBSZWY6IGlnbm9yZSBmYWlsdXJlIGZvciB0aGlzLCBzaW5jZSB0aGUgcGFnZSBj
YW4gcHJvYmFibHkgc3RpbGwgYmUgbG9hZGVkLgorICAgIENhbm9uaWNhbGl6ZVJlZihzb3VyY2Uu
cmVmLCBwYXJzZWQuZnJhZ21lbnQsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+ZnJhZ21lbnQpOwor
CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKKworLy8gUmV0dXJu
cyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgZ2l2ZW4gY2Fub25pY2FsIHNjaGVtZSwgb3IgUE9S
VF9VTlNQRUNJRklFRAorLy8gaWYgdGhlIHNjaGVtZSBpcyB1bmtub3duLgoraW50IERlZmF1bHRQ
b3J0Rm9yU2NoZW1lKGNvbnN0IGNoYXIqIHNjaGVtZSwgaW50IHNjaGVtZUxlbmd0aCkKK3sKKyAg
ICBpbnQgZGVmYXVsdFBvcnQgPSBVUkxQYXJzZXI6OlBPUlRfVU5TUEVDSUZJRUQ7CisgICAgc3dp
dGNoIChzY2hlbWVMZW5ndGgpIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICghc3RybmNtcChz
Y2hlbWUsICJodHRwIiwgc2NoZW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0g
ODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgICAgaWYgKCFzdHJuY21wKHNj
aGVtZSwgImh0dHBzIiwgc2NoZW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0g
NDQzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmICghc3RybmNtcChz
Y2hlbWUsICJmdHAiLCBzY2hlbWVMZW5ndGgpKQorICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSAy
MTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoc2NoZW1lLCAid3NzIiwgc2NoZW1lTGVuZ3Ro
KSkKKyAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gNDQzOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDY6CisgICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJnb3BoZXIiLCBzY2hlbWVMZW5n
dGgpKQorICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSA3MDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSAyOgorICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAid3MiLCBzY2hlbWVMZW5ndGgp
KQorICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSA4MDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiBkZWZhdWx0UG9ydDsKK30KKworYm9vbCBDYW5vbmljYWxpemVTdGFuZGFyZFVS
TChjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyog
c3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2Vn
bWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZl
cnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZVN0YW5kYXJk
VVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPihzcGVjKSwg
cGFyc2VkLCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jv
b2wgQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICovLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0
dXJuIERvQ2Fub25pY2FsaXplU3RhbmRhcmRVUkw8VUNoYXIsIFVDaGFyPihVUkxDb21wb25lbnRT
b3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRQYXJz
ZWQpOworfQorCisvLyBJdCBtaWdodCBiZSBuaWNlIGluIHRoZSBmdXR1cmUgdG8gb3B0aW1pemUg
dGhpcyBzbyB1bmNoYW5nZWQgY29tcG9uZW50cyBkb24ndAorLy8gbmVlZCB0byBiZSByZWNhbm9u
aWNhbGl6ZWQuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIHNpbmNlIHRoZSBjb21tb24gY2FzZSBm
b3IKKy8vIFJlcGxhY2VDb21wb25lbnRzIGlzIHJlbW92aW5nIHRoaW5ncyB3ZSBkb24ndCB3YW50
LCBsaWtlIHJlZmVyZW5jZSBmcmFnbWVudHMKKy8vIGFuZCB1c2VybmFtZXMuIFRoZXNlIGNhc2Vz
IGNhbiBiZWNvbWUgbW9yZSBlZmZpY2llbnQgaWYgd2UgY2FuIGFzc3VtZSB0aGUKKy8vIHJlc3Qg
b2YgdGhlIFVSTCBpcyBPSyB3aXRoIHRoZXNlIHJlbW92ZWQgKG9yIG9ubHkgdGhlIG1vZGlmaWVk
IHBhcnRzCisvLyByZWNhbm9uaWNhbGl6ZWQpLiBUaGlzIHdvdWxkIGJlIG11Y2ggbW9yZSBjb21w
bGV4IHRvIGltcGxlbWVudCwgaG93ZXZlci4KKy8vCisvLyBZb3Ugd291bGQgYWxzbyBuZWVkIHRv
IHVwZGF0ZSBEb1JlcGxhY2VDb21wb25lbnRzIGluIFVSTFV0aWxpdGllcy5jYyB3aGljaAorLy8g
cmVsaWVzIG9uIHRoaXMgcmUtY2hlY2tpbmcgZXZlcnl0aGluZyAoc2VlIHRoZSBjb21tZW50IHRo
ZXJlIGZvciB3aHkpLgorYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNl
bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNv
bnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sK
KyAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21l
bnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cE92ZXJyaWRlQ29tcG9uZW50cyhiYXNl
LCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBEb0Nhbm9uaWNh
bGl6ZVN0YW5kYXJkVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBxdWVy
eUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCisvLyBGb3IgMTYtYml0IHJl
cGxhY2VtZW50cywgd2UgdHVybiBhbGwgdGhlIHJlcGxhY2VtZW50cyBpbnRvIFVURi04IHNvIHRo
ZQorLy8gcmVndWxhciBjb2RlcGF0aCBjYW4gYmUgdXNlZC4KK2Jvb2wgUmVwbGFjZVN0YW5kYXJk
VVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxh
Y2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIENo
YXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OworICAg
IFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMg
cGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFz
ZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gRG9D
YW5vbmljYWxpemVTdGFuZGFyZFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNl
ZCwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJh
Y3RlclR5cGVzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMu
Y3BwCmluZGV4IGY1NmU3MjA3Y2M1ZTY2ZGJhOTc5NmJmNjE2MzExYjU3NzJmYzM0ZGQuLjdlM2Ux
M2QyMDk0MWMzZmU0ZTBkNTZjMTc5NWM1NjZmYzU0YTM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaWYgVVNF
KFdURlVSTCkKIAogbmFtZXNwYWNlIFdURiB7Ci0KIGNvbnN0IHVuc2lnbmVkIGNoYXIgVVJMQ2hh
cmFjdGVyVHlwZXM6OmNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF0gPSB7CiAgICAgSW52YWxpZENo
YXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hh
cmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLApAQCAtNDMsMTAwICs0MiwxMDAgQEAgY29uc3QgdW5z
aWduZWQgY2hhciBVUkxDaGFyYWN0ZXJUeXBlczo6Y2hhcmFjdGVyVHlwZVRhYmxlWzB4MTAwXSA9
IHsKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAogICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4MTAgLSAweDFm
CiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgyMCAgJyAnIChlc2NhcGUgc3BhY2VzIGluIHF1
ZXJpZXMpCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyMSAg
IQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4MjEgICEKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDIyICAiCiAgICAg
SW52YWxpZENoYXJhY3RlciwgLy8gMHgyMyAgIyAgKGludmFsaWQgaW4gcXVlcnkgc2luY2UgaXQg
bWFya3MgdGhlIHJlZikKICAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAv
LyAweDI0ICAkCiAgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgy
NSAgJQogICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjYgICYK
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI3ICAnCi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyOCAgKAotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjkgICkKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJhICAqCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyNyAgJworICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4MjggICgKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDI5ICApCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyYSAgKgogICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MmIgICsKICAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJjICAsCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHgyZCAgLQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyLCAvLyAweDJlICAuCisgICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyZCAgLQor
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDJlICAuCiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4
MmYgIC8KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJh
Y3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3Rlciwg
Ly8gMHgzMCAgMAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0
Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFj
dGVyLCAvLyAweDMxICAxCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxD
aGFyYWN0ZXIsIC8vIDB4MzIgIDIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBP
Y3RhbENoYXJhY3RlciwgLy8gMHgzMyAgMwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3Rl
ciB8IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDM0ICA0Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hh
cmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzUgIDUKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2lt
YWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzNiAgNgotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwg
RGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDM3ICA3Ci0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0
ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyLCAvLyAweDM4ICA4Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFs
Q2hhcmFjdGVyLCAvLyAweDM5ICA5CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFy
YWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzMCAgMAor
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwg
SGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzEgIDEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwg
RGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDMyICAyCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRD
aGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3Rh
bENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzMyAgMworICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxD
aGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4MzQgIDQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJh
Y3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDM1ICA1Cisg
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBI
ZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8
IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzNiAgNgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBE
ZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4MzcgIDcKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENo
YXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHgzOCAgOAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFs
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDM5ICA5CiAgICAgUXVlcnlDaGFy
YWN0ZXIsIC8vIDB4M2EgIDoKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHgzYiAgOwotICAgIElu
dmFsaWRDaGFyYWN0ZXIsIC8vIDB4M2MgIDwKKyAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDNj
ICA8ICAoVHJ5IHRvIHByZXZlbnQgY2VydGFpbiB0eXBlcyBvZiBYU1MuKQogICAgIFF1ZXJ5Q2hh
cmFjdGVyLCAvLyAweDNkICA9Ci0gICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgzZSAgPgorICAg
IEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4M2UgID4gIChUcnkgdG8gcHJldmVudCBjZXJ0YWluIHR5
cGVzIG9mIFhTUy4pCiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4M2YgID8KICAgICBRdWVyeUNo
YXJhY3RlciwgLy8gMHg0MCAgQAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDQxICBBCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0
ZXIsIC8vIDB4NDIgIEIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwg
SVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0MyAgQwotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAv
LyAweDQ0ICBECi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRD
aGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDUgIEUKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0
NiAgRgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NDcgIEcK
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDQ4ICBICi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0OSAgSQotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NGEgIEoKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDRiICBLCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0YyAgTAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIsIC8vIDB4NGQgIE0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyLCAvLyAweDRlICBOCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciwgLy8gMHg0ZiAgTwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIs
IC8vIDB4NTAgIFAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAw
eDUxICBRCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1MiAg
UgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTMgIFMKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDU0ICBUCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1NSAgVQotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTYgIFYKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDU3ICBXCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIsIC8vIDB4NTggIFgKLSAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDU5ICBZCi0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1YSAgWgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDEgIEEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQyICBCCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENv
bXBvbmVudENoYXJhY3RlciwgLy8gMHg0MyAgQworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NDQgIEQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDQ1ICBFCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHg0NiAgRgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDcgIEcKKyAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ4ICBICisg
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rl
ciwgLy8gMHg0OSAgSQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGEgIEoKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDRiICBLCisgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0
YyAgTAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NGQgIE0KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDRlICBOCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0ZiAgTworICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4NTAgIFAKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDUxICBRCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1MiAgUgorICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTMg
IFMKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDU0ICBUCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1NSAgVQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTYgIFYKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDU3ICBXCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRD
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTggIFgKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU5ICBZ
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHg1YSAgWgogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDViICBbCiAgICAgUXVl
cnlDaGFyYWN0ZXIsIC8vIDB4NWMgICdcJwogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDVkICBd
CiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NWUgIF4KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDVmICBfCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1ZiAgXwogICAgIFF1ZXJ5Q2hh
cmFjdGVyLCAvLyAweDYwICBgCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NjEgIGEKLSAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3Rl
ciwgLy8gMHg2MiAgYgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJ
UHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDYzICBjCi0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8v
IDB4NjQgIGQKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENo
YXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2NSAgZQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDY2
ICBmCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2NyAgZwot
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NjggIGgKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDY5ICBpCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2YSAgagotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NmIgIGsKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDZjICBsCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHg2ZCAgbQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIsIC8vIDB4NmUgIG4KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyLCAvLyAweDZmICBvCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rlciwg
Ly8gMHg3MCAgcAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4
NzEgIHEKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDcyICBy
Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3MyAgcwotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzQgIHQKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc1ICB1Ci0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3NiAgdgotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzcgIHcKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciwgLy8gMHg3OCAgeAotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzkgIHkKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDdhICB6CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8
IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2MSAgYQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjIgIGIKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDYzICBjCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHg2NCAgZAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4NjUgIGUKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50
Q2hhcmFjdGVyLCAvLyAweDY2ICBmCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2NyAgZworICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjggIGgKKyAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDY5ICBpCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENv
bXBvbmVudENoYXJhY3RlciwgLy8gMHg2YSAgagorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NmIgIGsKKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZj
ICBsCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg2ZCAgbQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NmUgIG4KKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZmICBvCisgICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg3MCAgcAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NzEgIHEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDcyICByCisgICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3MyAg
cworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4NzQgIHQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc1ICB1CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3NiAgdgorICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NzcgIHcKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENo
YXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3OCAgeAorICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzkgIHkK
KyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDdhICB6CiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4N2IgIHsKICAgICBRdWVy
eUNoYXJhY3RlciwgLy8gMHg3YyAgfAogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDdkICB9Ci0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3ZSAgfgorICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4N2UgIH4KICAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDdmCiAgICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDaGFyYWN0ZXJUeXBlcy5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDaGFyYWN0
ZXJUeXBlcy5oCmluZGV4IDZlZGI5OGNhMjAzOWVjNGU2ODY3YTM2Zjc2ZjgxMjJkMGVmYzA0N2Mu
LjUzNDRlOWM0YWI2MWY2N2E3ODU0ZTk4ODBjZjAwNDNmMWY3NmJkODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmgKQEAgLTM1LDI3ICszNSwyOSBAQCBuYW1l
c3BhY2UgV1RGIHsKIAogY2xhc3MgVVJMQ2hhcmFjdGVyVHlwZXMgewogcHVibGljOgotICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc1F1ZXJ5Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGlz
Q2hhck9mVHlwZShjLCBRdWVyeUNoYXJhY3Rlcik7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wg
aXNJUHY0Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGlzQ2hhck9mVHlwZShjLCBJUHY0
Q2hhcmFjdGVyKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hleENoYXIodW5zaWduZWQg
Y2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5cGUoYywgSGV4Q2hhcmFjdGVyKTsgfQotCi1wcml2
YXRlOgotICAgIGVudW0gQ2hhclR5cGVzIHsKKyAgICBlbnVtIENoYXJhY3RlclR5cGVzIHsKICAg
ICAgICAgSW52YWxpZENoYXJhY3RlciA9IDAsCiAgICAgICAgIFF1ZXJ5Q2hhcmFjdGVyID0gMSA8
PCAwLAogICAgICAgICBVc2VySW5mb0NoYXJhY3RlciA9IDEgPDwgMSwKICAgICAgICAgSVB2NENo
YXJhY3RlciA9IDEgPDwgMiwKLSAgICAgICAgSGV4Q2hhcmFjdGVyID0gMSA8PCAzLAorICAgICAg
ICBIZXhhZGVjaW1hbENoYXJhY3RlciA9IDEgPDwgMywKICAgICAgICAgRGVjaW1hbENoYXJhY3Rl
ciA9IDEgPDwgNCwKICAgICAgICAgT2N0YWxDaGFyYWN0ZXIgPSAxIDw8IDUsCisgICAgICAgIENv
bXBvbmVudENoYXJhY3RlciA9IDEgPDwgNiwKICAgICB9OwogCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgY2hhcmFjdGVyVHlwZVRhYmxlWzB4MTAwXTsKKyAgICBzdGF0aWMgaW5saW5l
IGJvb2wgaXNDb21wb25lbnRDaGFyKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJldHVybiBp
c0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0ZXIsIENvbXBvbmVudENoYXJhY3Rlcik7IH0KKyAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNIZXhDaGFyKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJl
dHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0ZXIsIEhleGFkZWNpbWFsQ2hhcmFjdGVyKTsg
fQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lQdjRDaGFyKHVuc2lnbmVkIGNoYXIgY2hhcmFj
dGVyKSB7IHJldHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0ZXIsIElQdjRDaGFyYWN0ZXIp
OyB9CisgICAgc3RhdGljIGlubGluZSBib29sIGlzUXVlcnlDaGFyKHVuc2lnbmVkIGNoYXIgY2hh
cmFjdGVyKSB7IHJldHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0ZXIsIFF1ZXJ5Q2hhcmFj
dGVyKTsgfQogCi0gICAgc3RhdGljIGlubGluZSBib29sIGlzQ2hhck9mVHlwZSh1bnNpZ25lZCBj
aGFyIGMsIENoYXJUeXBlcyB0eXBlKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoYXJhY3Rl
ck9mVHlwZSh1bnNpZ25lZCBjaGFyIEhleENoYXJhY3RlciwgQ2hhcmFjdGVyVHlwZXMgdHlwZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhIShjaGFyYWN0ZXJUeXBlVGFibGVbY10gJiB0eXBlKTsK
KyAgICAgICAgcmV0dXJuICEhKGNoYXJhY3RlclR5cGVUYWJsZVtIZXhDaGFyYWN0ZXJdICYgdHlw
ZSk7CiAgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNo
YXJhY3RlclR5cGVUYWJsZVsweDEwMF07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTEVzY2FwZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEVz
Y2FwZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhY2RjZGUyNGQ2NzZlMWE5
NDczODEzZjJmMjM5OWU0Y2YwYzI0ZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxFc2NhcGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxFc2NhcGUuaCIK
LQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jb25zdCBjaGFyIGhleENo
YXJhY3RlclRhYmxlWzE2XSA9IHsKLSAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAn
NicsICc3JywKLSAgICAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTEVzY2FwZS5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxFc2NhcGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxMDAxMmEzZjhiZWU3ZTkzZDgyODRk
MGQyMDQ1YjY5MGU4ODE4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEVzY2FwZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLQotI2lmbmRlZiBVUkxFc2NhcGVfaAotI2RlZmluZSBVUkxFc2NhcGVfaAotCi0jaWYgVVNF
KFdURlVSTCkKLQotI2luY2x1ZGUgIlVSTEJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
ZXh0ZXJuIGNvbnN0IGNoYXIgaGV4Q2hhcmFjdGVyVGFibGVbMTZdOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBJbkNoYXIsIHR5cGVuYW1lIE91dENoYXI+Ci1pbmxpbmUgdm9pZCBhcHBlbmRVUkxFc2Nh
cGVkQ2hhcmFjdGVyKEluQ2hhciBjaCwgVVJMQnVmZmVyPE91dENoYXI+JiBidWZmZXIpCi17Ci0g
ICAgYnVmZmVyLmFwcGVuZCgnJScpOwotICAgIGJ1ZmZlci5hcHBlbmQoaGV4Q2hhcmFjdGVyVGFi
bGVbY2ggPj4gNF0pOwotICAgIGJ1ZmZlci5hcHBlbmQoaGV4Q2hhcmFjdGVyVGFibGVbY2ggJiAw
eGZdKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEZpbGUuaCBiL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMRmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4NjZjMTA0OGFiNDgzM2RhOTdiNDdlOTk2NDM3
Y2ExNTRiMzkwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TEZpbGUuaApAQCAtMCwwICsxLDExNCBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisvLyBQcm92aWRlcyBzaGFyZWQgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGludGVybmFs
cyBvZiB0aGUgcGFyc2VyIGFuZAorLy8gY2Fub25pY2FsaXplciBmb3IgZmlsZSBVUkxzLiBEbyBu
b3QgdXNlIG91dHNpZGUgb2YgdGhlc2UgbW9kdWxlcy4KKworI2lmbmRlZiBVUkxGaWxlX2gKKyNk
ZWZpbmUgVVJMRmlsZV9oCisKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBVUkxQYXJzZXIgeworCisjaWYgT1MoV0lORE9XUykKKy8vIFdl
IGFsbG93IGJvdGggImM6IiBhbmQgImN8IiBhcyBkcml2ZSBpZGVudGlmaWVycy4KK2lubGluZSBi
b29sIGlzV2luZG93c0RyaXZlU2VwYXJhdG9yKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1
cm4gY2hhcmFjdGVyID09ICc6JyB8fCBjaGFyYWN0ZXIgPT0gJ3wnOworfQoraW5saW5lIGJvb2wg
aXNXaW5kb3dzRHJpdmVMZXR0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiAoY2hh
cmFjdGVyID49ICdBJyAmJiBjaGFyYWN0ZXIgPD0gJ1onKSB8fCAoY2hhcmFjdGVyID49ICdhJyAm
JiBjaGFyYWN0ZXIgPD0gJ3onKTsKK30KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQorCisvLyBSZXR1
cm5zIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBzbGFzaCBpbiB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGdp
dmVuIGluZGV4LCBvcgorLy8gc3BlY0xlbmd0aCBpZiB0aGUgZW5kIG9mIHRoZSBpbnB1dCBpcyBy
ZWFjaGVkLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBpbnQgZmlu
ZE5leHRTbGFzaChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgYmVnaW5JbmRleCwgaW50
IHNwZWNMZW5ndGgpCit7CisgICAgaW50IGlkeCA9IGJlZ2luSW5kZXg7CisgICAgd2hpbGUgKGlk
eCA8IHNwZWNMZW5ndGggJiYgIWlzVVJMU2xhc2goc3BlY1tpZHhdKSkKKyAgICAgICAgKytpZHg7
CisgICAgcmV0dXJuIGlkeDsKK30KKworI2lmIE9TKFdJTkRPV1MpCisvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHN0YXJ0T2Zmc2V0IGluIHRoZSBnaXZlbiBzcGVjIGxvb2tzIGxpa2UgaXQgYmVnaW5z
IGEKKy8vIGRyaXZlIHNwZWMsIGZvciBleGFtcGxlICJjOiIuIFRoaXMgZnVuY3Rpb24gZXhwbGlj
aXRseSBoYW5kbGVzIHN0YXJ0T2Zmc2V0CisvLyB2YWx1ZXMgdGhhdCBhcmUgZXF1YWwgdG8gb3Ig
bGFyZ2VyIHRoYW4gdGhlIHNwZWNMZW5ndGggdG8gc2ltcGxpZnkgY2FsbGVycy4KKy8vCisvLyBJ
ZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIHNwZWMgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgdmFs
aWQgZHJpdmUgbGV0dGVyCisvLyBwbHVzIGEgY29sb24gc3RhcnRpbmcgYXQgfHN0YXJ0T2Zmc2V0
fC4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgYm9vbCBkb2VzQmVn
aW5XaW5kb3dzRHJpdmVTcGVjKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9m
ZnNldCwgaW50IHNwZWNMZW5ndGgpCit7CisgICAgaW50IHJlbWFpbmluZ0xlbmd0aCA9IHNwZWNM
ZW5ndGggLSBzdGFydE9mZnNldDsKKyAgICBpZiAocmVtYWluaW5nTGVuZ3RoIDwgMikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgZW5vdWdoIHJvb20uCisgICAgaWYgKCFpc1dpbmRvd3NE
cml2ZUxldHRlcihzcGVjW3N0YXJ0T2Zmc2V0XSkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
RG9lc24ndCBzdGFydCB3aXRoIGEgdmFsaWQgZHJpdmUgbGV0dGVyLgorICAgIGlmICghaXNXaW5k
b3dzRHJpdmVTZXBhcmF0b3Ioc3BlY1tzdGFydE9mZnNldCArIDFdKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBJc24ndCBmb2xsb3dlZCB3aXRoIGEgZHJpdmUgc2VwYXJhdG9yLgorICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXJ0T2Zmc2V0IGluIHRo
ZSBnaXZlbiB0ZXh0IGxvb2tzIGxpa2UgaXQgYmVnaW5zIGEKKy8vIFVOQyBwYXRoLCBmb3IgZXhh
bXBsZSAiXFwiLiBUaGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgaGFuZGxlcyBzdGFydE9mZnNldAor
Ly8gdmFsdWVzIHRoYXQgYXJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSBzcGVjTGVuZ3Ro
IHRvIHNpbXBsaWZ5IGNhbGxlcnMuCisvLworLy8gV2hlbiBzdHJpY3RTbGFzaGVzIGlzIHNldCwg
dGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgYWNjZXB0IGJhY2tzbGFzaGVzIGFzIGlzCisvLyBzdGFu
ZGFyZCBmb3IgV2luZG93cy4gT3RoZXJ3aXNlLCBpdCB3aWxsIGFjY2VwdCBmb3J3YXJkIHNsYXNo
ZXMgYXMgd2VsbAorLy8gd2hpY2ggd2UgdXNlIGZvciBhIGxvdCBvZiBVUkwgaGFuZGxpbmcuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGJvb2wgZG9lc0JlZ2luVU5D
UGF0aChjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBsZW5n
dGgsIGJvb2wgc3RyaWN0U2xhc2hlcykKK3sKKyAgICBpbnQgcmVtYWluaW5nTGVuZ3RoID0gbGVu
Z3RoIC0gc3RhcnRPZmZzZXQ7CisgICAgaWYgKHJlbWFpbmluZ0xlbmd0aCA8IDIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdHJpY3RTbGFzaGVzKQorICAgICAgICByZXR1cm4g
dGV4dFtzdGFydE9mZnNldF0gPT0gJ1xcJyAmJiB0ZXh0W3N0YXJ0T2Zmc2V0ICsgMV0gPT0gJ1xc
JzsKKyAgICByZXR1cm4gaXNVUkxTbGFzaCh0ZXh0W3N0YXJ0T2Zmc2V0XSkgJiYgaXNVUkxTbGFz
aCh0ZXh0W3N0YXJ0T2Zmc2V0ICsgMV0pOworfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK30g
Ly8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxGaWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQ
YXJzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDYzZDQwZWQ3ZDlmYmYyNGZiOTVhNjY3MGZiYzY3ODQ2MzNh
MTliMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2Uu
Y3BwCkBAIC0wLDAgKzEsNzg3IEBACisvKiBCYXNlZCBvbiBuc1VSTFBhcnNlcnMuY2MgZnJvbSBN
b3ppbGxhCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5
cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBD
b3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBUaGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICog
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9u
cyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96
aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdp
bmFsIENvZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICog
UG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAo
QykgMTk5OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICogICBEYXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhv
cikKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBi
ZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUg
IkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0
aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91
IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICog
dW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRv
IGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0
aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
CisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BM
LiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBp
ZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1z
IG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioq
KiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVVJMUGFyc2UuaCIKKworI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJVUkxVdGlsLmgiCisjaW5jbHVkZSAiVVJMVXRpbEludGVybmFsLmgiCisjaW5jbHVkZSA8
c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKworI2lmIFVTRShXVEZVUkwp
CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMUGFyc2VyIHsKKworbmFtZXNwYWNl
IHsKKworLy8gUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IGF1dGhvcml0eSB0ZXJtaW5h
dG9yIGluIHRoZSBpbnB1dCBzdGFydGluZworLy8gZnJvbSBzdGFydE9mZnNldC4gSWYgbm8gdGVy
bWluYXRvciBpcyBmb3VuZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVxdWFsCisvLyB0byBz
cGVjTGVuZ3RoLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2ludCBmaW5kTmV4
dEF1dGhvcml0eVRlcm1pbmF0b3IoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQgc3BlY0xlbmd0aCkKK3sKKyAgICBmb3IgKGludCBpID0gc3RhcnRPZmZzZXQ7
IGkgPCBzcGVjTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKElzQXV0aG9yaXR5VGVybWluYXRv
cihzcGVjW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gc3Bl
Y0xlbmd0aDsgLy8gTm90IGZvdW5kLgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgordm9pZCBwYXJzZVVzZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgdXNlciwgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwgVVJMQ29tcG9uZW50
JiBwYXNzd29yZCkKK3sKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCBjb2xvbiBpbiB0aGUgdXNlciBz
ZWN0aW9uLCB3aGljaCBzZXBhcmF0ZXMgdGhlIHVzZXJuYW1lIGFuZAorICAgIC8vIHBhc3N3b3Jk
LgorICAgIGludCBjb2xvbk9mZnNldCA9IDA7CisgICAgd2hpbGUgKGNvbG9uT2Zmc2V0IDwgdXNl
ci5sZW5ndGgoKSAmJiBzcGVjW3VzZXIuYmVnaW4oKSArIGNvbG9uT2Zmc2V0XSAhPSAnOicpCisg
ICAgICAgICsrY29sb25PZmZzZXQ7CisKKyAgICBpZiAoY29sb25PZmZzZXQgPCB1c2VyLmxlbmd0
aCgpKSB7CisgICAgICAgIC8vIEZvdW5kIHNlcGFyYXRvcjogPHVzZXJuYW1lPjo8cGFzc3dvcmQ+
CisgICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50KHVzZXIuYmVnaW4oKSwgY29sb25PZmZz
ZXQpOworICAgICAgICBwYXNzd29yZCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHVzZXIuYmVn
aW4oKSArIGNvbG9uT2Zmc2V0ICsgMSwgdXNlci5lbmQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gTm8gc2VwYXJhdG9yLCB0cmVhdCBldmVyeXRoaW5nIGFzIHRoZSB1c2VybmFtZQorICAg
ICAgICB1c2VybmFtZSA9IHVzZXI7CisgICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7
CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBwYXJz
ZVNlcnZlckluZm8oY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzZXJ2ZXJJbmZvLCBVUkxDb21wb25lbnQmIGhvc3RuYW1lLCBVUkxDb21wb25lbnQmIHBvcnQp
Cit7CisgICAgaWYgKCFzZXJ2ZXJJbmZvLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIE5vIHNlcnZl
ciBpbmZvLCBob3N0IG5hbWUgaXMgZW1wdHkuCisgICAgICAgIGhvc3RuYW1lID0gVVJMQ29tcG9u
ZW50KCk7CisgICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIElmIHRoZSBob3N0IHN0YXJ0cyB3aXRoIGEgbGVmdC1icmFja2V0LCBh
c3N1bWUgdGhlIGVudGlyZSBob3N0IGlzIGFuCisgICAgLy8gSVB2NiBsaXRlcmFsLiBPdGhlcndp
c2UsIGFzc3VtZSBub25lIG9mIHRoZSBob3N0IGlzIGFuIElQdjYgbGl0ZXJhbC4KKyAgICAvLyBU
aGlzIGFzc3VtcHRpb24gd2lsbCBiZSBvdmVycmlkZGVuIGlmIHdlIGZpbmQgYSByaWdodC1icmFj
a2V0LgorICAgIC8vCisgICAgLy8gT3VyIElQdjYgYWRkcmVzcyBjYW5vbmljYWxpemF0aW9uIGNv
ZGUgcmVxdWlyZXMgYm90aCBicmFja2V0cyB0byBleGlzdCwKKyAgICAvLyBidXQgdGhlIGFiaWxp
dHkgdG8gbG9jYXRlIGFuIGluY29tcGxldGUgYWRkcmVzcyBjYW4gc3RpbGwgYmUgdXNlZnVsLgor
ICAgIGludCBpcHY2VGVybWluYXRvciA9IHNwZWNbc2VydmVySW5mby5iZWdpbigpXSA9PSAnWycg
PyBzZXJ2ZXJJbmZvLmVuZCgpIDogLTE7CisgICAgaW50IGNvbG9uID0gLTE7CisKKyAgICAvLyBG
aW5kIHRoZSBsYXN0IHJpZ2h0LWJyYWNrZXQsIGFuZCB0aGUgbGFzdCBjb2xvbi4KKyAgICBmb3Ig
KGludCBpID0gc2VydmVySW5mby5iZWdpbigpOyBpIDwgc2VydmVySW5mby5lbmQoKTsgKytpKSB7
CisgICAgICAgIHN3aXRjaCAoc3BlY1tpXSkgeworICAgICAgICBjYXNlICddJzoKKyAgICAgICAg
ICAgIGlwdjZUZXJtaW5hdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICc6JzoKKyAgICAgICAgICAgIGNvbG9uID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGNvbG9uID4gaXB2NlRlcm1pbmF0b3IpIHsKKyAgICAgICAg
Ly8gRm91bmQgYSBwb3J0IG51bWJlcjogPGhvc3RuYW1lPjo8cG9ydD4KKyAgICAgICAgaG9zdG5h
bWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShzZXJ2ZXJJbmZvLmJlZ2luKCksIGNvbG9uKTsK
KyAgICAgICAgaWYgKCFob3N0bmFtZS5sZW5ndGgoKSkKKyAgICAgICAgICAgIGhvc3RuYW1lLnJl
c2V0KCk7CisgICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjb2xvbiArIDEs
IHNlcnZlckluZm8uZW5kKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHBvcnQ6IDxo
b3N0bmFtZT4KKyAgICAgICAgaG9zdG5hbWUgPSBzZXJ2ZXJJbmZvOworICAgICAgICBwb3J0ID0g
VVJMQ29tcG9uZW50KCk7CisgICAgfQorfQorCisvLyBHaXZlbiBhbiBhbHJlYWR5LWlkZW50aWZp
ZWQgYXV0aCBzZWN0aW9uLCBicmVha3MgaXQgaW50byBpdHMgY29uc2l0dWVudAorLy8gcGFydHMu
IFRoZSBwb3J0IG51bWJlciB3aWxsIGJlIHBhcnNlZCBhbmQgdGhlIHJlc3VsdGluZyBpbnRlZ2Vy
IHdpbGwgYmUKKy8vIGZpbGxlZCBpbnRvIHRoZSBnaXZlbiAqcG9ydCB2YXJpYWJsZSwgb3IgLTEg
aWYgdGhlcmUgaXMgbm8gcG9ydCBudW1iZXIgb3IgaXQKKy8vIGlzIGludmFsaWQuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBkb1BhcnNlQXV0aG9yaXR5KGNvbnN0IENo
YXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aG9yaXR5LCBVUkxDb21w
b25lbnQmIHVzZXJuYW1lLCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLCBVUkxDb21wb25lbnQmIGhv
c3RuYW1lLCBVUkxDb21wb25lbnQmIHBvcnQpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShh
dXRob3JpdHkuaXNWYWxpZCgpLCAiV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYW4gYXV0aG9yaXR5Iik7
CisgICAgaWYgKCFhdXRob3JpdHkubGVuZ3RoKCkpIHsKKyAgICAgICAgdXNlcm5hbWUgPSBVUkxD
b21wb25lbnQoKTsKKyAgICAgICAgcGFzc3dvcmQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAg
aG9zdG5hbWUgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcG9ydCA9IFVSTENvbXBvbmVudCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBmb3Ig
QCwgd2hpY2ggaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB1c2VyIGluZm8gYW5kCisgICAg
Ly8gdGhlIHNlcnZlciBpbmZvLgorICAgIGludCBpID0gYXV0aG9yaXR5LmVuZCgpIC0gMTsKKyAg
ICB3aGlsZSAoaSA+IGF1dGhvcml0eS5iZWdpbigpICYmIHNwZWNbaV0gIT0gJ0AnKQorICAgICAg
ICAtLWk7CisKKyAgICBpZiAoc3BlY1tpXSA9PSAnQCcpIHsKKyAgICAgICAgLy8gRm91bmQgdXNl
ciBpbmZvOiA8dXNlci1pbmZvPkA8c2VydmVyLWluZm8+CisgICAgICAgIHBhcnNlVXNlckluZm8o
c3BlYywgVVJMQ29tcG9uZW50KGF1dGhvcml0eS5iZWdpbigpLCBpIC0gYXV0aG9yaXR5LmJlZ2lu
KCkpLCB1c2VybmFtZSwgcGFzc3dvcmQpOworICAgICAgICBwYXJzZVNlcnZlckluZm8oc3BlYywg
VVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGF1dGhvcml0eS5lbmQoKSksIGhvc3RuYW1l
LCBwb3J0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyB1c2VyIGluZm8sIGV2ZXJ5dGhp
bmcgaXMgc2VydmVyIGluZm8uCisgICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7Cisg
ICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHBhcnNlU2VydmVySW5m
byhzcGVjLCBhdXRob3JpdHksIGhvc3RuYW1lLCBwb3J0KTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIHBhcnNlUGF0aChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLCBV
UkxDb21wb25lbnQmIHJlc291cmNlUGF0aCwgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQ29tcG9u
ZW50JiBmcmFnbWVudCkKK3sKKyAgICAvLyBwYXRoID0gWy9dPHNlZ21lbnQxPi88c2VnbWVudDI+
LzwuLi4+LzxzZWdtZW50Tj47PHBhcmFtPj88cXVlcnk+IzxyZWY+CisKKyAgICAvLyBTcGVjaWFs
IGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBwYXRoLgorICAgIGlmIChoaWVyYXJjaGljYWxpZGVudGlm
aWVycy5sZW5ndGgoKSA9PSAtMSkgeworICAgICAgICByZXNvdXJjZVBhdGggPSBVUkxDb21wb25l
bnQoKTsKKyAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgZnJhZ21lbnQg
PSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLmxlbmd0aCgpID4gMCwgIldlIHNob3Vs
ZCBuZXZlciBoYXZlIDAgbGVuZ3RoIHBhdGhzIik7CisKKyAgICAvLyBTZWFyY2ggZm9yIGZpcnN0
IG9jY3VycmVuY2Ugb2YgZWl0aGVyID8gb3IgIy4KKyAgICBpbnQgcGF0aEVuZCA9IGhpZXJhcmNo
aWNhbGlkZW50aWZpZXJzLmVuZCgpOworCisgICAgaW50IHF1ZXJ5U2VwYXJhdG9yID0gLTE7IC8v
IEluZGV4IG9mIHRoZSAnPycKKyAgICBpbnQgZnJhZ21lbnRTZXBhcmF0b3IgPSAtMTsgLy8gSW5k
ZXggb2YgdGhlICcjJworICAgIGZvciAoaW50IGkgPSBoaWVyYXJjaGljYWxpZGVudGlmaWVycy5i
ZWdpbigpOyBpIDwgcGF0aEVuZDsgKytpKSB7CisgICAgICAgIHN3aXRjaCAoc3BlY1tpXSkgewor
ICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgIC8vIE9ubHkgbWF0Y2ggdGhlIHF1ZXJ5IHN0
cmluZyBpZiBpdCBwcmVjZWRlcyB0aGUgcmVmZXJlbmNlIGZyYWdtZW50CisgICAgICAgICAgICAv
LyBhbmQgd2hlbiB3ZSBoYXZlbid0IGZvdW5kIG9uZSBhbHJlYWR5LgorICAgICAgICAgICAgaWYg
KGZyYWdtZW50U2VwYXJhdG9yIDwgMCAmJiBxdWVyeVNlcGFyYXRvciA8IDApCisgICAgICAgICAg
ICAgICAgcXVlcnlTZXBhcmF0b3IgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJyMnOgorICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBmaXJzdCAjIHNpZ24gb25seS4KKyAg
ICAgICAgICAgIGlmIChmcmFnbWVudFNlcGFyYXRvciA8IDApCisgICAgICAgICAgICAgICAgZnJh
Z21lbnRTZXBhcmF0b3IgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBNYXJrZXJzIHBvaW50aW5nIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgZWFjaCBv
ZiB0aGVzZSBjb3JyZXNwb25kaW5nCisgICAgLy8gY29tcG9uZW50cy4gVGhlIGNvZGUgYmVsb3cg
d29yZHMgZnJvbSB0aGUgZW5kIGJhY2sgdG8gdGhlIGJlZ2lubmluZywKKyAgICAvLyBhbmQgd2ls
bCB1cGRhdGUgdGhlc2UgaW5kaWNlcyBhcyBpdCBmaW5kcyBjb21wb25lbnRzIHRoYXQgZXhpc3Qu
CisgICAgaW50IHJlc291cmNlUGF0aEVuZCA9IC0xOworICAgIGludCBxdWVyeUVuZCA9IC0xOwor
CisgICAgLy8gUmVmIGZyYWdtZW50OiBmcm9tIHRoZSAjIHRvIHRoZSBlbmQgb2YgdGhlIHBhdGgu
CisgICAgaWYgKGZyYWdtZW50U2VwYXJhdG9yID49IDApIHsKKyAgICAgICAgcmVzb3VyY2VQYXRo
RW5kID0gcXVlcnlFbmQgPSBmcmFnbWVudFNlcGFyYXRvcjsKKyAgICAgICAgZnJhZ21lbnQgPSBV
UkxDb21wb25lbnQ6OmZyb21SYW5nZShmcmFnbWVudFNlcGFyYXRvciArIDEsIHBhdGhFbmQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlc291cmNlUGF0aEVuZCA9IHF1ZXJ5RW5kID0gcGF0aEVu
ZDsKKyAgICAgICAgZnJhZ21lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICB9CisKKyAgICAvLyBR
dWVyeSBmcmFnbWVudDogZXZlcnl0aGluZyBmcm9tIHRoZSA/IHRvIHRoZSBuZXh0IGJvdW5kYXJ5
IChlaXRoZXIgdGhlIGVuZAorICAgIC8vIG9mIHRoZSBwYXRoIG9yIHRoZSByZWYgZnJhZ21lbnQp
LgorICAgIGlmIChxdWVyeVNlcGFyYXRvciA+PSAwKSB7CisgICAgICAgIHJlc291cmNlUGF0aEVu
ZCA9IHF1ZXJ5U2VwYXJhdG9yOworICAgICAgICBxdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKHF1ZXJ5U2VwYXJhdG9yICsgMSwgcXVlcnlFbmQpOworICAgIH0gZWxzZQorICAgICAgICBx
dWVyeSA9IFVSTENvbXBvbmVudCgpOworCisgICAgLy8gRmlsZSBwYXRoOiB0cmVhdCBhbiBlbXB0
eSBmaWxlIHBhdGggYXMgbm8gZmlsZSBwYXRoLgorICAgIGlmIChyZXNvdXJjZVBhdGhFbmQgIT0g
aGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4oKSkKKyAgICAgICAgcmVzb3VyY2VQYXRoID0g
VVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4oKSwg
cmVzb3VyY2VQYXRoRW5kKTsKKyAgICBlbHNlCisgICAgICAgIHJlc291cmNlUGF0aCA9IFVSTENv
bXBvbmVudCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBk
b0V4dHJhY3RTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogdXJsLCBpbnQgdXJsTGVuZ3RoLCBV
UkxDb21wb25lbnQmIHNjaGVtZSkKK3sKKyAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBh
bmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBiZWdpbiA9IDA7CisgICAgd2hpbGUgKGJl
Z2luIDwgdXJsTGVuZ3RoICYmIHNob3VsZFRyaW1Gcm9tVVJMKHVybFtiZWdpbl0pKQorICAgICAg
ICArK2JlZ2luOworCisgICAgaWYgKGJlZ2luID09IHVybExlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBJbnB1dCBpcyBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZS4KKworICAgIC8vIEZp
bmQgdGhlIGZpcnN0IGNvbG9uIGNoYXJhY3Rlci4KKyAgICBmb3IgKGludCBpID0gYmVnaW47IGkg
PCB1cmxMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAodXJsW2ldID09ICc6JykgeworICAgICAg
ICAgICAgc2NoZW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4sIGkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOyAv
LyBObyBjb2xvbiBmb3VuZDogbm8gc2NoZW1lCit9CisKKy8vIEZpbGxzIGluIGFsbCBtZW1iZXJz
IG9mIHRoZSBQYXJzZWQgc3RydWN0dXJlIGV4Y2VwdCBmb3IgdGhlIHNjaGVtZS4KKy8vCisvLyB8
c3BlY3wgaXMgdGhlIGZ1bGwgc3BlYyBiZWluZyBwYXJzZWQsIG9mIGxlbmd0aCB8c3BlY0xlbmd0
aHwuCisvLyB8YWZ0ZXJTY2hlbWV8IGlzIHRoZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgZm9sbG93
aW5nIHRoZSBzY2hlbWUgKGFmdGVyIHRoZQorLy8gICBjb2xvbikgd2hlcmUgd2UnbGwgYmVnaW4g
cGFyc2luZy4KKy8vCisvLyBDb21wYXRhYmlsaXR5IGRhdGEgcG9pbnRzLiBJIGxpc3QgImhvc3Qi
LCAicGF0aCIgZXh0cmFjdGVkOgorLy8gSW5wdXQgICAgICAgICAgICAgICAgSUU2ICAgICAgICAg
ICAgIEZpcmVmb3ggICAgICAgICAgICAgICAgVXMKKy8vIC0tLS0tICAgICAgICAgICAgICAgIC0t
LS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLSAgICAgICAgIC0tLS0tLS0tLS0tLS0tCisvLyBo
dHRwOi8vZm9vLmNvbS8gICAgICAiZm9vLmNvbSIsICIvIiAgImZvby5jb20iLCAiLyIgICAgICAg
ICAiZm9vLmNvbSIsICIvIgorLy8gaHR0cDpmb28uY29tLyAgICAgICAgImZvby5jb20iLCAiLyIg
ICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5jb20iLCAiLyIKKy8vIGh0dHA6L2Zvby5jb20v
ICAgICAgIGZhaWwoKikgICAgICAgICAiZm9vLmNvbSIsICIvIiAgICAgICAgICJmb28uY29tIiwg
Ii8iCisvLyBodHRwOlxmb28uY29tLyAgICAgICBmYWlsKCopICAgICAgICAgIlxmb28uY29tIiwg
Ii8iKGZhaWwpICAiZm9vLmNvbSIsICIvIgorLy8gaHR0cDovLy8vZm9vLmNvbS8gICAgImZvby5j
b20iLCAiLyIgICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5jb20iLCAiLyIKKy8vCisvLyAo
KikgSW50ZXJlc3RpbmdseSwgYWx0aG91Z2ggSUUgZmFpbHMgdG8gbG9hZCB0aGVzZSBVUkxzLCBp
dHMgaGlzdG9yeQorLy8gY2Fub25pY2FsaXplciBoYW5kbGVzIHRoZW0sIG1lYW5pbmcgaWYgeW91
J3ZlIGJlZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcKKy8vICJodHRwOi8vZm9vLmNvbS8iIGxpbmss
IGl0IHdpbGwgYmUgY29sb3JlZC4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
dm9pZCBkb1BhcnNlQWZ0ZXJTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHNw
ZWNMZW5ndGgsIGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBp
bnQgc2xhc2hlc0NvdW50ID0gY291bnRDb25zZWN1dGl2ZVNsYXNoZXMoc3BlYywgYWZ0ZXJTY2hl
bWUsIHNwZWNMZW5ndGgpOworICAgIGludCBhZnRlclNsYXNoZXMgPSBhZnRlclNjaGVtZSArIHNs
YXNoZXNDb3VudDsKKworICAgIC8vIEZpcnN0IHNwbGl0IGludG8gdHdvIG1haW4gcGFydHMsIHRo
ZSBhdXRob3JpdHkgKHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdCwKKyAgICAvLyBhbmQgcG9ydCkg
YW5kIHRoZSBmdWxsIHBhdGggKHBhdGgsIHF1ZXJ5LCBhbmQgcmVmZXJlbmNlKS4KKyAgICBVUkxD
b21wb25lbnQgYXV0aG9yaXR5OworICAgIFVSTENvbXBvbmVudCBmdWxsUGF0aDsKKworICAgIC8v
IEZvdW5kICIvLzxzb21lIGRhdGE+IiwgbG9va3MgbGlrZSBhbiBhdXRob3JpdHkgc2VjdGlvbi4g
VHJlYXQgZXZlcnl0aGluZworICAgIC8vIGZyb20gdGhlcmUgdG8gdGhlIG5leHQgc2xhc2ggKG9y
IGVuZCBvZiBzcGVjKSB0byBiZSB0aGUgYXV0aG9yaXR5LiBOb3RlCisgICAgLy8gdGhhdCB3ZSBp
Z25vcmUgdGhlIG51bWJlciBvZiBzbGFzaGVzIGFuZCB0cmVhdCBpdCBhcyB0aGUgYXV0aG9yaXR5
LgorICAgIGludCBlbmRBdXRoID0gZmluZE5leHRBdXRob3JpdHlUZXJtaW5hdG9yKHNwZWMsIGFm
dGVyU2xhc2hlcywgc3BlY0xlbmd0aCk7CisgICAgYXV0aG9yaXR5ID0gVVJMQ29tcG9uZW50Ojpm
cm9tUmFuZ2UoYWZ0ZXJTbGFzaGVzLCBlbmRBdXRoKTsKKworICAgIGlmIChlbmRBdXRoID09IHNw
ZWNMZW5ndGgpIC8vIE5vIGJlZ2lubmluZyBvZiBwYXRoIGZvdW5kLgorICAgICAgICBmdWxsUGF0
aCA9IFVSTENvbXBvbmVudCgpOworICAgIGVsc2UgLy8gRXZlcnl0aGluZyBzdGFydGluZyBmcm9t
IHRoZSBzbGFzaCB0byB0aGUgZW5kIGlzIHRoZSBwYXRoLgorICAgICAgICBmdWxsUGF0aCA9IFVS
TENvbXBvbmVudDo6ZnJvbVJhbmdlKGVuZEF1dGgsIHNwZWNMZW5ndGgpOworCisgICAgLy8gTm93
IHBhcnNlIHRob3NlIHR3byBzdWItcGFydHMuCisgICAgZG9QYXJzZUF1dGhvcml0eShzcGVjLCBh
dXRob3JpdHksIHBhcnNlZC51c2VybmFtZSwgcGFyc2VkLnBhc3N3b3JkLCBwYXJzZWQuaG9zdCwg
cGFyc2VkLnBvcnQpOworICAgIHBhcnNlUGF0aChzcGVjLCBmdWxsUGF0aCwgcGFyc2VkLnBhdGgs
IHBhcnNlZC5xdWVyeSwgcGFyc2VkLmZyYWdtZW50KTsKK30KKworLy8gVGhlIG1haW4gcGFyc2lu
ZyBmdW5jdGlvbiBmb3Igc3RhbmRhcmQgVVJMcy4gU3RhbmRhcmQgVVJMcyBoYXZlIGEgc2NoZW1l
LAorLy8gaG9zdCwgcGF0aCwgZXRjLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
K3ZvaWQgZG9QYXJzZVN0YW5kYXJkVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBz
cGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQoreworICAgIEFTU0VSVChzcGVjTGVuZ3Ro
ID49IDApOworCisgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29u
dHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBiZWdpbiA9IDA7CisgICAgdHJpbVVSTChzcGVjLCAm
YmVnaW4sICZzcGVjTGVuZ3RoKTsKKworICAgIGludCBhZnRlclNjaGVtZSA9IC0xOworICAgIGlm
IChkb0V4dHJhY3RTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkLnNjaGVtZSkpCisgICAg
ICAgIGFmdGVyU2NoZW1lID0gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDE7IC8vIFNraXAgcGFzdCB0
aGUgY29sb24uCisgICAgZWxzZSB7CisgICAgICAgIC8vIFNheSB0aGVyZSdzIG5vIHNjaGVtZSB3
aGVuIHRoZXJlIGlzIG5vIGNvbG9uLiBXZSBjb3VsZCBhbHNvIHNheSB0aGF0CisgICAgICAgIC8v
IGV2ZXJ5dGhpbmcgaXMgdGhlIHNjaGVtZS4gQm90aCB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQg
VVJMLCBidXQgdGhpcyB3YXkKKyAgICAgICAgLy8gc2VlbXMgbGVzcyB3cm9uZyBpbiBtb3JlIGNh
c2VzLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAgIGFmdGVyU2NoZW1l
ID0gYmVnaW47CisgICAgfQorICAgIGRvUGFyc2VBZnRlclNjaGVtZShzcGVjLCBzcGVjTGVuZ3Ro
LCBhZnRlclNjaGVtZSwgcGFyc2VkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK3ZvaWQgZG9QYXJzZUZpbGVTeXN0ZW1VUkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCit7CisgICAgQVNTRVJUKHNw
ZWNMZW5ndGggPj0gMCk7CisKKyAgICAvLyBHZXQgdGhlIHVudXNlZCBwYXJ0cyBvZiB0aGUgVVJM
IG91dCBvZiB0aGUgd2F5LgorICAgIHBhcnNlZC51c2VybmFtZS5yZXNldCgpOworICAgIHBhcnNl
ZC5wYXNzd29yZC5yZXNldCgpOworICAgIHBhcnNlZC5ob3N0LnJlc2V0KCk7CisgICAgcGFyc2Vk
LnBvcnQucmVzZXQoKTsKKyAgICBwYXJzZWQucGF0aC5yZXNldCgpOyAvLyBNYXkgdXNlIHRoaXM7
IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KKyAgICBwYXJzZWQuZnJhZ21lbnQucmVzZXQoKTsgLy8g
TWF5IHVzZSB0aGlzOyByZXNldCBmb3IgY29udmVuaWVuY2UuCisgICAgcGFyc2VkLnF1ZXJ5LnJl
c2V0KCk7IC8vIE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgorICAgIHBhcnNl
ZC5jbGVhcklubmVyVVJMU2VnbWVudHMoKTsgLy8gTWF5IHVzZSB0aGlzOyByZXNldCBmb3IgY29u
dmVuaWVuY2UuCisKKyAgICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBj
b250cm9sIGNoYXJhY3RlcnMuCisgICAgaW50IGJlZ2luID0gMDsKKyAgICB0cmltVVJMKHNwZWMs
ICZiZWdpbiwgJnNwZWNMZW5ndGgpOworCisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNzIG9yIG9u
ZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJzLgorICAgIGlm
IChiZWdpbiA9PSBzcGVjTGVuZ3RoKSB7CisgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBpbm5lclN0YXJ0ID0gLTE7CisKKyAg
ICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUuIFdlIGFsc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIG5vIHNjaGVtZS4KKyAgICBpZiAoZG9FeHRyYWN0U2NoZW1lKCZzcGVjW2JlZ2luXSwg
c3BlY0xlbmd0aCAtIGJlZ2luLCBwYXJzZWQuc2NoZW1lKSkgeworICAgICAgICAvLyBPZmZzZXQg
dGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgorICAg
ICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2lu
KTsKKworICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpbm5lclN0YXJ0ID0gcGFyc2VkLnNjaGVt
ZS5lbmQoKSArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kOyB0
aGF0J3Mgbm90IHZhbGlkIGZvciBmaWxlc3lzdGVtIFVSTHMuCisgICAgICAgIHBhcnNlZC5zY2hl
bWUucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFVSTENvbXBvbmVudCBp
bm5lclNjaGVtZTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBpbm5lclNwZWMgPSAmc3BlY1tp
bm5lclN0YXJ0XTsKKyAgICBpbnQgaW5uZXJTcGVjTGVuZ3RoID0gc3BlY0xlbmd0aCAtIGlubmVy
U3RhcnQ7CisKKyAgICBpZiAoZG9FeHRyYWN0U2NoZW1lKGlubmVyU3BlYywgaW5uZXJTcGVjTGVu
Z3RoLCBpbm5lclNjaGVtZSkpIHsKKyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNl
IHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgaW5uZXJTY2hlbWUu
c2V0QmVnaW4oaW5uZXJTY2hlbWUuYmVnaW4oKSArIGlubmVyU3RhcnQpOworCisgICAgICAgIGlm
IChpbm5lclNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQ7IHRoYXQncyBub3Qg
dmFsaWQgZm9yIGZpbGVzeXN0ZW0gVVJMcy4KKyAgICAgICAgLy8gVGhlIGJlc3Qgd2UgY2FuIGRv
IGlzIHJldHVybiAiZmlsZXN5c3RlbTovLyIuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBVUkxTZWdtZW50cyBpbm5lclBhcnNlZDsKKyAgICBpZiAoVVJMVXRpbGl0aWVzOjpDb21wYXJl
U2NoZW1lQ29tcG9uZW50KHNwZWMsIGlubmVyU2NoZW1lLCBVUkxVdGlsaXRpZXM6OmtGaWxlU2No
ZW1lKSkgeworICAgICAgICAvLyBGaWxlIFVSTHMgYXJlIHNwZWNpYWwuCisgICAgICAgIFBhcnNl
RmlsZVVSTChpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgJmlubmVyUGFyc2VkKTsKKyAgICB9
IGVsc2UgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBpbm5l
clNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVN5c3RlbVNjaGVtZSkpIHsKKyAgICAgICAgLy8g
RmlsZXN5c3RlbSBVUkxzIGRvbid0IG5lc3QuCisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ug
aWYgKFVSTFV0aWxpdGllczo6SXNTdGFuZGFyZChzcGVjLCBpbm5lclNjaGVtZSkpIHsKKyAgICAg
ICAgLy8gQWxsICJub3JtYWwiIFVSTHMuCisgICAgICAgIGRvUGFyc2VTdGFuZGFyZFVSTChpbm5l
clNwZWMsIGlubmVyU3BlY0xlbmd0aCwgaW5uZXJQYXJzZWQpOworICAgIH0gZWxzZQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBBbGwgbWVtYmVycyBvZiBpbm5lclBhcnNlZCBuZWVkIHRvIGJl
IG9mZnNldCBieSBpbm5lclN0YXJ0LgorICAgIC8vIElmIHdlIGhhZCBhbnkgc2NoZW1lIHRoYXQg
c3VwcG9ydGVkIG5lc3RpbmcgbW9yZSB0aGFuIG9uZSBsZXZlbCBkZWVwLAorICAgIC8vIHdlJ2Qg
aGF2ZSB0byByZWN1cnNlIGludG8gdGhlIGlubmVyUGFyc2VkJ3MgaW5uZXJQYXJzZWQgd2hlbgor
ICAgIC8vIGFkanVzdGluZyBieSBpbm5lclN0YXJ0LgorICAgIGlubmVyUGFyc2VkLnNjaGVtZS5z
ZXRCZWdpbihpbm5lclBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGlubmVyU3RhcnQpOworICAgIGlu
bmVyUGFyc2VkLnVzZXJuYW1lLnNldEJlZ2luKGlubmVyUGFyc2VkLnVzZXJuYW1lLmJlZ2luKCkg
KyBpbm5lclN0YXJ0KTsKKyAgICBpbm5lclBhcnNlZC5wYXNzd29yZC5zZXRCZWdpbihpbm5lclBh
cnNlZC5wYXNzd29yZC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQYXJzZWQuaG9z
dC5zZXRCZWdpbihpbm5lclBhcnNlZC5ob3N0LmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKyAgICBp
bm5lclBhcnNlZC5wb3J0LnNldEJlZ2luKGlubmVyUGFyc2VkLnBvcnQuYmVnaW4oKSArIGlubmVy
U3RhcnQpOworICAgIGlubmVyUGFyc2VkLnF1ZXJ5LnNldEJlZ2luKGlubmVyUGFyc2VkLnF1ZXJ5
LmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKyAgICBpbm5lclBhcnNlZC5mcmFnbWVudC5zZXRCZWdp
bihpbm5lclBhcnNlZC5mcmFnbWVudC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQ
YXJzZWQucGF0aC5zZXRCZWdpbihpbm5lclBhcnNlZC5wYXRoLmJlZ2luKCkgKyBpbm5lclN0YXJ0
KTsKKworICAgIC8vIFF1ZXJ5IGFuZCByZWYgbW92ZSBmcm9tIGlubmVyUGFyc2VkIHRvIHBhcnNl
ZC4KKyAgICBwYXJzZWQucXVlcnkgPSBpbm5lclBhcnNlZC5xdWVyeTsKKyAgICBpbm5lclBhcnNl
ZC5xdWVyeS5yZXNldCgpOworICAgIHBhcnNlZC5mcmFnbWVudCA9IGlubmVyUGFyc2VkLmZyYWdt
ZW50OworICAgIGlubmVyUGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7CisKKyAgICBwYXJzZWQuc2V0
SW5uZXJVUkxTZWdtZW50cyhpbm5lclBhcnNlZCk7CisgICAgaWYgKCFpbm5lclBhcnNlZC5zY2hl
bWUuaXNWYWxpZCgpIHx8ICFpbm5lclBhcnNlZC5wYXRoLmlzVmFsaWQoKSB8fCBpbm5lclBhcnNl
ZC5pbm5lclVSTFNlZ21lbnRzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBwYXRo
IGluIGlubmVyUGFyc2VkIHNob3VsZCBzdGFydCB3aXRoIGEgc2xhc2gsIHRoZW4gaGF2ZSBhIGZp
bGVzeXN0ZW0KKyAgICAvLyB0eXBlIGZvbGxvd2VkIGJ5IGEgc2xhc2guIEZyb20gdGhlIGZpcnN0
IHNsYXNoIHVwIHRvIGJ1dCBleGNsdWRpbmcgdGhlCisgICAgLy8gc2Vjb25kIHNob3VsZCBiZSB3
aGF0IGl0IGtlZXBzOyB0aGUgcmVzdCBnb2VzIHRvIHBhcnNlZC4gSWYgdGhlIHBhdGggZW5kcwor
ICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIHNsYXNoLCBpdCdzIHN0aWxsIHByZXR0eSBjbGVhciB3
aGF0IHRoZSB1c2VyIG1lYW50LCBzbworICAgIC8vIHdlJ2xsIGxldCB0aGF0IHRocm91Z2guCisg
ICAgaWYgKCFpc1VSTFNsYXNoKHNwZWNbaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpXSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCBpbm5lclBhdGhFbmQgPSBpbm5lclBhcnNlZC5wYXRoLmJl
Z2luKCkgKyAxOyAvLyBza2lwIHRoZSBsZWFkaW5nIHNsYXNoCisgICAgd2hpbGUgKGlubmVyUGF0
aEVuZCA8IHNwZWNMZW5ndGggJiYgIWlzVVJMU2xhc2goc3BlY1tpbm5lclBhdGhFbmRdKSkKKyAg
ICAgICAgKytpbm5lclBhdGhFbmQ7CisgICAgcGFyc2VkLnBhdGguc2V0QmVnaW4oaW5uZXJQYXRo
RW5kKTsKKyAgICBpbnQgbmV3SW5uZXJQYXRoTGVuZ3RoID0gaW5uZXJQYXRoRW5kIC0gaW5uZXJQ
YXJzZWQucGF0aC5iZWdpbigpOworICAgIHBhcnNlZC5wYXRoLnNldExlbmd0aChpbm5lclBhcnNl
ZC5wYXRoLmxlbmd0aCgpIC0gbmV3SW5uZXJQYXRoTGVuZ3RoKTsKKyAgICBpbm5lclBhcnNlZC5w
YXRoLnNldExlbmd0aChuZXdJbm5lclBhdGhMZW5ndGgpOworICAgIHBhcnNlZC5zZXRJbm5lclVS
TFNlZ21lbnRzKGlubmVyUGFyc2VkKTsKK30KKworLy8gSW5pdGlhbGl6ZXMgYSBwYXRoIFVSTCB3
aGljaCBpcyBtZXJlbHkgYSBzY2hlbWUgZm9sbG93ZWQgYnkgYSBwYXRoLiBFeGFtcGxlcworLy8g
aW5jbHVkZSAiYWJvdXQ6Zm9vIiBhbmQgImphdmFzY3JpcHQ6YWxlcnQoJ2JhcicpOyIKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRvUGFyc2VQYXRoVVJMKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQor
eworICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMgb2YgdGhlIFVS
TCBvdXQgb2YgdGhlIHdheSwgd2UgbmV2ZXIKKyAgICAvLyB1c2UgdGhlbS4KKyAgICBwYXJzZWQu
dXNlcm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICBwYXJz
ZWQuaG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7CisgICAgcGFyc2VkLnF1
ZXJ5LnJlc2V0KCk7CisgICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7CisKKyAgICAvLyBTdHJp
cCBsZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAg
aW50IGJlZ2luID0gMDsKKyAgICB0cmltVVJMKHNwZWMsICZiZWdpbiwgJnNwZWNMZW5ndGgpOwor
CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNzIG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hp
dGVzcGFjZSBvciBjb250cm9sIGNoYXJzLgorICAgIGlmIChiZWdpbiA9PSBzcGVjTGVuZ3RoKSB7
CisgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKKyAgICAgICAgcGFyc2VkLnBhdGgucmVz
ZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVt
ZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVyeXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbworICAg
IC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBzY2hlbWUuCisgICAgaWYgKEV4
dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBzcGVjTGVuZ3RoIC0gYmVnaW4sICZwYXJzZWQuc2No
ZW1lKSkgeworICAgICAgICAvLyBPZmZzZXQgdGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRy
YWN0U2NoZW1lIGEgc3Vic3RyaW5nLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBh
cnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2luKTsKKworICAgICAgICAvLyBGb3IgY29tcGF0YWJp
bGl0eSB3aXRoIHRoZSBzdGFuZGFyZCBVUkwgcGFyc2VyLCB3ZSB0cmVhdCBubyBwYXRoIGFzCisg
ICAgICAgIC8vIC0xLCByYXRoZXIgdGhhbiBoYXZpbmcgYSBsZW5ndGggb2YgMCAod2Ugbm9ybWFs
bHkgd291bGRuJ3QgY2FyZSBzbworICAgICAgICAvLyBtdWNoIGZvciB0aGVzZSBub24tc3RhbmRh
cmQgVVJMcykuCisgICAgICAgIGlmIChwYXJzZWQuc2NoZW1lLmVuZCgpID09IHNwZWNMZW5ndGgg
LSAxKQorICAgICAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXJzZWQuc2No
ZW1lLmVuZCgpICsgMSwgc3BlY0xlbmd0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8g
c2NoZW1lIGZvdW5kLCBqdXN0IHBhdGguCisgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsK
KyAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShiZWdpbiwgc3Bl
Y0xlbmd0aCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
dm9pZCBkb1BhcnNlTWFpbHRvVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVj
TGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQoreworICAgIEFTU0VSVChzcGVjTGVuZ3RoID49
IDApOworCisgICAgLy8gR2V0IHRoZSBub24tcGF0aCBhbmQgbm9uLXNjaGVtZSBwYXJ0cyBvZiB0
aGUgVVJMIG91dCBvZiB0aGUgd2F5LCB3ZSBuZXZlcgorICAgIC8vIHVzZSB0aGVtLgorICAgIHBh
cnNlZC51c2VybmFtZS5yZXNldCgpOworICAgIHBhcnNlZC5wYXNzd29yZC5yZXNldCgpOworICAg
IHBhcnNlZC5ob3N0LnJlc2V0KCk7CisgICAgcGFyc2VkLnBvcnQucmVzZXQoKTsKKyAgICBwYXJz
ZWQuZnJhZ21lbnQucmVzZXQoKTsKKyAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsgLy8gTWF5IHVz
ZSB0aGlzOyByZXNldCBmb3IgY29udmVuaWVuY2UuCisKKyAgICAvLyBTdHJpcCBsZWFkaW5nICYg
dHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgaW50IGJlZ2luID0g
MDsKKyAgICB0cmltVVJMKHNwZWMsICZiZWdpbiwgJnNwZWNMZW5ndGgpOworCisgICAgLy8gSGFu
ZGxlIGVtcHR5IHNwZWNzIG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBj
b250cm9sIGNoYXJzLgorICAgIGlmIChiZWdpbiA9PSBzcGVjTGVuZ3RoKSB7CisgICAgICAgIHBh
cnNlZC5zY2hlbWUucmVzZXQoKTsKKyAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBwYXRoQmVnaW4gPSAtMTsKKyAgICBpbnQgcGF0
aEVuZCA9IC0xOworCisgICAgLy8gRXh0cmFjdCB0aGUgc2NoZW1lLCB3aXRoIHRoZSBwYXRoIGJl
aW5nIGV2ZXJ5dGhpbmcgZm9sbG93aW5nLiBXZSBhbHNvCisgICAgLy8gaGFuZGxlIHRoZSBjYXNl
IHdoZXJlIHRoZXJlIGlzIG5vIHNjaGVtZS4KKyAgICBpZiAoRXh0cmFjdFNjaGVtZSgmc3BlY1ti
ZWdpbl0sIHNwZWNMZW5ndGggLSBiZWdpbiwgJnBhcnNlZC5zY2hlbWUpKSB7CisgICAgICAgIC8v
IE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZlIEV4dHJhY3RTY2hlbWUgYSBzdWJzdHJp
bmcuCisgICAgICAgIHBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ocGFyc2VkLnNjaGVtZS5iZWdpbigp
ICsgYmVnaW4pOworCisgICAgICAgIGlmIChwYXJzZWQuc2NoZW1lLmVuZCgpICE9IHNwZWNMZW5n
dGggLSAxKSB7CisgICAgICAgICAgICBwYXRoQmVnaW4gPSBwYXJzZWQuc2NoZW1lLmVuZCgpICsg
MTsKKyAgICAgICAgICAgIHBhdGhFbmQgPSBzcGVjTGVuZ3RoOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kLCBqdXN0IHBhdGguCisgICAgICAgIHBh
cnNlZC5zY2hlbWUucmVzZXQoKTsKKyAgICAgICAgcGF0aEJlZ2luID0gYmVnaW47CisgICAgICAg
IHBhdGhFbmQgPSBzcGVjTGVuZ3RoOworICAgIH0KKworICAgIC8vIFNwbGl0IFtwYXRoQmVnaW4s
IHBhdGhFbmQpIGludG8gYSBwYXRoICsgcXVlcnkuCisgICAgZm9yIChpbnQgaSA9IHBhdGhCZWdp
bjsgaSA8IHBhdGhFbmQ7ICsraSkgeworICAgICAgICBpZiAoc3BlY1tpXSA9PSAnPycpIHsKKyAg
ICAgICAgICAgIHBhcnNlZC5xdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBw
YXRoRW5kKTsKKyAgICAgICAgICAgIHBhdGhFbmQgPSBpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGb3IgY29tcGF0YWJpbGl0eSB3aXRoIHRoZSBzdGFu
ZGFyZCBVUkwgcGFyc2VyLCB0cmVhdCBubyBwYXRoIGFzCisgICAgLy8gLTEsIHJhdGhlciB0aGFu
IGhhdmluZyBhIGxlbmd0aCBvZiAwCisgICAgaWYgKHBhdGhCZWdpbiA9PSBwYXRoRW5kKQorICAg
ICAgICBwYXJzZWQucGF0aC5yZXNldCgpOworICAgIGVsc2UKKyAgICAgICAgcGFyc2VkLnBhdGgg
PSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoQmVnaW4sIHBhdGhFbmQpOworfQorCisvLyBD
b252ZXJ0cyBhIHBvcnQgbnVtYmVyIGluIGEgc3RyaW5nIHRvIGFuIGludGVnZXIuIFdlJ2QgbGlr
ZSB0byBqdXN0IGNhbGwKKy8vIHNzY2FuZiBidXQgb3VyIGlucHV0IGlzIG5vdCBudWxsLXRlcm1p
bmF0ZWQsIHdoaWNoIHNzY2FuZiByZXF1aXJlcy4gSW5zdGVhZCwKKy8vIHdlIGNvcHkgdGhlIGRp
Z2l0cyB0byBhIHNtYWxsIHN0YWNrIGJ1ZmZlciAoc2luY2Ugd2Uga25vdyB0aGUgbWF4aW11bSBu
dW1iZXIKKy8vIG9mIGRpZ2l0cyBpbiBhIHZhbGlkIHBvcnQgbnVtYmVyKSB0aGF0IHdlIGNhbiBu
dWxsIHRlcm1pbmF0ZS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbnQgZG9Q
YXJzZVBvcnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBj
b21wb25lbnQpCit7CisgICAgLy8gRWFzeSBzdWNjZXNzIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBw
b3J0LgorICAgIGNvbnN0IGludCBrTWF4RGlnaXRzID0gNTsKKyAgICBpZiAoIWNvbXBvbmVudC5p
c05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiBQT1JUX1VOU1BFQ0lGSUVEOworCisgICAgLy8g
U2tpcCBvdmVyIGFueSBsZWFkaW5nIDBzLgorICAgIFVSTENvbXBvbmVudCBkaWdpdENvbXBvbmVu
dChjb21wb25lbnQuZW5kKCksIDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50
Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgaWYgKHNwZWNbY29tcG9uZW50LmJlZ2luKCkgKyBp
XSAhPSAnMCcpIHsKKyAgICAgICAgICAgIGRpZ2l0Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpm
cm9tUmFuZ2UoY29tcG9uZW50LmJlZ2luKCkgKyBpLCBjb21wb25lbnQuZW5kKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFkaWdpdENvbXBvbmVudC5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7IC8vIEFsbCBkaWdpdHMgd2VyZSAwLgorCisgICAg
Ly8gVmVyaWZ5IHdlIGRvbid0IGhhdmUgdG9vIG1hbnkgZGlnaXRzICh3ZSdsbCBiZSBjb3B5aW5n
IHRvIG91ciBidWZmZXIgc28KKyAgICAvLyB3ZSBuZWVkIHRvIGRvdWJsZS1jaGVjaykuCisgICAg
aWYgKGRpZ2l0Q29tcG9uZW50Lmxlbmd0aCgpID4ga01heERpZ2l0cykKKyAgICAgICAgcmV0dXJu
IFBPUlRfSU5WQUxJRDsKKworICAgIC8vIENvcHkgdmFsaWQgZGlnaXRzIHRvIHRoZSBidWZmZXIu
CisgICAgY2hhciBkaWdpdHNba01heERpZ2l0cyArIDFdOyAvLyArMSBmb3IgbnVsbCB0ZXJtaW5h
dG9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdENvbXBvbmVudC5sZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBzcGVjW2RpZ2l0Q29tcG9uZW50LmJlZ2lu
KCkgKyBpXTsKKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAv
LyBJbnZhbGlkIHBvcnQgZGlnaXQsIGZhaWwuCisgICAgICAgICAgICByZXR1cm4gUE9SVF9JTlZB
TElEOworICAgICAgICB9CisgICAgICAgIGRpZ2l0c1tpXSA9IHN0YXRpY19jYXN0PGNoYXI+KGNo
KTsKKyAgICB9CisKKyAgICAvLyBOdWxsLXRlcm1pbmF0ZSB0aGUgc3RyaW5nIGFuZCBjb252ZXJ0
IHRvIGludGVnZXIuIFNpbmNlIHdlIGd1YXJhbnRlZQorICAgIC8vIG9ubHkgZGlnaXRzLCBhdG9p
J3MgbGFjayBvZiBlcnJvciBoYW5kbGluZyBpcyBPSy4KKyAgICBkaWdpdHNbZGlnaXRDb21wb25l
bnQubGVuZ3RoKCldID0gMDsKKyAgICBpbnQgcG9ydCA9IGF0b2koZGlnaXRzKTsKKyAgICBpZiAo
cG9ydCA+IDY1NTM1KQorICAgICAgICByZXR1cm4gUE9SVF9JTlZBTElEOyAvLyBPdXQgb2YgcmFu
Z2UuCisgICAgcmV0dXJuIHBvcnQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Cit2b2lkIGRvRXh0cmFjdEZpbGVOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50JiBmaWxlTmFtZSkKK3sKKyAgICAv
LyBIYW5kbGUgZW1wdHkgcGF0aHM6IHRoZXkgaGF2ZSBubyBmaWxlIG5hbWVzLgorICAgIGlmICgh
cGF0aC5pc05vbkVtcHR5KCkpIHsKKyAgICAgICAgZmlsZU5hbWUgPSBVUkxDb21wb25lbnQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIGEg
cGFyYW1ldGVyLCB3aGljaCBpcyBhIG5vcm1hbGx5IHVudXNlZCBmaWVsZCBpbiBhCisgICAgLy8g
VVJMIGRlbGltaXRlZCBieSBhIHNlbWljb2xvbi4gV2UgcGFyc2UgdGhlIHBhcmFtZXRlciBhcyBw
YXJ0IG9mIHRoZQorICAgIC8vIHBhdGgsIGJ1dCBoZXJlLCB3ZSBkb24ndCB3YW50IHRvIGNvdW50
IGl0LiBUaGUgbGFzdCBzZW1pY29sb24gaXMgdGhlCisgICAgLy8gcGFyYW1ldGVyLiBUaGUgcGF0
aCBzaG91bGQgc3RhcnQgd2l0aCBhIHNsYXNoLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrCisg
ICAgLy8gdGhlIGZpcnN0IG9uZS4KKyAgICBpbnQgZmlsZUVuZCA9IHBhdGguZW5kKCk7CisgICAg
Zm9yIChpbnQgaSA9IHBhdGguZW5kKCkgLSAxOyBpID4gcGF0aC5iZWdpbigpOyAtLWkpIHsKKyAg
ICAgICAgaWYgKHNwZWNbaV0gPT0gJzsnKSB7CisgICAgICAgICAgICBmaWxlRW5kID0gaTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHNlYXJjaCBi
YWNrd2FyZHMgZnJvbSB0aGUgZmlsZW5hbWUgZW5kIHRvIHRoZSBwcmV2aW91cyBzbGFzaAorICAg
IC8vIHRvIGZpbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZW5hbWUuCisgICAgZm9yIChpbnQg
aSA9IGZpbGVFbmQgLSAxOyBpID49IHBhdGguYmVnaW4oKTsgLS1pKSB7CisgICAgICAgIGlmIChp
c1VSTFNsYXNoKHNwZWNbaV0pKSB7CisgICAgICAgICAgICAvLyBGaWxlIG5hbWUgaXMgZXZlcnl0
aGluZyBmb2xsb3dpbmcgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIGVuZAorICAgICAgICAgICAgZmls
ZU5hbWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgZmlsZUVuZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBObyBzbGFzaCBmb3VuZCwg
dGhpcyBtZWFucyB0aGUgaW5wdXQgd2FzIGRlZ2VuZXJhdGUgKGdlbmVyYWxseSBwYXRocworICAg
IC8vIHdpbGwgc3RhcnQgd2l0aCBhIHNsYXNoKS4gTGV0J3MgY2FsbCBldmVyeXRoaW5nIHRoZSBm
aWxlIG5hbWUuCisgICAgZmlsZU5hbWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoLmJl
Z2luKCksIGZpbGVFbmQpOworICAgIHJldHVybjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK2Jvb2wgZG9FeHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxDb21wb25lbnQmIGtleSwgVVJMQ29t
cG9uZW50JiB2YWx1ZSkKK3sKKyAgICBpZiAoIXF1ZXJ5LmlzTm9uRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaW50IHN0YXJ0ID0gcXVlcnkuYmVnaW4oKTsKKyAgICBpbnQg
Y3VycmVudCA9IHN0YXJ0OworICAgIGludCBlbmQgPSBxdWVyeS5lbmQoKTsKKworICAgIC8vIFdl
IGFzc3VtZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBpcyB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSAia2V5IiBhbmQgd2UKKyAgICAvLyBza2lwIHRvIHRoZSBlbmQgb2YgaXQuCisgICAga2V5LnNl
dEJlZ2luKGN1cnJlbnQpOworICAgIHdoaWxlIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVu
dF0gIT0gJyYnICYmIHNwZWNbY3VycmVudF0gIT0gJz0nKQorICAgICAgICArK2N1cnJlbnQ7Cisg
ICAga2V5LnNldExlbmd0aChjdXJyZW50IC0ga2V5LmJlZ2luKCkpOworCisgICAgLy8gU2tpcCB0
aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBrZXkgKGlmIGFueSkuCisgICAgaWYgKGN1cnJlbnQgPCBl
bmQgJiYgc3BlY1tjdXJyZW50XSA9PSAnPScpCisgICAgICAgICsrY3VycmVudDsKKworICAgIC8v
IEZpbmQgdGhlIHZhbHVlIHBhcnQuCisgICAgdmFsdWUuc2V0QmVnaW4oY3VycmVudCk7CisgICAg
d2hpbGUgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tjdXJyZW50XSAhPSAnJicpCisgICAgICAgICsr
Y3VycmVudDsKKyAgICB2YWx1ZS5zZXRMZW5ndGgoY3VycmVudCAtIHZhbHVlLmJlZ2luKCkpOwor
CisgICAgLy8gRmluYWxseSBza2lwIHRoZSBuZXh0IHNlcGFyYXRvciBpZiBhbnkKKyAgICBpZiAo
Y3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdID09ICcmJykKKyAgICAgICAgKytjdXJyZW50
OworCisgICAgLy8gU2F2ZSB0aGUgbmV3IHF1ZXJ5CisgICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShjdXJyZW50LCBlbmQpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZQorCitib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVu
Z3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9FeHRyYWN0U2NoZW1l
KHVybCwgdXJsTGVuZ3RoLCAqc2NoZW1lKTsKK30KKworYm9vbCBFeHRyYWN0U2NoZW1lKGNvbnN0
IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTENvbXBvbmVudCogc2NoZW1lKQoreworICAg
IHJldHVybiBkb0V4dHJhY3RTY2hlbWUodXJsLCB1cmxMZW5ndGgsICpzY2hlbWUpOworfQorCisv
LyBUaGlzIGhhbmRsZXMgZXZlcnl0aGluZyB0aGF0IG1heSBiZSBhbiBhdXRob3JpdHkgdGVybWlu
YXRvciwgaW5jbHVkaW5nCisvLyBiYWNrc2xhc2guIEZvciBzcGVjaWFsIGJhY2tzbGFzaCBoYW5k
bGluZyBzZWUgRG9QYXJzZUFmdGVyU2NoZW1lLgorYm9vbCBJc0F1dGhvcml0eVRlcm1pbmF0b3Io
VUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBpc1VSTFNsYXNoKGNoYXJhY3RlcikgfHwg
Y2hhcmFjdGVyID09ICc/JyB8fCBjaGFyYWN0ZXIgPT0gJyMnOworfQorCit2b2lkIEV4dHJhY3RG
aWxlTmFtZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29t
cG9uZW50KiBmaWxlTmFtZSkKK3sKKyAgICBkb0V4dHJhY3RGaWxlTmFtZSh1cmwsIHBhdGgsICpm
aWxlTmFtZSk7Cit9CisKK3ZvaWQgRXh0cmFjdEZpbGVOYW1lKGNvbnN0IFVDaGFyKiB1cmwsIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBmaWxlTmFtZSkKK3sKKyAgICBk
b0V4dHJhY3RGaWxlTmFtZSh1cmwsIHBhdGgsICpmaWxlTmFtZSk7Cit9CisKK2Jvb2wgRXh0cmFj
dFF1ZXJ5S2V5VmFsdWUoY29uc3QgY2hhciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxD
b21wb25lbnQqIGtleSwgVVJMQ29tcG9uZW50KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZG9FeHRy
YWN0UXVlcnlLZXlWYWx1ZSh1cmwsICpxdWVyeSwgKmtleSwgKnZhbHVlKTsKK30KKworYm9vbCBF
eHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBVQ2hhciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5
LCBVUkxDb21wb25lbnQqIGtleSwgIFVSTENvbXBvbmVudCogdmFsdWUpCit7CisgICAgcmV0dXJu
IGRvRXh0cmFjdFF1ZXJ5S2V5VmFsdWUodXJsLCAqcXVlcnksICprZXksICp2YWx1ZSk7Cit9CisK
K3ZvaWQgUGFyc2VBdXRob3JpdHkoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBhdXRoLCBVUkxDb21wb25lbnQqIHVzZXJuYW1lLCBVUkxDb21wb25lbnQqIHBhc3N3b3JkLCBV
UkxDb21wb25lbnQqIGhvc3RuYW1lLCBVUkxDb21wb25lbnQqIHBvcnROdW1iZXIpCit7CisgICAg
ZG9QYXJzZUF1dGhvcml0eShzcGVjLCBhdXRoLCAqdXNlcm5hbWUsICpwYXNzd29yZCwgKmhvc3Ru
YW1lLCAqcG9ydE51bWJlcik7Cit9CisKK3ZvaWQgUGFyc2VBdXRob3JpdHkoY29uc3QgVUNoYXIq
IHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwgVVJMQ29tcG9uZW50KiB1c2VybmFtZSwg
VVJMQ29tcG9uZW50KiBwYXNzd29yZCwgVVJMQ29tcG9uZW50KiBob3N0bmFtZSwgVVJMQ29tcG9u
ZW50KiBwb3J0TnVtYmVyKQoreworICAgIGRvUGFyc2VBdXRob3JpdHkoc3BlYywgYXV0aCwgKnVz
ZXJuYW1lLCAqcGFzc3dvcmQsICpob3N0bmFtZSwgKnBvcnROdW1iZXIpOworfQorCitpbnQgUGFy
c2VQb3J0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0KQoreworICAg
IHJldHVybiBkb1BhcnNlUG9ydCh1cmwsIHBvcnQpOworfQorCitpbnQgUGFyc2VQb3J0KGNvbnN0
IFVDaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCkKK3sKKyAgICByZXR1cm4gZG9Q
YXJzZVBvcnQodXJsLCBwb3J0KTsKK30KKwordm9pZCBQYXJzZVN0YW5kYXJkVVJMKGNvbnN0IGNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1Bh
cnNlU3RhbmRhcmRVUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOworfQorCit2b2lkIFBhcnNl
U3RhbmRhcmRVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMq
IHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlU3RhbmRhcmRVUkwodXJsLCB1cmxMZW5ndGgsICpwYXJz
ZWQpOworfQorCit2b2lkIFBhcnNlUGF0aFVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5n
dGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgZG9QYXJzZVBhdGhVUkwodXJsLCB1cmxM
ZW5ndGgsICpwYXJzZWQpOworfQorCit2b2lkIFBhcnNlUGF0aFVSTChjb25zdCBVQ2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VQYXRo
VVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9pZCBQYXJzZUZpbGVTeXN0ZW1V
UkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQor
eworICAgIGRvUGFyc2VGaWxlU3lzdGVtVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30K
Kwordm9pZCBQYXJzZUZpbGVTeXN0ZW1VUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0
aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlRmlsZVN5c3RlbVVSTCh1cmws
IHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQgUGFyc2VNYWlsdG9VUkwoY29uc3QgY2hh
ciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFy
c2VNYWlsdG9VUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOworfQorCit2b2lkIFBhcnNlTWFp
bHRvVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJz
ZWQpCit7CisgICAgZG9QYXJzZU1haWx0b1VSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Cit9
CisKK3ZvaWQgcGFyc2VQYXRoSW50ZXJuYWwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQqIGZpbGVwYXRoLCBVUkxDb21wb25lbnQqIHF1ZXJ5
LCBVUkxDb21wb25lbnQqIGZyYWdtZW50KQoreworICAgIHBhcnNlUGF0aChzcGVjLCBwYXRoLCAq
ZmlsZXBhdGgsICpxdWVyeSwgKmZyYWdtZW50KTsKK30KKwordm9pZCBwYXJzZVBhdGhJbnRlcm5h
bChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25l
bnQqIGZpbGVwYXRoLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGZyYWdtZW50
KQoreworICAgIHBhcnNlUGF0aChzcGVjLCBwYXRoLCAqZmlsZXBhdGgsICpxdWVyeSwgKmZyYWdt
ZW50KTsKK30KKwordm9pZCBQYXJzZUFmdGVyU2NoZW1lKGNvbnN0IGNoYXIqIHNwZWMsIGludCBz
cGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAg
ZG9QYXJzZUFmdGVyU2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsIGFmdGVyU2NoZW1lLCAqcGFyc2Vk
KTsKK30KKwordm9pZCBQYXJzZUFmdGVyU2NoZW1lKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3Bl
Y0xlbmd0aCwgaW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIGRv
UGFyc2VBZnRlclNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCBhZnRlclNjaGVtZSwgKnBhcnNlZCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTFBhcnNlLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWU4NTg1MjgyZjYwYWQ1MTY4MDEwM2VhZTE3Mjg4YjFiMzQ1ODk2NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuaApAQCAtMCwwICsxLDE2NSBA
QAorLy8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmli
dXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIFVSTFBhcnNl
X2gKKyNkZWZpbmUgVVJMUGFyc2VfaAorCisjaW5jbHVkZSAiVVJMQ29tcG9uZW50LmgiCisjaW5j
bHVkZSAiVVJMU2VnbWVudHMuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNl
ciB7CisKKy8vIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGVzZSBmdW5jdGlvbnMgcGFy
c2UgdGhlIGdpdmVuIFVSTCwgZmlsbGluZyBpbiBhbGwgb2YgdGhlIHN0cnVjdHVyZSdzCisvLyBj
b21wb25lbnRzLiBUaGVzZSBmdW5jdGlvbnMgY2FuIG5vdCBmYWlsLCB0aGV5IHdpbGwgYWx3YXlz
IGRvIHRoZWlyIGJlc3QKKy8vIGF0IGludGVycHJldGluZyB0aGUgaW5wdXQgZ2l2ZW4uCisvLwor
Ly8gVGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIFVSTCBNVVNUIGJlIHNwZWNpZmllZCwgd2UgZG8g
bm90IGNoZWNrIGZvciBOVUxMcworLy8gYXQgYW55IHBvaW50IGluIHRoZSBwcm9jZXNzLCBhbmQg
d2lsbCBhY3R1YWxseSBoYW5kbGUgZW1iZWRkZWQgTlVMTHMuCisvLworLy8gSU1QT1JUQU5UOiBU
aGVzZSBmdW5jdGlvbnMgZG8gTk9UIGhhbmcgb24gdG8gdGhlIGdpdmVuIHBvaW50ZXIgb3IgY29w
eSBpdAorLy8gaW4gYW55IHdheS4gU2VlIHRoZSBjb21tZW50IGFib3ZlIHRoZSBzdHJ1Y3QuCisv
LworLy8gVGhlIDgtYml0IHZlcnNpb25zIHJlcXVpcmUgVVRGLTggZW5jb2RpbmcuCisKKy8vIFN0
YW5kYXJkVVJMIGlzIGZvciB3aGVuIHRoZSBzY2hlbWUgaXMga25vd24gdG8gYmUgb25lIHRoYXQg
aGFzIGFuCisvLyBhdXRob3JpdHkgKGhvc3QpIGxpa2UgImh0dHAiLiBUaGlzIGZ1bmN0aW9uIHdp
bGwgbm90IGhhbmRsZSB3ZWlyZCBvbmVzCisvLyBsaWtlICJhYm91dDoiIGFuZCAiamF2YXNjcmlw
dDoiLCBvciBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yICJmaWxlOiIgVVJMcy4KK3ZvaWQgUGFyc2VT
dGFuZGFyZFVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBw
YXJzZWQpOwordm9pZCBQYXJzZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxM
ZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOworCisvLyBQYXRoVVJMIGlzIGZvciB3aGVuIHRo
ZSBzY2hlbWUgaXMga25vd24gbm90IHRvIGhhdmUgYW4gYXV0aG9yaXR5IChob3N0KQorLy8gc2Vj
dGlvbiBidXQgdGhhdCBhcmVuJ3QgZmlsZSBVUkxzIGVpdGhlci4gVGhlIHNjaGVtZSBpcyBwYXJz
ZWQsIGFuZAorLy8gZXZlcnl0aGluZyBhZnRlciB0aGUgc2NoZW1lIGlzIGNvbnNpZGVyZWQgYXMg
dGhlIHBhdGguIFRoaXMgaXMgdXNlZCBmb3IKKy8vIHRoaW5ncyBsaWtlICJhYm91dDoiIGFuZCAi
amF2YXNjcmlwdDoiCit2b2lkIFBhcnNlUGF0aFVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxM
ZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgVUNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIEZpbGVV
UkwgaXMgZm9yIGZpbGUgVVJMcy4gVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBydWxlcyBmb3IgaW50
ZXJwcmV0aW5nCisvLyB0aGVzZS4KK3ZvaWQgUGFyc2VGaWxlVVJMKGNvbnN0IGNoYXIqIHVybCwg
aW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlRmlsZVVSTChj
b25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKKwor
Ly8gRmlsZXN5c3RlbSBVUkxzIGFyZSBzdHJ1Y3R1cmVkIGRpZmZlcmVudGx5IHRoYW4gb3RoZXIg
VVJMcy4KK3ZvaWQgUGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExl
bmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25z
dCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKKworLy8g
TWFpbHRvVVJMIGlzIGZvciBtYWlsdG86IHVybHMuIFRoZXkgYXJlIG1hZGUgdXAgc2NoZW1lLHBh
dGgscXVlcnkKK3ZvaWQgUGFyc2VNYWlsdG9VUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVu
Z3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKK3ZvaWQgUGFyc2VNYWlsdG9VUkwoY29uc3QgVUNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIEhlbHBl
ciBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworLy8gTG9jYXRlcyB0aGUgc2NoZW1lIGFjY29yZGluZyB0byB0aGUg
VVJMICBwYXJzZXIncyBydWxlcy4gVGhpcyBmdW5jdGlvbiBpcworLy8gZGVzaWduZWQgc28gdGhl
IGNhbGxlciBjYW4gZmluZCB0aGUgc2NoZW1lIGFuZCBjYWxsIHRoZSBjb3JyZWN0IEluaXQqCisv
LyBmdW5jdGlvbiBhY2NvcmRpbmcgdG8gdGhlaXIga25vd24gc2NoZW1lIHR5cGVzLgorLy8KKy8v
IEl0IGFsc28gZG9lcyBub3QgcGVyZm9ybSBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgc2NoZW1lLgor
Ly8KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NoZW1lIGlzIGZv
dW5kIGFuZCB3aWxsIHB1dCB0aGUKKy8vIHNjaGVtZSdzIHJhbmdlIGludG8gKnNjaGVtZS4gRmFs
c2UgbWVhbnMgbm8gc2NoZW1lIGNvdWxkIGJlIGZvdW5kLiBOb3RlCisvLyB0aGF0IGEgVVJMIGJl
Z2lubmluZyB3aXRoIGEgY29sb24gaGFzIGEgc2NoZW1lLCBidXQgaXQgaXMgZW1wdHksIHNvIHRo
aXMKKy8vIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgYnV0ICpzY2hlbWUgd2lsbCA9ICgwLDAp
LgorLy8KKy8vIFRoZSBzY2hlbWUgaXMgZm91bmQgYnkgc2tpcHBpbmcgc3BhY2VzIGFuZCBjb250
cm9sIGNoYXJhY3RlcnMgYXQgdGhlCisvLyBiZWdpbm5pbmcsIGFuZCB0YWtpbmcgZXZlcnl0aGlu
ZyBmcm9tIHRoZXJlIHRvIHRoZSBmaXJzdCBjb2xvbiB0byBiZSB0aGUKKy8vIHNjaGVtZS4gVGhl
IGNoYXJhY3RlciBhdCBzY2hlbWUuZW5kKCkgd2lsbCBiZSB0aGUgY29sb24gKHdlIG1heSBlbmhh
bmNlCisvLyB0aGlzIHRvIGhhbmRsZSBmdWxsIHdpZHRoIGNvbG9ucyBvciBzb21ldGhpbmcsIHNv
IGRvbid0IGNvdW50IG9uIHRoZQorLy8gYWN0dWFsIGNoYXJhY3RlciB2YWx1ZSkuIFRoZSBjaGFy
YWN0ZXIgYXQgc2NoZW1lLmVuZCgpKzEgd2lsbCBiZSB0aGUKKy8vIGJlZ2lubmluZyBvZiB0aGUg
cmVzdCBvZiB0aGUgVVJMLCBiZSBpdCB0aGUgYXV0aG9yaXR5IG9yIHRoZSBwYXRoIChvciB0aGUK
Ky8vIGVuZCBvZiB0aGUgc3RyaW5nKS4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJl
cyBVVEYtOCBlbmNvZGluZy4KK2Jvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBjaGFyKiB1cmwsIGlu
dCB1cmxMZW5ndGgsIFVSTENvbXBvbmVudCogc2NoZW1lKTsKK2Jvb2wgRXh0cmFjdFNjaGVtZShj
b25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSk7CisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiBjaCBpcyBhIGNoYXJhY3RlciB0aGF0IHRlcm1pbmF0ZXMgdGhl
IGF1dGhvcml0eSBzZWdtZW50IG9mIGEgVVJMLgorYm9vbCBJc0F1dGhvcml0eVRlcm1pbmF0b3Io
VUNoYXIpOworCisvLyBEb2VzIGEgYmVzdCBlZmZvcnQgcGFyc2Ugb2YgaW5wdXQgfHNwZWN8LCBp
biByYW5nZSB8YXV0aHwuIElmIGEgcGFydGljdWxhcgorLy8gY29tcG9uZW50IGlzIG5vdCBmb3Vu
ZCwgaXQgd2lsbCBiZSBzZXQgdG8gaW52YWxpZC4KK3ZvaWQgUGFyc2VBdXRob3JpdHkoY29uc3Qg
Y2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLAorICAgICAgICAgICAgICAgICAg
ICBVUkxDb21wb25lbnQqIHVzZXJuYW1lLCBVUkxDb21wb25lbnQqIHBhc3N3b3JkLCBVUkxDb21w
b25lbnQqIGhvc3RuYW1lLCBVUkxDb21wb25lbnQqIHBvcnROdW1iZXIpOwordm9pZCBQYXJzZUF1
dGhvcml0eShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLAorICAg
ICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIHVzZXJuYW1lLCBVUkxDb21wb25lbnQqIHBh
c3N3b3JkLCBVUkxDb21wb25lbnQqIGhvc3RuYW1lLCBVUkxDb21wb25lbnQqIHBvcnROdW1iZXIp
OworCisvLyBDb21wdXRlcyB0aGUgaW50ZWdlciBwb3J0IHZhbHVlIGZyb20gdGhlIGdpdmVuIHBv
cnQgY29tcG9uZW50LiBUaGUgcG9ydAorLy8gY29tcG9uZW50IHNob3VsZCBoYXZlIGJlZW4gaWRl
bnRpZmllZCBieSBvbmUgb2YgdGhlIGluaXQgZnVuY3Rpb25zIG9uCisvLyB8UGFyc2VkfCBmb3Ig
dGhlIGdpdmVuIGlucHV0IHVybC4KKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYSBw
b3NpdGl2ZSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNjRLLCBvciBvbmUgb2YKKy8vIHRoZSB0d28g
c3BlY2lhbCB2YWx1ZXMgYmVsb3cuCitlbnVtIFNwZWNpYWxQb3J0IHsgUE9SVF9VTlNQRUNJRklF
RCA9IC0xLCBQT1JUX0lOVkFMSUQgPSAtMiB9OworaW50IFBhcnNlUG9ydChjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCk7CitpbnQgUGFyc2VQb3J0KGNvbnN0IFVDaGFy
KiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCk7CisKKy8vIEV4dHJhY3RzIHRoZSByYW5n
ZSBvZiB0aGUgZmlsZSBuYW1lIGluIHRoZSBnaXZlbiB1cmwuIFRoZSBwYXRoIG11c3QKKy8vIGFs
cmVhZHkgaGF2ZSBiZWVuIGNvbXB1dGVkIGJ5IHRoZSBwYXJzZSBmdW5jdGlvbiwgYW5kIHRoZSBt
YXRjaGluZyBVUkwKKy8vIGFuZCBleHRyYWN0ZWQgcGF0aCBhcmUgcHJvdmlkZWQgdG8gdGhpcyBm
dW5jdGlvbi4gVGhlIGZpbGVuYW1lIGlzCisvLyBkZWZpbmVkIGFzIGJlaW5nIGV2ZXJ5dGhpbmcg
ZnJvbSB0aGUgbGFzdCBzbGFzaC9iYWNrc2xhc2ggb2YgdGhlIHBhdGgKKy8vIHRvIHRoZSBlbmQg
b2YgdGhlIHBhdGguCisvLworLy8gVGhlIGZpbGUgbmFtZSB3aWxsIGJlIGVtcHR5IGlmIHRoZSBw
YXRoIGlzIGVtcHR5IG9yIHRoZXJlIGlzIG5vdGhpbmcKKy8vIGZvbGxvd2luZyB0aGUgbGFzdCBz
bGFzaC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4K
K3ZvaWQgRXh0cmFjdEZpbGVOYW1lKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50
JiBwYXRoLCBVUkxDb21wb25lbnQqIGZpbGVOYW1lKTsKK3ZvaWQgRXh0cmFjdEZpbGVOYW1lKGNv
bnN0IFVDaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBm
aWxlTmFtZSk7CisKKy8vIEV4dHJhY3QgdGhlIGZpcnN0IGtleS92YWx1ZSBmcm9tIHRoZSByYW5n
ZSBkZWZpbmVkIGJ5IHwqcXVlcnl8LiBVcGRhdGVzCisvLyB8KnF1ZXJ5fCB0byBzdGFydCBhdCB0
aGUgZW5kIG9mIHRoZSBleHRyYWN0ZWQga2V5L3ZhbHVlIHBhaXIuIFRoaXMgaXMKKy8vIGRlc2ln
bmVkIGZvciB1c2UgaW4gYSBsb29wOiB5b3UgY2FuIGtlZXAgY2FsbGluZyBpdCB3aXRoIHRoZSBz
YW1lIHF1ZXJ5CisvLyBvYmplY3QgYW5kIGl0IHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCBpdGVtcyBp
biB0aGUgcXVlcnkuCisvLworLy8gU29tZSBrZXkvdmFsdWUgcGFpcnMgbWF5IGhhdmUgdGhlIGtl
eSwgdGhlIHZhbHVlLCBvciBib3RoIGJlIGVtcHR5IChmb3IKKy8vIGV4YW1wbGUsIHRoZSBxdWVy
eSBzdHJpbmcgIj8mIikuIFRoZXNlIHdpbGwgYmUgcmV0dXJuZWQuIE5vdGUgdGhhdCBhbiBlbXB0
eQorLy8gbGFzdCBwYXJhbWV0ZXIgImZvby5jb20/IiBvciBmb28uY29tP2EmIiB3aWxsIG5vdCBi
ZSByZXR1cm5lZCwgdGhpcyBjYXNlCisvLyBpcyB0aGUgc2FtZSBhcyAiZG9uZS4iCisvLworLy8g
VGhlIGluaXRpYWwgcXVlcnkgY29tcG9uZW50IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgJz8nICh0
aGlzIGlzIHRoZSBkZWZhdWx0CisvLyBmb3IgcGFyc2VkIFVSTHMpLgorLy8KKy8vIElmIG5vIGtl
eS92YWx1ZSBhcmUgZm91bmQgfCprZXl8IGFuZCB8KnZhbHVlfCB3aWxsIGJlIHVuY2hhbmdlZCBh
bmQgaXQgd2lsbAorLy8gcmV0dXJuIGZhbHNlLgorYm9vbCBFeHRyYWN0UXVlcnlLZXlWYWx1ZShj
b25zdCBjaGFyKiB1cmwsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCoga2V5LCBV
UkxDb21wb25lbnQqIHZhbHVlKTsKK2Jvb2wgRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgVUNo
YXIqIHVybCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50KiBrZXksIFVSTENvbXBv
bmVudCogdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQorCisjZW5kaWYgLy8gVVJMUGFyc2VfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwIGIvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZjZiZGM4
OTQ5NmVlZDhmZjE5OGI5OTUzZTVmZjdmMzMzMWYxNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8v
IENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlVSTFBhcnNlLmgiCisKKyNpbmNsdWRlICJVUkxGaWxlLmgiCisjaW5jbHVkZSAi
VVJMUGFyc2VJbnRlcm5hbC5oIgorCisvLyBJbnRlcmVzdGluZyBJRSBmaWxlOmlzbXMuLi4KKy8v
CisvLyAgSU5QVVQgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUCisvLyAgPT09PT09PT09PT09
PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgZmlsZTov
Zm9vL2JhciAgICAgICAgICAgICAgZmlsZTovLy9mb28vYmFyCisvLyAgICAgIFRoZSByZXN1bHQg
aGVyZSBzZWVtcyB0b3RhbGx5IGludmFsaWQhPyE/IFRoaXMgaXNuJ3QgVU5DLgorLy8KKy8vICBm
aWxlOi8KKy8vICBmaWxlOi8vIG9yIGFueSBvdGhlciBudW1iZXIgb2Ygc2xhc2hlcworLy8gICAg
ICBJRTYgZG9lc24ndCBkbyBhbnl0aGluZyBhdCBhbGwgaWYgeW91IGNsaWNrIG9uIHRoaXMgbGlu
ay4gTm8gZXJyb3I6CisvLyAgICAgIG5vdGhpbmcuIElFNidzIGhpc3Rvcnkgc3lzdGVtIHNlZW1z
IHRvIGFsd2F5cyBjb2xvciB0aGlzIGxpbmssIHNvIEknbQorLy8gICAgICBndWVzc2luZyB0aGF0
IGl0IG1hcHMgaW50ZXJuYWxseSB0byB0aGUgZW1wdHkgVVJMLgorLy8KKy8vICBDOlwgICAgICAg
ICAgICAgICAgICAgICAgICBmaWxlOi8vL0M6LworLy8gICAgICBXaGVuIG9uIGEgZmlsZTogVVJM
IHNvdXJjZSBwYWdlLCB0aGlzIGxpbmsgd2lsbCB3b3JrLiBXaGVuIG92ZXIgSFRUUCwKKy8vICAg
ICAgdGhlIGZpbGU6IFVSTCB3aWxsIGFwcGVhciBpbiB0aGUgc3RhdHVzIGJhciBidXQgdGhlIGxp
bmsgd2lsbCBub3Qgd29yaworLy8gICAgICAoc2VjdXJpdHkgcmVzdHJpY3Rpb24gZm9yIGFsbCBm
aWxlIFVSTHMpLgorLy8KKy8vICBmaWxlOmZvby8gICAgICAgICAgICAgICAgICBmaWxlOmZvby8g
ICAgIChpbnZhbGlkPyE/IT8pCisvLyAgZmlsZTovZm9vLyAgICAgICAgICAgICAgICAgZmlsZTov
Ly9mb28vICAoaW52YWxpZD8hPyE/KQorLy8gIGZpbGU6Ly9mb28vICAgICAgICAgICAgICAgIGZp
bGU6Ly9mb28vICAgKFVOQyB0byBzZXJ2ZXIgImZvbyIpCisvLyAgZmlsZTovLy9mb28vICAgICAg
ICAgICAgICAgZmlsZTovLy9mb28vICAoaW52YWxpZCwgc2VlbXMgdG8gYmUgYSBmaWxlKQorLy8g
IGZpbGU6Ly8vL2Zvby8gICAgICAgICAgICAgIGZpbGU6Ly9mb28vICAgKFVOQyB0byBzZXJ2ZXIg
ImZvbyIpCisvLyAgICAgIEFueSBtb3JlIHRoYW4gZm91ciBzbGFzaGVzIGlzIGFsc28gdHJlYXRl
ZCBhcyBVTkMuCisvLworLy8gIGZpbGU6QzovICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DOi8K
Ky8vICBmaWxlOi9DOi8gICAgICAgICAgICAgICAgICBmaWxlOi8vQzovCisvLyAgICAgIFRoZSBu
dW1iZXIgb2Ygc2xhc2hlcyBhZnRlciAiZmlsZToiIGRvbid0IG1hdHRlciBpZiB0aGUgdGhpbmcg
Zm9sbG93aW5nCisvLyAgICAgIGl0IGxvb2tzIGxpa2UgYW4gYWJzb2x1dGUgZHJpdmUgcGF0aC4g
QWxzbywgc2xhc2hlcyBhbmQgYmFja3NsYXNoZXMgYXJlCisvLyAgICAgIGVxdWFsbHkgdmFsaWQg
aGVyZS4KKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
VVJMUGFyc2VyIHsKKworbmFtZXNwYWNlIHsKKworLy8gQSBzdWJjb21wb25lbnQgb2YgRG9Jbml0
RmlsZVVSTCwgdGhlIGlucHV0IG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgVU5DCisvLyBw
YXRoIG5hbWUsIHdpdGggdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhl
IHNsYXNoZXMgZm9sbG93aW5nCisvLyB0aGUgc2NoZW1lIGdpdmVuIGluIHxhZnRlclNsYXNoZXN8
LiBUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgaG9zdCwgcGF0aCwKKy8vIHF1ZXJ5LCBhbmQgcmVm
LCBhbmQgbGVhdmUgdGhlIG90aGVyIG91dHB1dCBjb21wb25lbnRzIHVudG91Y2hlZAorLy8gKERv
SW5pdEZpbGVVUkwgaGFuZGxlcyB0aGVzZSBmb3IgdXMpLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK3ZvaWQgRG9QYXJzZVVOQyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBp
bnQgYWZ0ZXJTbGFzaGVzLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sK
KyAgICBpbnQgbmV4dFNsYXNoID0gZmluZE5leHRTbGFzaChzcGVjLCBhZnRlclNsYXNoZXMsIHNw
ZWNMZW5ndGgpOworICAgIGlmIChuZXh0U2xhc2ggPT0gc3BlY0xlbmd0aCkgeworICAgICAgICAv
LyBObyBhZGRpdGlvbmFsIHNsYXNoIGZvdW5kLCBhcyBpbiAiZmlsZTovL2ZvbyIsIHRyZWF0IHRo
ZSB0ZXh0IGFzIHRoZQorICAgICAgICAvLyBob3N0IHdpdGggbm8gcGF0aCAodGhpcyB3aWxsIGVu
ZCB1cCBiZWluZyBVTkMgdG8gc2VydmVyICJmb28iKS4KKyAgICAgICAgaW50IGhvc3RMZW5ndGgg
PSBzcGVjTGVuZ3RoIC0gYWZ0ZXJTbGFzaGVzOworICAgICAgICBpZiAoaG9zdExlbmd0aCkKKyAg
ICAgICAgICAgIHBhcnNlZC0+aG9zdCA9IFVSTENvbXBvbmVudChhZnRlclNsYXNoZXMsIGhvc3RM
ZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJzZWQtPmhvc3QucmVzZXQoKTsK
KyAgICAgICAgcGFyc2VkLT5wYXRoLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIFNlZSBpZiB3ZSBoYXZlIHNvbWV0aGluZyB0aGF0IGxv
b2tzIGxpa2UgYSBwYXRoIGZvbGxvd2luZyB0aGUgZmlyc3QKKyAgICAvLyBjb21wb25lbnQuIEFz
IGluICJmaWxlOi8vbG9jYWxob3N0L2M6LyIsIHdlIGdldCAiYzovIiBvdXQuIFdlIHdhbnQgdG8K
KyAgICAvLyB0cmVhdCB0aGlzIGFzIGEgaGF2aW5nIG5vIGhvc3QgYnV0IHRoZSBwYXRoIGdpdmVu
LiBXb3JrcyBvbiBXaW5kb3dzIG9ubHkuCisgICAgaWYgKGRvZXNCZWdpbldpbmRvd3NEcml2ZVNw
ZWMoc3BlYywgbmV4dFNsYXNoICsgMSwgc3BlY0xlbmd0aCkpIHsKKyAgICAgICAgcGFyc2VkLT5o
b3N0LnJlc2V0KCk7CisgICAgICAgIHBhcnNlUGF0aEludGVybmFsKHNwZWMsIE1ha2VSYW5nZShu
ZXh0U2xhc2gsIHNwZWNMZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2Vk
LT5wYXRoLCAmcGFyc2VkLT5xdWVyeSwgJnBhcnNlZC0+cmVmKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisgICAgLy8gT3RoZXJ3aXNlLCBldmVyeXRoaW5nIHVwIHVudGlsIHRo
YXQgZmlyc3Qgc2xhc2ggd2UgZm91bmQgaXMgdGhlIGhvc3QgbmFtZSwKKyAgICAvLyB3aGljaCB3
aWxsIGVuZCB1cCBiZWluZyB0aGUgVU5DIGhvc3QuIEZvciBleGFtcGxlICJmaWxlOi8vZm9vL2Jh
ci50eHQiCisgICAgLy8gd2lsbCBnZXQgYSBzZXJ2ZXIgbmFtZSBvZiAiZm9vIiBhbmQgYSBwYXRo
IG9mICIvYmFyIi4gTGF0ZXIsIG9uIFdpbmRvd3MsCisgICAgLy8gdGhpcyBzaG91bGQgYmUgdHJl
YXRlZCBhcyB0aGUgZmlsZW5hbWUgIlxcZm9vXGJhci50eHQiIGluIHByb3BlciBVTkMKKyAgICAv
LyBub3RhdGlvbi4KKyAgICBpbnQgaG9zdExlbmd0aCA9IG5leHRTbGFzaCAtIGFmdGVyU2xhc2hl
czsKKyAgICBpZiAoaG9zdExlbmd0aCkKKyAgICAgICAgcGFyc2VkLT5ob3N0ID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UoYWZ0ZXJTbGFzaGVzLCBuZXh0U2xhc2gpOworICAgIGVsc2UKKyAgICAg
ICAgcGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgaWYgKG5leHRTbGFzaCA8IHNwZWNMZW5ndGgp
IHsKKyAgICAgICAgcGFyc2VQYXRoSW50ZXJuYWwoc3BlYywgVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UobmV4dFNsYXNoLCBzcGVjTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBh
cnNlZC0+cGF0aCwgJnBhcnNlZC0+cXVlcnksICZwYXJzZWQtPmZyYWdtZW50KTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcGFyc2VkLT5wYXRoLnJlc2V0KCk7Cit9CisKKy8vIEEgc3ViY29tcG9uZW50
IG9mIERvUGFyc2VGaWxlVVJMLCB0aGUgaW5wdXQgc2hvdWxkIGJlIGEgbG9jYWwgZmlsZSwgd2l0
aCB0aGUKKy8vIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBpbmRpY2F0ZWQgYnkgdGhlIGluZGV4IGlu
IHxwYXRoQmVnaW58LiBUaGlzIHdpbGwKKy8vIGluaXRpYWxpemUgdGhlIGhvc3QsIHBhdGgsIHF1
ZXJ5LCBhbmQgcmVmLCBhbmQgbGVhdmUgdGhlIG90aGVyIG91dHB1dAorLy8gY29tcG9uZW50cyB1
bnRvdWNoZWQgKERvSW5pdEZpbGVVUkwgaGFuZGxlcyB0aGVzZSBmb3IgdXMpLgordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgRG9QYXJzZUxvY2FsRmlsZShjb25zdCBDaGFy
YWN0ZXJUeXBlKiBzcGVjLCBpbnQgcGF0aEJlZ2luLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVu
dHMqIHBhcnNlZCkKK3sKKyAgICBwYXJzZWQtPmhvc3QucmVzZXQoKTsKKyAgICBwYXJzZVBhdGhJ
bnRlcm5hbChzcGVjLCBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoQmVnaW4sIHNwZWNMZW5n
dGgpLAorICAgICAgICAgICAgICAgICAgICAgICZwYXJzZWQtPnBhdGgsICZwYXJzZWQtPnF1ZXJ5
LCAmcGFyc2VkLT5mcmFnbWVudCk7Cit9CisKKy8vIEJhY2tlbmQgZm9yIHRoZSBleHRlcm5hbCBm
dW5jdGlvbnMgdGhhdCBvcGVyYXRlcyBvbiBlaXRoZXIgY2hhciB0eXBlLgorLy8gV2UgYXJlIGhh
bmRlZCB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSAiZmlsZToiIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHNwZWMuCisvLyBVc3VhbGx5IHRoaXMgaXMgYSBzbGFzaCwgYnV0IG5lZWRuJ3QgYmU7IHdl
IGFsbG93IHBhdGhzIGxpa2UgImZpbGU6YzpcZm9vIi4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Cit2b2lkIERvUGFyc2VGaWxlVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIEFTU0VSVChzcGVj
TGVuZ3RoID49IDApOworCisgICAgLy8gR2V0IHRoZSBwYXJ0cyB3ZSBuZXZlciB1c2UgZm9yIGZp
bGUgVVJMcyBvdXQgb2YgdGhlIHdheS4KKyAgICBwYXJzZWQtPnVzZXJuYW1lLnJlc2V0KCk7Cisg
ICAgcGFyc2VkLT5wYXNzd29yZC5yZXNldCgpOworICAgIHBhcnNlZC0+cG9ydC5yZXNldCgpOwor
CisgICAgLy8gTWFueSBvZiB0aGUgY29kZSBwYXRocyBkb24ndCBzZXQgdGhlc2UsIHNvIGl0J3Mg
Y29udmVuaWVudCB0byBqdXN0IGNsZWFyCisgICAgLy8gdGhlbS4gV2UnbGwgd3JpdGUgdGhlbSBp
biB0aG9zZSBjYXNlcyB3ZSBuZWVkIHRoZW0uCisgICAgcGFyc2VkLT5xdWVyeS5yZXNldCgpOwor
ICAgIHBhcnNlZC0+ZnJhZ21lbnQucmVzZXQoKTsKKworICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0
cmFpbGluZyBzcGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAw
OworICAgIHRyaW1VUkwoc3BlYywgJmJlZ2luLCAmc3BlY0xlbmd0aCk7CisKKyAgICAvLyBGaW5k
IHRoZSBzY2hlbWUuCisgICAgaW50IG51bVNsYXNoZXM7CisgICAgaW50IGFmdGVyU2NoZW1lOwor
ICAgIGludCBhZnRlclNsYXNoZXM7CisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBTZWUgaG93IG1h
bnkgc2xhc2hlcyB0aGVyZSBhcmUuIFdlIHdhbnQgdG8gaGFuZGxlIGNhc2VzIGxpa2UgVU5DIGJ1
dCBhbHNvCisgICAgLy8gIi9jOi9mb28iLiBUaGlzIGlzIHdoZW4gdGhlcmUgaXMgbm8gc2NoZW1l
LCBzbyB3ZSBjYW4gYWxsb3cgcGFnZXMgdG8gZG8KKyAgICAvLyBsaW5rcyBsaWtlICJjOi9mb28v
YmFyIiBvciAiLy9mb28vYmFyIi4gVGhpcyBpcyBhbHNvIGNhbGxlZCBieSB0aGUKKyAgICAvLyBy
ZWxhdGl2ZSBVUkwgcmVzb2x2ZXIgd2hlbiBpdCBkZXRlcm1pbmVzIHRoZXJlIGlzIGFuIGFic29s
dXRlIFVSTCwgd2hpY2gKKyAgICAvLyBtYXkgZ2l2ZSB1cyBpbnB1dCBsaWtlICIvYzovZm9vIi4K
KyAgICBudW1TbGFzaGVzID0gY291bnRDb25zZWN1dGl2ZVNsYXNoZXMoc3BlYywgYmVnaW4sIHNw
ZWNMZW5ndGgpOworICAgIGFmdGVyU2xhc2hlcyA9IGJlZ2luICsgbnVtU2xhc2hlczsKKyAgICBp
ZiAoZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBhZnRlclNsYXNoZXMsIHNwZWNMZW5n
dGgpKSB7CisgICAgICAgIC8vIFdpbmRvd3MgcGF0aCwgZG9uJ3QgdHJ5IHRvIGV4dHJhY3QgdGhl
IHNjaGVtZSAoZm9yIGV4YW1wbGUsICJjOlxmb28iKS4KKyAgICAgICAgcGFyc2VkLT5zY2hlbWUu
cmVzZXQoKTsKKyAgICAgICAgYWZ0ZXJTY2hlbWUgPSBhZnRlclNsYXNoZXM7CisgICAgfSBlbHNl
IGlmIChkb2VzQmVnaW5VTkNQYXRoKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoLCBmYWxzZSkpIHsK
KyAgICAgICAgLy8gV2luZG93cyBVTkMgcGF0aDogZG9uJ3QgdHJ5IHRvIGV4dHJhY3QgdGhlIHNj
aGVtZSwgYnV0IGtlZXAgdGhlIHNsYXNoZXMuCisgICAgICAgIHBhcnNlZC0+c2NoZW1lLnJlc2V0
KCk7CisgICAgICAgIGFmdGVyU2NoZW1lID0gYmVnaW47CisgICAgfSBlbHNlCisjZW5kaWYKKyAg
ICB7CisgICAgICAgIGlmIChFeHRyYWN0U2NoZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAt
IGJlZ2luLCAmcGFyc2VkLT5zY2hlbWUpKSB7CisgICAgICAgICAgICAvLyBPZmZzZXQgdGhlIHJl
c3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgorICAgICAgICAg
ICAgcGFyc2VkLT5zY2hlbWUuc2V0QmVnaW4ocGFyc2VkLT5zY2hlbWUuYmVnaW4oKSArIGJlZ2lu
KTsKKyAgICAgICAgICAgIGFmdGVyU2NoZW1lID0gcGFyc2VkLT5zY2hlbWUuZW5kKCkgKyAxOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kLCByZW1lbWJl
ciB0aGF0LgorICAgICAgICAgICAgcGFyc2VkLT5zY2hlbWUucmVzZXQoKTsKKyAgICAgICAgICAg
IGFmdGVyU2NoZW1lID0gYmVnaW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBIYW5kbGUg
ZW1wdHkgc3BlY3Mgb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wg
Y2hhcnMsCisgICAgLy8gb3IgdGhhdCBhcmUganVzdCB0aGUgc2NoZW1lIChmb3IgZXhhbXBsZSAi
ZmlsZToiKS4KKyAgICBpZiAoYWZ0ZXJTY2hlbWUgPT0gc3BlY0xlbmd0aCkgeworICAgICAgICBw
YXJzZWQtPmhvc3QucmVzZXQoKTsKKyAgICAgICAgcGFyc2VkLT5wYXRoLnJlc2V0KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBudW1TbGFzaGVzID0gY291bnRDb25zZWN1dGl2ZVNs
YXNoZXMoc3BlYywgYWZ0ZXJTY2hlbWUsIHNwZWNMZW5ndGgpOworCisgICAgYWZ0ZXJTbGFzaGVz
ID0gYWZ0ZXJTY2hlbWUgKyBudW1TbGFzaGVzOworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gQ2hl
Y2sgd2hldGhlciB0aGUgaW5wdXQgaXMgYSBkcml2ZSBhZ2Fpbi4gV2UgY2hlY2tlZCBhYm92ZSBm
b3Igd2luZG93cworICAgIC8vIGRyaXZlIHNwZWNzLCBidXQgdGhhdCdzIG9ubHkgYXQgdGhlIHZl
cnkgYmVnaW5uaW5nIHRvIHNlZSBpZiB3ZSBoYXZlIGEKKyAgICAvLyBzY2hlbWUgYXQgYWxsLiBU
aGlzIHRlc3Qgd2lsbCBiZSBkdXBsaWNhdGVkIGluIHRoYXQgY2FzZSwgYnV0IHdpbGwKKyAgICAv
LyBhZGRpdGlvbmFsbHkgaGFuZGxlIGFsbCBjYXNlcyB3aXRoIGEgcmVhbCBzY2hlbWUgc3VjaCBh
cyAiZmlsZTovLy9DOi8iLgorICAgIGlmICghZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVj
LCBhZnRlclNsYXNoZXMsIHNwZWNMZW5ndGgpICYmICBudW1TbGFzaGVzICE9IDMpIHsKKyAgICAg
ICAgLy8gQW55dGhpbmcgbm90IGJlZ2lubmluZyB3aXRoIGEgZHJpdmUgc3BlYyAoImM6XCIpIG9u
IFdpbmRvd3MgaXMgdHJlYXRlZAorICAgICAgICAvLyBhcyBVTkMsIHdpdGggdGhlIGV4Y2VwdGlv
biBvZiB0aHJlZSBzbGFzaGVzIHdoaWNoIGFsd2F5cyBtZWFucyBhIGZpbGUuCisgICAgICAgIC8v
IEV2ZW4gSUU3IHRyZWF0cyBmaWxlOi8vL2Zvby9iYXIgYXMgIi9mb28vYmFyIiwgd2hpY2ggdGhl
biBmYWlscy4KKyAgICAgICAgRG9QYXJzZVVOQyhzcGVjLCBhZnRlclNsYXNoZXMsIHNwZWNMZW5n
dGgsIHBhcnNlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQorICAgIC8vIGZpbGU6
IFVSTCB3aXRoIGV4YWN0bHkgMiBzbGFzaGVzIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIGhvc3Qg
Y29tcG9uZW50LgorICAgIGlmIChudW1TbGFzaGVzID09IDIpIHsKKyAgICAgICAgRG9QYXJzZVVO
QyhzcGVjLCBhZnRlclNsYXNoZXMsIHNwZWNMZW5ndGgsIHBhcnNlZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworICAgIC8vIEVhc3kgYW5kIGNvbW1v
biBjYXNlLCB0aGUgZnVsbCBwYXRoIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHNjaGVtZQorICAg
IC8vIChtb2R1bG8gc2xhc2hlcyksIGFzIGluICJmaWxlOi8vYzovZm9vIi4gSnVzdCB0cmVhdCBl
dmVyeXRoaW5nIGZyb20KKyAgICAvLyB0aGVyZSB0byB0aGUgZW5kIGFzIHRoZSBwYXRoLiBFbXB0
eSBob3N0cyBoYXZlIDAgbGVuZ3RoIGluc3RlYWQgb2YgLTEuCisgICAgLy8gV2UgaW5jbHVkZSB0
aGUgbGFzdCBzbGFzaCBhcyBwYXJ0IG9mIHRoZSBwYXRoIGlmIHRoZXJlIGlzIG9uZS4KKyAgICBE
b1BhcnNlTG9jYWxGaWxlKHNwZWMsCisgICAgICAgICAgICAgICAgICAgICBudW1TbGFzaGVzID4g
MCA/IGFmdGVyU2NoZW1lICsgbnVtU2xhc2hlcyAtIDEgOiBhZnRlclNjaGVtZSwKKyAgICAgICAg
ICAgICAgICAgICAgIHNwZWNMZW5ndGgsIHBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisK
K3ZvaWQgUGFyc2VGaWxlVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2Vn
bWVudHMqIHBhcnNlZCkKK3sKKyAgICBEb1BhcnNlRmlsZVVSTCh1cmwsIHVybExlbmd0aCwgcGFy
c2VkKTsKK30KKwordm9pZCBQYXJzZUZpbGVVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExl
bmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBEb1BhcnNlRmlsZVVSTCh1cmwsIHVy
bExlbmd0aCwgcGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMUGFyc2VyCisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5oIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxQYXJzZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRlMGM0NWI4MTdkYzdlYTU2ZDMw
ODlmNGYyN2M1ZTFjOTFjNTNhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTE3IEBACisvLyBDb3B5cmlnaHQg
MjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEy
LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIENvbnRhaW5zIGNvbW1vbiBpbmxpbmUgaGVscGVy
IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBVUkwgcGFyc2luZyByb3V0aW5lcy4KKworI2lmbmRlZiBV
UkxQYXJzZUludGVybmFsX2gKKyNkZWZpbmUgVVJMUGFyc2VJbnRlcm5hbF9oCisKKyNpbmNsdWRl
ICJVUkxQYXJzZS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworI2lmIFVT
RShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMUGFyc2VyIHsKKwor
Ly8gV2UgdHJlYXQgc2xhc2hlcyBhbmQgYmFja3NsYXNoZXMgdGhlIHNhbWUgZm9yIElFIGNvbXBh
dGFiaWxpdHkuCitpbmxpbmUgYm9vbCBpc1VSTFNsYXNoKFVDaGFyIGNoKQoreworICAgIHJldHVy
biBjaCA9PSAnLycgfHwgY2ggPT0gJ1xcJzsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNo
b3VsZCB0cmltIHRoaXMgY2hhcmFjdGVyIGZyb20gdGhlIFVSTCBiZWNhdXNlIGl0IGlzIGEKKy8v
IHNwYWNlIG9yIGEgY29udHJvbCBjaGFyYWN0ZXIuCitpbmxpbmUgYm9vbCBzaG91bGRUcmltRnJv
bVVSTChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gY2ggPD0gJyAnOworfQorCisvLyBHaXZlbiBh
biBhbHJlYWR5LWluaXRpYWxpemVkIGJlZ2luIGluZGV4IGFuZCBsZW5ndGgsIHRoaXMgc2hyaW5r
cyB0aGUgcmFuZ2UKKy8vIHRvIGVsaW1pbmF0ZSAic2hvdWxkLWJlLXRyaW1tZWQiIGNoYXJhY3Rl
cnMuIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIGRvZXMgKm5vdCoKKy8vIGluZGljYXRlIHRoZSBsZW5n
dGggb2YgdW50cmltbWVkIGRhdGEgZnJvbSB8KmJlZ2lufCwgYnV0IHJhdGhlciB0aGUgcG9zaXRp
b24KKy8vIGluIHRoZSBpbnB1dCBzdHJpbmcgKHNvIHRoZSBzdHJpbmcgc3RhcnRzIGF0IGNoYXJh
Y3RlciB8KmJlZ2lufCBpbiB0aGUgc3BlYywKKy8vIGFuZCBnb2VzIHVudGlsIHwqbGVufCkuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIHZvaWQgdHJpbVVSTChjb25z
dCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQqIGJlZ2luLCBpbnQqIGxlbmd0aCkKK3sKKyAgICAv
LyBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICB3
aGlsZSAoKmJlZ2luIDwgKmxlbmd0aCAmJiBzaG91bGRUcmltRnJvbVVSTChzcGVjWypiZWdpbl0p
KQorICAgICAgICAoKmJlZ2luKSsrOworCisgICAgLy8gU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFj
ZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLiBXZSBuZWVkIHRoZSA+aSB0ZXN0IGZvcgorICAgIC8v
IHdoZW4gdGhlIGlucHV0IHN0cmluZyBpcyBhbGwgYmxhbmtzOyB3ZSBkb24ndCB3YW50IHRvIGJh
Y2sgcGFzdCB0aGUgaW5wdXQuCisgICAgd2hpbGUgKCpsZW5ndGggPiAqYmVnaW4gJiYgc2hvdWxk
VHJpbUZyb21VUkwoc3BlY1sqbGVuZ3RoIC0gMV0pKQorICAgICAgICAoKmxlbmd0aCktLTsKK30K
KworLy8gQ291bnRzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgc2xhc2hlcyBzdGFydGluZyBh
dCB0aGUgZ2l2ZW4gb2Zmc2V0CisvLyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9mIHRoZSBnaXZlbiBs
ZW5ndGguCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGludCBjb3Vu
dENvbnNlY3V0aXZlU2xhc2hlcyhjb25zdCBDaGFyYWN0ZXJUeXBlICpzdHIsIGludCBiZWdpbl9v
ZmZzZXQsIGludCBzdHJMZW5ndGgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICB3aGlsZSAo
YmVnaW5fb2Zmc2V0ICsgY291bnQgPCBzdHJMZW5ndGggJiYgaXNVUkxTbGFzaChzdHJbYmVnaW5f
b2Zmc2V0ICsgY291bnRdKSkKKyAgICAgICAgKytjb3VudDsKKyAgICByZXR1cm4gY291bnQ7Cit9
CisKKy8vIEludGVybmFsIGZ1bmN0aW9ucyBpbiBVUkxQYXJzZXIuY2MgdGhhdCBwYXJzZSB0aGUg
cGF0aCwgdGhhdCBpcywgZXZlcnl0aGluZworLy8gZm9sbG93aW5nIHRoZSBhdXRob3JpdHkgc2Vj
dGlvbi4gVGhlIGlucHV0IGlzIHRoZSByYW5nZSBvZiBldmVyeXRoaW5nCisvLyBmb2xsb3dpbmcg
dGhlIGF1dGhvcml0eSBzZWN0aW9uLCBhbmQgdGhlIG91dHB1dCBpcyB0aGUgaWRlbnRpZmllZCBy
YW5nZXMuCisvLworLy8gVGhpcyBpcyBkZXNpZ25lZCBmb3IgdGhlIGZpbGUgVVJMIHBhcnNlciBv
ciBvdGhlciBjb25zdW1lcnMgd2hvIG1heSBkbworLy8gc3BlY2lhbCBzdHVmZiBhdCB0aGUgYmVn
aW5uaW5nLCBidXQgd2FudCByZWd1bGFyIHBhdGggcGFyc2luZywgaXQganVzdAorLy8gbWFwcyB0
byB0aGUgaW50ZXJuYWwgcGFyc2luZyBmdW5jdGlvbiBmb3IgcGF0aHMuCit2b2lkIHBhcnNlUGF0
aEludGVybmFsKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiBmaWxlcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBxdWVyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBmcmFnbWVudCk7Cit2b2lkIHBh
cnNlUGF0aEludGVybmFsKGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENv
bXBvbmVudCogZmlsZXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCog
cXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZnJhZ21lbnQpOwor
CisKKy8vIEdpdmVuIGEgc3BlYyBhbmQgYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIg
dGhlIGNvbG9uIGZvbGxvd2luZyB0aGUKKy8vIHNjaGVtZSwgdGhpcyBwYXJzZXMgaXQgYW5kIGZp
bGxzIGluIHRoZSBzdHJ1Y3R1cmUsIEV2ZXJ5IGl0ZW0gaW4gdGhlIHBhcnNlZAorLy8gc3RydWN0
dXJlIGlzIGZpbGxlZCBFWENFUFQgZm9yIHRoZSBzY2hlbWUsIHdoaWNoIGlzIHVudG91Y2hlZC4K
K3ZvaWQgUGFyc2VBZnRlclNjaGVtZShjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwg
aW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKK3ZvaWQgUGFyc2VBZnRlclNj
aGVtZShjb25zdCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGludCBhZnRlclNjaGVtZSwg
VVJMU2VnbWVudHMqIHBhcnNlZCk7CisKK30gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxQ
YXJzZUludGVybmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFy
c2VyLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyYjRkNTk4YTMxOWEzY2EyN2Y4NjU5NGJlN2MwYjhmYjFhMDcxOGI2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OTYgKzAsMCBA
QAotLyogQmFzZWQgb24gbnNVUkxQYXJzZXJzLmNjIGZyb20gTW96aWxsYQotICogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNj
YXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBPdGhlciBjb250cmlidXRvcnM6
Ci0gKiAgIERhcmluIEZpc2hlciAob3JpZ2luYWwgYXV0aG9yKQotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
KgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNl
ZCB1bmRlciB0aGUgdGVybXMKLSAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAo
dGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIFZlcnNpb24g
Mi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKLSAqICh0
aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhl
IEdQTCBhcmUKLSAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3
aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVu
ZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCi0gKiBsaWNlbnNlcyAodGhlIE1QTCBv
ciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgotICogdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkK
LSAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UgYW5kCi0gKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3Ig
dGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgotICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhl
IHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgotICogdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCi0g
Ki8KLQotI2lmbmRlZiBVUkxQYXJzZXJfaAotI2RlZmluZSBVUkxQYXJzZXJfaAotCi0jaW5jbHVk
ZSAiVVJMQ29tcG9uZW50LmgiCi0jaW5jbHVkZSAiVVJMU2VnbWVudHMuaCIKLSNpbmNsdWRlICJV
bnVzZWRQYXJhbS5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEJhc2VDaGFyYWN0ZXJUeXBl
ID0gQ2hhcmFjdGVyVHlwZT4KLWNsYXNzIFVSTFBhcnNlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBT
cGVjaWFsUG9ydCB7Ci0gICAgICAgIFVuc3BlY2lmaWVkUG9ydCA9IC0xLAotICAgICAgICBJbnZh
bGlkUG9ydCA9IC0yLAotICAgIH07Ci0KLSAgICAvLyBUaGlzIGhhbmRsZXMgZXZlcnl0aGluZyB0
aGF0IG1heSBiZSBhbiBhdXRob3JpdHkgdGVybWluYXRvciwgaW5jbHVkaW5nCi0gICAgLy8gYmFj
a3NsYXNoLiBGb3Igc3BlY2lhbCBiYWNrc2xhc2ggaGFuZGxpbmcgc2VlIHBhcnNlQWZ0ZXJTY2hl
bWUuCi0gICAgc3RhdGljIGJvb2wgaXNQb3NzaWJsZUF1dGhvcml0eVRlcm1pbmF0b3IoQ2hhcmFj
dGVyVHlwZSBjaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc1VSTFNsYXNoKGNoKSB8fCBjaCA9
PSAnPycgfHwgY2ggPT0gJyMnIHx8IGNoID09ICc7JzsKLSAgICB9Ci0KLSAgICAvLyBHaXZlbiBh
biBhbHJlYWR5LWlkZW50aWZpZWQgYXV0aCBzZWN0aW9uLCBicmVha3MgaXQgaW50byBpdHMgY29u
c3RpdHVlbnQKLSAgICAvLyBwYXJ0cy4gVGhlIHBvcnQgbnVtYmVyIHdpbGwgYmUgcGFyc2VkIGFu
ZCB0aGUgcmVzdWx0aW5nIGludGVnZXIgd2lsbCBiZQotICAgIC8vIGZpbGxlZCBpbnRvIHRoZSBn
aXZlbiAqcG9ydCB2YXJpYWJsZSwgb3IgLTEgaWYgdGhlcmUgaXMgbm8gcG9ydCBudW1iZXIKLSAg
ICAvLyBvciBpdCBpcyBpbnZhbGlkLgotICAgIHN0YXRpYyB2b2lkIHBhcnNlQXV0aG9yaXR5KGNv
bnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwgVVJMQ29t
cG9uZW50JiB1c2VybmFtZSwgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwgVVJMQ29tcG9uZW50JiBo
b3N0LCBVUkxDb21wb25lbnQmIHBvcnQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYWRkIEFT
U0VSVChhdXRoLmlzVmFsaWQoKSk7IC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGFuIGF1dGhvcml0
eS4KLSAgICAgICAgaWYgKCFhdXRoLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICB1c2VybmFtZS5y
ZXNldCgpOwotICAgICAgICAgICAgcGFzc3dvcmQucmVzZXQoKTsKLSAgICAgICAgICAgIGhvc3Qu
cmVzZXQoKTsKLSAgICAgICAgICAgIHBvcnQucmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIEAsIHdoaWNoIGlz
IHRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdXNlciBpbmZvCi0gICAgICAgIC8vIGFuZCB0aGUg
c2VydmVyIGluZm8uIFJGQyAzOTg2IGZvcmJpZHMgQCBmcm9tIG9jY3VyaW5nIGluIGF1dGgsIGJ1
dAotICAgICAgICAvLyBzb21lb25lIG1pZ2h0IGluY2x1ZGUgaXQgaW4gYSBwYXNzd29yZCB1bmVz
Y2FwZWQuCi0gICAgICAgIGludCBpID0gYXV0aC5iZWdpbigpICsgYXV0aC5sZW5ndGgoKSAtIDE7
Ci0gICAgICAgIHdoaWxlIChpID4gYXV0aC5iZWdpbigpICYmIHNwZWNbaV0gIT0gJ0AnKQotICAg
ICAgICAgICAgLS1pOwotCi0gICAgICAgIGlmIChzcGVjW2ldID09ICdAJykgewotICAgICAgICAg
ICAgLy8gRm91bmQgdXNlciBpbmZvOiA8dXNlci1pbmZvPkA8c2VydmVyLWluZm8+Ci0gICAgICAg
ICAgICBwYXJzZVVzZXJJbmZvKHNwZWMsIFVSTENvbXBvbmVudChhdXRoLmJlZ2luKCksIGkgLSBh
dXRoLmJlZ2luKCkpLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotICAgICAgICAgICAgcGFyc2VTZXJ2
ZXJJbmZvKHNwZWMsIFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBhdXRoLmJlZ2luKCkg
KyBhdXRoLmxlbmd0aCgpKSwgaG9zdCwgcG9ydCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBObyB1c2VyIGluZm8sIGV2ZXJ5dGhpbmcgaXMgc2VydmVyIGluZm8uCi0gICAgICAg
ICAgICB1c2VybmFtZS5yZXNldCgpOwotICAgICAgICAgICAgcGFzc3dvcmQucmVzZXQoKTsKLSAg
ICAgICAgICAgIHBhcnNlU2VydmVySW5mbyhzcGVjLCBhdXRoLCBob3N0LCBwb3J0KTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGV4dHJhY3RTY2hlbWUoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3BlYywgaW50IHNwZWNMZW5ndGgsIFVSTENvbXBvbmVudCYgc2NoZW1lKQotICAg
IHsKLSAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFj
dGVycy4KLSAgICAgICAgaW50IGJlZ2luID0gMDsKLSAgICAgICAgd2hpbGUgKGJlZ2luIDwgc3Bl
Y0xlbmd0aCAmJiBzaG91bGRUcmltRnJvbVVSTChzcGVjW2JlZ2luXSkpCi0gICAgICAgICAgICBi
ZWdpbisrOwotICAgICAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gSW5wdXQgaXMgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UuCi0KLSAgICAg
ICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24gY2hhcmFjdGVyLgotICAgICAgICBmb3IgKGludCBp
ID0gYmVnaW47IGkgPCBzcGVjTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzcGVjW2ld
ID09ICc6JykgewotICAgICAgICAgICAgICAgIHNjaGVtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKGJlZ2luLCBpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIGNvbG9uIGZvdW5kOiBu
byBzY2hlbWUKLSAgICB9Ci0KLSAgICAvLyBGaWxscyBpbiBhbGwgbWVtYmVycyBvZiB0aGUgVVJM
U2VnbWVudHMgc3RydWN0dXJlIChleGNlcHQgZm9yIHRoZQotICAgIC8vIHNjaGVtZSkgZm9yIHN0
YW5kYXJkIFVSTHMuCi0gICAgLy8KLSAgICAvLyB8c3BlY3wgaXMgdGhlIGZ1bGwgc3BlYyBiZWlu
ZyBwYXJzZWQsIG9mIGxlbmd0aCB8c3BlY0xlbmd0aHwuCi0gICAgLy8gfGFmdGVyU2NoZW1lfCBp
cyB0aGUgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgc2NoZW1lIChhZnRlcgot
ICAgIC8vIHRoZSBjb2xvbikgd2hlcmUgd2UnbGwgYmVnaW4gcGFyc2luZy4KLSAgICBzdGF0aWMg
dm9pZCBwYXJzZUFmdGVyU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVj
TGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi0gICAgewotICAg
ICAgICBpbnQgbnVtYmVyT2ZTbGFzaGVzID0gY29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGFmdGVy
U2NoZW1lLCBzcGVjTGVuZ3RoKTsKLSAgICAgICAgaW50IGFmdGVyU2xhc2hlcyA9IGFmdGVyU2No
ZW1lICsgbnVtYmVyT2ZTbGFzaGVzOwotCi0gICAgICAgIC8vIEZpcnN0IHNwbGl0IGludG8gdHdv
IG1haW4gcGFydHMsIHRoZSBhdXRob3JpdHkgKHVzZXJuYW1lLCBwYXNzd29yZCwKLSAgICAgICAg
Ly8gaG9zdCwgYW5kIHBvcnQpIGFuZCB0aGUgZnVsbCBwYXRoIChwYXRoLCBxdWVyeSwgYW5kIHJl
ZmVyZW5jZSkuCi0gICAgICAgIFVSTENvbXBvbmVudCBhdXRob3JpdHk7Ci0gICAgICAgIFVSTENv
bXBvbmVudCBmdWxsUGF0aDsKLQotICAgICAgICAvLyBGb3VuZCAiLy88c29tZSBkYXRhPiIsIGxv
b2tzIGxpa2UgYW4gYXV0aG9yaXR5IHNlY3Rpb24uIFRyZWF0Ci0gICAgICAgIC8vIGV2ZXJ5dGhp
bmcgZnJvbSB0aGVyZSB0byB0aGUgbmV4dCBzbGFzaCAob3IgZW5kIG9mIHNwZWMpIHRvIGJlIHRo
ZQotICAgICAgICAvLyBhdXRob3JpdHkuIE5vdGUgdGhhdCB3ZSBpZ25vcmUgdGhlIG51bWJlciBv
ZiBzbGFzaGVzIGFuZCB0cmVhdCBpdCBhcwotICAgICAgICAvLyB0aGUgYXV0aG9yaXR5LgotICAg
ICAgICBpbnQgYXV0aEVuZCA9IG5leHRBdXRob3JpdHlUZXJtaW5hdG9yKHNwZWMsIGFmdGVyU2xh
c2hlcywgc3BlY0xlbmd0aCk7Ci0gICAgICAgIGF1dGhvcml0eSA9IFVSTENvbXBvbmVudChhZnRl
clNsYXNoZXMsIGF1dGhFbmQgLSBhZnRlclNsYXNoZXMpOwotCi0gICAgICAgIGlmIChhdXRoRW5k
ID09IHNwZWNMZW5ndGgpIC8vIE5vIGJlZ2lubmluZyBvZiBwYXRoIGZvdW5kLgotICAgICAgICAg
ICAgZnVsbFBhdGggPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgZWxzZSAvLyBFdmVyeXRoaW5n
IHN0YXJ0aW5nIGZyb20gdGhlIHNsYXNoIHRvIHRoZSBlbmQgaXMgdGhlIHBhdGguCi0gICAgICAg
ICAgICBmdWxsUGF0aCA9IFVSTENvbXBvbmVudChhdXRoRW5kLCBzcGVjTGVuZ3RoIC0gYXV0aEVu
ZCk7Ci0KLSAgICAgICAgLy8gTm93IHBhcnNlIHRob3NlIHR3byBzdWItcGFydHMuCi0gICAgICAg
IHBhcnNlQXV0aG9yaXR5KHNwZWMsIGF1dGhvcml0eSwgcGFyc2VkLnVzZXJuYW1lLCBwYXJzZWQu
cGFzc3dvcmQsIHBhcnNlZC5ob3N0LCBwYXJzZWQucG9ydCk7Ci0gICAgICAgIHBhcnNlUGF0aChz
cGVjLCBmdWxsUGF0aCwgcGFyc2VkLnBhdGgsIHBhcnNlZC5xdWVyeSwgcGFyc2VkLmZyYWdtZW50
KTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uIGZvciBzdGFuZGFy
ZCBVUkxzLiBTdGFuZGFyZCBVUkxzIGhhdmUgYSBzY2hlbWUsCi0gICAgLy8gaG9zdCwgcGF0aCwg
ZXRjLgotICAgIHN0YXRpYyB2b2lkIHBhcnNlU3RhbmRhcmRVUkwoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogc3BlYywgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogYWRkIEFTU0VSVChzcGVjTGVuZ3RoID49IDApOwotCi0gICAgICAgIC8v
IFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4K
LSAgICAgICAgaW50IGJlZ2luID0gMDsKLSAgICAgICAgdHJpbVVSTChzcGVjLCBiZWdpbiwgc3Bl
Y0xlbmd0aCk7Ci0KLSAgICAgICAgaW50IGFmdGVyU2NoZW1lOwotICAgICAgICBpZiAoZXh0cmFj
dFNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWQuc2NoZW1lKSkKLSAgICAgICAgICAgIGFm
dGVyU2NoZW1lID0gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDE7IC8vIFNraXAgcGFzdCB0aGUgY29s
b24uCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU2F5IHRoZXJlJ3Mgbm8gc2NoZW1l
IHdoZW4gdGhlcmUgaXMgYSBjb2xvbi4gV2UgY291bGQgYWxzbyBzYXkKLSAgICAgICAgICAgIC8v
IHRoYXQgZXZlcnl0aGluZyBpcyB0aGUgc2NoZW1lLiBCb3RoIHdvdWxkIHByb2R1Y2UgYW4gaW52
YWxpZAotICAgICAgICAgICAgLy8gVVJMLCBidXQgdGhpcyB3YXkgc2VlbXMgbGVzcyB3cm9uZyBp
biBtb3JlIGNhc2VzLgotICAgICAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAg
ICAgICAgYWZ0ZXJTY2hlbWUgPSBiZWdpbjsKLSAgICAgICAgfQotICAgICAgICBwYXJzZUFmdGVy
U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsIGFmdGVyU2NoZW1lLCBwYXJzZWQpOwotICAgIH0KLQot
ICAgIC8vIFRoZSBtYWluIHBhcnNpbmcgZnVuY3Rpb24gZm9yIChtYXkgYmUpIHJlbGF0aXZlIFVS
THMuCi0gICAgc3RhdGljIHZvaWQgcGFyc2VVUkxXaXRoQmFzZShjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEJhc2VDaGFyYWN0ZXJUeXBlKiBiYXNlU3RyaW5nU3BlYywgaW50IGJhc2VTdHJpbmdT
cGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVN0cmluZ1NlZ21lbnRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+Jm91dHB1dEJ1ZmZlciwg
VVJMU2VnbWVudHMmIHBhcnNlZCkKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShiYXNlU3Ry
aW5nU3BlYyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShiYXNlU3RyaW5nU3BlY0xlbmd0aCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShiYXNlU3RyaW5nU2VnbWVudHMpOwotICAgICAgICBVTlVTRURf
UEFSQU0oc3BlYyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcGVjTGVuZ3RoKTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKG91dHB1dEJ1ZmZlcik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShwYXJzZWQp
OwotICAgICAgICAvLyBGSVhNRTogVG8gaW1wbGVtZW50LgotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIHBhcnNlUGF0aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHBhdGgsIFVSTENvbXBvbmVudCYgZmlsZXBhdGgsIFVSTENvbXBvbmVudCYgcXVlcnksIFVS
TENvbXBvbmVudCYgZnJhZ21lbnQpCi0gICAgewotICAgICAgICAvLyBwYXRoID0gWy9dPHNlZ21l
bnQxPi88c2VnbWVudDI+LzwuLi4+LzxzZWdtZW50Tj47PHBhcmFtPj88cXVlcnk+IzxmcmFnbWVu
dD4KLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBwYXRoLgotICAg
ICAgICBpZiAoIXBhdGguaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBmaWxlcGF0aC5yZXNldCgp
OwotICAgICAgICAgICAgcXVlcnkucmVzZXQoKTsKLSAgICAgICAgICAgIGZyYWdtZW50LnJlc2V0
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IGFk
ZCBBU1NFUlQocGF0aC5sZW5ndGgoKSA+IDApOyAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSAwIGxl
bmd0aCBwYXRocy4KLQotICAgICAgICAvLyBTZWFyY2ggZm9yIGZpcnN0IG9jY3VycmVuY2Ugb2Yg
ZWl0aGVyID8gb3IgIy4KLSAgICAgICAgaW50IHBhdGhFbmQgPSBwYXRoLmJlZ2luKCkgKyBwYXRo
Lmxlbmd0aCgpOwotCi0gICAgICAgIGludCBxdWVyeVNlcGFyYXRvciA9IC0xOyAvLyBJbmRleCBv
ZiB0aGUgJz8nCi0gICAgICAgIGludCByZWZTZXBhcmF0b3IgPSAtMTsgLy8gSW5kZXggb2YgdGhl
ICcjJwotICAgICAgICBmb3IgKGludCBpID0gcGF0aC5iZWdpbigpOyBpIDwgcGF0aEVuZDsgaSsr
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsKLSAgICAgICAgICAgIGNhc2UgJz8n
OgotICAgICAgICAgICAgICAgIGlmIChxdWVyeVNlcGFyYXRvciA8IDApCi0gICAgICAgICAgICAg
ICAgICAgIHF1ZXJ5U2VwYXJhdG9yID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJyMnOgotICAgICAgICAgICAgICAgIHJlZlNlcGFyYXRvciA9IGk7Ci0gICAg
ICAgICAgICAgICAgaSA9IHBhdGhFbmQ7IC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYXJrZXJzIHBv
aW50aW5nIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgZWFjaCBvZiB0aGVzZSBjb3JyZXNwb25kaW5n
Ci0gICAgICAgIC8vIGNvbXBvbmVudHMuIFRoZSBjb2RlIGJlbG93IHdvcmtzIGZyb20gdGhlIGVu
ZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsCi0gICAgICAgIC8vIGFuZCB3aWxsIHVwZGF0ZSB0aGVz
ZSBpbmRpY2VzIGFzIGl0IGZpbmRzIGNvbXBvbmVudHMgdGhhdCBleGlzdC4KLSAgICAgICAgaW50
IGZpbGVFbmQsIHF1ZXJ5RW5kOwotCi0gICAgICAgIC8vIEZyYWdtZW50OiBmcm9tIHRoZSAjIHRv
IHRoZSBlbmQgb2YgdGhlIHBhdGguCi0gICAgICAgIGlmIChyZWZTZXBhcmF0b3IgPj0gMCkgewot
ICAgICAgICAgICAgZmlsZUVuZCA9IHJlZlNlcGFyYXRvcjsKLSAgICAgICAgICAgIHF1ZXJ5RW5k
ID0gcmVmU2VwYXJhdG9yOwotICAgICAgICAgICAgZnJhZ21lbnQgPSBVUkxDb21wb25lbnQ6OmZy
b21SYW5nZShyZWZTZXBhcmF0b3IgKyAxLCBwYXRoRW5kKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGZpbGVFbmQgPSBwYXRoRW5kOwotICAgICAgICAgICAgcXVlcnlFbmQgPSBwYXRo
RW5kOwotICAgICAgICAgICAgZnJhZ21lbnQucmVzZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFF1ZXJ5IGZyYWdtZW50OiBldmVyeXRoaW5nIGZyb20gdGhlID8gdG8gdGhlIG5leHQgYm91
bmRhcnkgKGVpdGhlcgotICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBwYXRoIG9yIHRoZSBmcmFn
bWVudCBmcmFnbWVudCkuCi0gICAgICAgIGlmIChxdWVyeVNlcGFyYXRvciA+PSAwKSB7Ci0gICAg
ICAgICAgICBmaWxlRW5kID0gcXVlcnlTZXBhcmF0b3I7Ci0gICAgICAgICAgICBxdWVyeSA9IFVS
TENvbXBvbmVudDo6ZnJvbVJhbmdlKHF1ZXJ5U2VwYXJhdG9yICsgMSwgcXVlcnlFbmQpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHF1ZXJ5LnJlc2V0KCk7Ci0KLSAgICAgICAgLy8gRmls
ZSBwYXRoOiB0cmVhdCBhbiBlbXB0eSBmaWxlIHBhdGggYXMgbm8gZmlsZSBwYXRoLgotICAgICAg
ICBpZiAoZmlsZUVuZCAhPSBwYXRoLmJlZ2luKCkpCi0gICAgICAgICAgICBmaWxlcGF0aCA9IFVS
TENvbXBvbmVudDo6ZnJvbVJhbmdlKHBhdGguYmVnaW4oKSwgZmlsZUVuZCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGZpbGVwYXRoLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgLy8gSW5pdGlh
bGl6ZXMgYSBwYXRoIFVSTCB3aGljaCBpcyBtZXJlbHkgYSBzY2hlbWUgZm9sbG93ZWQgYnkgYSBw
YXRoLgotICAgIC8vIEV4YW1wbGVzIGluY2x1ZGUgImFib3V0OmZvbyIgYW5kICJqYXZhc2NyaXB0
OmFsZXJ0KCdiYXInKTsiCi0gICAgc3RhdGljIHZvaWQgcGFyc2VQYXRoVVJMKGNvbnN0IENoYXJh
Y3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAg
IHsKLSAgICAgICAgLy8gR2V0IHRoZSBub24tcGF0aCBhbmQgbm9uLXNjaGVtZSBwYXJ0cyBvZiB0
aGUgVVJMIG91dCBvZiB0aGUgd2F5LCB3ZQotICAgICAgICAvLyBuZXZlciB1c2UgdGhlbS4KLSAg
ICAgICAgcGFyc2VkLnVzZXJuYW1lLnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5wYXNzd29yZC5y
ZXNldCgpOwotICAgICAgICBwYXJzZWQuaG9zdC5yZXNldCgpOwotICAgICAgICBwYXJzZWQucG9y
dC5yZXNldCgpOwotICAgICAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsKLSAgICAgICAgcGFyc2Vk
LmZyYWdtZW50LnJlc2V0KCk7Ci0KLSAgICAgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5n
IHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICAvLyBGSVhNRTogUGVyaGFw
cyB0aGlzIGlzIHVubmVjZXNzYXJ5PwotICAgICAgICBpbnQgYmVnaW4gPSAwOwotICAgICAgICB0
cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoKTsKLQotICAgICAgICAvLyBIYW5kbGUgZW1w
dHkgc3BlY3Mgb3Igb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wK
LSAgICAgICAgLy8gY2hhcnMuCi0gICAgICAgIGlmIChiZWdpbiA9PSBzcGVjTGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgICAgICBwYXJzZWQucGF0
aC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RXh0cmFjdCB0aGUgc2NoZW1lLCB3aXRoIHRoZSBwYXRoIGJlaW5nIGV2ZXJ5dGhpbmcgZm9sbG93
aW5nLiBXZSBhbHNvCi0gICAgICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBu
byBzY2hlbWUuCi0gICAgICAgIGlmIChleHRyYWN0U2NoZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xl
bmd0aCAtIGJlZ2luLCBwYXJzZWQuc2NoZW1lKSkgewotICAgICAgICAgICAgLy8gT2Zmc2V0IHRo
ZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgZXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KLSAgICAg
ICAgICAgIHBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ocGFyc2VkLnNjaGVtZS5iZWdpbigpICsgYmVn
aW4pOwotCi0gICAgICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBzdGFuZGFy
ZCBVUkwgcGFyc2VyLCB3ZSB0cmVhdCBubyBwYXRoCi0gICAgICAgICAgICAvLyBhcyAtMSwgcmF0
aGVyIHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9mIDAgKHdlIG5vcm1hbGx5IHdvdWxkbid0Ci0gICAg
ICAgICAgICAvLyBjYXJlIHNvIG11Y2ggZm9yIHRoZXNlIG5vbi1zdGFuZGFyZCBVUkxzKS4KLSAg
ICAgICAgICAgIGlmIChwYXJzZWQuc2NoZW1lLmVuZCgpID09IHNwZWNMZW5ndGggLSAxKQotICAg
ICAgICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXJzZWQu
c2NoZW1lLmVuZCgpICsgMSwgc3BlY0xlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBObyBzY2hlbWUgZm91bmQsIGp1c3QgcGF0aC4KLSAgICAgICAgICAgIHBhcnNlZC5z
Y2hlbWUucmVzZXQoKTsKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpm
cm9tUmFuZ2UoYmVnaW4sIHNwZWNMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgcGFyc2VNYWlsdG9VUkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHNw
ZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
YWRkIEFTU0VSVChzcGVjTGVuZ3RoID49IDApOwotCi0gICAgICAgIC8vIEdldCB0aGUgbm9uLXBh
dGggYW5kIG5vbi1zY2hlbWUgcGFydHMgb2YgdGhlIFVSTCBvdXQgb2YgdGhlIHdheSwgd2UKLSAg
ICAgICAgLy8gbmV2ZXIgdXNlIHRoZW0uCi0gICAgICAgIHBhcnNlZC51c2VybmFtZS5yZXNldCgp
OwotICAgICAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLmhvc3Qu
cmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLnBvcnQucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLmZy
YWdtZW50LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5xdWVyeS5yZXNldCgpOyAvLyBNYXkgdXNl
IHRoaXM7IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KLQotICAgICAgICAvLyBTdHJpcCBsZWFkaW5n
ICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCi0gICAgICAgIGludCBi
ZWdpbiA9IDA7Ci0gICAgICAgIHRyaW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgpOwotCi0g
ICAgICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBvbmx5IHdo
aXRlc3BhY2Ugb3IgY29udHJvbAotICAgICAgICAvLyBjaGFycy4KLSAgICAgICAgaWYgKGJlZ2lu
ID09IHNwZWNMZW5ndGgpIHsKLSAgICAgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAg
ICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbnQgcGF0aEJlZ2luID0gLTE7Ci0gICAgICAgIGludCBwYXRoRW5k
ID0gLTE7Ci0KLSAgICAgICAgLy8gRXh0cmFjdCB0aGUgc2NoZW1lLCB3aXRoIHRoZSBwYXRoIGJl
aW5nIGV2ZXJ5dGhpbmcgZm9sbG93aW5nLiBXZSBhbHNvCi0gICAgICAgIC8vIGhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSB0aGVyZSBpcyBubyBzY2hlbWUuCi0gICAgICAgIGlmIChleHRyYWN0U2NoZW1l
KCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCBwYXJzZWQuc2NoZW1lKSkgewotICAg
ICAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgZXh0cmFjdFNjaGVt
ZSBhIHN1YnN0cmluZy4KLSAgICAgICAgICAgIHBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ocGFyc2Vk
LnNjaGVtZS5iZWdpbigpICsgYmVnaW4pOwotCi0gICAgICAgICAgICBpZiAocGFyc2VkLnNjaGVt
ZS5lbmQoKSAhPSBzcGVjTGVuZ3RoIC0gMSkgewotICAgICAgICAgICAgICAgIHBhdGhCZWdpbiA9
IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOwotICAgICAgICAgICAgICAgIHBhdGhFbmQgPSBzcGVj
TGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
Tm8gc2NoZW1lIGZvdW5kLCBqdXN0IHBhdGguCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJl
c2V0KCk7Ci0gICAgICAgICAgICBwYXRoQmVnaW4gPSBiZWdpbjsKLSAgICAgICAgICAgIHBhdGhF
bmQgPSBzcGVjTGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3BsaXQgW3BhdGhCZWdp
biwgcGF0aEVuZCkgaW50byBhIHBhdGggKyBxdWVyeS4KLSAgICAgICAgZm9yIChpbnQgaSA9IHBh
dGhCZWdpbjsgaSA8IHBhdGhFbmQ7ICsraSkgewotICAgICAgICAgICAgaWYgKHNwZWNbaV0gPT0g
Jz8nKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VkLnF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9t
UmFuZ2UoaSArIDEsIHBhdGhFbmQpOwotICAgICAgICAgICAgICAgIHBhdGhFbmQgPSBpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJMIHBhcnNlciwgdHJlYXQg
bm8gcGF0aCBhcwotICAgICAgICAvLyAtMSwgcmF0aGVyIHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9m
IDAKLSAgICAgICAgaWYgKHBhdGhCZWdpbiA9PSBwYXRoRW5kKQotICAgICAgICAgICAgcGFyc2Vk
LnBhdGgucmVzZXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkLnBhdGggPSBV
UkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoQmVnaW4sIHBhdGhFbmQpOwotICAgIH0KLQotICAg
IHN0YXRpYyBpbnQgcGFyc2VQb3J0KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgY29tcG9uZW50KQotICAgIHsKLSAgICAgICAgLy8gRWFzeSBzdWNjZXNzIGNh
c2Ugd2hlbiB0aGVyZSBpcyBubyBwb3J0LgotICAgICAgICBjb25zdCBpbnQgbWF4RGlnaXRzID0g
NTsKLSAgICAgICAgaWYgKGNvbXBvbmVudC5pc0VtcHR5T3JJbnZhbGlkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVW5zcGVjaWZpZWRQb3J0OwotCi0gICAgICAgIFVSTENvbXBvbmVudCBub25aZXJv
RGlnaXRzKGNvbXBvbmVudC5lbmQoKSwgMCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y29tcG9uZW50Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzcGVjW2NvbXBvbmVu
dC5iZWdpbigpICsgaV0gIT0gJzAnKSB7Ci0gICAgICAgICAgICAgICAgbm9uWmVyb0RpZ2l0cyA9
IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGNvbXBvbmVudC5iZWdpbigpICsgaSwgY29tcG9uZW50
LmVuZCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAoIW5vblplcm9EaWdpdHMubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1
cm4gMDsgLy8gQWxsIGRpZ2l0cyB3ZXJlIDAuCi0KLSAgICAgICAgaWYgKG5vblplcm9EaWdpdHMu
bGVuZ3RoKCkgPiBtYXhEaWdpdHMpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFBvcnQ7Ci0K
LSAgICAgICAgaW50IHBvcnQgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vblpl
cm9EaWdpdHMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9
IHNwZWNbbm9uWmVyb0RpZ2l0cy5iZWdpbigpICsgaV07Ci0gICAgICAgICAgICBpZiAoIWlzUG9y
dERpZ2l0KGNoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW52YWxpZFBvcnQ7Ci0gICAgICAg
ICAgICBwb3J0ICo9IDEwOwotICAgICAgICAgICAgcG9ydCArPSBzdGF0aWNfY2FzdDxjaGFyPihj
aCkgLSAnMCc7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvcnQgPiA2NTUzNSkKLSAgICAgICAg
ICAgIHJldHVybiBJbnZhbGlkUG9ydDsKLSAgICAgICAgcmV0dXJuIHBvcnQ7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgZXh0cmFjdEZpbGVOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50JiBmaWxlTmFtZSkKLSAgICB7
Ci0gICAgICAgIC8vIEhhbmRsZSBlbXB0eSBwYXRoczogdGhleSBoYXZlIG5vIGZpbGUgbmFtZXMu
Ci0gICAgICAgIGlmIChwYXRoLmlzRW1wdHlPckludmFsaWQoKSkgewotICAgICAgICAgICAgZmls
ZU5hbWUucmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIGEgcGFyYW1ldGVyLCB3aGljaCBpcyBhIG5vcm1hbGx5
IHVudXNlZCBmaWVsZAotICAgICAgICAvLyBpbiBhIFVSTCBkZWxpbWl0ZWQgYnkgYSBzZW1pY29s
b24uIFdlIHBhcnNlIHRoZSBwYXJhbWV0ZXIgYXMgcGFydCBvZgotICAgICAgICAvLyB0aGUgcGF0
aCwgYnV0IGhlcmUsIHdlIGRvbid0IHdhbnQgdG8gY291bnQgaXQuIFRoZSBsYXN0IHNlbWljb2xv
biBpcwotICAgICAgICAvLyB0aGUgcGFyYW1ldGVyLgotICAgICAgICBpbnQgZmlsZUVuZCA9IHBh
dGguZW5kKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBwYXRoLmVuZCgpIC0gMTsgaSA+IHBhdGgu
YmVnaW4oKTsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAoc3BlY1tpXSA9PSAnOycpIHsKLSAgICAg
ICAgICAgICAgICBmaWxlRW5kID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdyBzZWFyY2ggYmFja3dhcmRzIGZyb20g
dGhlIGZpbGVuYW1lIGVuZCB0byB0aGUgcHJldmlvdXMgc2xhc2gKLSAgICAgICAgLy8gdG8gZmlu
ZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlbmFtZS4KLSAgICAgICAgZm9yIChpbnQgaSA9IGZp
bGVFbmQgLSAxOyBpID49IHBhdGguYmVnaW4oKTsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAoaXNV
UkxTbGFzaChzcGVjW2ldKSkgewotICAgICAgICAgICAgICAgIC8vIEZpbGUgbmFtZSBpcyBldmVy
eXRoaW5nIGZvbGxvd2luZyB0aGlzIGNoYXJhY3RlciB0byB0aGUgZW5kCi0gICAgICAgICAgICAg
ICAgZmlsZU5hbWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgZmlsZUVuZCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gTm8gc2xhc2ggZm91bmQsIHRoaXMgbWVhbnMgdGhlIGlucHV0IHdhcyBkZWdlbmVyYXRl
IChnZW5lcmFsbHkgcGF0aHMKLSAgICAgICAgLy8gd2lsbCBzdGFydCB3aXRoIGEgc2xhc2gpLiBM
ZXQncyBjYWxsIGV2ZXJ5dGhpbmcgdGhlIGZpbGUgbmFtZS4KLSAgICAgICAgZmlsZU5hbWUgPSBV
UkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoLmJlZ2luKCksIGZpbGVFbmQpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBib29sIGV4dHJhY3RRdWVyeUtleVZhbHVlKGNvbnN0IENoYXJhY3RlclR5cGUq
IHNwZWMsIFVSTENvbXBvbmVudCYgcXVlcnksIFVSTENvbXBvbmVudCYga2V5LCBVUkxDb21wb25l
bnQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHF1ZXJ5LmlzRW1wdHlPckludmFsaWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpbnQgc3RhcnQgPSBxdWVyeS5i
ZWdpbigpOwotICAgICAgICBpbnQgY3VycmVudCA9IHN0YXJ0OwotICAgICAgICBpbnQgZW5kID0g
cXVlcnkuZW5kKCk7Ci0KLSAgICAgICAgLy8gV2UgYXNzdW1lIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGlucHV0IGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlICJrZXkiCi0gICAgICAgIC8vIGFuZCB3ZSBz
a2lwIHRvIHRoZSBlbmQgb2YgaXQuCi0gICAgICAgIGtleS5zZXRCZWdpbihjdXJyZW50KTsKLSAg
ICAgICAgd2hpbGUgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tjdXJyZW50XSAhPSAnJicgJiYgc3Bl
Y1tjdXJyZW50XSAhPSAnPScpCi0gICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgIGtleS5z
ZXRMZW5ndGgoY3VycmVudCAtIGtleS5iZWdpbigpKTsKLQotICAgICAgICAvLyBTa2lwIHRoZSBz
ZXBhcmF0b3IgYWZ0ZXIgdGhlIGtleSAoaWYgYW55KS4KLSAgICAgICAgaWYgKGN1cnJlbnQgPCBl
bmQgJiYgc3BlY1tjdXJyZW50XSA9PSAnPScpCi0gICAgICAgICAgICArK2N1cnJlbnQ7Ci0KLSAg
ICAgICAgLy8gRmluZCB0aGUgdmFsdWUgcGFydC4KLSAgICAgICAgdmFsdWUuc2V0QmVnaW4oY3Vy
cmVudCk7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gIT0g
JyYnKQotICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICB2YWx1ZS5zZXRMZW5ndGgoY3Vy
cmVudCAtIHZhbHVlLmJlZ2luKCkpOwotCi0gICAgICAgIC8vIEZpbmFsbHkgc2tpcCB0aGUgbmV4
dCBzZXBhcmF0b3IgaWYgYW55Ci0gICAgICAgIGlmIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3Vy
cmVudF0gPT0gJyYnKQotICAgICAgICAgICAgKytjdXJyZW50OwotCi0gICAgICAgIC8vIFNhdmUg
dGhlIG5ldyBxdWVyeQotICAgICAgICBxdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGN1
cnJlbnQsIGVuZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHByb3RlY3RlZCBvciBwcml2YXRlLgotcHVibGljOgotICAgIC8vIFdlIHRy
ZWF0IHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIHRoZSBzYW1lIGZvciBJRSBjb21wYXRpYmlsaXR5
LgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1VSTFNsYXNoKENoYXJhY3RlclR5cGUgY2gpCi0g
ICAgewotICAgICAgICByZXR1cm4gY2ggPT0gJy8nIHx8IGNoID09ICdcXCc7Ci0gICAgfQotCi0g
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cmltIHRoaXMgY2hhcmFjdGVyIGZyb20g
dGhlIFVSTCBiZWNhdXNlIGl0IGlzCi0gICAgLy8gYSBzcGFjZSBvciBhIGNvbnRyb2wgY2hhcmFj
dGVyLgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRUcmltRnJvbVVSTChDaGFyYWN0ZXJU
eXBlIGNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoIDw9ICcgJzsKLSAgICB9Ci0KLSAgICAv
LyBHaXZlbiBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGJlZ2luIGluZGV4IGFuZCBlbmQgaW5kZXgg
KHRoZSBpbmRleCBhZnRlcgotICAgIC8vIHRoZSBsYXN0IENoYXJhY3RlclR5cGUgaW4gc3BlYyks
IHRoaXMgc2hyaW5rcyB0aGUgcmFuZ2UgdG8gZWxpbWluYXRlCi0gICAgLy8gInNob3VsZC1iZS10
cmltbWVkIiBjaGFyYWN0ZXJzLgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmltVVJMKGNvbnN0
IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCYgYmVnaW4sIGludCYgZW5kKQotICAgIHsKLSAgICAg
ICAgLy8gU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCi0g
ICAgICAgIHdoaWxlIChiZWdpbiA8IGVuZCAmJiBzaG91bGRUcmltRnJvbVVSTChzcGVjW2JlZ2lu
XSkpCi0gICAgICAgICAgICArK2JlZ2luOwotCi0gICAgICAgIC8vIFN0cmlwIHRyYWlsaW5nIHdo
aXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4gV2UgbmVlZCB0aGUgPmkKLSAgICAgICAg
Ly8gdGVzdCBmb3Igd2hlbiB0aGUgaW5wdXQgc3RyaW5nIGlzIGFsbCBibGFua3M7IHdlIGRvbid0
IHdhbnQgdG8gYmFjawotICAgICAgICAvLyBwYXN0IHRoZSBpbnB1dC4KLSAgICAgICAgd2hpbGUg
KGVuZCA+IGJlZ2luICYmIHNob3VsZFRyaW1Gcm9tVVJMKHNwZWNbZW5kIC0gMV0pKQotICAgICAg
ICAgICAgLS1lbmQ7Ci0gICAgfQotCi0gICAgLy8gQ291bnRzIHRoZSBudW1iZXIgb2YgY29uc2Vj
dXRpdmUgc2xhc2hlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gb2Zmc2V0Ci0gICAgLy8gaW4gdGhl
IGdpdmVuIHN0cmluZyBvZiB0aGUgZ2l2ZW4gbGVuZ3RoLgotICAgIHN0YXRpYyBpbmxpbmUgaW50
IGNvbnNlY3V0aXZlU2xhc2hlcyhjb25zdCBDaGFyYWN0ZXJUeXBlICpzdHJpbmcsIGludCBiZWdp
bk9mZnNldCwgaW50IHN0cmluZ0xlbmd0aCkKLSAgICB7Ci0gICAgICAgIGludCBjb3VudCA9IDA7
Ci0gICAgICAgIHdoaWxlIChiZWdpbk9mZnNldCArIGNvdW50IDwgc3RyaW5nTGVuZ3RoICYmIGlz
VVJMU2xhc2goc3RyaW5nW2JlZ2luT2Zmc2V0ICsgY291bnRdKSkKLSAgICAgICAgICAgICsrY291
bnQ7Ci0gICAgICAgIHJldHVybiBjb3VudDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gVVJM
UGFyc2VyIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4KLSAgICBVUkxQYXJzZXIoKTsKLQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGlzIGEgdmFsaWQgZGlnaXQgdG8g
dXNlIGluIGEgcG9ydC4KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNQb3J0RGlnaXQoQ2hhcmFj
dGVyVHlwZSBjaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjaCA+PSAnMCcgJiYgY2ggPD0gJzkn
OwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBhdXRob3Jp
dHkgdGVybWluYXRvciBpbiB0aGUgaW5wdXQgc3RhcnRpbmcKLSAgICAvLyBmcm9tIHN0YXJ0T2Zm
c2V0LiBJZiBubyB0ZXJtaW5hdG9yIGlzIGZvdW5kLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUg
ZXF1YWwKLSAgICAvLyB0byBzcGVjTGVuZ3RoLgotICAgIHN0YXRpYyBpbnQgbmV4dEF1dGhvcml0
eVRlcm1pbmF0b3IoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgc3BlY0xlbmd0aCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBzdGFydE9mZnNldDsg
aSA8IHNwZWNMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzUG9zc2libGVBdXRob3Jp
dHlUZXJtaW5hdG9yKHNwZWNbaV0pKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBzcGVjTGVuZ3RoOyAvLyBOb3QgZm91bmQuCi0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgcGFyc2VVc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIHVzZXIsIFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIFVSTENvbXBv
bmVudCYgcGFzc3dvcmQpCi0gICAgewotICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBjb2xvbiBp
biB0aGUgdXNlciBzZWN0aW9uLCB3aGljaCBzZXBhcmF0ZXMgdGhlCi0gICAgICAgIC8vIHVzZXJu
YW1lIGFuZCBwYXNzd29yZC4KLSAgICAgICAgaW50IGNvbG9uT2Zmc2V0ID0gMDsKLSAgICAgICAg
d2hpbGUgKGNvbG9uT2Zmc2V0IDwgdXNlci5sZW5ndGgoKSAmJiBzcGVjW3VzZXIuYmVnaW4oKSAr
IGNvbG9uT2Zmc2V0XSAhPSAnOicpCi0gICAgICAgICAgICArK2NvbG9uT2Zmc2V0OwotCi0gICAg
ICAgIGlmIChjb2xvbk9mZnNldCA8IHVzZXIubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8vIEZv
dW5kIHNlcGFyYXRvcjogPHVzZXJuYW1lPjo8cGFzc3dvcmQ+Ci0gICAgICAgICAgICB1c2VybmFt
ZSA9IFVSTENvbXBvbmVudCh1c2VyLmJlZ2luKCksIGNvbG9uT2Zmc2V0KTsKLSAgICAgICAgICAg
IHBhc3N3b3JkID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UodXNlci5iZWdpbigpICsgY29sb25P
ZmZzZXQgKyAxLCB1c2VyLmJlZ2luKCkgKyB1c2VyLmxlbmd0aCgpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIE5vIHNlcGFyYXRvciwgdHJlYXQgZXZlcnl0aGluZyBhcyB0aGUg
dXNlcm5hbWUKLSAgICAgICAgICAgIHVzZXJuYW1lID0gdXNlcjsKLSAgICAgICAgICAgIHBhc3N3
b3JkID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBwYXJzZVNlcnZlckluZm8oY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBzZXJ2ZXJJbmZvLCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTENvbXBvbmVudCYgcG9y
dCkKLSAgICB7Ci0gICAgICAgIGlmICghc2VydmVySW5mby5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgLy8gTm8gc2VydmVyIGluZm8sIGhvc3QgbmFtZSBpcyBlbXB0eS4KLSAgICAgICAgICAgIGhv
c3QucmVzZXQoKTsKLSAgICAgICAgICAgIHBvcnQucmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBob3N0IHN0YXJ0cyB3aXRoIGEgbGVm
dC1icmFja2V0LCBhc3N1bWUgdGhlIGVudGlyZSBob3N0IGlzIGFuCi0gICAgICAgIC8vIElQdjYg
bGl0ZXJhbC4gT3RoZXJ3aXNlLCBhc3N1bWUgbm9uZSBvZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGxp
dGVyYWwuCi0gICAgICAgIC8vIFRoaXMgYXNzdW1wdGlvbiB3aWxsIGJlIG92ZXJyaWRkZW4gaWYg
d2UgZmluZCBhIHJpZ2h0LWJyYWNrZXQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE91ciBJUHY2
IGFkZHJlc3MgY2Fub25pY2FsaXphdGlvbiBjb2RlIHJlcXVpcmVzIGJvdGggYnJhY2tldHMgdG8K
LSAgICAgICAgLy8gZXhpc3QsIGJ1dCB0aGUgYWJpbGl0eSB0byBsb2NhdGUgYW4gaW5jb21wbGV0
ZSBhZGRyZXNzIGNhbiBzdGlsbCBiZQotICAgICAgICAvLyB1c2VmdWwuCi0gICAgICAgIGludCBp
cHY2VGVybWluYXRvciA9IHNwZWNbc2VydmVySW5mby5iZWdpbigpXSA9PSAnWycgPyBzZXJ2ZXJJ
bmZvLmVuZCgpIDogLTE7Ci0gICAgICAgIGludCBjb2xvbiA9IC0xOwotCi0gICAgICAgIC8vIEZp
bmQgdGhlIGxhc3QgcmlnaHQtYnJhY2tldCwgYW5kIHRoZSBsYXN0IGNvbG9uLgotICAgICAgICBm
b3IgKGludCBpID0gc2VydmVySW5mby5iZWdpbigpOyBpIDwgc2VydmVySW5mby5lbmQoKTsgaSsr
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsKLSAgICAgICAgICAgIGNhc2UgJ10n
OgotICAgICAgICAgICAgICAgIGlwdjZUZXJtaW5hdG9yID0gaTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgICAgIGNvbG9uID0gaTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29s
b24gPiBpcHY2VGVybWluYXRvcikgewotICAgICAgICAgICAgLy8gRm91bmQgYSBwb3J0IG51bWJl
cjogPGhvc3RuYW1lPjo8cG9ydD4KLSAgICAgICAgICAgIGhvc3QgPSBVUkxDb21wb25lbnQ6OmZy
b21SYW5nZShzZXJ2ZXJJbmZvLmJlZ2luKCksIGNvbG9uKTsKLSAgICAgICAgICAgIGlmICghaG9z
dC5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBob3N0LnJlc2V0KCk7Ci0gICAgICAgICAgICBw
b3J0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY29sb24gKyAxLCBzZXJ2ZXJJbmZvLmVuZCgp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIHBvcnQ6IDxob3N0bmFtZT4K
LSAgICAgICAgICAgIGhvc3QgPSBzZXJ2ZXJJbmZvOwotICAgICAgICAgICAgcG9ydC5yZXNldCgp
OwotICAgICAgICB9Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAv
LyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMUGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMUXVlcnlDYW5vbmljYWxpemVyLmggYi9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTFF1ZXJ5Q2Fub25pY2FsaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0NjdjNDk3ZmQyNGZmNDRkZDRlM2M0MGYyMzc2MGM4ZTQzMmI4NmQ5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMUXVlcnlDYW5vbmljYWxpemVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotI2lmbmRl
ZiBVUkxRdWVyeUNhbm9uaWNhbGl6ZXJfaAotI2RlZmluZSBVUkxRdWVyeUNhbm9uaWNhbGl6ZXJf
aAotCi0jaWYgVVNFKFdURlVSTCkKLQotI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgotI2luY2x1
ZGUgIlVSTEJ1ZmZlci5oIgotI2luY2x1ZGUgIlVSTENoYXJhY3RlclR5cGVzLmgiCi0jaW5jbHVk
ZSAiVVJMQ29tcG9uZW50LmgiCi0jaW5jbHVkZSAiVVJMRXNjYXBlLmgiCi0KLW5hbWVzcGFjZSBX
VEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbkNoYXIsIHR5cGVuYW1lIE91dENoYXIsIHZvaWQg
Y29udmVydENoYXJzZXQoY29uc3QgSW5DaGFyKiwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+
Jik+Ci1jbGFzcyBVUkxRdWVyeUNhbm9uaWNhbGl6ZXIgewotcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGNhbm9uaWNhbGl6ZShjb25zdCBJbkNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
cXVlcnksIFVSTEJ1ZmZlcjxPdXRDaGFyPiYgYnVmZmVyLCBVUkxDb21wb25lbnQmIHJlc3VsdFF1
ZXJ5KQotICAgIHsKLSAgICAgICAgaWYgKHF1ZXJ5Lmxlbmd0aCgpIDwgMCkgewotICAgICAgICAg
ICAgcmVzdWx0UXVlcnkgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJ1ZmZlci0+YXBwZW5kKCc/Jyk7Ci0gICAgICAgIHJlc3VsdFF1
ZXJ5LnNldEJlZ2luKGJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBjb252ZXJ0VG9RdWVyeUVu
Y29kaW5nKHNwZWMsIHF1ZXJ5LCBidWZmZXIpOwotICAgICAgICByZXN1bHRRdWVyeS5zZXRMZW5n
dGgoYnVmZmVyLT5sZW5ndGgoKSAtIHJlc3VsdFF1ZXJ5LmJlZ2luKCkpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgYm9vbCBpc0FsbEFTQ0lJKGNvbnN0IEluQ2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBxdWVyeSkKLSAgICB7Ci0gICAgICAgIGludCBlbmQgPSBxdWVyeS5l
bmQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IHF1ZXJ5LmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkg
ewotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzcGVjW2ldKSA+PSAweDgw
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgc3RhdGljIGJvb2wgaXNSYXc4
Qml0KGNvbnN0IEluQ2hhciogc291cmNlLCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IHNvdXJjZTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc291
cmNlW2ldICYgMHhGRiAhPSBzb3VyY2VbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAg
c3RhdGljIHZvaWQgYXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5nKGNvbnN0IEluQ2hhciogc291cmNl
LCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8T3V0Q2hhcj4qIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1JhdzhCaXQoc291cmNlLCBsZW5ndGgpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCFVUkxDaGFyYWN0ZXJUeXBl
czo6aXNRdWVyeUNoYXIoc291cmNlW2ldKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2Nh
cGVkQ2hhcmFjdGVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNvdXJjZVtpXSksIGJ1ZmZl
cik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnVmZmVyLT5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Y2hhcj4oc291cmNlW2ldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0
aWMgdm9pZCBjb252ZXJ0VG9RdWVyeUVuY29kaW5nKGNvbnN0IEluQ2hhciogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQnVmZmVyPE91dENoYXI+JiBidWZmZXIpCi0gICAgewot
ICAgICAgICBpZiAoaXNBbGxBU0NJSShzcGVjLCBxdWVyeSkpIHsKLSAgICAgICAgICAgIGFwcGVu
ZFJhdzhCaXRRdWVyeVN0cmluZygmc3BlY1txdWVyeS5iZWdpbigpXSwgcXVlcnkubGVuZ3RoKCks
IGJ1ZmZlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBSYXdV
UkxCdWZmZXI8Y2hhciwgMTAyND4gY29udmVydGVkUXVlcnk7Ci0gICAgICAgIGNvbnZlcnRDaGFy
c2V0KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZWRRdWVyeSk7Ci0gICAgICAgIGFwcGVuZFJhdzhCaXRR
dWVyeVN0cmluZyhjb252ZXJ0ZWRRdWVyeS5kYXRhKCksIGNvbnZlcnRlZFF1ZXJ5Lmxlbmd0aCgp
LCBidWZmZXIpOwotICAgIH0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcAppbmRleCAxNThlNWQ5ZDQ4
Y2VjYjYyNTUwNjM3ODMwMTU0YzkyNzVkOTUwZjgyLi44ZDk3M2NjMmE1YmIwZjA5MmViYWRkNDI2
ZDRmNmE5NzM4MWZkMTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNl
Z21lbnRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcApA
QCAtMTMsNyArMTMsNyBAQAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCiAgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDcgKzI1LDcgQEAKICAqIGh0dHA6Ly93d3cubW96
aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBM
aWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQv
Z3BsLmh0bWwKICAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKLSAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBh
Ym92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiBhcHBsaWNhYmxlIGlu
c3RlYWQgb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCiAg
KiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhv
c2UgdHdvCiAgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93
IG90aGVycyB0byB1c2UgeW91cgogICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExH
UEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMU2VnbWVudHMuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVu
dHMuaAppbmRleCA5ZjE3MjI4ZDZjMDZiMGQ1Y2QyMDEwNjMyOWIzYWZkMjhhNDA5YWQ5Li4wMzg1
ZjgxZGQ4YzIwZDk5MjhkNTk4MDJjNTJhY2Y0MGUyOWYxNzExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmgKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxTZWdtZW50cy5oCkBAIC0zMSwxMSArMzEsMTUgQEAKICNkZWZpbmUgVVJMU2VnbWVudHNf
aAogCiAjaW5jbHVkZSAiVVJMQ29tcG9uZW50LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBVU0UoV1RGVVJMKQogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAorY2xhc3MgVVJMU2VnbWVudHM7CisKIC8vIEEgc3RydWN0dXJlIHRoYXQgaG9s
ZHMgdGhlIGlkZW50aWZpZWQgcGFydHMgb2YgYW4gaW5wdXQgVVJMLiBUaGlzIHN0cnVjdHVyZQog
Ly8gZG9lcyBOT1Qgc3RvcmUgdGhlIFVSTCBpdHNlbGYuIFRoZSBjYWxsZXIgd2lsbCBoYXZlIHRv
IHN0b3JlIHRoZSBVUkwgdGV4dAogLy8gYW5kIGl0cyBjb3JyZXNwb25kaW5nIFBhcnNlZCBzdHJ1
Y3R1cmUgc2VwYXJhdGVseS4KQEAgLTU5LDYgKzYzLDI2IEBAIHB1YmxpYzoKIAogICAgIFVSTFNl
Z21lbnRzKCkgeyB9CiAKKyAgICBVUkxTZWdtZW50cyhjb25zdCBVUkxTZWdtZW50cyYgb3RoZXJT
ZWdtZW50KQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlclNlZ21lbnQ7CisgICAgfQorCisg
ICAgVVJMU2VnbWVudHMmIG9wZXJhdG9yPShjb25zdCBVUkxTZWdtZW50cyYgb3RoZXJTZWdtZW50
KQorICAgIHsKKyAgICAgICAgc2NoZW1lID0gb3RoZXJTZWdtZW50LnNjaGVtZTsKKyAgICAgICAg
dXNlcm5hbWUgPSBvdGhlclNlZ21lbnQudXNlcm5hbWU7CisgICAgICAgIHBhc3N3b3JkID0gb3Ro
ZXJTZWdtZW50LnBhc3N3b3JkOworICAgICAgICBob3N0ID0gb3RoZXJTZWdtZW50Lmhvc3Q7Cisg
ICAgICAgIHBvcnQgPSBvdGhlclNlZ21lbnQucG9ydDsKKyAgICAgICAgcGF0aCA9IG90aGVyU2Vn
bWVudC5wYXRoOworICAgICAgICBxdWVyeSA9IG90aGVyU2VnbWVudC5xdWVyeTsKKyAgICAgICAg
ZnJhZ21lbnQgPSBvdGhlclNlZ21lbnQuZnJhZ21lbnQ7CisgICAgICAgIGlmIChvdGhlclNlZ21l
bnQubV9pbm5lclVSTFNlZ21lbnRzKQorICAgICAgICAgICAgbV9pbm5lclVSTFNlZ21lbnRzID0g
YWRvcHRQdHIobmV3IFVSTFNlZ21lbnRzKCpvdGhlclNlZ21lbnQubV9pbm5lclVSTFNlZ21lbnRz
KSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgLy8gUmV0dXJucyB0
aGUgbGVuZ3RoIG9mIHRoZSBVUkwgKHRoZSBlbmQgb2YgdGhlIGxhc3QgY29tcG9uZW50KS4KICAg
ICAvLwogICAgIC8vIE5vdGUgdGhhdCBmb3Igc29tZSBpbnZhbGlkLCBub24tY2Fub25pY2FsIFVS
THMsIHRoaXMgbWF5IG5vdCBiZSB0aGUgbGVuZ3RoCkBAIC0xMDUsNiArMTI5LDE2IEBAIHB1Ymxp
YzoKICAgICBVUkxDb21wb25lbnQgcGF0aDsKICAgICBVUkxDb21wb25lbnQgcXVlcnk7CiAgICAg
VVJMQ29tcG9uZW50IGZyYWdtZW50OworCisgICAgLy8gRklYTUU6IHRoaXMgaXMgYSBkYW1uIHVn
bHkgQVBJIGFuZCBpcyBiYXNpY2FsbHkgdW50ZXN0ZWQuCisgICAgY29uc3QgVVJMU2VnbWVudHMq
IGlubmVyVVJMU2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2lubmVyVVJMU2VnbWVudHMuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldElubmVyVVJMU2VnbWVudHMoY29uc3QgVVJMU2VnbWVudHMmIHVy
bFNlZ21lbnRzKSB7IG1faW5uZXJVUkxTZWdtZW50cyA9IGFkb3B0UHRyKG5ldyBVUkxTZWdtZW50
cyh1cmxTZWdtZW50cykpOyB9CisgICAgdm9pZCBjbGVhcklubmVyVVJMU2VnbWVudHMoKSB7IHJl
dHVybiBtX2lubmVyVVJMU2VnbWVudHMuY2xlYXIoKTsgfQorCitwcml2YXRlOgorICAgIC8vIFRo
ZSBGaWxlc3lzdGVtIEFQSSBkZXNjcmliZSBhIFVSTCBmb3JtYXQgd2l0aCBhbiBpbnRlcm5hbCBV
UkwuIEUuZy46IGZpbGVzeXN0ZW06aHR0cDovL3d3dy5hcHBsZS5jb20vCisgICAgLy8gVGhlIGlu
bmVyIFVSTCBzZWdtZW50IGNvbnRhaW5zIHRoZSBwYXJzZWQgaW5uZXIgVVJMIG9mIGEgZmlsZXN5
c3RlbTogVVJMLgorICAgIE93blB0cjxVUkxTZWdtZW50cz4gbV9pbm5lclVSTFNlZ21lbnRzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTFV0aWwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZDIzOWU2NjFkM2FhODFiOThlNDMxNTJhM2I4ZTQ0NDQ1MmQyOGNhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsLmNwcApAQCAtMCwwICsx
LDUxMiBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBk
aXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVVJMVXRpbC5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVy
LmgiCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIK
KyNpbmNsdWRlICJVUkxVdGlsSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVz
cGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMVXRpbGl0aWVzIHsKKworY29uc3QgY2hhciBrRmls
ZVNjaGVtZVtdID0gImZpbGUiOworY29uc3QgY2hhciBrRmlsZVN5c3RlbVNjaGVtZVtdID0gImZp
bGVzeXN0ZW0iOworY29uc3QgY2hhciBrTWFpbHRvU2NoZW1lW10gPSAibWFpbHRvIjsKKworbmFt
ZXNwYWNlIHsKKworLy8gQVNDSUktc3BlY2lmaWMgdG9sb3dlci4gVGhlIHN0YW5kYXJkIGxpYnJh
cnkncyB0b2xvd2VyIGlzIGxvY2FsZSBzZW5zaXRpdmUsCisvLyBzbyB3ZSBkb24ndCB3YW50IHRv
IHVzZSBpdCBoZXJlLgordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBD
aGFyYWN0ZXJUeXBlIFRvTG93ZXJBU0NJSShDaGFyYWN0ZXJUeXBlIGMpCit7CisgICAgcmV0dXJu
IChjID49ICdBJyAmJiBjIDw9ICdaJykgPyAoYyArICgnYScgLSAnQScpKSA6IGM7Cit9CisKKy8v
IEJhY2tlbmQgZm9yIExvd2VyQ2FzZUVxdWFsc0FTQ0lJLgordGVtcGxhdGU8dHlwZW5hbWUgSXRl
cj4KK2lubGluZSBib29sIERvTG93ZXJDYXNlRXF1YWxzQVNDSUkoSXRlciBhQmVnaW4sIEl0ZXIg
YUVuZCwgY29uc3QgY2hhciogYikKK3sKKyAgICBmb3IgKEl0ZXIgaXQgPSBhQmVnaW47IGl0ICE9
IGFFbmQ7ICsraXQsICsrYikgeworICAgICAgICBpZiAoISpiIHx8IFRvTG93ZXJBU0NJSSgqaXQp
ICE9ICpiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gISgq
Yik7Cit9CisKK2NvbnN0IGludCBrTnVtU3RhbmRhcmRVUkxTY2hlbWVzID0gODsKK2NvbnN0IGNo
YXIqIGtTdGFuZGFyZFVSTFNjaGVtZXNba051bVN0YW5kYXJkVVJMU2NoZW1lc10gPSB7CisgICAg
Imh0dHAiLAorICAgICJodHRwcyIsCisgICAga0ZpbGVTY2hlbWUsIC8vIFllcywgZmlsZSB1cmxz
IGNhbiBoYXZlIGEgaG9zdG5hbWUhCisgICAgImZ0cCIsCisgICAgImdvcGhlciIsCisgICAgIndz
IiwgLy8gV2ViU29ja2V0LgorICAgICJ3c3MiLCAvLyBXZWJTb2NrZXQgc2VjdXJlLgorICAgIGtG
aWxlU3lzdGVtU2NoZW1lCit9OworCisvLyBHaXZlbiBhIHN0cmluZyBhbmQgYSByYW5nZSBpbnNp
ZGUgdGhlIHN0cmluZywgY29tcGFyZXMgaXQgdG8gdGhlIGdpdmVuCisvLyBsb3dlci1jYXNlIHxj
b21wYXJlVG98IGJ1ZmZlci4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citpbmxp
bmUgYm9vbCBEb0NvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQsIGNvbnN0IGNoYXIqIGNvbXBhcmVUbykK
K3sKKyAgICBpZiAoIWNvbXBvbmVudC5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiAhY29t
cGFyZVRvWzBdOyAvLyBXaGVuIGNvbXBvbmVudCBpcyBlbXB0eSwgbWF0Y2ggZW1wdHkgc2NoZW1l
LgorICAgIHJldHVybiBMb3dlckNhc2VFcXVhbHNBU0NJSSgmc3BlY1tjb21wb25lbnQuYmVnaW4o
KV0sICZzcGVjW2NvbXBvbmVudC5lbmQoKV0sIGNvbXBhcmVUbyk7Cit9CisKKy8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1lIGlkZW50aWZpZWQgYnkgfHNjaGVtZXwgd2l0aGluIHxz
cGVjfCBpcyBvbmUKKy8vIG9mIHRoZSByZWdpc3RlcmVkICJzdGFuZGFyZCIgc2NoZW1lcy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citib29sIGRvSXNTdGFuZGFyZChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSkKK3sKKyAgICBp
ZiAoIXNjaGVtZS5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRW1wdHkg
b3IgaW52YWxpZCBzY2hlbWVzIGFyZSBub24tc3RhbmRhcmQuCisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtOdW1TdGFuZGFyZFVSTFNjaGVtZXM7ICsraSkgeworICAgICAgICBpZiAoTG93
ZXJDYXNlRXF1YWxzQVNDSUkoJnNwZWNbc2NoZW1lLmJlZ2luKCldLCAmc3BlY1tzY2hlbWUuZW5k
KCldLCBrU3RhbmRhcmRVUkxTY2hlbWVzW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Citib29sIERvRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25lbnQqIGZv
dW5kU2NoZW1lKQoreworICAgIC8vIEJlZm9yZSBleHRyYWN0aW5nIHNjaGVtZSwgY2Fub25pY2Fs
aXplIHRoZSBVUkwgdG8gcmVtb3ZlIGFueSB3aGl0ZXNwYWNlLgorICAgIC8vIFRoaXMgbWF0Y2hl
cyB0aGUgY2Fub25pY2FsaXphdGlvbiBkb25lIGluIERvQ2Fub25pY2FsaXplIGZ1bmN0aW9uLgor
ICAgIFJhd1VSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNlQnVmZmVyOworICAgIGlu
dCBzcGVjTGVuZ3RoOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMgPSBVUkxDYW5vbmlj
YWxpemVyOjpyZW1vdmVVUkxXaGl0ZXNwYWNlKHN0ciwgc3RyTGVuZ3RoLCB3aGl0ZXNwYWNlQnVm
ZmVyLCAmc3BlY0xlbmd0aCk7CisKKyAgICBVUkxDb21wb25lbnQgb3VyU2NoZW1lOworICAgIGlm
ICghVVJMUGFyc2VyOjpFeHRyYWN0U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsICZvdXJTY2hlbWUp
KSB7CisgICAgICAgIC8vIE5vIHNjaGVtZS4KKyAgICAgICAgaWYgKGZvdW5kU2NoZW1lKQorICAg
ICAgICAgICAgKmZvdW5kU2NoZW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKGZvdW5kU2NoZW1lKQorICAgICAgICAqZm91bmRTY2hlbWUg
PSBvdXJTY2hlbWU7CisgICAgcmV0dXJuIERvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBv
dXJTY2hlbWUsIGNvbXBhcmUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PgorYm9vbCBEb0Nhbm9uaWNhbGl6ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBpblNwZWMsIGludCBp
blNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJz
ZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3Vw
dXRQYXJzZWQpCit7CisgICAgLy8gUmVtb3ZlIGFueSB3aGl0ZXNwYWNlIGZyb20gdGhlIG1pZGRs
ZSBvZiB0aGUgcmVsYXRpdmUgVVJMLCBwb3NzaWJseQorICAgIC8vIGNvcHlpbmcgdG8gdGhlIG5l
dyBidWZmZXIuCisgICAgUmF3VVJMQnVmZmVyPENoYXJhY3RlclR5cGU+IHdoaXRlc3BhY2VCdWZm
ZXI7CisgICAgaW50IHNwZWNMZW5ndGg7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYyA9
IFVSTENhbm9uaWNhbGl6ZXI6OnJlbW92ZVVSTFdoaXRlc3BhY2UoaW5TcGVjLCBpblNwZWNMZW5n
dGgsIHdoaXRlc3BhY2VCdWZmZXIsICZzcGVjTGVuZ3RoKTsKKworICAgIFVSTFNlZ21lbnRzIHBh
cnNlZElucHV0OworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gRm9yIFdpbmRvd3MsIHdlIGFsbG93
IHRoaW5ncyB0aGF0IGxvb2sgbGlrZSBhYnNvbHV0ZSBXaW5kb3dzIHBhdGhzIHRvIGJlCisgICAg
Ly8gZml4ZWQgdXAgbWFnaWNhbGx5IHRvIGZpbGUgVVJMcy4gVGhpcyBpcyBkb25lIGZvciBJRSBj
b21wYXRhYmlsaXR5LiBGb3IKKyAgICAvLyBleGFtcGxlLCB0aGlzIHdpbGwgY2hhbmdlICJjOi9m
b28iIGludG8gYSBmaWxlIFVSTCByYXRoZXIgdGhhbiB0cmVhdGluZworICAgIC8vIGl0IGFzIGEg
VVJMIHdpdGggdGhlIHByb3RvY29sICJjIi4gSXQgYWxzbyB3b3JrcyBmb3IgVU5DICgiXFxmb29c
YmFyLnR4dCIpLgorICAgIC8vIFRoZXJlIGlzIHNpbWlsYXIgbG9naWMgaW4gVVJMQ2Fub25pY2Fs
aXplcl9yZWxhdGl2ZS5jYyBmb3IKKyAgICAvLworICAgIC8vIEZvciBNYXggJiBVbml4LCB3ZSBk
b24ndCBkbyB0aGlzICh0aGUgZXF1aXZhbGVudCB3b3VsZCBiZSAiL2Zvby9iYXIiIHdoaWNoCisg
ICAgLy8gaGFzIG5vIG1lYW5pbmcgYXMgYW4gYWJzb2x1dGUgcGF0aCBuYW1lLiBUaGlzIGlzIGJl
Y2F1c2UgYnJvd3NlcnMgb24gTWFjCisgICAgLy8gJiBVbml4IGRvbid0IGdlbmVyYWxseSBkbyB0
aGlzLCBzbyB0aGVyZSBpcyBubyBjb21wYXRpYmlsaXR5IHJlYXNvbiBmb3IKKyAgICAvLyBkb2lu
ZyBzby4KKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVnaW5VTkNQYXRoKHNwZWMsIDAsIHNwZWNM
ZW5ndGgsIGZhbHNlKQorICAgICAgICB8fCBVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRvd3NEcml2
ZVNwZWMoc3BlYywgMCwgc3BlY0xlbmd0aCkpIHsKKyAgICAgICAgVVJMUGFyc2VyOjpQYXJzZUZp
bGVVUkwoc3BlYywgc3BlY0xlbmd0aCwgJnBhcnNlZElucHV0KTsKKyAgICAgICAgcmV0dXJuIFVS
TENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZUZpbGVVUkwoc3BlYywgc3BlY0xlbmd0aCwgcGFy
c2VkSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOworICAgIH0KKyNlbmRp
ZgorCisgICAgVVJMQ29tcG9uZW50IHNjaGVtZTsKKyAgICBpZiAoIVVSTFBhcnNlcjo6RXh0cmFj
dFNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCAmc2NoZW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gVGhpcyBpcyB0aGUgcGFyc2VkIHZlcnNpb24gb2YgdGhlIGlucHV0IFVSTCwg
d2UgaGF2ZSB0byBjYW5vbmljYWxpemUgaXQKKyAgICAvLyBiZWZvcmUgc3RvcmluZyBpdCBpbiBv
dXIgb2JqZWN0LgorICAgIGJvb2wgc3VjY2VzczsKKyAgICBpZiAoRG9Db21wYXJlU2NoZW1lQ29t
cG9uZW50KHNwZWMsIHNjaGVtZSwga0ZpbGVTY2hlbWUpKSB7CisgICAgICAgIC8vIEZpbGUgVVJM
cyBhcmUgc3BlY2lhbC4KKyAgICAgICAgVVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwoc3BlYywgc3Bl
Y0xlbmd0aCwgJnBhcnNlZElucHV0KTsKKyAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6
ZXI6OkNhbm9uaWNhbGl6ZUZpbGVVUkwoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkSW5wdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3VwdXRQYXJzZWQpOworICAgIH0gZWxzZSBpZiAoRG9D
b21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHNjaGVtZSwga0ZpbGVTeXN0ZW1TY2hlbWUpKSB7
CisgICAgICAgIC8vIEZpbGVzeXN0ZW0gVVJMcyBhcmUgc3BlY2lhbC4KKyAgICAgICAgVVJMUGFy
c2VyOjpQYXJzZUZpbGVTeXN0ZW1VUkwoc3BlYywgc3BlY0xlbmd0aCwgJnBhcnNlZElucHV0KTsK
KyAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZUZpbGVTeXN0
ZW1VUkwoc3BlYywgc3BlY0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRD
b252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOworCisgICAgfSBlbHNlIGlmIChk
b0lzU3RhbmRhcmQoc3BlYywgc2NoZW1lKSkgeworICAgICAgICAvLyBBbGwgIm5vcm1hbCIgVVJM
cy4KKyAgICAgICAgVVJMUGFyc2VyOjpQYXJzZVN0YW5kYXJkVVJMKHNwZWMsIHNwZWNMZW5ndGgs
ICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5v
bmljYWxpemVTdGFuZGFyZFVSTChzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWRJbnB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91cHV0UGFyc2VkKTsKKworICAgIH0gZWxzZSBp
ZiAoRG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHNjaGVtZSwga01haWx0b1NjaGVtZSkp
IHsKKyAgICAgICAgLy8gTWFpbHRvIGFyZSB0cmVhdGVkIGxpa2UgYSBzdGFuZGFyZCB1cmwgd2l0
aCBvbmx5IGEgc2NoZW1lLCBwYXRoLCBxdWVyeQorICAgICAgICBVUkxQYXJzZXI6OlBhcnNlTWFp
bHRvVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHN1Y2Nlc3Mg
PSBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVNYWlsdG9VUkwoc3BlYywgc3BlY0xlbmd0
aCwgcGFyc2VkSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXB1dFBhcnNlZCk7CisKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyAiV2VpcmQiIFVSTHMgbGlrZSBkYXRhOiBhbmQgamF2YXNjcmlwdDoKKyAgICAg
ICAgVVJMUGFyc2VyOjpQYXJzZVBhdGhVUkwoc3BlYywgc3BlY0xlbmd0aCwgJnBhcnNlZElucHV0
KTsKKyAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6ZXI6OmNhbm9uaWNhbGl6ZVBhdGhV
Ukwoc3BlYywgcGFyc2VkSW5wdXQsIG91dHB1dCwgKm91cHV0UGFyc2VkKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citi
b29sIGRvUmVzb2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBjb25zdCBVUkxTZWdt
ZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSogaW5SZWxhdGl2ZSwgaW50IGluUmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxT
ZWdtZW50cyogb3VwdXRQYXJzZWQpCit7CisgICAgLy8gUmVtb3ZlIGFueSB3aGl0ZXNwYWNlIGZy
b20gdGhlIG1pZGRsZSBvZiB0aGUgcmVsYXRpdmUgVVJMLCBwb3NzaWJseQorICAgIC8vIGNvcHlp
bmcgdG8gdGhlIG5ldyBidWZmZXIuCisgICAgUmF3VVJMQnVmZmVyPENoYXJhY3RlclR5cGU+IHdo
aXRlc3BhY2VCdWZmZXI7CisgICAgaW50IHJlbGF0aXZlTGVuZ3RoOworICAgIGNvbnN0IENoYXJh
Y3RlclR5cGUqIHJlbGF0aXZlID0gVVJMQ2Fub25pY2FsaXplcjo6cmVtb3ZlVVJMV2hpdGVzcGFj
ZShpblJlbGF0aXZlLCBpblJlbGF0aXZlTGVuZ3RoLCB3aGl0ZXNwYWNlQnVmZmVyLCAmcmVsYXRp
dmVMZW5ndGgpOworCisgICAgLy8gU2VlIGlmIG91ciBiYXNlIFVSTCBzaG91bGQgYmUgdHJlYXRl
ZCBhcyAic3RhbmRhcmQiLgorICAgIGJvb2wgc3RhbmRhcmRCYXNlU2NoZW1lID0gYmFzZVBhcnNl
ZC5zY2hlbWUuaXNOb25FbXB0eSgpICYmIGRvSXNTdGFuZGFyZChiYXNlU3BlYywgYmFzZVBhcnNl
ZC5zY2hlbWUpOworCisgICAgYm9vbCBpc1JlbGF0aXZlOworICAgIFVSTENvbXBvbmVudCByZWxh
dGl2ZUNvbXBvbmVudDsKKyAgICBpZiAoIVVSTENhbm9uaWNhbGl6ZXI6OmlzUmVsYXRpdmVVUkwo
YmFzZVNwZWMsIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbGF0aXZlLCByZWxhdGl2ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhbmRhcmRCYXNlU2NoZW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmaXNSZWxhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnJlbGF0aXZlQ29tcG9uZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBFcnJvciByZXNvbHZpbmcuCisKKyAgICBpZiAoaXNSZWxhdGl2ZSkgeworICAg
ICAgICAvLyBSZWxhdGl2ZSwgcmVzb2x2ZSBhbmQgY2Fub25pY2FsaXplLgorICAgICAgICBib29s
IGZpbGVCYXNlU2NoZW1lID0gYmFzZVBhcnNlZC5zY2hlbWUuaXNOb25FbXB0eSgpICYmIERvQ29t
cGFyZVNjaGVtZUNvbXBvbmVudChiYXNlU3BlYywgYmFzZVBhcnNlZC5zY2hlbWUsIGtGaWxlU2No
ZW1lKTsKKyAgICAgICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OnJlc29sdmVSZWxhdGl2ZVVS
TChiYXNlU3BlYywgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxlQmFzZVNjaGVtZSwgcmVsYXRpdmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25l
bnQsIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXB1dFBhcnNlZCk7CisgICAgfQorCisgICAgLy8g
Tm90IHJlbGF0aXZlLCBjYW5vbmljYWxpemUgdGhlIGlucHV0LgorICAgIHJldHVybiBEb0Nhbm9u
aWNhbGl6ZShyZWxhdGl2ZSwgcmVsYXRpdmVMZW5ndGgsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1
dCwgb3VwdXRQYXJzZWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Ym9vbCBEb1JlcGxhY2VDb21wb25lbnRzKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
UkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM8Q2hhcmFjdGVyVHlwZT4mIHJlcGxhY2VtZW50
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29u
dmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRz
KiBvdXRwdXRQYXJzZWQpCit7CisgICAgLy8gSWYgdGhlIHNjaGVtZSBpcyBvdmVycmlkZGVuLCBq
dXN0IGRvIGEgc2ltcGxlIHN0cmluZyBzdWJzdGl0dXRpb24gYW5kCisgICAgLy8gcmVwYXJzZSB0
aGUgd2hvbGUgdGhpbmcuIFRoZXJlIGFyZSBsb3RzIG9mIGVkZ2UgY2FzZXMgdGhhdCB3ZSByZWFs
bHkgZG9uJ3QKKyAgICAvLyB3YW50IHRvIGRlYWwgd2l0aC4gTGlrZSB3aGF0IGhhcHBlbnMgaWYg
SSByZXBsYWNlICJodHRwOi8vZTo4MDgwL2ZvbyIKKyAgICAvLyB3aXRoIGEgZmlsZS4gRG9lcyBp
dCBiZWNvbWUgImZpbGU6Ly8vRTovODA4MC9mb28iIHdoZXJlIHRoZSBwb3J0IG51bWJlcgorICAg
IC8vIGJlY29tZXMgcGFydCBvZiB0aGUgcGF0aD8gUGFyc2luZyB0aGF0IHN0cmluZyBhcyBhIGZp
bGUgVVJMIHNheXMgInllcyIKKyAgICAvLyBidXQgYWxtb3N0IG5vIHNhbmUgcnVsZSBmb3IgZGVh
bGluZyB3aXRoIHRoZSBjb21wb25lbnRzIGluZGl2aWR1YWxseSB3b3VsZAorICAgIC8vIGNvbWUg
dXAgd2l0aCB0aGF0LgorICAgIC8vCisgICAgLy8gV2h5IGFsbG93IHRoZXNlIGNyYXp5IGNhc2Vz
IGF0IGFsbD8gUHJvZ3JhbWF0aWNhbGx5LCB0aGVyZSBpcyBhbG1vc3Qgbm8KKyAgICAvLyBjYXNl
IGZvciByZXBsYWNpbmcgdGhlIHNjaGVtZS4gVGhlIG1vc3QgY29tbW9uIGNhc2UgZm9yIGhpdHRp
bmcgdGhpcyBpcworICAgIC8vIGluIEpTIHdoZW4gYnVpbGRpbmcgdXAgYSBVUkwgdXNpbmcgdGhl
IGxvY2F0aW9uIG9iamVjdC4gSW4gdGhpcyBjYXNlLCB0aGUKKyAgICAvLyBKUyBjb2RlIGV4cGVj
dHMgdGhlIHN0cmluZyBzdWJzdGl0dXRpb24gYmVoYXZpb3I6CisgICAgLy8gICBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDA4L1dELWh0bWw1LTIwMDgwNjEwL3N0cnVjdHVyZWQuaHRtbCNjb21tb24z
CisgICAgaWYgKHJlcGxhY2VtZW50cy5Jc1NjaGVtZU92ZXJyaWRkZW4oKSkgeworICAgICAgICAv
LyBDYW5vbmljYWxpemUgdGhlIG5ldyBzY2hlbWUgc28gaXQgaXMgOC1iaXQgYW5kIGNhbiBiZSBj
b25jYXRlbmF0ZWQgd2l0aAorICAgICAgICAvLyB0aGUgZXhpc3Rpbmcgc3BlYy4KKyAgICAgICAg
UmF3VVJMQnVmZmVyPGNoYXIsIDEyOD4gc2NoZW1lX3JlcGxhY2VkOworICAgICAgICBVUkxDb21w
b25lbnQgc2NoZW1lUmVwbGFjZWRQYXJzZWQ7CisgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNh
bm9uaWNhbGl6ZVNjaGVtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VtZW50cy5zb3VyY2VzKCkuc2NoZW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmNvbXBvbmVudHMoKS5zY2hl
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWVf
cmVwbGFjZWQsICZzY2hlbWVSZXBsYWNlZFBhcnNlZCk7CisKKyAgICAgICAgLy8gV2UgY2FuIGFz
c3VtZSB0aGF0IHRoZSBpbnB1dCBpcyBjYW5vbmljYWxpemVkLCB3aGljaCBtZWFucyBpdCBhbHdh
eXMgaGFzCisgICAgICAgIC8vIGEgY29sb24gYWZ0ZXIgdGhlIHNjaGVtZSAob3Igd2hlcmUgdGhl
IHNjaGVtZSB3b3VsZCBiZSkuCisgICAgICAgIGludCBzcGVjQWZ0ZXJDb2xvbiA9IHBhcnNlZC5z
Y2hlbWUuaXNWYWxpZCgpID8gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDEKKyAgICAgICAgOiAxOwor
ICAgICAgICBpZiAoc3BlY0xlbmd0aCAtIHNwZWNBZnRlckNvbG9uID4gMCkgeworICAgICAgICAg
ICAgc2NoZW1lX3JlcGxhY2VkLmFwcGVuZCgmc3BlY1tzcGVjQWZ0ZXJDb2xvbl0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNMZW5ndGggLSBzcGVjQWZ0ZXJDb2xvbik7
CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBub3cgbmVlZCB0byBjb21wbGV0ZWx5IHJlLXBh
cnNlIHRoZSByZXN1bHRpbmcgc3RyaW5nIHNpbmNlIGl0cyBtZWFuaW5nCisgICAgICAgIC8vIG1h
eSBoYXZlIGNoYW5nZWQgd2l0aCB0aGUgZGlmZmVyZW50IHNjaGVtZS4KKyAgICAgICAgUmF3VVJM
QnVmZmVyPGNoYXIsIDEyOD4gcmVjYW5vbmljYWxpemVkOworICAgICAgICBVUkxTZWdtZW50cyBy
ZWNhbm9uaWNhbGl6ZWRQYXJzZWQ7CisgICAgICAgIERvQ2Fub25pY2FsaXplKHNjaGVtZV9yZXBs
YWNlZC5kYXRhKCksIHNjaGVtZV9yZXBsYWNlZC5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjYW5vbmlj
YWxpemVkLCAmcmVjYW5vbmljYWxpemVkUGFyc2VkKTsKKworICAgICAgICAvLyBSZWN1cnNlIHVz
aW5nIHRoZSB2ZXJzaW9uIHdpdGggdGhlIHNjaGVtZSBhbHJlYWR5IHJlcGxhY2VkLiBUaGlzIHdp
bGwgbm93CisgICAgICAgIC8vIHVzZSB0aGUgcmVwbGFjZW1lbnQgcnVsZXMgZm9yIHRoZSBuZXcg
c2NoZW1lLgorICAgICAgICAvLworICAgICAgICAvLyBXYXJuaW5nOiB0aGlzIGNvZGUgYXNzdW1l
cyB0aGF0IFJlcGxhY2VDb21wb25lbnRzIHdpbGwgcmUtY2hlY2sgYWxsCisgICAgICAgIC8vIGNv
bXBvbmVudHMgZm9yIHZhbGlkaXR5LiBUaGlzIGlzIGJlY2F1c2Ugd2UgY2FuJ3QgZmFpbCBpZiBE
b0Nhbm9uaWNhbGl6ZQorICAgICAgICAvLyBmYWlsZWQgYWJvdmUgc2luY2UgdGhlb3JldGljYWxs
eSB0aGUgdGhpbmcgbWFraW5nIGl0IGZhaWwgY291bGQgYmUKKyAgICAgICAgLy8gZ2V0dGluZyBy
ZXBsYWNlZCBoZXJlLiBJZiBSZXBsYWNlQ29tcG9uZW50cyBkaWRuJ3QgcmUtY2hlY2sgZXZlcnl0
aGluZywKKyAgICAgICAgLy8gd2Ugd291bGRuJ3Qga25vdyBpZiBzb21ldGhpbmcgKm5vdCogZ2V0
dGluZyByZXBsYWNlZCBpcyBhIHByb2JsZW0uCisgICAgICAgIC8vIElmIHRoZSBzY2hlbWUtc3Bl
Y2lmaWMgcmVwbGFjZXJzIGFyZSBtYWRlIG1vcmUgaW50ZWxsaWdlbnQgc28gdGhleSBkb24ndAor
ICAgICAgICAvLyByZS1jaGVjayBldmVyeXRoaW5nLCB3ZSBzaG91bGQgaW5zdGVhZCByZWNhbm9u
aWNhbGl6ZSB0aGUgd2hvbGUgdGhpbmcKKyAgICAgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsIHRvIGNo
ZWNrIHZhbGlkaXR5ICh0aGlzIGFzc3VtZXMgcmVwbGFjaW5nIHRoZSBzY2hlbWUgaXMKKyAgICAg
ICAgLy8gbXVjaCBtdWNoIGxlc3MgY29tbW9uIHRoYW4gb3RoZXIgdHlwZXMgb2YgcmVwbGFjZW1l
bnRzLCBsaWtlIGNsZWFyaW5nIHRoZQorICAgICAgICAvLyByZWYpLgorICAgICAgICBVUkxDYW5v
bmljYWxpemVyOjpSZXBsYWNlbWVudHM8Q2hhcmFjdGVyVHlwZT4gcmVwbGFjZW1lbnRzTm9TY2hl
bWUgPSByZXBsYWNlbWVudHM7CisgICAgICAgIHJlcGxhY2VtZW50c05vU2NoZW1lLlNldFNjaGVt
ZSgwLCBVUkxDb21wb25lbnQoKSk7CisgICAgICAgIHJldHVybiBEb1JlcGxhY2VDb21wb25lbnRz
KHJlY2Fub25pY2FsaXplZC5kYXRhKCksIHJlY2Fub25pY2FsaXplZC5sZW5ndGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjYW5vbmljYWxpemVkUGFyc2VkLCByZXBs
YWNlbWVudHNOb1NjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
cnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIElm
IHdlIGdldCBoZXJlLCB0aGVuIHdlIGtub3cgdGhlIHNjaGVtZSBkb2Vzbid0IG5lZWQgdG8gYmUg
cmVwbGFjZWQsIHNvIGNhbgorICAgIC8vIGp1c3Qga2V5IG9mZiB0aGUgc2NoZW1lIGluIHRoZSBz
cGVjIHRvIGtub3cgaG93IHRvIGRvIHRoZSByZXBsYWNlbWVudHMuCisgICAgaWYgKERvQ29tcGFy
ZVNjaGVtZUNvbXBvbmVudChzcGVjLCBwYXJzZWQuc2NoZW1lLCBrRmlsZVNjaGVtZSkpIHsKKyAg
ICAgICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VGaWxlVVJMKHNwZWMsIHBhcnNl
ZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0K
KyAgICBpZiAoRG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHBhcnNlZC5zY2hlbWUsIGtG
aWxlU3lzdGVtU2NoZW1lKSkgeworICAgICAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZUZpbGVTeXN0ZW1VUkwoc3BlYywgcGFyc2VkLCByZXBsYWNlbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVy
dGVyLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRQYXJzZWQpOworICAgIH0KKyAgICBpZiAoZG9Jc1N0YW5kYXJkKHNw
ZWMsIHBhcnNlZC5zY2hlbWUpKSB7CisgICAgICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpS
ZXBsYWNlU3RhbmRhcmRVUkwoc3BlYywgcGFyc2VkLCByZXBsYWNlbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRl
ciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKyAgICBpZiAoRG9Db21wYXJlU2NoZW1l
Q29tcG9uZW50KHNwZWMsIHBhcnNlZC5zY2hlbWUsIGtNYWlsdG9TY2hlbWUpKSB7CisgICAgICAg
IHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlTWFpbHRvVVJMKHNwZWMsIHBhcnNlZCwg
cmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQsIG91dHB1dFBhcnNlZCk7CisgICAgfQorCisgICAgLy8gRGVmYXVsdCBp
cyBhIHBhdGggVVJMLgorICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlUGF0aFVS
TChzcGVjLCBwYXJzZWQsIHJlcGxhY2VtZW50cywgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQor
Cit9IC8vIG5hbWVzcGFjZQorCitib29sIElzU3RhbmRhcmQoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBzY2hlbWUpCit7CisgICAgcmV0dXJuIGRvSXNTdGFuZGFyZChzcGVj
LCBzY2hlbWUpOworfQorCitib29sIElzU3RhbmRhcmQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgc2NoZW1lKQoreworICAgIHJldHVybiBkb0lzU3RhbmRhcmQoc3BlYywg
c2NoZW1lKTsKK30KKworYm9vbCBGaW5kQW5kQ29tcGFyZVNjaGVtZShjb25zdCBjaGFyKiBzdHIs
IGludCBzdHJMZW5ndGgsIGNvbnN0IGNoYXIqIGNvbXBhcmUsIFVSTENvbXBvbmVudCogZm91bmRT
Y2hlbWUpCit7CisgICAgcmV0dXJuIERvRmluZEFuZENvbXBhcmVTY2hlbWUoc3RyLCBzdHJMZW5n
dGgsIGNvbXBhcmUsIGZvdW5kU2NoZW1lKTsKK30KKworYm9vbCBGaW5kQW5kQ29tcGFyZVNjaGVt
ZShjb25zdCBVQ2hhciogc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyTGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21wYXJlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKQoreworICAg
IHJldHVybiBEb0ZpbmRBbmRDb21wYXJlU2NoZW1lKHN0ciwgc3RyTGVuZ3RoLCBjb21wYXJlLCBm
b3VuZFNjaGVtZSk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplKGNvbnN0IGNoYXIqIHNwZWMsCisg
ICAgICAgICAgICAgICAgICBpbnQgc3BlY0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgIFVSTENh
bm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgIFVS
TFNlZ21lbnRzKiBvdXB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemUoc3Bl
Yywgc3BlY0xlbmd0aCwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXB1dFBhcnNlZCk7Cit9
CisKK2Jvb2wgQ2Fub25pY2FsaXplKGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAg
ICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpD
aGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3Vw
dXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplKHNwZWMsIHNwZWNMZW5ndGgs
IGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQpOworfQorCitib29sIHJlc29s
dmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQ
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWxhdGl2ZSwgaW50IHJl
bGF0aXZlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hh
cnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyogb3VwdXRQYXJzZWQpCit7CisgICAg
cmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlKGJhc2VTcGVjLCBiYXNlUGFyc2VkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSwgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQp
OworfQorCitib29sIHJlc29sdmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3Qg
VVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hh
ciogcmVsYXRpdmUsIGludCByZWxhdGl2ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVS
TENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91
cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZShiYXNlU3BlYywgYmFz
ZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0aXZl
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBv
dXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKworYm9vbCBSZXBsYWNlQ29tcG9uZW50cyhjb25zdCBj
aGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlY0xlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzPGNoYXI+JiBy
ZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNo
YXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb1JlcGxhY2VDb21wb25lbnRzKHNw
ZWMsIHNwZWNMZW5ndGgsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30K
KworYm9vbCBSZXBsYWNlQ29tcG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc3BlY0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fu
b25pY2FsaXplcjo6UmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAg
ICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0
Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sK
KyAgICByZXR1cm4gRG9SZXBsYWNlQ29tcG9uZW50cyhzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWQs
IHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29u
dmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKKy8vIEZyb250LWVuZHMgZm9yIExv
d2VyQ2FzZUVxdWFsc0FTQ0lJLgorYm9vbCBMb3dlckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFy
KiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgcmV0dXJu
IERvTG93ZXJDYXNlRXF1YWxzQVNDSUkoYUJlZ2luLCBhRW5kLCBiKTsKK30KKworYm9vbCBMb3dl
ckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNv
bnN0IGNoYXIqIGJCZWdpbiwgY29uc3QgY2hhciogYkVuZCkKK3sKKyAgICB3aGlsZSAoYUJlZ2lu
ICE9IGFFbmQgJiYgYkJlZ2luICE9IGJFbmQgJiYgVG9Mb3dlckFTQ0lJKCphQmVnaW4pID09ICpi
QmVnaW4pIHsKKyAgICAgICAgYUJlZ2luKys7CisgICAgICAgIGJCZWdpbisrOworICAgIH0KKyAg
ICByZXR1cm4gYUJlZ2luID09IGFFbmQgJiYgYkJlZ2luID09IGJFbmQ7Cit9CisKK2Jvb2wgTG93
ZXJDYXNlRXF1YWxzQVNDSUkoY29uc3QgVUNoYXIqIGFCZWdpbiwgY29uc3QgVUNoYXIqIGFFbmQs
IGNvbnN0IGNoYXIqIGIpCit7CisgICAgcmV0dXJuIERvTG93ZXJDYXNlRXF1YWxzQVNDSUkoYUJl
Z2luLCBhRW5kLCBiKTsKK30KKwordm9pZCBEZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3Qg
Y2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCkKK3sKKyAg
ICBSYXdVUkxCdWZmZXI8Y2hhcj4gdW5lc2NhcGVkQ2hhcnM7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaW5wdXRbaV0gPT0gJyUnKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgICAgICAgICAgaWYgKFVSTENhbm9uaWNhbGl6
ZXI6OkRlY29kZUVzY2FwZWQoaW5wdXQsICZpLCBsZW5ndGgsICZjaCkpCisgICAgICAgICAgICAg
ICAgdW5lc2NhcGVkQ2hhcnMuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBjb3B5IHRoZSBwZXJjZW50IGxp
dGVyYWwuCisgICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhcnMuYXBwZW5kKCclJyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBSZWd1bGFyIG5vbi1l
c2NhcGVkIDgtYml0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIHVuZXNjYXBlZENoYXJzLmFwcGVu
ZChpbnB1dFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb252ZXJ0IHRoYXQgOC1i
aXQgdG8gVVRGLTE2LiBJdCdzIG5vdCBjbGVhciBJRSBkb2VzIHRoaXMgYXQgYWxsIHRvCisgICAg
Ly8gSmF2YVNjcmlwdCBVUkxzLCBidXQgRmlyZWZveCBhbmQgU2FmYXJpIGRvLgorICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdW5lc2NhcGVkQ2hhcnMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICB1
bnNpZ25lZCBjaGFyIHVjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHVuZXNjYXBlZENo
YXJzLmF0KGkpKTsKKyAgICAgICAgaWYgKHVjaCA8IDB4ODApIHsKKyAgICAgICAgICAgIC8vIE5v
bi1VVEYtOCwganVzdCBhcHBlbmQgZGlyZWN0bHkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
dWNoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIG5leHRfY2ggd2lsbCBwb2lu
dCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGRlY29kZWQKKyAgICAgICAgICAgIC8vIGNo
YXJhY3Rlci4KKyAgICAgICAgICAgIGludCBuZXh0Q2hhcmFjdGVyID0gaTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGNvZGVQb2ludDsKKyAgICAgICAgICAgIGlmIChVUkxDYW5vbmljYWxpemVyOjpy
ZWFkVVRGQ2hhcih1bmVzY2FwZWRDaGFycy5kYXRhKCksICZuZXh0Q2hhcmFjdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZENoYXJzLmxl
bmd0aCgpLCAmY29kZVBvaW50KSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkIFVURi04IGNo
YXJhY3RlciwgY29udmVydCB0byBVVEYtMTYuCisgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2Fs
aXplcjo6QXBwZW5kVVRGMTZWYWx1ZShjb2RlUG9pbnQsIG91dHB1dCk7CisgICAgICAgICAgICAg
ICAgaSA9IG5leHRDaGFyYWN0ZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2VxdWVuY2VzIHRoYXQgYXJlIG5vdCB2YWxpZCBVVEYt
OCwgd2Uga2VlcAorICAgICAgICAgICAgICAgIC8vIGludmFsaWQgY29kZSBwb2ludHMgYW5kIHBy
b21vdGUgdG8gVVRGLTE2LiBXZSBjb3B5IGFsbCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAg
Ly8gZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVk
IHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbmV4dENoYXJhY3Rlcikgewor
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KHVuZXNjYXBlZENoYXJzLmF0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPih1bmVzY2FwZWRDaGFycy5hdChpKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEVuY29kZVVSSUNvbXBvbmVudChjb25zdCBjaGFy
KiBpbnB1dCwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihpbnB1dFtpXSk7CisgICAgICAgIGlmIChVUkxD
aGFyYWN0ZXJUeXBlczo6aXNDb21wb25lbnRDaGFyKGMpKQorICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZChjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6YXBw
ZW5kVVJMRXNjYXBlZENoYXJhY3RlcihjLCBvdXRwdXQpOworICAgIH0KK30KKworYm9vbCBDb21w
YXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
Y29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCit7CisgICAgcmV0dXJuIERvQ29tcGFy
ZVNjaGVtZUNvbXBvbmVudChzcGVjLCBjb21wb25lbnQsIGNvbXBhcmVUbyk7Cit9CisKK2Jvb2wg
Q29tcGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBjb21wb25lbnQsIGNvbnN0IGNoYXIqIGNvbXBhcmVUbykKK3sKKyAgICByZXR1cm4gRG9D
b21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIGNvbXBvbmVudCwgY29tcGFyZVRvKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVVJMVXRpbGl0aWVzCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
VXRpbC5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAx
OWU1NjFlZWMxYWI1ZDRiODFkM2EzZDc1ZWZhZmU2M2Q5NGE0NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oCkBAIC0wLDAgKzEsMTMzIEBACisvLyBD
b3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgVVJMVXRpbF9oCisjZGVm
aW5lIFVSTFV0aWxfaAorCisjaW5jbHVkZSAiVVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJMQ2Fu
b24uaCIKKyNpbmNsdWRlICJVUkxQYXJzZS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNv
ZGUuaD4KKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
VVJMVXRpbGl0aWVzIHsKKworLy8gTG9jYXRlcyB0aGUgc2NoZW1lIGluIHRoZSBnaXZlbiBzdHJp
bmcgYW5kIHBsYWNlcyBpdCBpbnRvIHxmb3VuZFNjaGVtZXwsCisvLyB3aGljaCBtYXkgYmUgMCB0
byBpbmRpY2F0ZSB0aGUgY2FsbGVyIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIHJhbmdlLgorLy8K
Ky8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gfGNvbXBhcmV8IHNjaGVtZSBtYXRjaGVzIHRo
ZSBzY2hlbWUgZm91bmQgaW4gdGhlCisvLyBpbnB1dCAoaWYgYW55KS4gVGhlIHxjb21wYXJlfCBz
Y2hlbWUgbXVzdCBiZSBhIHZhbGlkIGNhbm9uaWNhbCBzY2hlbWUgb3IKKy8vIHRoZSByZXN1bHQg
b2YgdGhlIGNvbXBhcmlzb24gaXMgdW5kZWZpbmVkLgorYm9vbCBGaW5kQW5kQ29tcGFyZVNjaGVt
ZShjb25zdCBjaGFyKiBzdHIsIGludCBzdHJMZW5ndGgsIGNvbnN0IGNoYXIqIGNvbXBhcmUsIFVS
TENvbXBvbmVudCogZm91bmRTY2hlbWUpOworYm9vbCBGaW5kQW5kQ29tcGFyZVNjaGVtZShjb25z
dCBVQ2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21w
b25lbnQqIGZvdW5kU2NoZW1lKTsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJp
bmcgcmVwcmVzZW50cyBhIHN0YW5kYXJkIFVSTC4gVGhpcyBtZWFucyB0aGF0CisvLyBlaXRoZXIg
dGhlIHNjaGVtZSBpcyBpbiB0aGUgbGlzdCBvZiBrbm93biBzdGFuZGFyZCBzY2hlbWVzLgorYm9v
bCBJc1N0YW5kYXJkKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1l
KTsKK2Jvb2wgSXNTdGFuZGFyZChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzY2hlbWUpOworCisvLyBVUkwgbGlicmFyeSB3cmFwcGVycyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFBhcnNlcyB0aGUgZ2l2
ZW4gc3BlYyBhY2NvcmRpbmcgdG8gdGhlIGV4dHJhY3RlZCBzY2hlbWUgdHlwZS4gTm9ybWFsIHVz
ZXJzCisvLyBzaG91bGQgdXNlIHRoZSBVUkwgb2JqZWN0LCBhbHRob3VnaCB0aGlzIG1heSBiZSB1
c2VmdWwgaWYgcGVyZm9ybWFuY2UgaXMKKy8vIGNyaXRpY2FsIGFuZCB5b3UgZG9uJ3Qgd2FudCB0
byBkbyB0aGUgaGVhcCBhbGxvY2F0aW9uIGZvciB0aGUgc3RkOjpzdHJpbmcuCisvLworLy8gQXMg
d2l0aCB0aGUgVVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplKiBmdW5jdGlvbnMsIHRoZSBj
aGFyc2V0IGNvbnZlcnRlciBjYW4KKy8vIGJlIDAgdG8gdXNlIFVURi04IChpdCB3aWxsIGJlIGZh
c3RlciBpbiB0aGlzIGNhc2UpLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiBhIHZhbGlkIFVSTCB3
YXMgcHJvZHVjZWQsIGZhbHNlIGlmIG5vdC4gT24gZmFpbHVyZSwgdGhlCisvLyBvdXRwdXQgYW5k
IHBhcnNlZCBzdHJ1Y3R1cmVzIHdpbGwgc3RpbGwgYmUgZmlsbGVkIGFuZCB3aWxsIGJlIGNvbnNp
c3RlbnQsCisvLyBidXQgdGhleSB3aWxsIG5vdCByZXByZXNlbnQgYSBsb2FkYWJsZSBVUkwuCiti
b29sIENhbm9uaWNhbGl6ZShjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMQ2Fu
b25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciosCisgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3VwdXRQYXJzZWQpOworYm9vbCBDYW5vbmljYWxpemUo
Y29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxDYW5vbmljYWxpemVyOjpDaGFy
c2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNl
Z21lbnRzKiBvdXB1dFBhcnNlZCk7CisKKy8vIFJlc29sdmVzIGEgcG90ZW50aWFsbHkgcmVsYXRp
dmUgVVJMIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwYXJzZWQgYmFzZSBVUkwuCisvLyBUaGUgYmFz
ZSBNVVNUIGJlIHZhbGlkLiBUaGUgcmVzdWx0aW5nIGNhbm9uaWNhbCBVUkwgYW5kIHBhcnNlZCBp
bmZvcm1hdGlvbgorLy8gd2lsbCBiZSBwbGFjZWQgaW4gdG8gdGhlIGdpdmVuIG91dCB2YXJpYWJs
ZXMuCisvLworLy8gVGhlIHJlbGF0aXZlIG5lZWQgbm90IGJlIHJlbGF0aXZlLiBJZiB3ZSBkaXNj
b3ZlciB0aGF0IGl0J3MgYWJzb2x1dGUsIHRoaXMKKy8vIHdpbGwgcHJvZHVjZSBhIGNhbm9uaWNh
bCB2ZXJzaW9uIG9mIHRoYXQgVVJMLiBTZWUgQ2Fub25pY2FsaXplKCkgZm9yIG1vcmUKKy8vIGFi
b3V0IHRoZSBjaGFyc2V0Q29udmVydGVyLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgb3V0
cHV0IGlzIHZhbGlkLCBmYWxzZSBpZiB0aGUgaW5wdXQgY291bGQgbm90IHByb2R1Y2UKKy8vIGEg
dmFsaWQgVVJMLgorYm9vbCByZXNvbHZlUmVsYXRpdmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNv
bnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
IFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKTsKK2Jvb2wgcmVz
b2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgYmFz
ZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiByZWxhdGl2ZSwgaW50
IHJlbGF0aXZlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6
Q2hhcnNldENvbnZlcnRlciosCisgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
LCBVUkxTZWdtZW50cyogb3VwdXRQYXJzZWQpOworCisvLyBSZXBsYWNlcyBjb21wb25lbnRzIGlu
IHRoZSBnaXZlbiBWQUxJRCBpbnB1dCB1cmwuIFRoZSBuZXcgY2Fub25pY2FsIFVSTCBpbmZvCisv
LyBpcyB3cml0dGVuIHRvIG91dHB1dCBhbmQgb3V0cHV0UGFyc2VkLgorLy8KKy8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcmVzdWx0aW5nIFVSTCBpcyB2YWxpZC4KK2Jvb2wgUmVwbGFjZUNvbXBvbmVu
dHMoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJl
cGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6
ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgUmVwbGFjZUNvbXBvbmVu
dHMoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJl
cGxhY2VtZW50czxVQ2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxp
emVyOjpDaGFyc2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIFN0cmluZyBoZWxwZXIg
ZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworLy8gQ29tcGFyZSB0aGUgbG93ZXItY2FzZSBmb3JtIG9mIHRoZSBnaXZlbiBzdHJp
bmcgYWdhaW5zdCB0aGUgZ2l2ZW4gQVNDSUkKKy8vIHN0cmluZy4gVGhpcyBpcyB1c2VmdWwgZm9y
IGRvaW5nIGNoZWNraW5nIGlmIGFuIGlucHV0IHN0cmluZyBtYXRjaGVzIHNvbWUKKy8vIHRva2Vu
LCBhbmQgaXQgaXMgb3B0aW1pemVkIHRvIGF2b2lkIGludGVybWVkaWF0ZSBzdHJpbmcgY29waWVz
LgorLy8KKy8vIFRoZSB2ZXJzaW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHRoYXQgZG9uJ3QgdGFrZSBh
IGJFbmQgYXNzdW1lIHRoYXQgdGhlIGIKKy8vIHN0cmluZyBpcyB6ZXJvIHRlcm1pbmF0ZWQuCiti
b29sIExvd2VyQ2FzZUVxdWFsc0FTQ0lJKGNvbnN0IGNoYXIqIGFCZWdpbiwgY29uc3QgY2hhciog
YUVuZCwgY29uc3QgY2hhciogYik7Citib29sIExvd2VyQ2FzZUVxdWFsc0FTQ0lJKGNvbnN0IGNo
YXIqIGFCZWdpbiwgY29uc3QgY2hhciogYUVuZCwgY29uc3QgY2hhciogYkJlZ2luLCBjb25zdCBj
aGFyKiBiRW5kKTsKK2Jvb2wgTG93ZXJDYXNlRXF1YWxzQVNDSUkoY29uc3QgVUNoYXIqIGFCZWdp
biwgY29uc3QgVUNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGIpOworCisvLyBVbmVzY2FwZXMgdGhl
IGdpdmVuIHN0cmluZyB1c2luZyBVUkwgZXNjYXBpbmcgcnVsZXMuCit2b2lkIERlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyhjb25zdCBjaGFyKiBpbnB1dCwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPFVD
aGFyPiYpOworCisvLyBFc2NhcGVzIHRoZSBnaXZlbiBzdHJpbmcgYXMgZGVmaW5lZCBieSB0aGUg
SlMgbWV0aG9kIGVuY29kZVVSSUNvbXBvbmVudC4KKy8vIFNlZSBodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9lbmNvZGVV
UklDb21wb25lbnQKK3ZvaWQgRW5jb2RlVVJJQ29tcG9uZW50KGNvbnN0IGNoYXIqIGlucHV0LCBp
bnQgbGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mKTsKKworCit9IC8vIG5hbWVzcGFjZSBVUkxVdGls
aXRpZXMKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQorCisj
ZW5kaWYgLy8gVVJMVXRpbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFV0aWxJbnRlcm5hbC5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MTFiMWYwY2U3NmMzNjE0ZmNhNWVmMDI3NWE2MzIzOGRiZjA0ZThjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwu
aApAQCAtMCwwICsxLDU2IEBACisvLyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZm5kZWYgVVJMVXRpbEludGVybmFsX2gKKyNkZWZpbmUgVVJMVXRpbEludGVybmFsX2gKKwor
I2luY2x1ZGUgIlVSTFBhcnNlLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RG
IHsKKworbmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7CisKK2V4dGVybiBjb25zdCBjaGFyIGtGaWxl
U2NoZW1lW107CitleHRlcm4gY29uc3QgY2hhciBrRmlsZVN5c3RlbVNjaGVtZVtdOworZXh0ZXJu
IGNvbnN0IGNoYXIga01haWx0b1NjaGVtZVtdOworCisvLyBHaXZlbiBhIHN0cmluZyBhbmQgYSBy
YW5nZSBpbnNpZGUgdGhlIHN0cmluZywgY29tcGFyZXMgaXQgdG8gdGhlIGdpdmVuCisvLyBsb3dl
ci1jYXNlIHxjb21wYXJlVG98IGJ1ZmZlci4KK2Jvb2wgQ29tcGFyZVNjaGVtZUNvbXBvbmVudChj
b25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmLCBjb25zdCBjaGFyKiBjb21wYXJl
VG8pOworYm9vbCBDb21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmLCBjb25zdCBjaGFyKiBjb21wYXJlVG8pOworCit9IC8vIG5hbWVzcGFj
ZSBVUkxVdGlsaXRpZXMKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQorCisjZW5kaWYgLy8gVVJMVXRpbEludGVybmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
S1VSTFdURlVSTC5jcHAKaW5kZXggZjAzMGI4NzE5Y2FkNWU4NmViOTRkNTJhNmM4MzViYmVjZjU2
NDI1Ni4uN2ZiNGQ0YWEwZWM2MGRlZTkxOGY1NWU5ODRmNmZkNjQ3NTA0ZWRkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTFdURlVSTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vS1VSTFdURlVSTC5jcHAKQEAgLTcxLDkgKzcxLDE3IEBAIEtVUkw6OktV
UkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSkKICAgICAgICAg
bV91cmxJbXBsLT5tX2ludmFsaWRVcmxTdHJpbmcgPSByZWxhdGl2ZTsKIH0KIAotS1VSTDo6S1VS
TChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5nJikKK0tVUkw6
OktVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29uc3Qg
VGV4dEVuY29kaW5nJikKKyAgICA6IG1fdXJsSW1wbChhZG9wdFJlZihuZXcgS1VSTFdURlVSTElt
cGwoKSkpCiB7Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCisgICAg
Ly8gRklYTUU6IGhhbmRsZSB0aGUgZW5jb2RpbmcuCisgICAgaWYgKGJhc2VVUkwuaXNFbXB0eSgp
KQorICAgICAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKHJlbGF0aXZlKTsK
KyAgICBlbHNlCisgICAgICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwgPSBQYXJzZWRVUkwoYmFz
ZVVSTC5tX3VybEltcGwtPm1fcGFyc2VkVVJMLCByZWxhdGl2ZSk7CisKKyAgICBpZiAoIW1fdXJs
SW1wbC0+bV9wYXJzZWRVUkwuaXNWYWxpZCgpKQorICAgICAgICBtX3VybEltcGwtPm1faW52YWxp
ZFVybFN0cmluZyA9IHJlbGF0aXZlOwogfQogCiBLVVJMIEtVUkw6OmNvcHkoKSBjb25zdApAQCAt
MTQxLDcgKzE0OSwxMCBAQCBTdHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0CiAKIGJvb2wgS1VSTDo6
aGFzUG9ydCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gVGhpcyBz
aG91bGQgYmUgYW4gQVNTRVJULiBIVE1MQW5jaG9yRWxlbWVudDo6cG9ydCgpIGRvZXMgbm90IGNo
ZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgVVJMLgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gIW1fdXJsSW1wbC0+bV9wYXJzZWRVUkwucG9y
dCgpLmlzTnVsbCgpOwogfQogCkBAIC0xNjQsMjUgKzE3NSwzNyBAQCB1bnNpZ25lZCBzaG9ydCBL
VVJMOjpwb3J0KCkgY29uc3QKIAogU3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdAogewotICAgIEFT
U0VSVChpc1ZhbGlkKCkpOworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlQo
KSwgY2FsbCBzaXRlIHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KKyAgICBpZiAoIWlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIG1fdXJsSW1wbC0+
bV9wYXJzZWRVUkwudXNlcm5hbWUoKTsKIH0KIAogU3RyaW5nIEtVUkw6OnBhc3MoKSBjb25zdAog
ewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBh
biBBU1NFUlQoKSwgY2FsbCBzaXRlIHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KKyAgICBp
ZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIG1f
dXJsSW1wbC0+bV9wYXJzZWRVUkwucGFzc3dvcmQoKTsKIH0KIAogYm9vbCBLVVJMOjpoYXNQYXRo
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBz
aG91bGQgYmUgYW4gQVNTRVJUSU9OLCBjYWxsIHNpdGUgc2hvdWxkIG5vdCB1c2UgaW52YWxpZCBV
UkxzLgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBy
ZXR1cm4gIXBhdGgoKS5pc0VtcHR5KCk7CiB9CiAKIFN0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUg
YW4gQVNTRVJUSU9OLCBIVE1MQW5jaG9yRWxlbWVudCBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVS
THMuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAg
IHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnBhdGgoKTsKIH0KIApAQCAtMjAxLDcgKzIy
NCwxMCBAQCBTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQoKSBjb25zdAogCiBTdHJpbmcg
S1VSTDo6cXVlcnkoKSBjb25zdAogewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlRJT04sIEhUTUxBbmNob3JFbGVtZW50IHNob3Vs
ZCBub3QgdXNlIGludmFsaWQgVVJMcy4KKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwucXVlcnko
KTsKIH0KIApAQCAtMjIxLDYgKzI0Nyw3IEBAIFN0cmluZyBLVVJMOjpmcmFnbWVudElkZW50aWZp
ZXIoKSBjb25zdAogICAgIC8vIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIGlmICghaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4gbV91cmxJbXBsLT5tX3Bh
cnNlZFVSTC5mcmFnbWVudCgpOwogfQogCkBAIC0yMzQsNyArMjYxLDcgQEAgU3RyaW5nIEtVUkw6
OmJhc2VBc1N0cmluZygpIGNvbnN0CiAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzIGZ1bmN0aW9u
IGZyb20gS1VSTC4KIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBzdHJpbmcoKTsKIH0KIAogYm9vbCBLVVJMOjpw
cm90b2NvbElzKGNvbnN0IGNoYXIqIHRlc3RQcm90b2NvbCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165281</attachid>
            <date>2012-09-22 23:54:21 -0700</date>
            <delta_ts>2012-09-23 00:04:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97405-20120922235344.patch</filename>
            <type>text/plain</type>
            <size>411232</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkyODdjOTIzNTgwNzIzNmRkMDRkNmJl
MGRiZWFhNmRlOTMzNDM1ZjUuLjcxNTNkNTQ4NDRlNTMxOWE3YjY4NjhmN2I1OWRkZTM3MjhhNDA5
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjE2IEBACisyMDEyLTA5LTIyICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbnRlZ3JhdGUgbW9zdCBvZiBHb29nbGVV
UkwgaW4gV1RGVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzQwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYnJpbmdzIGFsbW9zdCBhbGwgb2YgdGhlIGltcGxlbWVudGF0YXRpb24g
b2YgR29vZ2xlLVVSTCBpbiBXVEZVUkwKKyAgICAgICAgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMu
CisKKyAgICAgICAgVGhlIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgY29kZSBhcmUgbW9zdGx5
OgorICAgICAgICAtQ29kZSBjbGVhbmluZy4KKyAgICAgICAgLVJlcGxhY2UgdXJsX3BhcnNlOjpQ
YXJzZWQgYnkgVVJMU2VnbWVudHMuCisgICAgICAgIC1SZXBsYWNlIHVybF9wYXJzZTo6Q29tcG9u
ZW50IGJ5IFVSTENvbXBvbmVudAorICAgICAgICAtTW9yZSBjb2RlIGNsZWFuaW5nLgorICAgICAg
ICAtQWRvcHQgVVJMQnVmZmVyIGFuZCBSYXdVUkxCdWZmZXIgaW5zdGVhZCBvZiB0aGUgQ2Fub25P
dXRwdXRUIGFuZCBSYXdDYW5vbk91dHB1dFQuCisgICAgICAgIC1Vc2UgVVJMQ2hhcmFjdGVyVHlw
ZXMgaW5zdGVhZCBvZiB0aGUgbGl0YW55IG9mIGNoYXJhY3RlcnMgZnVuY3Rpb25zLgorICAgICAg
ICAtU29tZSBtb3JlIGNvZGUgY2xlYW5pbmcuCisgICAgICAgIC1GaXggdGhlIHN0eWxlIHRvIG1h
dGNoIFdlYktpdCBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAtUmVuYW1lIHRoZSBmaWxl
cyB0byBtYXRjaCBXZWJLaXQgc3R5bGUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwOgorICAgICAg
ICAoV1RGOjpQYXJzZWRVUkw6OlBhcnNlZFVSTCk6CisgICAgICAgIChXVEY6OlBhcnNlZFVSTDo6
c2VnbWVudCk6CisgICAgICAgICogd3RmL3VybC9hcGkvUGFyc2VkVVJMLmg6CisgICAgICAgIChX
VEY6OlBhcnNlZFVSTDo6aXNWYWxpZCk6CisgICAgICAgICogd3RmL3VybC9zcmMvUmF3VVJMQnVm
ZmVyLmg6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub24uaDogQWRkZWQuCisgICAgICAg
IChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKENoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAg
ICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyOjpDaGFyc2V0Q29udmVy
dGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlcjo6
fkNoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAgICAoQ2Fub25Ib3N0SW5mbyk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9zdEluZm86OkNhbm9uSG9zdEluZm8pOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbkhvc3RJbmZvOjpJc0lQQWRkcmVzcyk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9zdEluZm86OkFkZHJlc3NM
ZW5ndGgpOgorICAgICAgICAoVVJMQ29tcG9uZW50U291cmNlKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6VVJMQ29tcG9uZW50U291cmNlOjpVUkxDb21wb25lbnRTb3VyY2UpOgor
ICAgICAgICAoUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
UmVwbGFjZW1lbnRzOjpSZXBsYWNlbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OlNldFNjaGVtZSk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6SXNTY2hlbWVPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRVc2VybmFtZSk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJVc2VybmFtZSk6CisgICAg
ICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNVc2VybmFtZU92ZXJy
aWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNl
dFBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRz
OjpDbGVhclBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFj
ZW1lbnRzOjpJc1Bhc3N3b3JkT3ZlcnJpZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0SG9zdCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJIb3N0KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZW1lbnRzOjpJc0hvc3RPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRQb3J0KToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpDbGVhclBvcnQpOgorICAgICAgICAoV1RG
OjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OklzUG9ydE92ZXJyaWRkZW4pOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNldFBhdGgpOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNsZWFyUGF0aCk6Cisg
ICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNQYXRoT3ZlcnJp
ZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0
UXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNs
ZWFyUXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6
OklzUXVlcnlPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzOjpTZXRSZWYpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBs
YWNlbWVudHM6OkNsZWFyUmVmKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzOjpJc1JlZk92ZXJyaWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OnNvdXJjZXMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OmNvbXBvbmVudHMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpSZXBsYWNlbWVudHM6OlBsYWNlaG9sZGVyKToKKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxDYW5vbkV0Yy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVy
OjpyZW1vdmVVUkxXaGl0ZXNwYWNlKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxTY2hlbWVDaGFyKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplU2NoZW1lKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplVXNlckluZm8pOgorICAgICAgICAo
V1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVQb3J0KToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUmVmKToKKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fu
b25pY2FsaXplcjo6Q2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTCk6CisgICAgICAgIChVUkxDYW5v
bmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZUZpbGVT
eXN0ZW1VUkwpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJM
KToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpGaWxlQ2Fub25pY2FsaXplUGF0aCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VGaWxlVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkhv
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2Fs
aXplSG9zdCk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplSG9zdFZlcmJvc2UpOgorICAgICAgICAqIHd0Zi91
cmwvc3JjL1VSTENhbm9uSUNVLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OklETlRvQVNDSUkpOgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlYWRVVEZDaGFyKToKKyAgICAgICAgKiB3dGYvdXJs
L3NyYy9VUkxDYW5vbklQLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNhbm9uaWNhbGl6ZUlQQWRkcmVzcyk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcDogQWRkZWQuCisgICAg
ICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
QXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OkNvbnZlcnRVVEY4VG9VVEYxNik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlNl
dHVwT3ZlcnJpZGVDb21wb25lbnRzKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
U2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6Ol9pdG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19z
KToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmg6IEFkZGVkLgorICAg
ICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OmhleENoYXJUb1ZhbHVlKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6aXNEb3Qp
OgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjphcHBlbmRVUkxFc2NhcGVkQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6ZG9BcHBlbmRVVEY4KToKKyAg
ICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kQ2hhclRvT3V0cHV0KToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGOFZhbHVlKToKKyAgICAgICAgKFdU
Rjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGOEVzY2FwZWRWYWx1ZSk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OkFwcGVuZFVURjE2VmFsdWUpOgorICAgICAgICAoV1RGOjpV
UkxDYW5vbmljYWxpemVyOjpBcHBlbmRVVEY4RXNjYXBlZENoYXIpOgorICAgICAgICAoV1RGOjpV
UkxDYW5vbmljYWxpemVyOjpJczhCaXRDaGFyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2Fs
aXplcjo6RGVjb2RlRXNjYXBlZCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6Ol9p
dG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19zKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6X3N0cnRvdWk2NCk6CisgICAgICAgICogd3RmL3Vy
bC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6Q2Fub25pY2FsaXplTWFpbHRvVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6
ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlTWFpbHRvVVJMKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUGF0aCk6CisgICAgICAgIChVUkxD
YW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2Fs
aXplUGFydGlhbFBhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5j
cHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVQ
YXRoVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxD
YW5vbmljYWxpemVyOjpSZXBsYWNlUGF0aFVSTCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJM
Q2Fub25RdWVyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpD
YW5vbmljYWxpemVRdWVyeSk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q29udmVydFVURjE2VG9RdWVyeUVuY29kaW5nKToKKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblJlbGF0aXZlLmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OmlzUmVsYXRpdmVVUkwpOgorICAgICAgICAoVVJMQ2Fu
b25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlc29sdmVSZWxh
dGl2ZVVSTCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25TdGRVUkwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6RGVmYXVsdFBvcnRGb3JTY2hlbWUp
OgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OkNhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZVN0YW5kYXJkVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxD
aGFyYWN0ZXJUeXBlcy5jcHA6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlw
ZXMuaDoKKyAgICAgICAgKFdURjo6VVJMQ2hhcmFjdGVyVHlwZXM6OmlzQ29tcG9uZW50Q2hhcik6
CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5cGVzOjppc0hleENoYXIpOgorICAgICAgICAo
V1RGOjpVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENo
YXJhY3RlclR5cGVzOjppc1F1ZXJ5Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5
cGVzOjppc0NoYXJhY3Rlck9mVHlwZSk6CisgICAgICAgIChVUkxDaGFyYWN0ZXJUeXBlcyk6Cisg
ICAgICAgICogd3RmL3VybC9zcmMvVVJMRXNjYXBlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxGaWxlLmg6IEFkZGVkLgorICAgICAgICAoVVJMUGFyc2VyKToKKyAgICAg
ICAgKFdURjo6VVJMUGFyc2VyOjppc1dpbmRvd3NEcml2ZVNlcGFyYXRvcik6CisgICAgICAgIChX
VEY6OlVSTFBhcnNlcjo6aXNXaW5kb3dzRHJpdmVMZXR0ZXIpOgorICAgICAgICAoV1RGOjpVUkxQ
YXJzZXI6OmZpbmROZXh0U2xhc2gpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdp
bldpbmRvd3NEcml2ZVNwZWMpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdpblVO
Q1BhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdFNjaGVtZSk6CisgICAgICAgIChVUkxQYXJzZXIp
OgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OklzQXV0aG9yaXR5VGVybWluYXRvcik6CisgICAg
ICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdEZpbGVOYW1lKToKKyAgICAgICAgKFdURjo6VVJM
UGFyc2VyOjpFeHRyYWN0UXVlcnlLZXlWYWx1ZSk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6
UGFyc2VBdXRob3JpdHkpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OlBhcnNlUG9ydCk6Cisg
ICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VTdGFuZGFyZFVSTCk6CisgICAgICAgIChXVEY6
OlVSTFBhcnNlcjo6UGFyc2VQYXRoVVJMKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpQYXJz
ZUZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OlBhcnNlTWFpbHRvVVJM
KToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpwYXJzZVBhdGhJbnRlcm5hbCk6CisgICAgICAg
IChXVEY6OlVSTFBhcnNlcjo6UGFyc2VBZnRlclNjaGVtZSk6CisgICAgICAgICogd3RmL3VybC9z
cmMvVVJMUGFyc2UuaDogQWRkZWQuCisgICAgICAgIChVUkxQYXJzZXIpOgorICAgICAgICAqIHd0
Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6VVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwpOgorICAgICAgICAoVVJMUGFyc2VyKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxQYXJzZUludGVybmFsLmg6IEFkZGVkLgorICAgICAg
ICAoVVJMUGFyc2VyKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjppc1VSTFNsYXNoKToKKyAg
ICAgICAgKFdURjo6VVJMUGFyc2VyOjpzaG91bGRUcmltRnJvbVVSTCk6CisgICAgICAgIChXVEY6
OlVSTFBhcnNlcjo6dHJpbVVSTCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6Y291bnRDb25z
ZWN1dGl2ZVNsYXNoZXMpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFF1ZXJ5Q2Fub25pY2FsaXplci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcDoKKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6VVJM
U2VnbWVudHMpOgorICAgICAgICAoVVJMU2VnbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdt
ZW50czo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6VVJMU2VnbWVudHM6OmlubmVyVVJMU2Vn
bWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6c2V0SW5uZXJVUkxTZWdtZW50cyk6
CisgICAgICAgIChXVEY6OlVSTFNlZ21lbnRzOjpjbGVhcklubmVyVVJMU2VnbWVudHMpOgorICAg
ICAgICAqIHd0Zi91cmwvc3JjL1VSTFV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFVSTFV0aWxp
dGllcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6SXNTdGFuZGFyZCk6CisgICAgICAg
IChXVEY6OlVSTFV0aWxpdGllczo6RmluZEFuZENvbXBhcmVTY2hlbWUpOgorICAgICAgICAoV1RG
OjpVUkxVdGlsaXRpZXM6OkNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGll
czo6cmVzb2x2ZVJlbGF0aXZlKToKKyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpSZXBsYWNl
Q29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6TG93ZXJDYXNlRXF1YWxz
QVNDSUkpOgorICAgICAgICAoV1RGOjpVUkxVdGlsaXRpZXM6OkRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6RW5jb2RlVVJJQ29tcG9uZW50KToK
KyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpDb21wYXJlU2NoZW1lQ29tcG9uZW50KToKKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsLmg6IEFkZGVkLgorICAgICAgICAoVVJMVXRpbGl0
aWVzKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmguCisgICAgICAgIChVUkxVdGls
aXRpZXMpOgorCiAyMDEyLTA5LTIxICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRp
Z2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVycm9yIG91dCBlYXJseSBpZiB3ZSBkb24ndCBoYXZl
IElDVSBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNTczMjYzY2NkODkzZjNkZDk4ZDljNmRkZmRk
OWM0ODlmMTM0NzcxLi5mZWZhYzg5M2RhOTJjMzJjYjE4MjMzOWU3NmE3ODM0Mzk2MDBmODRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDktMjIgIEJlbmphbWluIFBvdWxhaW4g
IDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIEludGVncmF0ZSBtb3N0IG9mIEdvb2ds
ZVVSTCBpbiBXVEZVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk3NDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTG9vc2VuIEtVUkxXVEZVUkwgdG8gYmUgYWJsZSB0byBydW4gbW9zdCB0ZXN0cyBpbiBE
ZWJ1Zy4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkxXVEZVUkwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S1VSTDo6S1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cGFz
cyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OktVUkw6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cXVlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6S1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OmZpbGVTeXN0ZW1QYXRoKToKKwogMjAxMi0wOS0yMiAgRG9taW5pYyBNYXp6b25pICA8ZG1h
enpvbmlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBWDogTGF5b3V0IHRlc3RzIHdvdWxkIGJlIGVh
c2llciB0byB3cml0ZSBpZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBjb3VsZCBmaW5kIGFuIGVs
ZW1lbnQgYnkgaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDUyYWY3YjljZWNjNWQxYTUyYWUwOGQ5N2I0MjJiM2U1YWFiZDAwNzYuLjgyZjcyMWMyMDgxODlh
YmIxZmE1ODk5YTZlZTRlMmFmM2YwMWVkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTIsNiArMTIsMjkgQEAKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGM0IwRjcxNUU0NUU0NjAw
MjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
MTQ3QjA4MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi87
IH07CisJCTI2RTZDMUVFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkV0Yy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFDRTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwICovOyB9OworCQkyNkU2QzFFRjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbkZpbGVzeXN0ZW11cmwuY3BwICovOyB9OworCQkyNkU2QzFGMDE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25GaWxldXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwu
Y3BwICovOyB9OworCQkyNkU2QzFGMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQx
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovOyB9OworCQkyNkU2QzFGMjE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uSUNVLmNwcCAqLzsgfTsKKwkJMjZFNkMxRjUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SW50ZXJuYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovOyB9
OworCQkyNkU2QzFGNjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDYxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJMjZFNkMxRjcxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAu
Y3BwICovOyB9OworCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMx
RDkxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCAqLzsgfTsKKwkJMjZFNkMx
RkExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25QYXRoLmNwcCAqLzsgfTsKKwkJMjZFNkMxRkIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TENhbm9uUGF0aHVybC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFEQjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAq
LzsgfTsKKwkJMjZFNkMxRkMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxREMxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwICovOyB9OworCQkyNkU2QzFGRDE2MDkw
MzczMDBDQTZBRjQgLyogVVJMQ2Fub25SZWxhdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFERDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25SZWxhdGl2ZS5jcHAgKi87IH07CisJCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vblN0ZFVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICov
OyB9OworCQkyNkU2QzIwMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUUxMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbi5oICovOyB9OworCQkyNkU2QzIwMzE2MDkwMzczMDBDQTZBRjQgLyog
VVJMRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZpbGUuaCAqLzsgfTsKKwkJMjZFNkMyMDQx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
UGFyc2VGaWxlLmNwcCAqLzsgfTsKKwkJMjZFNkMyMDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBh
cnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2RTZDMUU1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi87IH07
CisJCTI2RTZDMjA3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNzE2MDkwMzczMDBDQTZB
RjQgLyogVVJMUGFyc2UuY3BwICovOyB9OworCQkyNkU2QzIwODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUU4MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5oICovOyB9OworCQkyNkU2QzIw
QTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFQTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMVXRpbEludGVybmFsLmggKi87IH07CisJCTI2RTZDMjBDMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxVdGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNwcCAqLzsgfTsKKwkJMjZFNkMy
MEQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGls
LmggKi87IH07CiAJCTJDMDUzODU0MTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGlt
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkMwNTM4
NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmggKi87IH07CiAJCTJDQ0Q4
OTJBMTVDMDM5MDIwMDI4NTA4MyAvKiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0NEODkyOTE1QzAzOTAyMDAyODUw
ODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovOyB9OwogCQk0MzMwRjM4RjE1NzQ1QjA1MDBB
QUZBOEYgLyogVVJMU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzMzBGMzhFMTU3NDVCMDUwMEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICov
OyB9OwpAQCAtMjM3LDEwICsyNjAsNiBAQAogCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThBNDczNjYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVz
LmNwcCAqLzsgfTsKIAkJQThBNDc0NzUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM2NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCAqLzsgfTsKIAkJQThB
NDc0NzYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8q
IFVSTENvbXBvbmVudC5oICovOyB9OwotCQlBOEE0NzQ3NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
RXNjYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwICovOyB9OwotCQlBOEE0
NzQ3ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
RXNjYXBlLmggKi87IH07Ci0JCUE4QTQ3NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzZC
MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCAqLzsgfTsKLQkJQThBNDc0N0ExNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNkMxNTFBODI1QjAwNDEyM0ZGIC8qIFVS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oICovOyB9OwogCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYg
LyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczNkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCAqLzsg
fTsKIAkJQThBNDc0N0MxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2RTE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMU2VnbWVudHMuaCAqLzsgfTsKIAkJQThBNDc0N0QxNTFBODI1QjAwNDEyM0ZG
IC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi87IH07CkBA
IC0yNjAsNiArMjc5LDI5IEBACiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRl
ZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2F0dXJhdGVk
QXJpdGhtZXRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERD
Q0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkV0Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkV0
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNGMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRDAxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVy
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkZpbGV1
cmwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEMTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2RTZDMUQ1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSW50ZXJu
YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFENjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVUkxDYW5vbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
RTZDMUQ3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklQLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSVAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyNkU2QzFEOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25NYWlsdG8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25QYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVSTENhbm9uUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMURC
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGh1cmwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25QYXRodXJsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25RdWVyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uUmVsYXRpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25TdGRVUkwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fu
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMQ2Fub24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFy
c2VGaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNl
RmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUU1MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVSTFBhcnNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMjZFNkMxRTgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFBhcnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTI2RTZDMUVBMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsSW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMVXRpbEludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxV
dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFV0aWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFRDE2MDkwMzczMDBDQTZBRjQg
LyogVVJMVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxVdGlsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDMDUzODUzMTVCQzgxOTAwMEYyMUI5NiAv
KiBHcmVnb3JpYW5EYXRlVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmVnb3JpYW5EYXRlVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQ0NEODky
OTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JlZ29yaWFuRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzMwRjM4RTE1NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFN0cmluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTQsMTAgKzUzNiw2IEBACiAJCUE4QTQ3
MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDaGFyYWN0ZXJUeXBlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzY3MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFy
YWN0ZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxDaGFyYWN0
ZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM2ODE1MUE4MjVC
MDA0MTIzRkYgLyogVVJMQ29tcG9uZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVSTENvbXBvbmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2
OTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVSTEVzY2FwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRXNjYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4QTQ3MzZCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4QTQ3MzZDMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxRdWVyeUNhbm9uaWNhbGl6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUXVlcnlDYW5vbmljYWxp
emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzZEMTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVUkxTZWdtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3
MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVUkxTZWdtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEE0NzM2RjE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04NzMsMTUgKzkxMSwzNCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDczNjQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oICovLAogCQkJCUE4QTQ3MzY1MTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxCdWZmZXIuaCAqLywKKwkJCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub24uaCAqLywKKwkJCQkyNkU2QzFDRTE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25FdGMuY3BwICovLAorCQkJCTI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkZpbGVzeXN0ZW11cmwuY3BwICovLAorCQkJCTI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbkZpbGV1cmwuY3BwICovLAorCQkJCTI2RTZDMUQxMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbkhvc3QuY3BwICovLAorCQkJCTI2RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbklDVS5jcHAgKi8sCisJCQkJMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SW50ZXJuYWwuY3BwICovLAorCQkJCTI2RTZDMUQ2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkludGVybmFsLmggKi8sCisJCQkJMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SVAuY3BwICovLAorCQkJCTI2RTZDMUQ5MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbk1haWx0
by5jcHAgKi8sCisJCQkJMjZFNkMxREExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5j
cHAgKi8sCisJCQkJMjZFNkMxREIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5j
cHAgKi8sCisJCQkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3Bw
ICovLAorCQkJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNw
cCAqLywKKwkJCQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3Bw
ICovLAogCQkJCUE4QTQ3MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5j
cHAgKi8sCiAJCQkJQThBNDczNjcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVz
LmggKi8sCiAJCQkJQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oICov
LAotCQkJCUE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwICovLAotCQkJ
CUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCAqLywKLQkJCQlBOEE0NzM2
QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMUGFyc2VyLmggKi8sCi0JCQkJQThBNDczNkMxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oICovLAorCQkJCTI2RTZDMUUzMTYw
OTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggKi8sCisJCQkJMjZFNkMxRTcxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTFBhcnNlLmNwcCAqLywKKwkJCQkyNkU2QzFFODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCAqLywKKwkJCQkyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VG
aWxlLmNwcCAqLywKKwkJCQkyNkU2QzFFNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRl
cm5hbC5oICovLAogCQkJCUE4QTQ3MzZEMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5j
cHAgKi8sCiAJCQkJQThBNDczNkUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggKi8s
CisJCQkJMjZFNkMxRUMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuY3BwICovLAorCQkJCTI2
RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggKi8sCisJCQkJMjZFNkMxRUExNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRlcm5hbC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBz
cmM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA2Miw5ICsxMTE5LDYgQEAKIAkJ
CQlBOEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ3NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDc2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDb21wb25lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc4MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2Nh
cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDdBMTUxQTgyNUIwMDQxMjNGRiAvKiBV
UkxRdWVyeUNhbm9uaWNhbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdDMTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFVSTFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLApAQCAtMTA3Niw2ICsx
MTMwLDEzIEBACiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1v
cnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZDMUY2MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIw
MTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZD
MjAzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2
QzIwNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMjZFNkMyMDgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyNkU2QzIwQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyNkU2QzIwRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xMjE5LDEwICsxMjgwLDI1IEBACiAJCQkJQThBNDc0NEExNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NTgxNTFBODI1QjAwNDEyM0ZGIC8qIFR5cGVUcmFpdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMjZFNkMxRUUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRXRjLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTI2RTZDMUVGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRjAxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uRmlsZXVybC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGMTE2MDkw
MzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZD
MUYyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyNkU2QzFGNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyNkU2QzFGNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JUC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25N
YWlsdG8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRkExNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGQjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUZD
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTI2RTZDMUZEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblN0ZFVSTC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hh
cmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThBNDc0NzcxNTFBODI1QjAwNDEy
M0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzIwNDE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMjA3
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDMzMEYzOEYxNTc0NUIwNTAwQUFGQThGIC8qIFVSTFN0cmluZy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkyNkU2QzIwQzE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ2OTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9Q
YXJzZWRVUkwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwCmluZGV4
IDBiMTVmY2JjYTJkYzkzMjA0ZGY4YTFhNThhNzBlYWU1MDQ1OGFjYzQuLjM2YWFjNzI1ZTkwMmMx
ZTQ3ZGYwZGM0YTllZGYzZWQ4ZGYyMmQ3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9hcGkvUGFyc2VkVVJMLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVS
TC5jcHAKQEAgLTMzLDIzICszMywzOCBAQAogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmF3VVJMQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL1VS
TENvbXBvbmVudC5oPgotI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMVXRpbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewot
ICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3BlYyA9IFVSTFN0cmlu
ZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHVuc2lnbmVkIHVybFN0cmluZ0xlbmd0
aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAoIXVybFN0cmluZ0xlbmd0aCkKKyAgICAg
ICAgcmV0dXJuOyAvLyBGSVhNRTogd2Ugc2hvdWxkIEFTU0VSVCBvbiB0aGlzLCBidXQgcGVvcGxl
IHVzZSBLVVJMIGluY29ycmVjdGx5IHdpdGggUGFyc2VkVVJMU3RyaW5nVGFnIDooLgorCisgICAg
UmF3VVJMQnVmZmVyPGNoYXI+IG91dHB1dEJ1ZmZlcjsKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBj
b25zdCBDU3RyaW5nJiBiYXNlU3RyID0gYmFzZS51dGY4KCk7CisgICAgYm9vbCBpc1ZhbGlkID0g
ZmFsc2U7CisgICAgVVJMU2VnbWVudHMgYmFzZVNlZ21lbnRzOwogCi0gICAgLy8gRklYTUU6IGhh
bmRsZSBpbnZhbGlkIHVybFN0cmluZy4KLSAgICBtX3NwZWMgPSBVUkxTdHJpbmcodXJsU3RyaW5n
KTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHRha2Ugc2hvcnRjdXRzIGhlcmUhIFdlIGRvIG5v
dCBoYXZlIHRvIHJlc29sdmUgdGhlIHJlbGF0aXZlIHBhcnQuCiAgICAgaWYgKHVybFN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgVVJMUGFyc2VyPExDaGFyPjo6cGFyc2VTdGFuZGFyZFVSTCh1cmxT
dHJpbmcuY2hhcmFjdGVyczgoKSwgdXJsU3RyaW5nLmxlbmd0aCgpLCBtX3NlZ21lbnRzKTsKKyAg
ICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0
YSgpLCBiYXNlU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmxTdHJpbmcuY2hhcmFj
dGVyczgoKSksIHVybFN0cmluZ0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGNoYXJzZXRDb252ZXJ0ZXIgKi8gMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2Vn
bWVudHMpOwogICAgIGVsc2UKLSAgICAgICAgVVJMUGFyc2VyPFVDaGFyPjo6cGFyc2VTdGFuZGFy
ZFVSTCh1cmxTdHJpbmcuY2hhcmFjdGVyczE2KCksIHVybFN0cmluZy5sZW5ndGgoKSwgbV9zZWdt
ZW50cyk7CisgICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShi
YXNlU3RyLmRhdGEoKSwgYmFzZVNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nLmNoYXJhY3RlcnMxNigpLCB1cmxTdHJpbmdM
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKworICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgQVNTRVJUIG9uIGlzVmFsaWQsIGJ1dCBwZW9wbGUgdXNlIEtVUkwgaW5j
b3JyZWN0bHkgd2l0aCBQYXJzZWRVUkxTdHJpbmdUYWcgOiguCisgICAgaWYgKGlzVmFsaWQpCisg
ICAgICAgIG1fc3BlYyA9IFVSTFN0cmluZyhTdHJpbmcob3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0
cHV0QnVmZmVyLmxlbmd0aCgpKSk7CiB9CiAKIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFBh
cnNlZFVSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSkKQEAgLTU3LDM2ICs3MiwyOSBA
QCBQYXJzZWRVUkw6OlBhcnNlZFVSTChjb25zdCBQYXJzZWRVUkwmIGJhc2UsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmUpCiAgICAgaWYgKCFiYXNlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHJlbGF0aXZlLmlzRW1wdHkoKSkgeworICAgIHVuc2lnbmVkIHJlbGF0aXZlTGVu
Z3RoID0gcmVsYXRpdmUubGVuZ3RoKCk7CisgICAgaWYgKCFyZWxhdGl2ZUxlbmd0aCkgewogICAg
ICAgICAqdGhpcyA9IGJhc2Uud2l0aG91dEZyYWdtZW50KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogaGFuZGxlIGludmFsaWQgVVJMcy4KLSAgICBjb25zdCBTdHJp
bmcmIGJhc2VTdHJpbmcgPSBiYXNlLm1fc3BlYy5zdHJpbmcoKTsKLSAgICBSYXdVUkxCdWZmZXI8
Y2hhciwgMTAyND4gb3V0cHV0QnVmZmVyOwotICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkgewot
ICAgICAgICBpZiAoYmFzZVN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2Vy
PExDaGFyLCBMQ2hhcj46OnBhcnNlVVJMV2l0aEJhc2UocmVsYXRpdmUuY2hhcmFjdGVyczgoKSwg
cmVsYXRpdmUubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nLmNoYXJhY3RlcnM4KCksIGJhc2VTdHJpbmcubGVu
Z3RoKCksIGJhc2UubV9zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXI8TENoYXIsIFVDaGFyPjo6cGFyc2VVUkxX
aXRoQmFzZShyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpLCByZWxhdGl2ZS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJp
bmcuY2hhcmFjdGVyczE2KCksIGJhc2VTdHJpbmcubGVuZ3RoKCksIGJhc2UubV9zZWdtZW50cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoYmFzZVN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2VyPFVDaGFy
LCBMQ2hhcj46OnBhcnNlVVJMV2l0aEJhc2UocmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0
aXZlLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBiYXNlU3RyaW5nLmxlbmd0aCgp
LCBiYXNlLm1fc2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsIG1fc2VnbWVudHMpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgVVJMUGFyc2VyPFVDaGFyLCBVQ2hhcj46OnBhcnNlVVJMV2l0aEJh
c2UocmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZlLmxlbmd0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgYmFzZVN0cmluZy5sZW5ndGgoKSwgYmFzZS5tX3NlZ21lbnRzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
QnVmZmVyLCBtX3NlZ21lbnRzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3NwZWMgPSBVUkxT
dHJpbmcoU3RyaW5nKG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5sZW5ndGgoKSkp
OworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiBvdXRwdXRCdWZmZXI7CisgICAgY29uc3QgQ1N0cmlu
ZyYgYmFzZVN0ciA9IGJhc2UubV9zcGVjLm1fc3RyaW5nLnV0ZjgoKTsKKyAgICBib29sIGlzVmFs
aWQgPSBmYWxzZTsKKworICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkKKyAgICAgICAgaXNWYWxp
ZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlLm1f
c2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpKSwg
cmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKyAg
ICBlbHNlCisgICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShi
YXNlU3RyLmRhdGEoKSwgYmFzZS5tX3NlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZl
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogY2hhcnNldENvbnZlcnRlciAqLyAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7CisKKyAgICBpZiAo
aXNWYWxpZCkKKyAgICAgICAgbV9zcGVjID0gVVJMU3RyaW5nKFN0cmluZyhvdXRwdXRCdWZmZXIu
ZGF0YSgpLCBvdXRwdXRCdWZmZXIubGVuZ3RoKCkpKTsKIH0KIAogUGFyc2VkVVJMIFBhcnNlZFVS
TDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKQEAgLTE3MSw3ICsxNzksOSBAQCBTdHJpbmcgUGFyc2Vk
VVJMOjpzZWdtZW50KGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50KSBjb25zdAogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBTdHJpbmcgc2VnbWVudCA9IG1fc3BlYy5zdHJpbmco
KS5zdWJzdHJpbmcoY29tcG9uZW50LmJlZ2luKCksIGNvbXBvbmVudC5sZW5ndGgoKSk7Ci0gICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghc2VnbWVudC5pc0VtcHR5KCksICJBIHZhbGlkIFVSTCBjb21w
b25lbnQgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKTsKKworICAgIC8vIEZJWE1FOiBHb29nbGVVUkwg
Y3JlYXRlIGVtcHR5IHNlZ21lbnRzLiBUaGlzIGhhcHBlbiBmb3IgdGhlIGZyYWdtZW50IGZvciB0
aGUgdGVzdCBmYXN0L3VybC9zZWdtZW50cy5odG1sCisvLyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCFzZWdtZW50LmlzRW1wdHkoKSwgIkEgdmFsaWQgVVJMIGNvbXBvbmVudCBzaG91bGQgbm90IGJl
IGVtcHR5LiIpOwogICAgIHJldHVybiBzZWdtZW50OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5oIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJz
ZWRVUkwuaAppbmRleCAwNjAzY2YxMTY3Y2Y4YjkwNGFhOGM2YWQ3NjIzNzBhNzdhZTUxNGNjLi4w
MTRlMjkzNjdhODAyY2QwODI1Y2JiNmY2ZjdlNzIxMDM5M2VjYjA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9h
cGkvUGFyc2VkVVJMLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIFBhcnNlZFVSTCBpc29sYXRlZENvcHkoKSBjb25zdDsKIAotICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3NwZWMuc3RyaW5nKCkuaXNFbXB0eSgpOyB9CisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fc3BlYy5zdHJpbmcoKS5pc051bGwoKTsg
fQogCiAgICAgLy8gUmV0dXJuIGEgVVJMIGNvbXBvbmVudCBvciBhIG51bGwgU3RyaW5nIGlmIHRo
ZSBjb21wb25lbnQgaXMgdW5kZWZpbmVkIGZvciB0aGUgVVJMLgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgc2NoZW1lKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1Jhd1VSTEJ1ZmZlci5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9SYXdVUkxCdWZm
ZXIuaAppbmRleCA1OWE3ZjE4YWY0NWIyOTNjZGI1MzQyNGQ1MDVlMTRmZDc5OGYyOTI5Li44ZjAw
ZjUwOTZlYjIyZGU4ZjI5ZjM4ZmJhNmNiZGJiYzZhMTdlYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1Jhd1VSTEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvUmF3VVJMQnVmZmVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBVU0UoV1RGVVJMKQogCiAj
aW5jbHVkZSAiVVJMQnVmZmVyLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmggYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIzNGYxMDViNzk3
MmQ3YmJkNDZiMzhhOWE4MTRiMzIyY2ZmYzRkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub24uaApAQCAtMCwwICsxLDY1OSBAQAorLy8gQ29weXJpZ2h0
IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorI2lmbmRlZiBVUkxDYW5vbl9oCisjZGVmaW5lIFVSTENh
bm9uX2gKKworI2luY2x1ZGUgIlVSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTFBhcnNlLmgiCisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCisj
aWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyIHsKKworLy8gQ2hhcmFjdGVyIHNldCBjb252ZXJ0ZXIgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIENvbnZlcnRzIHF1ZXJ5
IHN0cmluZ3MgaW50byBhIGN1c3RvbSBlbmNvZGluZy4gVGhlIGVtYmVkZGVyIGNhbiBzdXBwbHkg
YW4KKy8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgdG8gaW50ZXJmYWNlIHdpdGggdGhl
aXIgb3duIGNoYXJhY3RlciBzZXQKKy8vIGNvbnZlcnNpb24gbGlicmFyaWVzLgorLy8KKy8vIEVt
YmVkZGVycyB3aWxsIHdhbnQgdG8gc2VlIHRoZSB1bml0IHRlc3QgZm9yIHRoZSBJQ1UgdmVyc2lv
bi4KKworY2xhc3MgQ2hhcnNldENvbnZlcnRlciB7CitwdWJsaWM6CisgICAgQ2hhcnNldENvbnZl
cnRlcigpIHsgfQorICAgIHZpcnR1YWwgfkNoYXJzZXRDb252ZXJ0ZXIoKSB7IH0KKworICAgIC8v
IENvbnZlcnRzIHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcgZnJvbSBVVEYtMTYgdG8gd2hhdGV2ZXIg
b3V0cHV0IGZvcm1hdCB0aGUKKyAgICAvLyBjb252ZXJ0ZXIgc3VwcG9ydHMuIFRoaXMgaXMgdXNl
ZCBvbmx5IGZvciB0aGUgcXVlcnkgZW5jb2RpbmcgY29udmVyc2lvbiwKKyAgICAvLyB3aGljaCBk
b2VzIG5vdCBmYWlsLiBJbnN0ZWFkLCB0aGUgY29udmVydGVyIHNob3VsZCBpbnNlcnQgImludmFs
aWQKKyAgICAvLyBjaGFyYWN0ZXIiIGNoYXJhY3RlcnMgaW4gdGhlIG91dHB1dCBmb3IgaW52YWxp
ZCBzZXF1ZW5jZXMsIGFuZCBkbyB0aGUKKyAgICAvLyBiZXN0IGl0IGNhbi4KKyAgICAvLworICAg
IC8vIElmIHRoZSBpbnB1dCBjb250YWlucyBhIGNoYXJhY3RlciBub3QgcmVwcmVzZW50YWJsZSBp
biB0aGUgb3V0cHV0CisgICAgLy8gY2hhcmFjdGVyIHNldCwgdGhlIGNvbnZlcnRlciBzaG91bGQg
YXBwZW5kIHRoZSBIVE1MIGVudGl0eSBzZXF1ZW5jZSBpbgorICAgIC8vIGRlY2ltYWwsIChzdWNo
IGFzICImIzIwMzIwOyIpIHdpdGggZXNjYXBpbmcgb2YgdGhlIGFtcGVyc2FuZCwgbnVtYmVyCisg
ICAgLy8gc2lnbiwgYW5kIHNlbWljb2xvbiAoaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUgaXQgd291
bGQgYmUKKyAgICAvLyAiJTI2JTIzMjAzMjAlM0IiKS4gVGhpcyBydWxlIGlzIGJhc2VkIG9uIHdo
YXQgSUUgZG9lcyBpbiB0aGlzIHNpdHVhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgQ29udmVydEZy
b21VVEYxNihjb25zdCBVQ2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQpID0gMDsKK307CisKKy8vIFdoaXRlc3BhY2UgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gU2Vh
cmNoZXMgZm9yIHdoaXRlc3BhY2UgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtaWRk
bGUgb2YgVVJMcywgYW5kCisvLyByZW1vdmVzIGl0LiBSZW1vdmVkIHdoaXRlc3BhY2UgYXJlIHRh
YnMgYW5kIG5ld2xpbmVzLCBidXQgTk9UIHNwYWNlcy4gU3BhY2VzCisvLyBhcmUgcHJlc2VydmVk
LCB3aGljaCBpcyB3aGF0IG1vc3QgYnJvd3NlcnMgZG8uIEEgcG9pbnRlciB0byB0aGUgb3V0cHV0
IHdpbGwKKy8vIGJlIHJldHVybmVkLCBhbmQgdGhlIGxlbmd0aCBvZiB0aGF0IG91dHB1dCB3aWxs
IGJlIGluIHxvdXRwdXRMZW5ndGh8LgorLy8KKy8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZv
cmUgcGFyc2luZyBpZiB3aGl0ZXNwYWNlIHJlbW92YWwgaXMgZGVzaXJlZCAod2hpY2gKKy8vIGl0
IG5vcm1hbGx5IGlzIHdoZW4geW91IGFyZSBjYW5vbmljYWxpemluZykuCisvLworLy8gSWYgbm8g
d2hpdGVzcGFjZSBpcyByZW1vdmVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHVzZSB0aGUgYnVm
ZmVyIGFuZCB3aWxsCisvLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbnB1dCwgdG8gYXZvaWQg
dGhlIGV4dHJhIGNvcHkuIElmIG1vZGlmaWNhdGlvbiBpcworLy8gcmVxdWlyZWQsIHRoZSBnaXZl
biB8YnVmZmVyfCB3aWxsIGJlIHVzZWQgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwKKy8v
IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4KKy8vCisvLyBUaGVyZWZvcmUs
IGNhbGxlcnMgc2hvdWxkIG5vdCB1c2UgdGhlIGJ1ZmZlciwgc2luY2UgaXQgbWF5IGFjdHVhbGwg
YmUgZW1wdHksCisvLyB1c2UgdGhlIGNvbXB1dGVkIHBvaW50ZXIgYW5kIHxvdXRwdXRMZW5ndGh8
IGluc3RlYWQuCitjb25zdCBjaGFyKiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IGNoYXIqIGlu
cHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIGludCogb3V0cHV0TGVuZ3Ro
KTsKK2NvbnN0IFVDaGFyKiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IFVDaGFyKiBpbnB1dCwg
aW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiwgaW50KiBvdXRwdXRMZW5ndGgpOwor
CisvLyBJRE4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENvbnZlcnRzIHRoZSBVbmljb2RlIGlucHV0
IHJlcHJlc2VudGluZyBhIGhvc3RuYW1lIHRvIEFTQ0lJIHVzaW5nIElETiBydWxlcy4KKy8vIFRo
ZSBvdXRwdXQgbXVzdCBmYWxsIGluIHRoZSBBU0NJSSByYW5nZSwgYnV0IHdpbGwgYmUgZW5jb2Rl
ZCBpbiBVVEYtMTYuCisvLworLy8gT24gc3VjY2VzcywgdGhlIG91dHB1dCB3aWxsIGJlIGZpbGxl
ZCB3aXRoIHRoZSBBU0NJSSBob3N0IG5hbWUgYW5kIGl0IHdpbGwKKy8vIHJldHVybiB0cnVlLiBV
bmxpa2UgbW9zdCBvdGhlciBjYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucywgdGhpcyBhc3N1bWVz
IHRoYXQKKy8vIHRoZSBvdXRwdXQgaXMgZW1wdHkuIFRoZSBiZWdpbm5pbmcgb2YgdGhlIGhvc3Qg
d2lsbCBiZSBhdCBvZmZzZXQgMCwgYW5kCisvLyB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgd2ls
bCBiZSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbmV3IGhvc3QgbmFtZS4KKy8vCisvLyBPbiBl
cnJvciwgcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpbiB0aGlzIGNhc2UgaXMgdW5kZWZpbmVk
LgorYm9vbCBJRE5Ub0FTQ0lJKGNvbnN0IFVDaGFyKiBzcmMsIGludCBzb3VyY2VMZW5ndGgsIFVS
TEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCk7CisKKy8vIFBpZWNlLWJ5LXBpZWNlIGNhbm9uaWNhbGl6
ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisv
LyBUaGVzZSBpbmRpdmlkdWFsIGNhbm9uaWNhbGl6ZXJzIGFwcGVuZCB0aGUgY2Fub25pY2FsaXpl
ZCB2ZXJzaW9ucyBvZiB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgVVJMIGNvbXBvbmVudCB0byB0aGUg
Z2l2ZW4gc3RkOjpzdHJpbmcuIFRoZSBzcGVjIGFuZCB0aGUKKy8vIHByZXZpb3VzbHktaWRlbnRp
ZmllZCByYW5nZSBvZiB0aGF0IGNvbXBvbmVudCBhcmUgdGhlIGlucHV0LiBUaGUgcmFuZ2Ugb2YK
Ky8vIHRoZSBjYW5vbmljYWxpemVkIGNvbXBvbmVudCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIG91
dHB1dCBjb21wb25lbnQuCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIGFsbCBhcHBlbmQgdG8gdGhl
IG91dHB1dCBzbyB0aGV5IGNhbiBiZSBjaGFpbmVkLiBNYWtlIHN1cmUKKy8vIHRoZSBvdXRwdXQg
aXMgZW1wdHkgd2hlbiB5b3Ugc3RhcnQuCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIHJldHVybnMg
Ym9vbGVhbiB2YWx1ZXMgaW5kaWNhdGluZyBzdWNjZXNzLiBPbiBmYWlsdXJlLCB0aGV5CisvLyB3
aWxsIGF0dGVtcHQgdG8gd3JpdGUgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gdGhlIG91dHB1dCBz
byB0aGF0LCBpZgorLy8gZGlzcGxheWVkIHRvIHRoZSB1c2VyLCB0aGV5IHdpbGwgcmVjb2duaXNl
IGl0IGFzIHNvbWV0aGluZyB0aGF0J3MgbWVzc2VkIHVwLgorLy8gTm90aGluZyBtb3JlIHNob3Vs
ZCBldmVyIGJlIGRvbmUgd2l0aCB0aGVzZSBpbnZhbGlkIFVSTHMsIGhvd2V2ZXIuCisKKy8vIFNj
aGVtZTogQXBwZW5kcyB0aGUgc2NoZW1lIGFuZCBjb2xvbiB0byB0aGUgVVJMLiBUaGUgb3V0cHV0
IGNvbXBvbmVudCB3aWxsCisvLyBpbmRpY2F0ZSB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB1cCB0
byBidXQgbm90IGluY2x1ZGluZyB0aGUgY29sb24uCisvLworLy8gQ2Fub25pY2FsIFVSTHMgYWx3
YXlzIGhhdmUgYSBzY2hlbWUuIElmIHRoZSBzY2hlbWUgaXMgbm90IHByZXNlbnQgaW4gdGhlCisv
LyBpbnB1dCwgdGhpcyB3aWxsIGp1c3Qgd3JpdGUgdGhlIGNvbG9uIHRvIGluZGljYXRlIGFuIGVt
cHR5IHNjaGVtZS4gRG9lcyBub3QKKy8vIGFwcGVuZCBzbGFzaGVzIHdoaWNoIHdpbGwgYmUgbmVl
ZGVkIGJlZm9yZSBhbnkgYXV0aG9yaXR5IGNvbXBvbmVudHMgZm9yIG1vc3QKKy8vIFVSTHMuCisv
LworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCitib29sIENh
bm9uaWNhbGl6ZVNjaGVtZShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNj
aGVtZSwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXB1dFNjaGVtZSk7Citib29s
IENhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3VwdXRTY2hlbWUpOwor
CisvLyBVc2VyIGluZm86IHVzZXJuYW1lL3Bhc3N3b3JkLiBJZiBwcmVzZW50LCB0aGlzIHdpbGwg
YWRkIHRoZSBkZWxpbWl0ZXJzIHNvCisvLyB0aGUgb3V0cHV0IHdpbGwgYmUgIjx1c2VybmFtZT46
PHBhc3N3b3JkPkAiIG9yICI8dXNlcm5hbWU+QCIuIEVtcHR5CisvLyB1c2VybmFtZS9wYXNzd29y
ZCBwYWlycywgb3IgZW1wdHkgcGFzc3dvcmRzLCB3aWxsIGdldCBjb252ZXJ0ZWQgdG8KKy8vIG5v
bmV4aXN0YW50IGluIHRoZSBjYW5vbmljYWwgdmVyc2lvbi4KKy8vCisvLyBUaGUgY29tcG9uZW50
cyBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZWZlciB0byByYW5nZXMgaW4gdGhlCisv
LyByZXNwZWN0aXZlIHNvdXJjZSBzdHJpbmdzLiBVc3VhbGx5LCB0aGVzZSB3aWxsIGJlIHRoZSBz
YW1lIHN0cmluZywgd2hpY2gKKy8vIGlzIGxlZ2FsIGFzIGxvbmcgYXMgdGhlIHR3byBjb21wb25l
bnRzIGRvbid0IG92ZXJsYXAuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRG
LTggZW5jb2RpbmcuCitib29sIENhbm9uaWNhbGl6ZVVzZXJJbmZvKGNvbnN0IGNoYXIqIHVzZXJu
YW1lU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBjb25zdCBjaGFyKiBwYXNz
d29yZFNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRVc2VybmFt
ZSwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXNzd29yZCk7Citib29sIENhbm9uaWNhbGl6ZVVzZXJJ
bmZvKGNvbnN0IFVDaGFyKiB1c2VybmFtZVNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiB1c2Vy
bmFtZSwgY29uc3QgVUNoYXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHBh
c3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxD
b21wb25lbnQqIG91dHB1dFVzZXJuYW1lLCBVUkxDb21wb25lbnQqIG91dHB1dFBhc3N3b3JkKTsK
KworCisvLyBUaGlzIHN0cnVjdHVyZSBob2xkcyBkZXRhaWxlZCBzdGF0ZSBleHBvcnRlZCBmcm9t
IHRoZSBJUC9Ib3N0IGNhbm9uaWNhbGl6ZXJzLgorLy8gQWRkaXRpb25hbCBmaWVsZHMgbWF5IGJl
IGFkZGVkIGFzIGNhbGxlcnMgcmVxdWlyZSB0aGVtLgorc3RydWN0IENhbm9uSG9zdEluZm8gewor
CisgICAgQ2Fub25Ib3N0SW5mbygpCisgICAgICAgIDogZmFtaWx5KE5FVVRSQUwpCisgICAgICAg
ICwgaXB2NENvbXBvbmVudHNDb3VudCgwKQorICAgICAgICAsIG91cHV0SG9zdCgpCisgICAgewor
ICAgIH0KKworICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHRlc3QgaWYgZmFtaWx5IGlz
IGFuIElQIGFkZHJlc3MuCisgICAgYm9vbCBJc0lQQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIGZh
bWlseSA9PSBJUFY0IHx8IGZhbWlseSA9PSBJUFY2OyB9CisKKyAgICAvLyBUaGlzIGZpZWxkIHN1
bW1hcml6ZXMgaG93IHRoZSBpbnB1dCB3YXMgY2xhc3NpZmllZCBieSB0aGUgY2Fub25pY2FsaXpl
ci4KKyAgICBlbnVtIEZhbWlseSB7CisgICAgICAgIC8vIC0gRG9lc24ndCByZXNlbWJsZSBhbiBJ
UCBhZGRyZXNzLiBBcyBmYXIgYXMgdGhlIElQCisgICAgICAgIC8vIGNhbm9uaWNhbGl6ZXIgaXMg
Y29uY2VybmVkLCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhCisgICAgICAgIC8vICAgaG9zdG5h
bWUuCisgICAgICAgIE5FVVRSQUwsCisKKyAgICAgICAgLy8gLSBBbG1vc3QgYW4gSVAsIGJ1dCB3
YXMgbm90IGNhbm9uaWNhbGl6ZWQuIFRoaXMgY291bGQgYmUgYW4KKyAgICAgICAgLy8gSVB2NCBh
ZGRyZXNzIHdoZXJlIHRydW5jYXRpb24gb2NjdXJyZWQsIG9yIHNvbWV0aGluZworICAgICAgICAv
LyBjb250YWluaW5nIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgOltdIHdoaWNoIGRpZCBub3QgcGFy
c2UKKyAgICAgICAgLy8gYXMgYW4gSVB2NiBhZGRyZXNzLiBOZXZlciBhdHRlbXB0IHRvIGNvbm5l
Y3QgdG8gdGhpcworICAgICAgICAvLyBhZGRyZXNzLCBiZWNhdXNlIGl0IG1pZ2h0IGFjdHVhbGx5
IHN1Y2NlZWQhCisgICAgICAgIEJST0tFTiwKKworICAgICAgICBJUFY0LCAvLyAtIFN1Y2Nlc3Nm
dWxseSBjYW5vbmljYWxpemVkIGFzIGFuIElQdjQgYWRkcmVzcy4KKyAgICAgICAgSVBWNiwgLy8g
LSBTdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCBhcyBhbiBJUHY2IGFkZHJlc3MuCisgICAgfTsK
KyAgICBGYW1pbHkgZmFtaWx5OworCisgICAgLy8gSWYgfGZhbWlseXwgaXMgSVBWNCwgdGhlbiB0
aGlzIGlzIHRoZSBudW1iZXIgb2Ygbm9uZW1wdHkgZG90LXNlcGFyYXRlZAorICAgIC8vIGNvbXBv
bmVudHMgaW4gdGhlIGlucHV0IHRleHQsIGZyb20gMSB0byA0LiBJZiB8ZmFtaWx5fCBpcyBub3Qg
SVBWNCwKKyAgICAvLyB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICBpbnQgaXB2NENvbXBv
bmVudHNDb3VudDsKKworICAgIC8vIExvY2F0aW9uIG9mIGhvc3Qgd2l0aGluIHRoZSBjYW5vbmlj
YWxpemVkIG91dHB1dC4KKyAgICAvLyBDYW5vbmljYWxpemVJUEFkZHJlc3MoKSBvbmx5IHNldHMg
dGhpcyBmaWVsZCBpZiB8ZmFtaWx5fCBpcyBJUFY0IG9yIElQVjYuCisgICAgLy8gQ2Fub25pY2Fs
aXplSG9zdFZlcmJvc2UoKSBhbHdheXMgc2V0cyBpdC4KKyAgICBVUkxDb21wb25lbnQgb3VwdXRI
b3N0OworCisgICAgLy8gfGFkZHJlc3N8IGNvbnRhaW5zIHRoZSBwYXJzZWQgSVAgQWRkcmVzcyAo
aWYgYW55KSBpbiBpdHMgZmlyc3QKKyAgICAvLyBBZGRyZXNzTGVuZ3RoKCkgYnl0ZXMsIGluIG5l
dHdvcmsgb3JkZXIuIElmIElzSVBBZGRyZXNzKCkgaXMgZmFsc2UKKyAgICAvLyBBZGRyZXNzTGVu
Z3RoKCkgd2lsbCByZXR1cm4gemVybyBhbmQgdGhlIGNvbnRlbnQgb2YgfGFkZHJlc3N8IGlzIHVu
ZGVmaW5lZC4KKyAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdOworCisgICAgLy8gQ29udmVu
aWVuY2UgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYW4gSVAgYWRkcmVzcyBj
b3JyZXNwb25kaW5nCisgICAgLy8gdG8gdGhlIGN1cnJlbnQgSVAgdmVyc2lvbiBpbiB8ZmFtaWx5
fCwgaWYgYW55LiBGb3IgdXNlIHdpdGggfGFkZHJlc3N8LgorICAgIGludCBBZGRyZXNzTGVuZ3Ro
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYW1pbHkgPT0gSVBWNCA/IDQgOiAoZmFt
aWx5ID09IElQVjYgPyAxNiA6IDApOworICAgIH0KK307CisKKworLy8gSG9zdC4KKy8vCisvLyBU
aGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4gVXNlIHRoaXMgdmVyc2lv
biB3aGVuIHlvdSBvbmx5CisvLyBuZWVkIHRvIGtub3cgd2hldGhlciBjYW5vbmljYWxpemF0aW9u
IHN1Y2NlZWRlZC4KK2Jvb2wgQ2Fub25pY2FsaXplSG9zdChjb25zdCBjaGFyKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3Vw
dXRIb3N0KTsKK2Jvb2wgQ2Fub25pY2FsaXplSG9zdChjb25zdCBVQ2hhciogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91cHV0
SG9zdCk7CisKKy8vIEV4dGVuZGVkIHZlcnNpb24gb2YgQ2Fub25pY2FsaXplSG9zdCwgd2hpY2gg
cmV0dXJucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorLy8gVXNlIHRoaXMgd2hlbiB5b3UgbmVl
ZCB0byBrbm93IHdoZXRoZXIgdGhlIGhvc3RuYW1lIHdhcyBhbiBJUCBhZGRyZXNzLgorLy8gQSBz
dWNjZXNzZnVsIHJldHVybiBpcyBpbmRpY2F0ZWQgYnkgaG9zdEluZm8tPmZhbWlseSAhPSBCUk9L
RU4uIFNlZSB0aGUKKy8vIGRlZmluaXRpb24gb2YgQ2Fub25Ib3N0SW5mbyBhYm92ZSBmb3IgZGV0
YWlscy4KK3ZvaWQgQ2Fub25pY2FsaXplSG9zdFZlcmJvc2UoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mLCBDYW5vbkhvc3RJbmZvKik7
Cit2b2lkIENhbm9uaWNhbGl6ZUhvc3RWZXJib3NlKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8qKTsKKwor
CisvLyBJUCBhZGRyZXNzZXMuCisvLworLy8gVHJpZXMgdG8gaW50ZXJwcmV0IHRoZSBnaXZlbiBo
b3N0IG5hbWUgYXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MuIElmIGl0IGlzCisvLyBhbiBJUCBh
ZGRyZXNzLCBpdCB3aWxsIGNhbm9uaWNhbGl6ZSBpdCBhcyBzdWNoLCBhcHBlbmRpbmcgaXQgdG8g
fG91dHB1dHwuCisvLyBBZGRpdGlvbmFsIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCB2
aWEgdGhlIHwqaG9zdEluZm98IHBhcmFtZXRlci4KKy8vIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBD
YW5vbkhvc3RJbmZvIGFib3ZlIGZvciBkZXRhaWxzLgorLy8KKy8vIFRoaXMgaXMgY2FsbGVkIEFV
VE9NQVRJQ0FMTFkgZnJvbSB0aGUgaG9zdCBjYW5vbmljYWxpemVyLCB3aGljaCBlbnN1cmVzIHRo
YXQKKy8vIHRoZSBpbnB1dCBpcyB1bmVzY2FwZWQgYW5kIG5hbWUtcHJlcHBlZCwgZXRjLiBJdCBz
aG91bGQgbm90IG5vcm1hbGx5IGJlCisvLyBuZWNlc3Nhcnkgb3Igd2lzZSB0byBjYWxsIHRoaXMg
ZGlyZWN0bHkuCit2b2lkIENhbm9uaWNhbGl6ZUlQQWRkcmVzcyhjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8q
KTsKK3ZvaWQgQ2Fub25pY2FsaXplSVBBZGRyZXNzKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8qKTsKKwor
Ly8gUG9ydDogdGhpcyBmdW5jdGlvbiB3aWxsIGFkZCB0aGUgY29sb24gZm9yIHRoZSBwb3J0IGlm
IGEgcG9ydCBpcyBwcmVzZW50LgorLy8gVGhlIGNhbGxlciBjYW4gcGFzcyBVUkxQYXJzZXI6OlBP
UlRfVU5TUEVDSUZJRUQgYXMgdGhlCisvLyBkZWZhdWx0UG9ydEZvclNjaGVtZSBhcmd1bWVudCBp
ZiB0aGVyZSBpcyBubyBkZWZhdWx0IHBvcnQuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVx
dWlyZXMgVVRGLTggZW5jb2RpbmcuCitib29sIENhbm9uaWNhbGl6ZVBvcnQoY29uc3QgY2hhciog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUs
CisgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBv
dXB1dFBvcnQpOworYm9vbCBDYW5vbmljYWxpemVQb3J0KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZhdWx0UG9ydEZvclNjaGVtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91cHV0UG9ydCk7
CisKKy8vIFJldHVybnMgdGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbCBz
Y2hlbWUsIG9yIFBPUlRfVU5TUEVDSUZJRUQKKy8vIGlmIHRoZSBzY2hlbWUgaXMgdW5rbm93bi4K
K2ludCBEZWZhdWx0UG9ydEZvclNjaGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIGludCBzY2hlbWVM
ZW5ndGgpOworCisvLyBQYXRoLiBJZiB0aGUgaW5wdXQgZG9lcyBub3QgYmVnaW4gaW4gYSBzbGFz
aCAoaW5jbHVkaW5nIGlmIHRoZSBpbnB1dCBpcworLy8gZW1wdHkpLCB3ZSdsbCBwcmVwZW5kIGEg
c2xhc2ggdG8gdGhlIHBhdGggdG8gbWFrZSBpdCBjYW5vbmljYWwuCisvLworLy8gVGhlIDgtYml0
IHZlcnNpb24gYXNzdW1lcyBVVEYtOCBlbmNvZGluZywgYnV0IGRvZXMgbm90IHZlcmlmeSB0aGUg
dmFsaWRpdHkKKy8vIG9mIHRoZSBVVEYtOCAoaS5lLiwgeW91IGNhbiBoYXZlIGludmFsaWQgVVRG
LTggc2VxdWVuY2VzLCBpbnZhbGlkCisvLyBjaGFyYWN0ZXJzLCBldGMuKS4gTm9ybWFsbHksIFVS
THMgd2lsbCBjb21lIGluIGFzIFVURi0xNiwgc28gdGhpcyBpc24ndAorLy8gYW4gaXNzdWUuIFNv
bWVib2R5IGdpdmluZyB1cyBhbiA4LWJpdCBwYXRoIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0
aW5nCisvLyB0aGUgcGF0aCB0aGF0IHRoZSBzZXJ2ZXIgZXhwZWN0cyAod2UnbGwgZXNjYXBlIGhp
Z2gtYml0IGNoYXJhY3RlcnMpLCBzbworLy8gaWYgc29tZXRoaW5nIGlzIGludmFsaWQsIGl0J3Mg
dGhlaXIgcHJvYmxlbS4KK2Jvb2wgQ2Fub25pY2FsaXplUGF0aChjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCog
b3V0cHV0UGF0aCk7Citib29sIENhbm9uaWNhbGl6ZVBhdGgoY29uc3QgVUNoYXIqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBv
dXRwdXRQYXRoKTsKKworLy8gQ2Fub25pY2FsaXplcyB0aGUgaW5wdXQgYXMgYSBmaWxlIHBhdGgu
IFRoaXMgaXMgbGlrZSBDYW5vbmljYWxpemVQYXRoIGV4Y2VwdAorLy8gdGhhdCBpdCBhbHNvIGhh
bmRsZXMgV2luZG93cyBkcml2ZSBzcGVjcy4gRm9yIGV4YW1wbGUsIHRoZSBwYXRoIGNhbiBiZWdp
bgorLy8gd2l0aCAiY3xcIiBhbmQgaXQgd2lsbCBnZXQgcHJvcGVybHkgY2Fub25pY2FsaXplZCB0
byAiQzovIi4KKy8vIFRoZSBzdHJpbmcgd2lsbCBiZSBhcHBlbmRlZCB0byB8b3V0cHV0fCBhbmQg
fG91dHB1dFBhdGh8IHdpbGwgYmUgdXBkYXRlZC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiBy
ZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4KK2Jvb2wgRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3Qg
Y2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBV
UkxDb21wb25lbnQqIG91dHB1dFBhdGgpOworYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0aChjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4m
LCBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgpOworCisvLyBRdWVyeTogUHJlcGVuZHMgdGhlID8g
aWYgbmVlZGVkLgorLy8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIHRoZSBpbnB1dCB0
byBiZSBVVEYtOCBlbmNvZGluZy4gSW5jb3JyZWN0bHkKKy8vIGVuY29kZWQgY2hhcmFjdGVycyAo
aW4gVVRGLTggb3IgVVRGLTE2KSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIFVuaWNvZGUKKy8v
ICJpbnZhbGlkIGNoYXJhY3Rlci4iIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBmYWlsLCB3ZSBhbHdh
eXMganVzdCB0cnkgdG8gZG8KKy8vIG91ciBiZXN0IGZvciBjcmF6eSBpbnB1dCBoZXJlIHNpbmNl
IHdlYiBwYWdlcyBjYW4gc2V0IGl0IHRoZW1zZWx2ZXMuCisvLworLy8gVGhpcyB3aWxsIGNvbnZl
cnQgdGhlIGdpdmVuIGlucHV0IGludG8gdGhlIG91dHB1dCBlbmNvZGluZyB0aGF0IHRoZSBnaXZl
bgorLy8gY2hhcmFjdGVyIHNldCBjb252ZXJ0ZXIgb2JqZWN0IHByb3ZpZGVzLiBUaGUgY29udmVy
dGVyIHdpbGwgb25seSBiZSBjYWxsZWQKKy8vIGlmIG5lY2Vzc2FyeSwgZm9yIEFTQ0lJIGlucHV0
LCBubyBjb252ZXJzaW9ucyBhcmUgbmVjZXNzYXJ5LgorLy8KKy8vIFRoZSBjb252ZXJ0ZXIgY2Fu
IGJlIG51bGwuIEluIHRoaXMgY2FzZSwgdGhlIG91dHB1dCBlbmNvZGluZyB3aWxsIGJlIFVURi04
Lgordm9pZCBDYW5vbmljYWxpemVRdWVyeShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29t
cG9uZW50KiBvdXRwdXRRdWVyeSk7Cit2b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IFVDaGFy
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiwgVVJM
QnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeSk7CisKKy8vIFJlZjogUHJl
cGVuZHMgdGhlICMgaWYgbmVlZGVkLiBUaGUgb3V0cHV0IHdpbGwgYmUgVVRGLTggKHRoaXMgaXMg
dGhlIG9ubHkKKy8vIGNhbm9uaWNhbGl6ZXIgdGhhdCBkb2VzIG5vdCBwcm9kdWNlIEFTQ0lJIG91
dHB1dCkuIFRoZSBvdXRwdXQgaXMKKy8vIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgVVRGLTguCisv
LworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBmYWlsLiBJZiB0aGUgaW5wdXQgaXMgaW52YWxp
ZCBVVEYtOC9VVEYtMTYsIHdlJ2xsIHVzZQorLy8gdGhlICJVbmljb2RlIHJlcGxhY2VtZW50IGNo
YXJhY3RlciIgZm9yIHRoZSBjb25mdXNpbmcgYml0cyBhbmQgY29weSB0aGUgcmVzdC4KK3ZvaWQg
Q2Fub25pY2FsaXplUmVmKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0
aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRGcmFnbWVudCk7Cit2b2lk
IENhbm9uaWNhbGl6ZVJlZihjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBw
YXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dEZyYWdtZW50KTsKKwor
Ly8gRnVsbCBjYW5vbmljYWxpemVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoZXNlIGZ1bmN0aW9ucyByZXBsYWNlIGFu
eSBzdHJpbmcgY29udGVudHMsIHJhdGhlciB0aGFuIGFwcGVuZCBhcyBhYm92ZS4KKy8vIFNlZSB0
aGUgYWJvdmUgcGllY2UtYnktcGllY2UgZnVuY3Rpb25zIGZvciBpbmZvcm1hdGlvbiBzcGVjaWZp
YyB0bworLy8gY2Fub25pY2FsaXppbmcgaW5kaXZpZHVhbCBjb21wb25lbnRzLgorLy8KKy8vIFRo
ZSBvdXRwdXQgd2lsbCBiZSBBU0NJSSBleGNlcHQgdGhlIHJlZmVyZW5jZSBmcmFnbWVudCwgd2hp
Y2ggbWF5IGJlIFVURi04LgorLy8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9ucyByZXF1aXJlIFVURi04
IGVuY29kaW5nLgorCisvLyBVc2UgZm9yIHN0YW5kYXJkIFVSTHMgd2l0aCBhdXRob3JpdGllcyBh
bmQgcGF0aHMuCitib29sIENhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIENhbm9uaWNhbGl6
ZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJM
U2VnbWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBv
dXRwdXRQYXJzZWQpOworCisvLyBVc2UgZm9yIGZpbGUgVVJMcy4KK2Jvb2wgQ2Fub25pY2FsaXpl
RmlsZVVSTChjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVu
dHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNl
ZCk7Citib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVj
TGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBV
UkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworLy8gVXNlIGZvciBmaWxlc3lzdGVtIFVSTHMu
Citib29sIENhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogc3BlYywgaW50IHNw
ZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIENoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBDYW5vbmljYWxpemVGaWxl
U3lzdGVtVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2Vn
bWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCk7CisKKy8vIFVzZSBmb3IgcGF0aCBVUkxzIHN1Y2ggYXMgamF2YXNjcmlwdC4g
VGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHBhdGggaW4gYW55CisvLyB3YXksIGZvciBleGFtcGxl
LCBieSBlc2NhcGluZyBpdC4KK2Jvb2wgY2Fub25pY2FsaXplUGF0aFVSTChjb25zdCBjaGFyKiBz
cGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwg
VVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKTsKK2Jvb2wgY2Fub25pY2FsaXplUGF0aFVSTChjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCk7CisKKy8vIFVzZSBmb3IgbWFpbHRv
IFVSTHMuIFRoaXMgImNhbm9uaWNhbGl6ZXMiIHRoZSB1cmwgaW50byBhIHBhdGggYW5kIHF1ZXJ5
CisvLyBjb21wb25lbnQuIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gbWVyZ2UgInRvIiBmaWVsZHMu
IEl0IHVzZXMgVVRGLTggZm9yCisvLyB0aGUgcXVlcnkgZW5jb2RpbmcgaWYgdGhlcmUgaXMgYSBx
dWVyeS4gVGhpcyBpcyBiZWNhdXNlIGEgbWFpbHRvIFVSTCBpcworLy8gcmVhbGx5IGludGVuZGVk
IGZvciBhbiBleHRlcm5hbCBtYWlsIHByb2dyYW0sIGFuZCB0aGUgZW5jb2Rpbmcgb2YgYSBwYWdl
LAorLy8gZXRjLiB3aGljaCB3b3VsZCBpbmZsdWVuY2UgYSBxdWVyeSBlbmNvZGluZyBub3JtYWxs
eSBhcmUgaXJyZWxldmFudC4KK2Jvb2wgQ2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IGNoYXIq
IHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1
dFBhcnNlZCk7Citib29sIENhbm9uaWNhbGl6ZU1haWx0b1VSTChjb25zdCBVQ2hhciogc3BlYywg
aW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2Vk
KTsKKworLy8gUGFydCByZXBsYWNlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBJbnRlcm5hbCBzdHJ1Y3R1cmUgdXNl
ZCBmb3Igc3RvcmluZyBzZXBhcmF0ZSBzdHJpbmdzIGZvciBlYWNoIGNvbXBvbmVudC4KKy8vIFRo
ZSBiYXNpYyBjYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucyB1c2UgdGhpcyBzdHJ1Y3R1cmUgaW50
ZXJuYWxseSBzbyB0aGF0CisvLyBjb21wb25lbnQgcmVwbGFjZW1lbnQgKGRpZmZlcmVudCBzdHJp
bmdzIGZvciBkaWZmZXJlbnQgY29tcG9uZW50cykgY2FuIGJlCisvLyB0cmVhdGVkIG9uIHRoZSBz
YW1lIGNvZGUgcGF0aCBhcyByZWd1bGFyIGNhbm9uaWNhbGl6YXRpb24gKHRoZSBzYW1lIHN0cmlu
ZworLy8gZm9yIGVhY2ggY29tcG9uZW50KS4KKy8vCisvLyBBIFVSTFNlZ21lbnRzIHN0cnVjdHVy
ZSB1c3VhbGx5IGdvZXMgYWxvbmcgd2l0aCB0aGlzLiBUaG9zZQorLy8gY29tcG9uZW50cyBpZGVu
dGlmeSBvZmZzZXRzIHdpdGhpbiB0aGVzZSBzdHJpbmdzLCBzbyB0aGF0IHRoZXkgY2FuIGFsbCBi
ZQorLy8gaW4gdGhlIHNhbWUgc3RyaW5nLCBvciBzcHJlYWQgYXJiaXRyYXJpbHkgYWNyb3NzIGRp
ZmZlcmVudCBvbmVzLgorLy8KKy8vIFRoaXMgc3RydWN0dXJlcyBkb2VzIG5vdCBvd24gYW55IGRh
dGEuIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0bworLy8gZW5zdXJlIHRoYXQg
dGhlIGRhdGEgdGhlIHBvaW50ZXJzIHBvaW50IHRvIHN0YXlzIGluIHNjb3BlIGFuZCBpcyBub3QK
Ky8vIG1vZGlmaWVkLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0cnVjdCBV
UkxDb21wb25lbnRTb3VyY2UgeworICAgIC8vIENvbnN0cnVjdG9yIG5vcm1hbGx5IHVzZWQgYnkg
Y2FsbGVycyB3aXNoaW5nIHRvIHJlcGxhY2UgY29tcG9uZW50cy4gVGhpcworICAgIC8vIHdpbGwg
bWFrZSB0aGVtIGFsbCBudWxsLCB3aGljaCBpcyBubyByZXBsYWNlbWVudC4gVGhlIGNhbGxlciB3
b3VsZCB0aGVuCisgICAgLy8gb3ZlcnJpZGUgdGhlIGNvbXBvbmVudHMgdGhleSB3YW50IHRvIHJl
cGxhY2UuCisgICAgVVJMQ29tcG9uZW50U291cmNlKCkKKyAgICAgICAgOiBzY2hlbWUoMCkKKyAg
ICAgICAgLCB1c2VybmFtZSgwKQorICAgICAgICAsIHBhc3N3b3JkKDApCisgICAgICAgICwgaG9z
dCgwKQorICAgICAgICAsIHBvcnQoMCkKKyAgICAgICAgLCBwYXRoKDApCisgICAgICAgICwgcXVl
cnkoMCkKKyAgICAgICAgLCByZWYoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0
b3Igbm9ybWFsbHkgdXNlZCBpbnRlcm5hbGx5IHRvIGluaXRpYWxpemUgYWxsIHRoZSBjb21wb25l
bnRzIHRvCisgICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgc3BlYy4KKyAgICBleHBsaWNpdCBVUkxD
b21wb25lbnRTb3VyY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogZGVmYXVsdFZhbHVlKQorICAgICAg
ICA6IHNjaGVtZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgdXNlcm5hbWUoZGVmYXVsdFZhbHVl
KQorICAgICAgICAsIHBhc3N3b3JkKGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgLCBob3N0KGRlZmF1
bHRWYWx1ZSkKKyAgICAgICAgLCBwb3J0KGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgLCBwYXRoKGRl
ZmF1bHRWYWx1ZSkKKyAgICAgICAgLCBxdWVyeShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgcmVm
KGRlZmF1bHRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSog
c2NoZW1lOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHVzZXJuYW1lOworICAgIGNvbnN0IENo
YXJhY3RlclR5cGUqIHBhc3N3b3JkOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGhvc3Q7Cisg
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9ydDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBw
YXRoOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHF1ZXJ5OworICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIHJlZjsKK307CisKKy8vIFRoaXMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBpbmZvcm1h
dGlvbiBvbiBtb2RpZnlpbmcgYSBVUkwuIEVhY2ggY29tcG9uZW50CisvLyBtYXkgZWl0aGVyIGJl
IGxlZnQgdW5jaGFuZ2VkLCByZXBsYWNlZCwgb3IgZGVsZXRlZC4KKy8vCisvLyBCeSBkZWZhdWx0
LCBlYWNoIGNvbXBvbmVudCBpcyB1bmNoYW5nZWQuIEZvciB0aG9zZSBjb21wb25lbnRzIHRoYXQg
c2hvdWxkIGJlCisvLyBtb2RpZmllZCwgY2FsbCBlaXRoZXIgU2V0KiBvciBDbGVhciogdG8gbW9k
aWZ5IGl0LgorLy8KKy8vIFRoZSBzdHJpbmcgcGFzc2VkIHRvIFNldCogZnVuY3Rpb25zIERPRVMg
Tk9UIEdFVCBDT1BJRUQgQU5EIE1VU1QgQkUgS0VQVAorLy8gSU4gU0NPUEUgQlkgVEhFIENBTExF
UiBmb3IgYXMgbG9uZyBhcyB0aGlzIG9iamVjdCBleGlzdHMhCisvLworLy8gUHJlZmVyIHRoZSA4
LWJpdCByZXBsYWNlbWVudCB2ZXJzaW9uIGlmIHBvc3NpYmxlIHNpbmNlIGl0IGlzIG1vcmUgZWZm
aWNpZW50LgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2NsYXNzIFJlcGxhY2Vt
ZW50cyB7CitwdWJsaWM6CisgICAgUmVwbGFjZW1lbnRzKCkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gU2NoZW1lCisgICAgdm9pZCBTZXRTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29u
c3QgVVJMQ29tcG9uZW50JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnNjaGVtZSA9
IHM7CisgICAgICAgIG1fc2VnbWVudHMuc2NoZW1lID0gY29tcDsKKyAgICB9CisgICAgLy8gTm90
ZTogd2UgZG9uJ3QgaGF2ZSBhIENsZWFyU2NoZW1lIHNpbmNlIHRoaXMgZG9lc24ndCBtYWtlIGFu
eSBzZW5zZS4KKyAgICBib29sIElzU2NoZW1lT3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICEh
bV9zb3VyY2VzLnNjaGVtZTsgfQorCisgICAgLy8gVXNlcm5hbWUKKyAgICB2b2lkIFNldFVzZXJu
YW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKKyAg
ICB7CisgICAgICAgIG1fc291cmNlcy51c2VybmFtZSA9IHM7CisgICAgICAgIG1fc2VnbWVudHMu
dXNlcm5hbWUgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFyVXNlcm5hbWUoKQorICAgIHsK
KyAgICAgICAgbV9zb3VyY2VzLnVzZXJuYW1lID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9z
ZWdtZW50cy51c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzVXNl
cm5hbWVPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMudXNlcm5hbWU7IH0K
KworICAgIC8vIFBhc3N3b3JkCisgICAgdm9pZCBTZXRQYXNzd29yZChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJj
ZXMucGFzc3dvcmQgPSBzOworICAgICAgICBtX3NlZ21lbnRzLnBhc3N3b3JkID0gY29tcDsKKyAg
ICB9CisgICAgdm9pZCBDbGVhclBhc3N3b3JkKCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5w
YXNzd29yZCA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1fc2VnbWVudHMucGFzc3dvcmQgPSBV
UkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc1Bhc3N3b3JkT3ZlcnJpZGRlbigpIGNv
bnN0IHsgcmV0dXJuICEhbV9zb3VyY2VzLnBhc3N3b3JkOyB9CisKKyAgICAvLyBIb3N0CisgICAg
dm9pZCBTZXRIb3N0KGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYg
Y29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5ob3N0ID0gczsKKyAgICAgICAgbV9zZWdt
ZW50cy5ob3N0ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhckhvc3QoKQorICAgIHsKKyAg
ICAgICAgbV9zb3VyY2VzLmhvc3QgPSBQbGFjZWhvbGRlcigpOworICAgICAgICBtX3NlZ21lbnRz
Lmhvc3QgPSBVUkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc0hvc3RPdmVycmlkZGVu
KCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMuaG9zdDsgfQorCisgICAgLy8gUG9ydAorICAg
IHZvaWQgU2V0UG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQm
IGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMucG9ydCA9IHM7CisgICAgICAgIG1fc2Vn
bWVudHMucG9ydCA9IGNvbXA7CisgICAgfQorICAgIHZvaWQgQ2xlYXJQb3J0KCkKKyAgICB7Cisg
ICAgICAgIG1fc291cmNlcy5wb3J0ID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9zZWdtZW50
cy5wb3J0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorICAgIGJvb2wgSXNQb3J0T3ZlcnJpZGRl
bigpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2VzLnBvcnQ7IH0KKworICAgIC8vIFBhdGgKKyAg
ICB2b2lkIFNldFBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50
JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnBhdGggPSBzOworICAgICAgICBtX3Nl
Z21lbnRzLnBhdGggPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFyUGF0aCgpCisgICAgewor
ICAgICAgICBtX3NvdXJjZXMucGF0aCA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1fc2VnbWVu
dHMucGF0aCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzUGF0aE92ZXJyaWRk
ZW4oKSBjb25zdCB7IHJldHVybiAhbV9zb3VyY2VzLnBhdGg7IH0KKworICAgIC8vIFF1ZXJ5Cisg
ICAgdm9pZCBTZXRRdWVyeShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25l
bnQmIGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMucXVlcnkgPSBzOworICAgICAgICBt
X3NlZ21lbnRzLnF1ZXJ5ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhclF1ZXJ5KCkKKyAg
ICB7CisgICAgICAgIG1fc291cmNlcy5xdWVyeSA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1f
c2VnbWVudHMucXVlcnkgPSBVUkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc1F1ZXJ5
T3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICFtX3NvdXJjZXMucXVlcnk7IH0KKworICAgIC8v
IFJlZgorICAgIHZvaWQgU2V0UmVmKGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENv
bXBvbmVudCYgY29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5yZWYgPSBzOworICAgICAg
ICBtX3NlZ21lbnRzLmZyYWdtZW50ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhclJlZigp
CisgICAgeworICAgICAgICBtX3NvdXJjZXMucmVmID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAg
bV9zZWdtZW50cy5mcmFnbWVudCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElz
UmVmT3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICFtX3NvdXJjZXMucmVmOyB9CisKKyAgICAv
LyBHZXR0ZXJzIGZvciB0aGUgaXRuZXJuYWwgZGF0YS4gU2VlIHRoZSB2YXJpYWJsZXMgYmVsb3cg
Zm9yIGhvdyB0aGUKKyAgICAvLyBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkLgorICAgIGNvbnN0IFVS
TENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291cmNlcygpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlczsgfQorICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBjb21wb25lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWdtZW50czsgfQorCitwcml2YXRlOgorICAgIC8vIFJldHVybnMgYSBwb2lu
dGVyIHRvIGEgc3RhdGljIGVtcHR5IHN0cmluZyB0aGF0IGlzIHVzZWQgYXMgYSBwbGFjZWhvbGRl
cgorICAgIC8vIHRvIGluZGljYXRlIGEgY29tcG9uZW50IHNob3VsZCBiZSBkZWxldGVkIChzZWUg
YmVsb3cpLgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIFBsYWNlaG9sZGVyKCkKKyAgICB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBDaGFyYWN0ZXJUeXBlIGVtcHR5U3RyaW5nID0gMDsKKyAgICAg
ICAgcmV0dXJuICZlbXB0eVN0cmluZzsKKyAgICB9CisKKyAgICAvLyBXZSBzdXBwb3J0IHRocmVl
IHN0YXRlczoKKyAgICAvLworICAgIC8vIEFjdGlvbiAgICAgICAgICAgICAgICAgfCBTb3VyY2Ug
ICAgICAgICAgICAgICAgQ29tcG9uZW50CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBEb24ndCBjaGFuZ2UgY29tcG9uZW50IHwgbnVsbCAgICAgICAgICAgICAgICAgICh1bnVzZWQp
CisgICAgLy8gUmVwbGFjZSBjb21wb25lbnQgICAgICB8IChyZXBsYWNlbWVudCBzdHJpbmcpICAo
cmVwbGFjZW1lbnQgY29tcG9uZW50KQorICAgIC8vIERlbGV0ZSBjb21wb25lbnQgICAgICAgfCAo
bm9uLW51bGwpICAgICAgICAgICAgKGludmFsaWQgY29tcG9uZW50OiAoMCwtMSkpCisgICAgLy8K
KyAgICAvLyBXZSB1c2UgYSBwb2ludGVyIHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRoZSBzb3Vy
Y2Ugd2hlbiB0aGUgY29tcG9uZW50CisgICAgLy8gc2hvdWxkIGJlIGRlbGV0ZWQuCisgICAgVVJM
Q29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+IG1fc291cmNlczsKKyAgICBVUkxTZWdtZW50
cyBtX3NlZ21lbnRzOworfTsKKworLy8gVGhlIGJhc2UgbXVzdCBiZSBhbiA4LWJpdCBjYW5vbmlj
YWwgVVJMLgorYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2Vk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNo
YXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIq
IHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRz
KiBvdXRwdXRQYXJzZWQpOworYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBi
YXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFj
ZW1lbnRzPFVDaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworLy8gRmlsZXN5c3RlbSBVUkxzIGNhbiBvbmx5
IGhhdmUgdGhlIHBhdGgsIHF1ZXJ5LCBvciByZWYgcmVwbGFjZWQuCisvLyBBbGwgb3RoZXIgY29t
cG9uZW50cyB3aWxsIGJlIGlnbm9yZWQuCitib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0
IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxh
Y2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252
ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFy
PiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpOworCisvLyBSZXBsYWNpbmcgc29tZSBwYXJ0cyBvZiBhIGZpbGUgVVJMIGlzIG5v
dCBwZXJtaXR0ZWQuIEV2ZXJ5dGhpbmcgZXhjZXB0CisvLyB0aGUgaG9zdCwgcGF0aCwgcXVlcnks
IGFuZCByZWYgd2lsbCBiZSBpZ25vcmVkLgorYm9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFy
KiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYg
YmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1l
bnRzPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRl
ciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZl
cjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpOworYm9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVy
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKwor
Ly8gUGF0aCBVUkxzIGNhbiBvbmx5IGhhdmUgdGhlIHNjaGVtZSBhbmQgcGF0aCByZXBsYWNlZC4g
QWxsIG90aGVyIGNvbXBvbmVudHMKKy8vIHdpbGwgYmUgaWdub3JlZC4KK2Jvb2wgUmVwbGFjZVBh
dGhVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBSZXBsYWNlUGF0aFVSTChjb25zdCBjaGFyKiBiYXNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBh
cnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVD
aGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwor
CisvLyBNYWlsdG8gVVJMcyBjYW4gb25seSBoYXZlIHRoZSBzY2hlbWUsIHBhdGgsIGFuZCBxdWVy
eSByZXBsYWNlZC4KKy8vIEFsbCBvdGhlciBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZC4KK2Jv
b2wgUmVwbGFjZU1haWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgUmVwbGFjZU1h
aWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIFJlbGF0aXZlIFVSTCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworLy8gR2l2ZW4gYW4gaW5wdXQgVVJMIG9yIFVSTCBmcmFnbWVudCB8ZnJhZ21lbnR8LCBkZXRl
cm1pbmVzIGlmIGl0IGlzIGEKKy8vIHJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBhbmQgcGxhY2Vz
IHRoZSByZXN1bHQgaW50byB8KmlzUmVsYXRpdmV8LiBJZiBpdCBpcworLy8gcmVsYXRpdmUsIHRo
ZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBVUkwgd2lsbCBiZSBwbGFjZWQgaW50bworLy8gfCpy
ZWxhdGl2ZUNvbXBvbmVudHwgKHRoZXJlIG1heSBoYXZlIGJlZW4gdHJpbW1lZCB3aGl0ZXNwYWNl
LCBmb3IgZXhhbXBsZSkuCisvLyBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0byByZXNvbHZlUmVsYXRp
dmVVUkwuIElmIHRoZSBpbnB1dCBpcyBub3QgcmVsYXRpdmUsCisvLyB0aGlzIHZhbHVlIGlzIFVO
REVGSU5FRCAoaXQgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIGZ1bmN0aW9uKS4KKy8vCisvLyBSZXR1
cm5zIHRydWUgb24gc3VjY2VzcyAod2Ugc3VjY2Vzc2Z1bGx5IGRldGVybWluZWQgdGhlIFVSTCBp
cyByZWxhdGl2ZSBvcgorLy8gbm90KS4gRmFpbHVyZSBtZWFucyB0aGF0IHRoZSBjb21iaW5hdGlv
biBvZiBVUkxzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuCisvLworLy8gVGhlIGJhc2UgVVJMIHNo
b3VsZCBhbHdheXMgYmUgY2Fub25pY2FsLCB0aGVyZWZvcmUgaXMgQVNDSUkuCitib29sIGlzUmVs
YXRpdmVVUkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnJhZ21lbnQsIGludCBmcmFnbWVudExl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICBib29sIGlzQmFzZUhpZXJhcmNoaWNhbCwKKyAgICAg
ICAgICAgICAgICAgICBib29sKiBpc1JlbGF0aXZlLCBVUkxDb21wb25lbnQqIHJlbGF0aXZlQ29t
cG9uZW50KTsKK2Jvb2wgaXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZnJh
Z21lbnQsIGludCBmcmFnbWVudExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICBib29sIGlzQmFz
ZUhpZXJhcmNoaWNhbCwKKyAgICAgICAgICAgICAgICAgICBib29sKiBpc1JlbGF0aXZlLCBVUkxD
b21wb25lbnQqIHJlbGF0aXZlQ29tcG9uZW50KTsKKworLy8gR2l2ZW4gYSBjYW5vbmljYWwgcGFy
c2VkIHNvdXJjZSBVUkwsIGEgVVJMIGZyYWdtZW50IGtub3duIHRvIGJlIHJlbGF0aXZlLAorLy8g
YW5kIHRoZSBpZGVudGlmaWVkIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIHJlbGF0aXZlIFVSTCAo
Y29tcHV0ZWQgYnkKKy8vIGlzUmVsYXRpdmVVUkwpLCB0aGlzIHByb2R1Y2VzIGEgbmV3IHBhcnNl
ZCBjYW5vbmljYWwgVVJMIGluIHxvdXRwdXR8IGFuZAorLy8gfG91dHB1dFBhcnNlZHwuCisvLwor
Ly8gSXQgYWxzbyByZXF1aXJlcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBiYXNlIFVS
TCBpcyBhIGZpbGU6IFVSTAorLy8gd2hpY2ggdHJpZ2dlcnMgYWRkaXRpb25hbCBsb2dpYy4KKy8v
CisvLyBUaGUgYmFzZSBVUkwgc2hvdWxkIGJlIGNhbm9uaWNhbCBhbmQgaGF2ZSBhIGhvc3QgKG1h
eSBiZSBlbXB0eSBmb3IgZmlsZQorLy8gVVJMcykgYW5kIGEgcGF0aC4gSWYgaXQgZG9lc24ndCBo
YXZlIHRoZXNlLCB3ZSBjYW4ndCByZXNvbHZlIHJlbGF0aXZlCisvLyBVUkxzIG9mZiBvZiBpdCBh
bmQgd2lsbCByZXR1cm4gdGhlIGJhc2UgYXMgdGhlIG91dHB1dCB3aXRoIGFuIGVycm9yIGZsYWcu
CisvLyBCZWNhdXNlZSBpdCBpcyBjYW5vbmljYWwgaXMgc2hvdWxkIGFsc28gYmUgQVNDSUkuCisv
LworLy8gVGhlIHF1ZXJ5IGNoYXJzZXQgY29udmVydGVyIGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMg
YXMgQ2Fub25pY2FsaXplUXVlcnkuCisvLworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9u
IGZhaWx1cmUsIHRoZSBvdXRwdXQgd2lsbCBiZSAic29tZXRoaW5nCisvLyByZWFzb25hYmxlIiB0
aGF0IHdpbGwgYmUgY29uc2lzdGVudCBhbmQgdmFsaWQsIGp1c3QgcHJvYmFibHkgbm90IHdoYXQK
Ky8vIHdhcyBpbnRlbmRlZCBieSB0aGUgd2ViIHBhZ2UgYXV0aG9yIG9yIGNhbGxlci4KK2Jvb2wg
cmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0IFVSTFNlZ21lbnRz
JiBiYXNlUGFyc2VkLCBib29sIGJhc2VJc0ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiByZWxhdGl2ZVVSTCwgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29u
dmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIHJlc29sdmVSZWxhdGl2ZVVSTChjb25zdCBjaGFy
KiBiYXNlVVJMLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgYm9vbCBiYXNlSXNGaWxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0aXZlVVJMLCBjb25z
dCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworfSAv
LyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxDYW5vbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRXRjLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMQ2Fub25FdGMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkNDNhZDAwMTM4ZWRmMjFmYjJmZTZm
OTRjZWViYjk4MTdlMjJjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTENhbm9uRXRjLmNwcApAQCAtMCwwICsxLDM4MiBAQAorLy8gQ29weXJpZ2h0IDIwMDcs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisv
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisvLyBDYW5vbmljYWxpemVycyBmb3IgcmFuZG9tIGJpdHMgdGhh
dCBhcmVuJ3QgYmlnIGVub3VnaCBmb3IgdGhlaXIgb3duIGZpbGVzLgorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJu
YWwuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCisjaWYgVVNFKFdURlVSTCkKKwor
bmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNw
YWNlIHsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc2hvdWxkIGJl
IHJlbW92ZWQgZnJvbSB0aGUgbWlkZGxlIG9mIGEKKy8vIFVSTC4KK2lubGluZSBib29sIGlzUmVt
b3ZhYmxlVVJMV2hpdGVzcGFjZShpbnQgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0
ZXIgPT0gJ1xyJyB8fCBjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JzsKK30K
KworLy8gQmFja2VuZCBmb3IgcmVtb3ZlVVJMV2hpdGVzcGFjZSAoc2VlIGRlY2xhcmF0aW9uIGlu
IFVSTENhbm9uLmgpLgorLy8gSXQgc3Vja3MgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMsIHNpbmNl
IHRoaXMgdGFrZXMgYWJvdXQgMTMlIG9mIHRoZSB0b3RhbCBVUkwKKy8vIGNhbm9uaWNhbGl6YXRp
b24gdGltZS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citjb25zdCBDaGFyYWN0
ZXJUeXBlKiBkb1JlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5wdXQs
IGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGludCYg
b3V0cHV0TGVuZ3RoKQoreworICAgIC8vIEZhc3QgdmVyaWZpY2F0aW9uIHRoYXQgdGhlcmUncyBu
b3RoaW5nIHRoYXQgbmVlZHMgcmVtb3ZhbC4gVGhpcyBpcyB0aGUgOTklCisgICAgLy8gY2FzZSwg
c28gd2Ugd2FudCBpdCB0byBiZSBmYXN0IGFuZCBkb24ndCBjYXJlIGFib3V0IGltcGFjdGluZyB0
aGUgc3BlZWQKKyAgICAvLyB3aGVuIHdlIGRvIGZpbmQgd2hpdGVzcGFjZS4KKyAgICBib29sIGZv
dW5kV2hpdGVzcGFjZSA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRMZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAoIWlzUmVtb3ZhYmxlVVJMV2hpdGVzcGFjZShpbnB1dFtp
XSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm91bmRXaGl0ZXNwYWNlID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFmb3VuZFdoaXRlc3BhY2UpIHsK
KyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55IHdoaXRlc3BhY2UsIHdlIGRvbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcuIFdlIGNhbiBqdXN0CisgICAgICAgIC8vIHJldHVybiB0aGUgaW5wdXQgYXMg
dGhlIG91dHB1dC4KKyAgICAgICAgb3V0cHV0TGVuZ3RoID0gaW5wdXRMZW5ndGg7CisgICAgICAg
IHJldHVybiBpbnB1dDsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIHdoaXRlc3BhY2UgaW50
byB0aGUgbmV3IGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5wdXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIWlzUmVtb3ZhYmxlVVJMV2hpdGVzcGFj
ZShpbnB1dFtpXSkpCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGlucHV0W2ldKTsKKyAgICB9
CisgICAgb3V0cHV0TGVuZ3RoID0gYnVmZmVyLmxlbmd0aCgpOworICAgIHJldHVybiBidWZmZXIu
ZGF0YSgpOworfQorCisvLyBDb250YWlucyB0aGUgY2Fub25pY2FsIHZlcnNpb24gb2YgZWFjaCBw
b3NzaWJsZSBpbnB1dCBsZXR0ZXIgaW4gdGhlIHNjaGVtZQorLy8gKGJhc2ljYWxseSwgbG93ZXIt
Y2FzZWQpLiBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSB3aWxsIGJlIDAgaWYgdGhlIGxldHRlcgor
Ly8gaXMgbm90IGFsbG93ZWQgaW4gYSBzY2hlbWUuCitjb25zdCBjaGFyIGtTY2hlbWVDYW5vbmlj
YWxbMHg4MF0gPSB7CisvLyAwMC0xZjogYWxsIGFyZSBpbnZhbGlkCisgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsCisgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisvLyAgJyAnICAgISAgICAiICAg
ICMgICAgJCAgICAlICAgICYgICAgJyAgICAoICAgICkgICAgKiAgICArICAgICwgICAgLSAgICAu
ICAgIC8KKyAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgJysnLCAgMCwgICctJywgJy4nLCAgMCwKKy8vICAgMCAgICAxICAgIDIgICAgMyAg
ICA0ICAgIDUgICAgNiAgICA3ICAgIDggICAgOSAgICA6ICAgIDsgICAgPCAgICA9ICAgID4gICAg
PworICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jywg
IDAgLCAgMCAsICAwICwgIDAgLCAgMCAsICAwICwKKy8vICAgQCAgICBBICAgIEIgICAgQyAgICBE
ICAgIEUgICAgRiAgICBHICAgIEggICAgSSAgICBKICAgIEsgICAgTCAgICBNICAgIE4gICAgTwor
ICAgICAwICwgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2on
LCAnaycsICdsJywgJ20nLCAnbicsICdvJywKKy8vICAgUCAgICBRICAgIFIgICAgUyAgICBUICAg
IFUgICAgViAgICBXICAgIFggICAgWSAgICBaICAgIFsgICAgXCAgICBdICAgIF4gICAgXworICAg
ICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAg
MCwgICAwICwgIDAsICAgMCAsICAwLAorLy8gICBgICAgIGEgICAgYiAgICBjICAgIGQgICAgZSAg
ICBmICAgIGcgICAgaCAgICBpICAgIGogICAgayAgICBsICAgIG0gICAgbiAgICBvCisgICAgIDAg
LCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywg
J2wnLCAnbScsICduJywgJ28nLAorLy8gICBwICAgIHEgICAgciAgICBzICAgIHQgICAgdSAgICB2
ICAgIHcgICAgeCAgICB5ICAgIHogICAgeyAgICB8ICAgIH0gICAgfgorICAgICdwJywgJ3EnLCAn
cicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAgMCAsICAwICwgIDAg
LCAgMCAsICAwIH07CisKKy8vIFRoaXMgY291bGQgYmUgYSB0YWJsZSBsb29rdXAgYXMgd2VsbCBi
eSBzZXR0aW5nIHRoZSBoaWdoIGJpdCBmb3IgZWFjaAorLy8gdmFsaWQgY2hhcmFjdGVyLCBidXQg
aXQncyBvbmx5IGNhbGxlZCBvbmNlIHBlciBVUkwsIGFuZCBpdCBtYWtlcyB0aGUgbG9va3VwCisv
LyB0YWJsZSBlYXNpZXIgdG8gcmVhZCBub3QgaGF2aW5nIGV4dHJhIHN0dWZmIGluIGl0LgoraW5s
aW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCit7Cisg
ICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9TY2hlbWUoY29uc3QgQ2hh
cmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFNjaGVtZSkKK3sKKyAgICBpZiAoc2No
ZW1lLmxlbmd0aCgpIDw9IDApIHsKKyAgICAgICAgLy8gU2NoZW1lIGlzIHVuc3BlY2lmaWVkIG9y
IGVtcHR5LCBjb252ZXJ0IHRvIGVtcHR5IGJ5IGFwcGVuZGluZyBhIGNvbG9uLgorICAgICAgICBv
dXRwdXRTY2hlbWUgPSBVUkxDb21wb25lbnQob3V0cHV0Lmxlbmd0aCgpLCAwKTsKKyAgICAgICAg
b3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBUaGUgb3V0cHV0IHNjaGVtZSBzdGFydHMgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAg
ICBvdXRwdXRTY2hlbWUuc2V0QmVnaW4ob3V0cHV0U2NoZW1lLmJlZ2luKCkgKyBvdXRwdXQubGVu
Z3RoKCkpOworCisgICAgLy8gRGFuZ2VyOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgY29kZSBk
b2VzIG5vdCBzdHJpcCBhbnkgY2hhcmFjdGVyczogaXQKKyAgICAvLyBvbmx5IGVtaXRzIHRoZSBj
YW5vbmljYWwgdmVyc2lvbiAoYmUgaXQgdmFsaWQgb3IgZXNjYXBlZCkgb2YgZWFjaCBvZgorICAg
IC8vIHRoZSBpbnB1dCBjaGFyYWN0ZXJzLiBTdHJpcHBpbmcgd291bGQgcHV0IGl0IG91dCBvZiBz
eW5jIHdpdGgKKyAgICAvLyBVUkxVdGlsaXRpZXM6OkZpbmRBbmRDb21wYXJlU2NoZW1lLCB3aGlj
aCBjb3VsZCBjYXVzZSBzb21lIHNlY3VyaXR5IGNoZWNrcyBvbgorICAgIC8vIHNjaGVtZXMgdG8g
YmUgaW5jb3JyZWN0LgorICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgaW50IGVuZCA9IHNj
aGVtZS5lbmQoKTsKKyAgICBmb3IgKGludCBpID0gc2NoZW1lLmJlZ2luKCk7IGkgPCBlbmQ7ICsr
aSkgeworICAgICAgICBVQ0hBUiBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tp
XSk7CisgICAgICAgIGNoYXIgcmVwbGFjZW1lbnQgPSAwOworICAgICAgICBpZiAoY2hhcmFjdGVy
IDwgMHg4MCkgeworICAgICAgICAgICAgaWYgKGkgPT0gc2NoZW1lLmJlZ2luKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGEgc3BlY2lhbCBjaGVjayBmb3IgdGhlIGZpcnN0IGxl
dHRlciBvZiB0aGUgc2NoZW1lLgorICAgICAgICAgICAgICAgIGlmIChpc1NjaGVtZUZpcnN0Q2hh
cihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaGFyYWN0ZXIpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZW1lbnQgPSBrU2NoZW1lQ2Fub25pY2FsW2NoYXJhY3Rlcl07CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IGtTY2hlbWVDYW5vbmlj
YWxbY2hhcmFjdGVyXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXBsYWNlbWVudCkKKyAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQocmVwbGFjZW1lbnQpOworICAgICAgICBlbHNlIGlmIChj
aGFyYWN0ZXIgPT0gJyUnKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemluZyB0aGUgc2No
ZW1lIG11bHRpcGxlIHRpbWVzIHNob3VsZCBsZWFkIHRvIHRoZSBzYW1lCisgICAgICAgICAgICAv
LyByZXN1bHQuIFNpbmNlIGludmFsaWQgY2hhcmFjdGVycyB3aWxsIGJlIGVzY2FwZWQsIHdlIG5l
ZWQgdG8gcHJlc2VydmUKKyAgICAgICAgICAgIC8vIHRoZSBwZXJjZW50IHRvIGF2b2lkIG11bHRp
cGxlIGVzY2FwaW5nLiBUaGUgc2NoZW1lIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyUnKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyLCBzdG9yZSBpdCBidXQg
bWFyayB0aGlzIHNjaGVtZSBhcyBpbnZhbGlkLgorICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgZXNjYXBlIHRoZSBvdXRwdXQgYW5kIGFsc28g
aGFuZGxlIGVuY29kaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgcmV0dXJu
IHZhbHVlIHNpbmNlIHdlIGFscmVhZHkgZmFpbGVkLgorICAgICAgICAgICAgQXBwZW5kVVRGOEVz
Y2FwZWRDaGFyKHNwZWMsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBUaGUgb3V0cHV0IHNjaGVtZSBlbmRzIHdpdGggdGhlIHRoZSBjdXJyZW50IHBvc2l0aW9u
LCBiZWZvcmUgYXBwZW5kaW5nCisgICAgLy8gdGhlIGNvbG9uLgorICAgIG91dHB1dFNjaGVtZS5z
ZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0U2NoZW1lLmJlZ2luKCkpOworICAgIG91
dHB1dC5hcHBlbmQoJzonKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworLy8gVGhlIHVzZXJu
YW1lIGFuZCBwYXNzd29yZCBjb21wb25lbnRzIHJlZmVyZW5jZSByYW5nZXMgaW4gdGhlIGNvcnJl
c3BvbmRpbmcKKy8vICpfc3BlYyBzdHJpbmdzLiBUeXBpY2FsbHksIHRoZXNlIHNwZWNzIHdpbGwg
YmUgdGhlIHNhbWUgKHdlJ3JlCisvLyBjYW5vbmljYWxpemluZyBhIHNpbmdsZSBzb3VyY2Ugc3Ry
aW5nKSwgYnV0IG1heSBiZSBkaWZmZXJlbnQgd2hlbgorLy8gcmVwbGFjaW5nIGNvbXBvbmVudHMu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wg
ZG9Vc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiB1c2VybmFtZVNwZWMsCisgICAgICAgICAg
ICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwKKyAgICAgICAgICAgICAgICBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBwYXNzd29yZFNwZWMsCisgICAgICAgICAgICAgICAgY29uc3QgVVJM
Q29tcG9uZW50JiBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwKKyAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1lLAorICAg
ICAgICAgICAgICAgIFVSTENvbXBvbmVudCYgb3V0cHV0UGFzc3dvcmQpCit7CisgICAgaWYgKHVz
ZXJuYW1lLmxlbmd0aCgpIDw9IDAgJiYgcGFzc3dvcmQubGVuZ3RoKCkgPD0gMCkgeworICAgICAg
ICAvLyBDb21tb24gY2FzZTogbm8gdXNlciBpbmZvLiBXZSBzdHJpcCBlbXB0eSB1c2VybmFtZS9w
YXNzd29yZHMuCisgICAgICAgIG91dHB1dFVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAg
ICAgIG91dHB1dFBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSB1c2VybmFtZS4KKyAgICBvdXRwdXRVc2VybmFt
ZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGlmICh1c2VybmFtZS5sZW5ndGgoKSA+
IDApIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGVzY2FwZSBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBm
b3IgdGhlIHVzZXJuYW1lLgorICAgICAgICBhcHBlbmRTdHJpbmdPZlR5cGUoJnVzZXJuYW1lU3Bl
Y1t1c2VybmFtZS5iZWdpbigpXSwgdXNlcm5hbWUubGVuZ3RoKCksIFVSTENoYXJhY3RlclR5cGVz
OjpVc2VySW5mb0NoYXJhY3Rlciwgb3V0cHV0KTsKKyAgICB9CisgICAgb3V0cHV0VXNlcm5hbWUu
c2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFVzZXJuYW1lLmJlZ2luKCkpOworCisg
ICAgLy8gV2hlbiB0aGVyZSBpcyBhIHBhc3N3b3JkLCB3ZSBuZWVkIHRoZSBzZXBhcmF0b3IuIE5v
dGUgdGhhdCB3ZSBzdHJpcAorICAgIC8vIGVtcHR5IGJ1dCBzcGVjaWZpZWQgcGFzc3dvcmRzLgor
ICAgIGlmIChwYXNzd29yZC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgn
OicpOworICAgICAgICBvdXRwdXRQYXNzd29yZC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwor
ICAgICAgICBhcHBlbmRTdHJpbmdPZlR5cGUoJnBhc3N3b3JkU3BlY1twYXNzd29yZC5iZWdpbigp
XSwgcGFzc3dvcmQubGVuZ3RoKCksIFVSTENoYXJhY3RlclR5cGVzOjpVc2VySW5mb0NoYXJhY3Rl
ciwgb3V0cHV0KTsKKyAgICAgICAgb3V0cHV0UGFzc3dvcmQuc2V0TGVuZ3RoKG91dHB1dC5sZW5n
dGgoKSAtIG91dHB1dFBhc3N3b3JkLmJlZ2luKCkpOworICAgIH0gZWxzZQorICAgICAgICBvdXRw
dXRQYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworCisgICAgb3V0cHV0LmFwcGVuZCgnQCcpOwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5n
IHBvcnQgaW50ZWdlcnMgdG8gc3RyaW5ncy4KK2lubGluZSB2b2lkIHdyaXRlUG9ydEludChjaGFy
KiBvdXRwdXQsIGludCBvdXRwdXRMZW5ndGgsIGludCBwb3J0KQoreworICAgIF9pdG9hX3MocG9y
dCwgb3V0cHV0LCBvdXRwdXRMZW5ndGgsIDEwKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB3aWxs
IHByZXBlbmQgdGhlIGNvbG9uIGlmIHRoZXJlIHdpbGwgYmUgYSBwb3J0LgordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Citib29sIGRvUG9ydChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcGVjLAorICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0
LAorICAgICAgICAgICAgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFBv
cnRDb21wb25lbnQpCit7CisgICAgaW50IHBvcnROdW1iZXIgPSBVUkxQYXJzZXI6OlBhcnNlUG9y
dChzcGVjLCBwb3J0KTsKKyAgICBpZiAocG9ydE51bWJlciA9PSBVUkxQYXJzZXI6OlBPUlRfVU5T
UEVDSUZJRUQgfHwgcG9ydE51bWJlciA9PSBkZWZhdWx0UG9ydEZvclNjaGVtZSkgeworICAgICAg
ICBvdXRwdXRQb3J0Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybiB0
cnVlOyAvLyBMZWF2ZSBwb3J0IGVtcHR5LgorICAgIH0KKworICAgIGlmIChwb3J0TnVtYmVyID09
IFVSTFBhcnNlcjo6UE9SVF9JTlZBTElEKSB7CisgICAgICAgIC8vIEludmFsaWQgcG9ydDogV2Un
bGwgY29weSB0aGUgdGV4dCBmcm9tIHRoZSBpbnB1dCBzbyB0aGUgdXNlciBjYW4gc2VlCisgICAg
ICAgIC8vIHdoYXQgdGhlIGVycm9yIHdhcywgYW5kIG1hcmsgdGhlIFVSTCBhcyBpbnZhbGlkIGJ5
IHJldHVybmluZyBmYWxzZS4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICBv
dXRwdXRQb3J0Q29tcG9uZW50LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgICAgIEFw
cGVuZEludmFsaWROYXJyb3dTdHJpbmcoc3BlYywgcG9ydC5iZWdpbigpLCBwb3J0LmVuZCgpLCBv
dXRwdXQpOworICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50LnNldExlbmd0aChvdXRwdXQubGVu
Z3RoKCkgLSBvdXRwdXRQb3J0Q29tcG9uZW50LmJlZ2luKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gQ29udmVydCBwb3J0IG51bWJlciBiYWNrIHRvIGFuIGludGVn
ZXIuIE1heCBwb3J0IHZhbHVlIGlzIDUgZGlnaXRzLCBhbmQKKyAgICAvLyB0aGUgUGFyc2VkOjpF
eHRyYWN0UG9ydCB3aWxsIGhhdmUgbWFkZSBzdXJlIHRoZSBpbnRlZ2VyIGlzIGluIHJhbmdlLgor
ICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gNjsKKyAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXpl
XTsKKyAgICB3cml0ZVBvcnRJbnQoYnVmZmVyLCBidWZmZXJTaXplLCBwb3J0TnVtYmVyKTsKKwor
ICAgIC8vIEFwcGVuZCB0aGUgcG9ydCBudW1iZXIgdG8gdGhlIG91dHB1dCwgcHJlY2VlZGVkIGJ5
IGEgY29sb24uCisgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgIG91dHB1dFBvcnRDb21wb25l
bnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1
ZmZlclNpemUgJiYgYnVmZmVyW2ldOyArK2kpCisgICAgICAgIG91dHB1dC5hcHBlbmQoYnVmZmVy
W2ldKTsKKworICAgIG91dHB1dFBvcnRDb21wb25lbnQuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgo
KSAtIG91dHB1dFBvcnRDb21wb25lbnQuYmVnaW4oKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgordm9pZCBk
b0Nhbm9uaWNhbGl6ZUZyYWdtZW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgZnJhZ21lbnQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25l
bnQmIG91dHB1dEZyYWdtZW50KQoreworICAgIGlmIChmcmFnbWVudC5sZW5ndGgoKSA8IDApIHsK
KyAgICAgICAgLy8gQ29tbW9uIGNhc2Ugb2Ygbm8gZnJhZ21lbnQuCisgICAgICAgIG91dHB1dEZy
YWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBBcHBlbmQgdGhlIGZyYWdtZW50IHNlcGFyYXRvci4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZG8g
dGhpcyBldmVuIHdoZW4gdGhlIGZyYWdtZW50CisgICAgLy8gaXMgZW1wdHkgYnV0IHByZXNlbnQu
CisgICAgb3V0cHV0LmFwcGVuZCgnIycpOworICAgIG91dHB1dEZyYWdtZW50LnNldEJlZ2luKG91
dHB1dC5sZW5ndGgoKSk7CisKKyAgICAvLyBOb3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgY2hh
cmFjdGVycywgY29udmVydGluZyB0byBVVEYtOCBhbmQgdmFsaWRhdGluZy4KKyAgICBpbnQgZW5k
ID0gZnJhZ21lbnQuZW5kKCk7CisgICAgZm9yIChpbnQgaSA9IGZyYWdtZW50LmJlZ2luKCk7IGkg
PCBlbmQ7ICsraSkgeworICAgICAgICBpZiAoIXNwZWNbaV0pIHsKKyAgICAgICAgICAgIC8vIElF
IGp1c3Qgc3RyaXBzIE5VTExzLCBzbyB3ZSBkbyB0b28uCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pIDwgMHgy
MCkgeworICAgICAgICAgICAgLy8gVW5saW5lIElFIHNlZW1zIHRvLCB3ZSBlc2NhcGUgY29udHJv
bCBjaGFyYWN0ZXJzLiBUaGlzIHdpbGwgcHJvYmFibHkKKyAgICAgICAgICAgIC8vIG1ha2UgdGhl
IHJlZmVyZW5jZSBmcmFnbWVudCB1bnVzYWJsZSBvbiBhIHdlYiBwYWdlLCBidXQgcGVvcGxlCisg
ICAgICAgICAgICAvLyBzaG91bGRuJ3QgYmUgdXNpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGluIHRo
ZWlyIGFuY2hvciBuYW1lcy4KKyAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSksIG91dHB1dCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pIDwgMHg4MCkgeworICAgICAgICAg
ICAgLy8gTm9ybWFsIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGp1c3QgYXBwZW5kZWQuCisgICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaV0pKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRl
ZCB1bmVzY2FwZWQsIGJ1dCBvbmx5IHdoZW4gdGhleSBhcmUKKyAgICAgICAgICAgIC8vIHZhbGlk
LiBJbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgImludmFs
aWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciIgYXMgSUUgc2VlbXMgdG8gKHJlYWRVVEZDaGFy
IHB1dHMgdGhlIHVuaWNvZGUgcmVwbGFjZW1lbnQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciBp
biB0aGUgb3V0cHV0IG9uIGZhaWx1cmUgZm9yIHVzKS4KKyAgICAgICAgICAgIHVuc2lnbmVkIGNv
ZGVQb2ludDsKKyAgICAgICAgICAgIHJlYWRVVEZDaGFyKHNwZWMsICZpLCBlbmQsICZjb2RlUG9p
bnQpOworICAgICAgICAgICAgQXBwZW5kVVRGOFZhbHVlKGNvZGVQb2ludCwgb3V0cHV0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG91dHB1dEZyYWdtZW50LnNldExlbmd0aChvdXRwdXQubGVu
Z3RoKCkgLSBvdXRwdXRGcmFnbWVudC5iZWdpbigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
Y29uc3QgY2hhciogcmVtb3ZlVVJMV2hpdGVzcGFjZShjb25zdCBjaGFyKiBpbnB1dCwgaW50IGlu
cHV0TGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIGJ1ZmZlciwgaW50KiBvdXRwdXRMZW5ndGgpCit7
CisgICAgcmV0dXJuIGRvUmVtb3ZlVVJMV2hpdGVzcGFjZShpbnB1dCwgaW5wdXRMZW5ndGgsIGJ1
ZmZlciwgKm91dHB1dExlbmd0aCk7Cit9CisKK2NvbnN0IFVDaGFyKiByZW1vdmVVUkxXaGl0ZXNw
YWNlKGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+
JiBidWZmZXIsIGludCogb3V0cHV0TGVuZ3RoKQoreworICAgIHJldHVybiBkb1JlbW92ZVVSTFdo
aXRlc3BhY2UoaW5wdXQsIGlucHV0TGVuZ3RoLCBidWZmZXIsICpvdXRwdXRMZW5ndGgpOworfQor
CitjaGFyIGNhbm9uaWNhbFNjaGVtZUNoYXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmIChj
aGFyYWN0ZXIgPj0gMHg4MCkKKyAgICAgICAgcmV0dXJuIDA7IC8vIE5vbi1BU0NJSSBpcyBub3Qg
c3VwcG9ydGVkIGJ5IHNjaGVtZXMuCisgICAgcmV0dXJuIGtTY2hlbWVDYW5vbmljYWxbY2hhcmFj
dGVyXTsKK30KKworYm9vbCBDYW5vbmljYWxpemVTY2hlbWUoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21w
b25lbnQqIG91dHB1dFNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9TY2hlbWU8Y2hhciwgdW5zaWdu
ZWQgY2hhcj4oc3BlYywgc2NoZW1lLCBvdXRwdXQsICpvdXRwdXRTY2hlbWUpOworfQorCitib29s
IENhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFNj
aGVtZSkKK3sKKyAgICByZXR1cm4gZG9TY2hlbWU8VUNoYXIsIFVDaGFyPihzcGVjLCBzY2hlbWUs
IG91dHB1dCwgKm91dHB1dFNjaGVtZSk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplVXNlckluZm8o
Y29uc3QgY2hhciogdXNlcm5hbWVTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTENvbXBvbmVudCYgdXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHBhc3N3b3JkU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50KiBvdXRwdXRVc2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50KiBvdXRwdXRQYXNzd29yZCkKK3sKKyAgICByZXR1cm4gZG9Vc2VySW5mbzxjaGFyLCB1bnNp
Z25lZCBjaGFyPih1c2VybmFtZVNvdXJjZSwgdXNlcm5hbWUsIHBhc3N3b3JkU291cmNlLCBwYXNz
d29yZCwgb3V0cHV0LCAqb3V0cHV0VXNlcm5hbWUsICpvdXRwdXRQYXNzd29yZCk7Cit9CisKK2Jv
b2wgQ2Fub25pY2FsaXplVXNlckluZm8oY29uc3QgVUNoYXIqIHVzZXJuYW1lU291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcGFzc3dvcmRTb3VyY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGFzc3dvcmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFVzZXJuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFBhc3N3b3JkKQoreworICAgIHJl
dHVybiBkb1VzZXJJbmZvPFVDaGFyLCBVQ2hhcj4odXNlcm5hbWVTb3VyY2UsIHVzZXJuYW1lLCBw
YXNzd29yZFNvdXJjZSwgcGFzc3dvcmQsIG91dHB1dCwgKm91dHB1dFVzZXJuYW1lLCAqb3V0cHV0
UGFzc3dvcmQpOworfQorCitib29sIENhbm9uaWNhbGl6ZVBvcnQoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBwb3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCog
b3V0cHV0UG9ydENvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gZG9Qb3J0PGNoYXIsIHVuc2lnbmVk
IGNoYXI+KHNwZWMsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0UG9ydEZvclNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dCwgKm91dHB1dFBvcnRDb21wb25lbnQpOworfQorCitib29sIENhbm9uaWNh
bGl6ZVBvcnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCwgaW50
IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFBvcnRDb21wb25lbnQpCit7CisgICAg
cmV0dXJuIGRvUG9ydDxVQ2hhciwgVUNoYXI+KHNwZWMsIHBvcnQsIGRlZmF1bHRQb3J0Rm9yU2No
ZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICpvdXRwdXRQb3J0
Q29tcG9uZW50KTsKK30KKwordm9pZCBDYW5vbmljYWxpemVSZWYoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiByZWYsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21w
b25lbnQqIG91dHB1dEZyYWdtZW50KQoreworICAgIGRvQ2Fub25pY2FsaXplRnJhZ21lbnQ8Y2hh
ciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcmVmLCBvdXRwdXQsICpvdXRwdXRGcmFnbWVudCk7Cit9
CisKK3ZvaWQgQ2Fub25pY2FsaXplUmVmKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHJlZiwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCogb3V0cHV0
RnJhZ21lbnQpCit7CisgICAgZG9DYW5vbmljYWxpemVGcmFnbWVudDxVQ2hhciwgVUNoYXI+KHNw
ZWMsIHJlZiwgb3V0cHV0LCAqb3V0cHV0RnJhZ21lbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBV
UkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdU
RlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxlc3lz
dGVtdXJsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxlc3lzdGVtdXJs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYjQ2ZWExZDhjYTQ2MGU4N2Q5NGJkMGU0NDk1OGY5ZmJmOTJkNDNj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvLyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEyLCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKy8vIEZ1bmN0aW9ucyBmb3IgY2Fub25pY2FsaXppbmcgImZpbGVzeXN0ZW06
ZmlsZToiIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxDYW5vbi5o
IgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgi
CisjaW5jbHVkZSAiVVJMVXRpbC5oIgorI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5oIgorCisj
aWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyIHsKKworbmFtZXNwYWNlIHsKKworLy8gV2UgdXNlIHRoZSBVUkxDb21wb25lbnRTb3Vy
Y2UgZm9yIHRoZSBvdXRlciBVUkwsIGFzIGl0IGNhbiBoYXZlIHJlcGxhY2VtZW50cywKKy8vIHdo
ZXJlYXMgdGhlIGlubmVyX3VybCBjYW4ndCwgc28gaXQgdXNlcyBzcGVjLgordGVtcGxhdGU8dHlw
ZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvQ2Fub25pY2FsaXplRmlsZVN5c3Rl
bVVSTChjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMQ29tcG9uZW50U291cmNlPENIQVI+JiBzb3VyY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBmaWxlc3lzdGVtIG9ubHkgdXNlcyB7c2NoZW1lLCBwYXRoLCBxdWVy
eSwgcmVmfSAtLSBjbGVhciB0aGUgcmVzdC4KKyAgICBvdXRwdXRQYXJzZWQtPnVzZXJuYW1lID0g
VVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5wYXNzd29yZCA9IFVSTENvbXBvbmVu
dCgpOworICAgIG91dHB1dFBhcnNlZC0+aG9zdCA9IFVSTENvbXBvbmVudCgpOworICAgIG91dHB1
dFBhcnNlZC0+cG9ydCA9IFVSTENvbXBvbmVudCgpOworCisgICAgY29uc3QgVVJMU2VnbWVudHMq
IGlubmVyUGFyc2VkID0gcGFyc2VkLmlubmVyVVJMU2VnbWVudHMoKTsKKyAgICBVUkxTZWdtZW50
cyBuZXdJbm5lclBhcnNlZDsKKworICAgIC8vIFNjaGVtZSAoa25vd24sIHNvIHdlIGRvbid0IGJv
dGhlciBydW5uaW5nIGl0IHRocm91Z2ggdGhlIG1vcmUKKyAgICAvLyBjb21wbGljYXRlZCBzY2hl
bWUgY2Fub25pY2FsaXplcikuCisgICAgb3V0cHV0UGFyc2VkLT5zY2hlbWUuc2V0QmVnaW4ob3V0
cHV0Lmxlbmd0aCgpKTsKKyAgICBvdXRwdXQuYXBwZW5kKCJmaWxlc3lzdGVtOiIsIDExKTsKKyAg
ICBvdXRwdXRQYXJzZWQtPnNjaGVtZS5zZXRMZW5ndGgoMTApOworCisgICAgaWYgKCFwYXJzZWQu
aW5uZXJVUkxTZWdtZW50cygpIHx8ICFwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpLT5zY2hlbWUu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgIGlmIChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywg
aW5uZXJQYXJzZWQtPnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFV0aWxpdGllczo6a0ZpbGVTY2hlbWUpKSB7CisgICAgICAgIG5ld0lubmVy
UGFyc2VkLnNjaGVtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgICAgICBvdXRwdXQu
YXBwZW5kKCJmaWxlOi8vIiwgNyk7CisgICAgICAgIG5ld0lubmVyUGFyc2VkLnNjaGVtZS5zZXRM
ZW5ndGgoNCk7CisgICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGF0aChzcGVjLCBpbm5l
clBhcnNlZC0+cGF0aCwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm5ld0lubmVyUGFyc2VkLnBhdGgpOworICAgIH0gZWxzZSBpZiAoVVJMVXRpbGl0aWVzOjpJ
c1N0YW5kYXJkKHNwZWMsIGlubmVyUGFyc2VkLT5zY2hlbWUpKSB7CisgICAgICAgIHN1Y2Nlc3Mg
PQorICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVTdGFuZGFyZFVSTChzcGVj
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJz
ZWQuaW5uZXJVUkxTZWdtZW50cygpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRD
b252ZXJ0ZXIsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm5ld0lubmVyUGFyc2VkKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBU
T0RPKGVyaWN1KTogVGhlIFVSTCBpcyB3cm9uZywgYnV0IHNob3VsZCB3ZSB0cnkgdG8gb3V0cHV0
IG1vcmUgb2Ygd2hhdAorICAgICAgICAvLyB3ZSB3ZXJlIGdpdmVuPyBFY2hvaW5nIGJhY2sgZmls
ZXN5c3RlbTptYWlsdG8gZXRjLiBkb2Vzbid0IHNlZW0gYWxsIHRoYXQgdXNlZnVsLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRoZSBmaWxlc3lzdGVtIHR5cGUgbXVzdCBi
ZSBtb3JlIHRoYW4ganVzdCBhIGxlYWRpbmcgc2xhc2ggZm9yIHZhbGlkaXR5LgorICAgIHN1Y2Nl
c3MgJj0gcGFyc2VkLmlubmVyVVJMU2VnbWVudHMoKS0+cGF0aC5sZW5ndGgoKSA+IDE7CisKKyAg
ICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgoc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLCBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXRQYXJzZWQtPnBh
dGgpOworCisgICAgLy8gSWdub3JlIGZhaWx1cmVzIGZvciBxdWVyeS9yZWYgc2luY2UgdGhlIFVS
TCBjYW4gcHJvYmFibHkgc3RpbGwgYmUgbG9hZGVkLgorICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHNv
dXJjZS5xdWVyeSwgcGFyc2VkLnF1ZXJ5LCBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkpOworICAgIENhbm9uaWNhbGl6
ZVJlZihzb3VyY2UucmVmLCBwYXJzZWQuZnJhZ21lbnQsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
ZnJhZ21lbnQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBvdXRwdXRQYXJzZWQtPnNldElu
bmVyVVJMU2VnbWVudHMobmV3SW5uZXJQYXJzZWQpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgQ2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTChjb25z
dCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVj
TGVuZ3RoICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZl
cnRlciogY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZp
bGVTeXN0ZW1VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgVVJMQ29tcG9uZW50U291cmNl
PGNoYXI+KHNwZWMpLCBwYXJzZWQsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFy
c2VkKTsKK30KKworYm9vbCBDYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKGNvbnN0IFVDaGFyKiBz
cGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJz
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hh
cnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1V
Ukw8VUNoYXIsIFVDaGFyPihzcGVjLCBVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBw
YXJzZWQsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9v
bCBSZXBsYWNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVudHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAg
IFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMg
cGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJl
cGxhY2VtZW50cywgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXpl
RmlsZVN5c3RlbVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihiYXNlLCBzb3VyY2UsIHBhcnNlZCwg
Y2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIFJlcGxh
Y2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIFJhd1VS
TEJ1ZmZlcjxjaGFyPiB1dGY4OworICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2Uo
YmFzZSk7CisgICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRG
MTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAm
cGFyc2VkKTsKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMPGNoYXIsIHVu
c2lnbmVkIGNoYXI+KGJhc2UsIHNvdXJjZSwgcGFyc2VkLCBjaGFyc2V0Q29udmVydGVyLCBvdXRw
dXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGV1cmwuY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGV1cmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxNTFhMzYzYjM2
YjgyM2U1ZjM1Y2MxNDRkY2ZiOWYzMjYwMDcxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8v
IENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gRnVuY3Rpb25zIGZvciBjYW5v
bmljYWxpemluZyAiZmlsZToiIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJM
Q2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJz
ZUludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisjaWYgT1MoV0lORE9X
UykKKworLy8gR2l2ZW4gYSBwb2ludGVyIGludG8gdGhlIHNwZWMsIHRoaXMgY29waWVzIGFuZCBj
YW5vbmljYWxpemVzIHRoZSBkcml2ZQorLy8gbGV0dGVyIGFuZCBjb2xvbiB0byB0aGUgb3V0cHV0
LCBpZiBvbmUgaXMgZm91bmQuIElmIHRoZXJlIGlzIG5vdCBhIGRyaXZlCisvLyBzcGVjLCBpdCB3
b24ndCBkbyBhbnl0aGluZy4gVGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUg
aW5wdXQKKy8vIHNwZWMgaXMgcmV0dXJuZWQgKGFmdGVyIHRoZSBjb2xvbiB3aGVuIGEgZHJpdmUg
c3BlYyBpcyBmb3VuZCwgdGhlIGJlZ2luCisvLyBvZmZzZXQgaWYgb25lIGlzIG5vdCkuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDSEFSPgoraW50IEZpbGVEb0RyaXZlU3BlYyhjb25zdCBDSEFSKiBzcGVj
LCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8v
IFRoZSBwYXRoIGNvdWxkIGJlIG9uZSBvZiBzZXZlcmFsIHRoaW5nczogL2Zvby9iYXIsIGM6L2Zv
by9iYXIsIC9jOi9mb28sCisgICAgLy8gKHdpdGggYmFja3NsYXNoZXMgaW5zdGVhZCBvZiBzbGFz
aGVzIGFzIHdlbGwpLgorICAgIGludCBudW1TbGFzaGVzID0gVVJMUGFyc2VyOjpjb3VudENvbnNl
Y3V0aXZlU2xhc2hlcyhzcGVjLCBiZWdpbiwgZW5kKTsKKyAgICBpbnQgYWZ0ZXJTbGFzaGVzID0g
YmVnaW4gKyBudW1TbGFzaGVzOworCisgICAgaWYgKCFVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRv
d3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBlbmQpKQorICAgICAgICByZXR1cm4gYmVn
aW47IC8vIEhhdmVuJ3QgY29uc3VtZWQgYW55IGNoYXJhY3RlcnMKKworICAgIC8vIEEgZHJpdmUg
c3BlYyBpcyB0aGUgc3RhcnQgb2YgYSBwYXRoLCBzbyB3ZSBuZWVkIHRvIGFkZCBhIHNsYXNoIGZv
ciB0aGUKKyAgICAvLyBhdXRob3JpdHkgdGVybWluYXRvciAodHlwaWNhbGx5IHRoZSB0aGlyZCBz
bGFzaCkuCisgICAgb3V0cHV0LmFwcGVuZCgnLycpOworCisgICAgLy8gZG9lc0JlZ2luV2luZG93
c0RyaXZlU3BlYyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgaXMgdmFsaWQKKyAg
ICAvLyBhbmQgdGhhdCBpdCBpcyBmb2xsb3dlZCBieSBhIGNvbG9uL3BpcGUuCisKKyAgICAvLyBO
b3JtYWxpemUgV2luZG93cyBkcml2ZSBsZXR0ZXJzIHRvIHVwcGVyY2FzZQorICAgIGlmIChzcGVj
W2FmdGVyU2xhc2hlc10gPj0gJ2EnICYmIHNwZWNbYWZ0ZXJTbGFzaGVzXSA8PSAneicpCisgICAg
ICAgIG91dHB1dC5hcHBlbmQoc3BlY1thZnRlclNsYXNoZXNdIC0gJ2EnICsgJ0EnKTsKKyAgICBl
bHNlCisgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1thZnRlclNs
YXNoZXNdKSk7CisKKyAgICAvLyBOb3JtYWxpemUgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgaXQg
dG8gYSBjb2xvbiByYXRoZXIgdGhhbiBwaXBlLgorICAgIG91dHB1dC5hcHBlbmQoJzonKTsKKyAg
ICByZXR1cm4gYWZ0ZXJTbGFzaGVzICsgMjsKK30KKworI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisK
K3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0ZpbGVDYW5v
bmljYWxpemVQYXRoKGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TENvbXBvbmVudCogb3V0cHV0UGF0aCkKK3sKKyAgICAvLyBDb3BpZXMgYW5kIG5vcm1hbGl6ZXMg
dGhlICJjOiIgYXQgdGhlIGJlZ2lubmluZywgaWYgcHJlc2VudC4KKyAgICBvdXRwdXRQYXRoLT5z
ZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGludCBhZnRlckRyaXZlOworI2lmIE9TKFdJ
TkRPV1MpCisgICAgYWZ0ZXJEcml2ZSA9IEZpbGVEb0RyaXZlU3BlYyhzcGVjLCBwYXRoLmJlZ2lu
LCBwYXRoLmVuZCgpLCBvdXRwdXQpOworI2Vsc2UKKyAgICBhZnRlckRyaXZlID0gcGF0aC5iZWdp
bigpOworI2VuZGlmCisKKyAgICAvLyBDb3BpZXMgdGhlIHJlc3Qgb2YgdGhlIHBhdGgsIHN0YXJ0
aW5nIGZyb20gdGhlIHNsYXNoIGZvbGxvd2luZyB0aGUKKyAgICAvLyBkcml2ZSBjb2xvbiAoaWYg
YW55LCBXaW5kb3dzIG9ubHkpLCBvciB0aGUgZmlyc3Qgc2xhc2ggb2YgdGhlIHBhdGguCisgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAoYWZ0ZXJEcml2ZSA8IHBhdGguZW5kKCkpIHsK
KyAgICAgICAgLy8gVXNlIHRoZSByZWd1bGFyIHBhdGggY2Fub25pY2FsaXplciB0byBjYW5vbmlj
YWxpemUgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIC8vIHBhdGguIEdpdmUgaXQgYSBmYWtlIG91
dHB1dCBjb21wb25lbnQgdG8gd3JpdGUgaW50by4gRG9DYW5vbmljYWxpemVGaWxlCisgICAgICAg
IC8vIHdpbGwgY29tcHV0ZSB0aGUgZnVsbCBwYXRoIGNvbXBvbmVudC4KKyAgICAgICAgVVJMQ29t
cG9uZW50IHN1YlBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShhZnRlckRyaXZlLCBwYXRo
LmVuZCgpKTsKKyAgICAgICAgVVJMQ29tcG9uZW50IGZha2VPdXRwdXRQYXRoOworICAgICAgICBz
dWNjZXNzID0gQ2Fub25pY2FsaXplUGF0aChzcGVjLCBzdWJQYXRoLCBvdXRwdXQsICZmYWtlT3V0
cHV0UGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gaW5wdXQgcGF0aCwgY2Fub25p
Y2FsaXplIHRvIGEgc2xhc2guCisgICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKyAgICB9CisK
KyAgICBvdXRwdXRQYXRoLT5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGF0aC0+
YmVnaW4oKSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENI
QVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgVVJM
Q29tcG9uZW50U291cmNlPENIQVI+JiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgLy8gVGhpbmdzIHdlIGRvbid0IHNl
dCBpbiBmaWxlOiBVUkxzLgorICAgIG91dHB1dFBhcnNlZC0+dXNlcm5hbWUgPSBVUkxDb21wb25l
bnQoKTsKKyAgICBvdXRwdXRQYXJzZWQtPnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAg
b3V0cHV0UGFyc2VkLT5wb3J0ID0gVVJMQ29tcG9uZW50KCk7CisKKyAgICAvLyBTY2hlbWUgKGtu
b3duLCBzbyB3ZSBkb24ndCBib3RoZXIgcnVubmluZyBpdCB0aHJvdWdoIHRoZSBtb3JlCisgICAg
Ly8gY29tcGxpY2F0ZWQgc2NoZW1lIGNhbm9uaWNhbGl6ZXIpLgorICAgIG91dHB1dFBhcnNlZC0+
c2NoZW1lLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgb3V0cHV0LmFwcGVuZCgiZmls
ZTovLyIsIDcpOworICAgIG91dHB1dFBhcnNlZC0+c2NoZW1lLnNldExlbmd0aCg0KTsKKworICAg
IC8vIEFwcGVuZCB0aGUgaG9zdC4gRm9yIG1hbnkgZmlsZSBVUkxzLCB0aGlzIHdpbGwgYmUgZW1w
dHkuIEZvciBVTkMsIHRoaXMKKyAgICAvLyB3aWxsIGJlIHByZXNlbnQuCisgICAgLy8gVE9ETyhi
cmV0dHcpIFRoaXMgZG9lc24ndCBkbyBhbnkgY2hlY2tpbmcgZm9yIGhvc3QgbmFtZSB2YWxpZGl0
eS4gV2UKKyAgICAvLyBzaG91bGQgcHJvYmFibHkgaGFuZGxlIHZhbGlkaXR5IGNoZWNraW5nIG9m
IFVOQyBob3N0cyBkaWZmZXJlbnRseSB0aGFuCisgICAgLy8gZm9yIHJlZ3VsYXIgSVAgaG9zdHMu
CisgICAgYm9vbCBzdWNjZXNzID0gQ2Fub25pY2FsaXplSG9zdChzb3VyY2UuaG9zdCwgcGFyc2Vk
Lmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRw
dXRQYXJzZWQtPmhvc3QpOworICAgIHN1Y2Nlc3MgJj0gRG9GaWxlQ2Fub25pY2FsaXplUGF0aDxD
SEFSLCBVQ0hBUj4oc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5w
YXRoKTsKKyAgICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnksIHBhcnNlZC5xdWVyeSwg
cXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFy
c2VkLT5xdWVyeSk7CisKKyAgICAvLyBJZ25vcmUgZmFpbHVyZSBmb3IgcmVmcyBzaW5jZSB0aGUg
VVJMIGNhbiBwcm9iYWJseSBzdGlsbCBiZSBsb2FkZWQuCisgICAgQ2Fub25pY2FsaXplUmVmKHNv
dXJjZS5yZWYsIHBhcnNlZC5mcmFnbWVudCwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5mcmFnbWVu
dCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBD
YW5vbmljYWxpemVGaWxlVVJMKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8Y2hh
ciwgdW5zaWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQs
IHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIENhbm9uaWNh
bGl6ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJM
U2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0
cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8VUNoYXIsIFVD
aGFyPihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29udmVy
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3Qg
Y2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQor
eworICAgIHJldHVybiBEb0ZpbGVDYW5vbmljYWxpemVQYXRoPGNoYXIsIHVuc2lnbmVkIGNoYXI+
KHNwZWMsIHBhdGgsIG91dHB1dCwgb3V0cHV0UGF0aCk7Cit9CisKK2Jvb2wgRmlsZUNhbm9uaWNh
bGl6ZVBhdGgoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVu
dCogb3V0cHV0UGF0aCkKK3sKKyAgICByZXR1cm4gRG9GaWxlQ2Fub25pY2FsaXplUGF0aDxVQ2hh
ciwgVUNoYXI+KHNwZWMsIHBhdGgsIG91dHB1dCwgb3V0cHV0UGF0aCk7Cit9CisKK2Jvb2wgUmVw
bGFjZUZpbGVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxh
Y2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQ
YXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAg
ICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNvbXBv
bmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4g
RG9DYW5vbmljYWxpemVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2Vk
LCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIFJlcGxh
Y2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNl
bWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgIENoYXJzZXRD
b252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKKyAgICBVUkxDb21wb25lbnRT
b3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFy
c2VkKTsKKyAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50
cywgdXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplRmls
ZVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIs
IG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2Fs
aXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSG9zdC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDAyYWNlNmQ5NTI0
MzdiZmYxYTkzMTgxNzU5YjI3MmJkYzkyNDM0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25Ib3N0LmNwcApAQCAtMCwwICsxLDQxNSBAQAorLy8gQ29w
eXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUg
IlVSTENhbm9uSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYg
eworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKKy8vIEZv
ciByZWZlcmVuY2UsIGhlcmUncyB3aGF0IElFIHN1cHBvcnRzOgorLy8gS2V5OiAwIChkaXNhbGxv
d2VkOiBmYWlsdXJlIGlmIHByZXNlbnQgaW4gdGhlIGlucHV0KQorLy8gICAgICArIChhbGxvd2Vk
IGVpdGhlciBlc2NhcGVkIG9yIHVuZXNjYXBlZCwgYW5kIHVubW9kaWZpZWQpCisvLyAgICAgIFUg
KGFsbG93ZWQgZXNjYXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyB1bmVzY2FwZWQgaWYgcHJl
c2VudCBpbgorLy8gICAgICAgICBlc2NhcGVkIGZvcm0pCisvLyAgICAgIEUgKGFsbG93ZWQgZXNj
YXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyBlc2NhcGVkIGlmIHByZXNlbnQgaW4KKy8vICAg
ICAgICAgdW5lc2NhcGVkIGZvcm0pCisvLyAgICAgICUgKG9ubHkgYWxsb3dlZCBlc2NhcGVkIGlu
IHRoZSBpbnB1dCwgd2lsbCBiZSB1bm1vZGlmaWVkKS4KKy8vICAgICAgSSBsZWZ0IGJsYW5rIGFs
cGhhIG51bWVyaWMgY2hhcmFjdGVycy4KKy8vCisvLyAgICAwMCAwMSAwMiAwMyAwNCAwNSAwNiAw
NyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZgorLy8gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIDAgICAwICBFICBFICBFICBFICBFICBFICBFICBF
ICBFICBFICBFICBFICBFICBFICBFCisvLyAxICAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAg
RSAgRSAgRSAgRSAgRSAgRSAgRQorLy8gMiAgIEUgICsgIEUgIEUgICsgIEUgICsgICsgICsgICsg
ICsgICsgICsgIFUgIFUgIDAKKy8vIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl
ICAlICBFICArICBFICAwICA8LS0gVGhvc2UgYXJlICA6IDsgPCA9ID4gPworLy8gNCAgICUKKy8v
IDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVICAwICBVICBVICBVICA8LS0g
VGhvc2UgYXJlICBbIFwgXSBeIF8KKy8vIDYgICBFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8LS0gVGhhdCdzICBgCisvLyA3ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRSAgRSAgRSAgVSAgRSAgPC0tIFRob3NlIGFyZSB7IHwgfSB+IChV
TlBSSU5UQUJMRSkKKy8vCisvLyBOT1RFOiBJIGRpZG4ndCBhY3R1YWxseSB0ZXN0IGFsbCB0aGUg
Y29udHJvbCBjaGFyYWN0ZXJzLiBTb21lIG1heSBiZQorLy8gZGlzYWxsb3dlZCBpbiB0aGUgaW5w
dXQsIGJ1dCB0aGV5IGFyZSBhbGwgYWNjZXB0ZWQgZXNjYXBlZCBleGNlcHQgZm9yIDAuCisvLyBJ
IGFsc28gZGlkbid0IHRlc3QgaWYgY2hhcmFjdGVycyBhZmZlY3RpbmcgSFRNTCBwYXJzaW5nIGFy
ZSBhbGxvd2VkCisvLyB1bmVzY2FwZWQsIGVnLiAoIikgb3IgKCMpLCB3aGljaCB3b3VsZCBpbmRp
Y2F0ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorLy8gU3VycHJpc2luZ2x5LCBzcGFjZSBp
cyBhY2NlcHRlZCBpbiB0aGUgaW5wdXQgYW5kIGFsd2F5cyBlc2NhcGVkLgorCisvLyBUaGlzIHRh
YmxlIGxpc3RzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB3ZSBhbGxv
dyBpbiB0aGUKKy8vIGlucHV0LCB3aXRoIDAgaW5kaWNhdGluZyBpdCBpcyBkaXNhbGxvd2VkLiBX
ZSB1c2UgdGhlIG1hZ2ljIGtFc2NhcGVkSG9zdENoYXIKKy8vIHZhbHVlIHRvIGluZGljYXRlIHRo
YXQgdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGVzY2FwZWQuIFdlIGFyZSBhIGxpdHRsZSBtb3Jl
CisvLyByZXN0cmljdGl2ZSB0aGFuIElFLCBidXQgbGVzcyByZXN0cmljdGl2ZSB0aGFuIEZpcmVm
b3guCisvLworLy8gTm90ZSB0aGF0IHdlIGRpc2FsbG93IHRoZSAlIGNoYXJhY3Rlci4gV2Ugd2ls
bCBhbGxvdyBpdCB3aGVuIHBhcnQgb2YgYW4KKy8vIGVzY2FwZSBzZXF1ZW5jZSwgb2YgY291cnNl
LCBidXQgdGhpcyBkaXNhbGxvd3MgIiUyNSIuIEV2ZW4gdGhvdWdoIElFIGFsbG93cworLy8gaXQs
IGFsbG93aW5nIGl0IHdvdWxkIHB1dCB1cyBpbiBhIGZ1bm55IHN0YXRlLiBJZiB0aGVyZSB3YXMg
YW4gaW52YWxpZAorLy8gZXNjYXBlIHNlcXVlbmNlIGxpa2UgIiV6eiIsIHdlJ2xsIGFkZCAiJTI1
enoiIHRvIHRoZSBvdXRwdXQgYW5kIGZhaWwuCisvLyBBbGxvd2luZyBwZXJjZW50cyBtZWFucyB3
ZSdsbCBzdWNjZWVkIGEgc2Vjb25kIHRpbWUsIHNvIHZhbGlkaXR5IHdvdWxkIGNoYW5nZQorLy8g
YmFzZWQgb24gaG93IG1hbnkgdGltZXMgeW91IHJ1biB0aGUgY2Fub25pY2FsaXplci4gV2UgcHJl
ZmVyIHRvIGFsd2F5cyByZXBvcnQKKy8vIHRoZSBzYW1lIHZhaWxpZGl0eSwgc28gcmVqZWN0IHRo
aXMuCitjb25zdCB1bnNpZ25lZCBjaGFyIGtFc2MgPSAweGZmOworY29uc3QgdW5zaWduZWQgY2hh
ciBrSG9zdENoYXJMb29rdXBbMHg4MF0gPSB7CisgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwKKyAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorLy8g
ICcgJyAgICEgICAgICIgICAgICMgICAgICQgICAgICUgICAgICYgICAgICcgICAgICggICAgICkg
ICAgICogICAgICsgICAgICwgICAgIC0gICAgIC4gICAgIC8KKyAgICBrRXNjLCBrRXNjLCBrRXNj
LCBrRXNjLCBrRXNjLCAgIDAsICBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCAgJysnLCBr
RXNjLCAgJy0nLCAgJy4nLCAgIDAsCisvLyAgIDAgICAgMSAgICAyICAgIDMgICAgNCAgICA1ICAg
IDYgICAgNyAgICA4ICAgIDkgICAgOiAgICA7ICAgIDwgICAgPSAgICA+ICAgID8KKyAgICAnMCcs
ICAnMScsICAnMicsICAnMycsICAnNCcsICAnNScsICAnNicsICAnNycsICAnOCcsICAnOScsICAn
OicsICAgMCAsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCAsCisvLyAgIEAgICAgICBBICAgICBCICAg
ICBDICAgICBEICAgICBFICAgICBGICAgICBHICAgICBIICAgICBJICAgICBKICAgICBLICAgICBM
ICAgICBNICAgICBOICAgICBPCisgICAga0VzYywgICdhJywgICdiJywgICdjJywgICdkJywgICdl
JywgICdmJywgICdnJywgICdoJywgICdpJywgICdqJywgICdrJywgICdsJywgICdtJywgICduJywg
ICdvJywKKy8vICAgUCAgICAgUSAgICAgUiAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAg
ICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAgXSAgICAgXiAgICAgXworICAgICdwJywg
ICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2JywgICd3JywgICd4JywgICd5JywgICd6
JywgICdbJywgICAwICwgICddJywgICAwICwgICdfJywKKy8vICAgYCAgICAgIGEgICAgIGIgICAg
IGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgICAgIGggICAgIGkgICAgIGogICAgIGsgICAgIGwg
ICAgIG0gICAgIG4gICAgIG8KKyAgICBrRXNjLCAgJ2EnLCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2Un
LCAgJ2YnLCAgJ2cnLCAgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAg
J28nLAorLy8gICBwICAgICBxICAgICByICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAg
ICB4ICAgICB5ICAgICB6ICAgICB7ICAgICB8ICAgICB9ICAgICB+CisgICAgJ3AnLCAgJ3EnLCAg
J3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cnLCAgJ3gnLCAgJ3knLCAgJ3onLCBrRXNj
LCBrRXNjLCBrRXNjLCAgIDAgLCAgIDAgfTsKKwordHlwZWRlZiBSYXdVUkxCdWZmZXI8Y2hhcj4g
U3RhY2tCdWZmZXI7Cit0eXBlZGVmIFJhd1VSTEJ1ZmZlcjxVQ2hhcj4gU3RhY2tCdWZmZXJXOwor
CisvLyBTY2FucyBhIGhvc3QgbmFtZSBhbmQgZmlsbHMgaW4gdGhlIG91dHB1dCBmbGFncyBhY2Nv
cmRpbmcgdG8gd2hhdCB3ZSBmaW5kLgorLy8gfGhhc05vbkFTQ0lJfCB3aWxsIGJlIHRydWUgaWYg
dGhlcmUgYXJlIGFueSBub24tNy1iaXQgY2hhcmFjdGVycywgYW5kCisvLyB8aGFzRXNjYXBlZHwg
d2lsbCBiZSB0cnVlIGlmIHRoZXJlIGlzIGEgcGVyY2VudCBzaWduLgordGVtcGxhdGU8dHlwZW5h
bWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Cit2b2lkIFNjYW5Ib3N0bmFtZShjb25zdCBDSEFSKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIGJvb2wqIGhhc05vbkFTQ0lJLCBib29sKiBo
YXNFc2NhcGVkKQoreworICAgIGludCBlbmQgPSBob3N0LmVuZCgpOworICAgICpoYXNOb25BU0NJ
SSA9IGZhbHNlOworICAgICpoYXNFc2NhcGVkID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IGhv
c3QuYmVnaW4oKTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hB
Uj4oc3BlY1tpXSkgPj0gMHg4MCkKKyAgICAgICAgICAgICpoYXNOb25BU0NJSSA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHNwZWNbaV0gPT0gJyUnKQorICAgICAgICAgICAgKmhhc0VzY2FwZWQg
PSB0cnVlOworICAgIH0KK30KKworLy8gQ2Fub25pY2FsaXplcyBhIGhvc3QgbmFtZSB0aGF0IGlz
IGVudGlyZWx5IDgtYml0IGNoYXJhY3RlcnMgKGV2ZW4gdGhvdWdoCisvLyB0aGUgdHlwZSBob2xk
aW5nIHRoZW0gbWF5IGJlIDE2IGJpdHMuIEVzY2FwZWQgY2hhcmFjdGVycyB3aWxsIGJlIHVuZXNj
YXBlZC4KKy8vIE5vbi03LWJpdCBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgVVRGLTgpIHdpbGwg
YmUgcGFzc2VkIHVuY2hhbmdlZC4KKy8vCisvLyBUaGUgfCpoYXNOb25BU0NJSXwgZmxhZyB3aWxs
IGJlIHRydWUgaWYgdGhlcmUgYXJlIG5vbi03LWJpdCBjaGFyYWN0ZXJzIGluCisvLyB0aGUgb3V0
cHV0LgorLy8KKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiB0d28gc2l0dWF0aW9uczoKKy8v
CisvLyAgKiBXaGVuIHRoZSBjYWxsZXIga25vd3MgdGhlcmUgaXMgbm8gbm9uLUFTQ0lJIG9yIHBl
cmNlbnQgZXNjYXBlZAorLy8gICAgY2hhcmFjdGVycy4gVGhpcyBpcyB3aGF0IERvSG9zdCBkb2Vz
LiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBjb21wbGV0ZWx5CisvLyAgICBjYW5vbmljYWxpemVkIGhv
c3Qgc2luY2Ugd2Uga25vdyBub3RoaW5nIHdlaXJkIGNhbiBoYXBwZW4gKGVzY2FwZWQKKy8vICAg
IGNoYXJhY3RlcnMgY291bGQgYmUgdW5lc2NhcGVkIHRvIG5vbi03LWJpdCwgc28gdGhleSBoYXZl
IHRvIGJlIHRyZWF0ZWQKKy8vICAgIHdpdGggc3VzcGljaW9uIGF0IHRoaXMgcG9pbnQpLiBJdCBk
b2VzIG5vdCB1c2UgdGhlIHxoYXNOb25BU0NJSXwgZmxhZy4KKy8vCisvLyAgKiBXaGVuIHRoZSBj
YWxsZXIgaGFzIGFuIDgtYml0IHN0cmluZyB0aGF0IG1heSBuZWVkIHVuZXNjYXBpbmcuCisvLyAg
ICBEb0NvbXBsZXhIb3N0IGNhbGxzIHVzIHRoaXMgc2l0dWF0aW9uIHRvIGRvIHVuZXNjYXBpbmcg
YW5kIHZhbGlkYXRpb24uCisvLyAgICBBZnRlciB0aGlzLCBpdCBtYXkgZG8gb3RoZXIgSUROIG9w
ZXJhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUKKy8vICAgIHwqaGFzTm9uQVND
SUl8IGZsYWcuCisvLworLy8gVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgaWYgdGhlIG91dHB1
dCBpcyBhIHBvdGVudGlhbGx5IHZhbGlkIGhvc3QgbmFtZS4KK3RlbXBsYXRlPHR5cGVuYW1lIElO
Q0hBUiwgdHlwZW5hbWUgT1VUQ0hBUj4KK2Jvb2wgRG9TaW1wbGVIb3N0KGNvbnN0IElOQ0hBUiog
aG9zdCwKKyAgICAgICAgICAgICAgICAgIGludCBob3N0TGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPE9VVENIQVI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICBib29sKiBo
YXNOb25BU0NJSSkKK3sKKyAgICAqaGFzTm9uQVNDSUkgPSBmYWxzZTsKKworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBob3N0TGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgdW5zaWduZWQgc291cmNlID0gaG9zdFtpXTsKKyAgICAgICAgaWYgKHNvdXJjZSA9
PSAnJScpIHsKKyAgICAgICAgICAgIC8vIFVuZXNjYXBlIGZpcnN0LCBpZiBwb3NzaWJsZS4KKyAg
ICAgICAgICAgIC8vIFNvdXJjZSB3aWxsIGJlIHVzZWQgb25seSBpZiBkZWNvZGUgb3BlcmF0aW9u
IHdhcyBzdWNjZXNzZnVsLgorICAgICAgICAgICAgaWYgKCFEZWNvZGVFc2NhcGVkKGhvc3QsICZp
LCBob3N0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KCZzb3VyY2UpKSkgeworICAgICAgICAgICAgICAgIC8vIElu
dmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIuIFRoZXJlIGlzIG5vdGhpbmcgdGhhdCBjYW4gbWFrZSB0
aGlzCisgICAgICAgICAgICAgICAgLy8gaG9zdCB2YWxpZC4gV2UgYXBwZW5kIGFuIGVzY2FwZWQg
cGVyY2VudCBzbyB0aGUgVVJMIGxvb2tzIHJlYXNvbmFibGUKKyAgICAgICAgICAgICAgICAvLyBh
bmQgbWFyayBhcyBmYWlsZWQuCisgICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJh
Y3RlcignJScsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNvdXJjZSA8IDB4ODApIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgQVNDSUkgaW5w
dXQsIHdlIGNhbiB1c2Ugb3VyIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcmVwbGFjZW1lbnQgPSBrSG9zdENoYXJMb29rdXBbc291cmNlXTsKKyAgICAgICAgICAgIGlm
ICghcmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3Rlciwg
YWRkIGl0IGFzIHBlcmNlbnQtZXNjYXBlZCBhbmQgbWFyayBhcyBmYWlsZWQuCisgICAgICAgICAg
ICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rlcihzb3VyY2UsIG91dHB1dCk7CisgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBsYWNl
bWVudCA9PSBrRXNjKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGFyYWN0ZXIgaXMgdmFs
aWQgYnV0IHNob3VsZCBiZSBlc2NhcGVkLgorICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2Fw
ZWRDaGFyYWN0ZXIoc291cmNlLCBvdXRwdXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBDb21tb24gY2FzZSwgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyB2YWxpZCBp
biBhIGhvc3RuYW1lLCB0aGUgbG9va3VwCisgICAgICAgICAgICAgICAgLy8gdGFibGUgdGVsbHMg
dXMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGF0IGNoYXJhY3RlciAobG93ZXIK
KyAgICAgICAgICAgICAgICAvLyBjYXNlZCkuCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBJdCdzIGEgbm9uLWFzY2lpIGNoYXIuIEp1c3QgcHVzaCBpdCB0byB0aGUgb3V0cHV0
LgorICAgICAgICAgICAgLy8gSW4gY2FzZSB3aGVyZSB3ZSBoYXZlIFVDaGFyIGlucHV0LCBhbmQg
Y2hhciBvdXRwdXQgaXQncyBzYWZlIHRvCisgICAgICAgICAgICAvLyBjYXN0IFVDaGFyLT5jaGFy
IG9ubHkgaWYgaW5wdXQgc3RyaW5nIHdhcyBjb252ZXJ0ZWQgdG8gQVNDSUkuCisgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PE9VVENIQVI+KHNvdXJjZSkpOworICAgICAgICAg
ICAgKmhhc05vbkFTQ0lJID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBz
dWNjZXNzOworfQorCisvLyBDYW5vbmljYWxpemVzIGEgaG9zdCB0aGF0IHJlcXVpcmVzIElETiBj
b252ZXJzaW9uLiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcworYm9vbCBEb0lETkhvc3QoY29uc3Qg
VUNoYXIqIHNyYywgaW50IHNvdXJjZUxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7
CisgICAgLy8gV2UgbmVlZCB0byBlc2NhcGUgVVJMIGJlZm9yZSBkb2luZyBJRE4gY29udmVyc2lv
biwgc2luY2UgcHVuaWNvZGUgc3RyaW5ncworICAgIC8vIGNhbm5vdCBiZSBlc2NhcGVkIGFmdGVy
IHRoZXkgYXJlIGNyZWF0ZWQuCisgICAgUmF3VVJMQnVmZmVyPFVDaGFyPiB1cmxFc2NhcGVkSG9z
dDsKKyAgICBib29sIGhhc05vbkFTQ0lJOworICAgIERvU2ltcGxlSG9zdChzcmMsIHNvdXJjZUxl
bmd0aCwgdXJsRXNjYXBlZEhvc3QsICZoYXNOb25BU0NJSSk7CisKKyAgICBTdGFja0J1ZmZlclcg
d2lkZU91dHB1dDsKKyAgICBpZiAoIUlETlRvQVNDSUkodXJsRXNjYXBlZEhvc3QuZGF0YSgpLAor
ICAgICAgICAgICAgICAgICAgICB1cmxFc2NhcGVkSG9zdC5sZW5ndGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgd2lkZU91dHB1dCkpIHsKKyAgICAgICAgLy8gU29tZSBlcnJvciwgZ2l2ZSB1cC4g
VGhpcyB3aWxsIHdyaXRlIHNvbWUgcmVhc29uYWJsZSBsb29raW5nCisgICAgICAgIC8vIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBzdHJpbmcgdG8gdGhlIG91dHB1dC4KKyAgICAgICAgQXBwZW5kSW52
YWxpZE5hcnJvd1N0cmluZyhzcmMsIDAsIHNvdXJjZUxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBjaGVjayB0aGUgQVNDSUkgb3V0
cHV0IGxpa2UgYSBub3JtYWwgaG9zdC4gSXQgd2lsbCBhbHNvIGhhbmRsZQorICAgIC8vIHVuZXNj
YXBpbmcuIEFsdGhvdWdoIHdlIHVuZXNjYXBlZCBldmVyeXRoaW5nIGJlZm9yZSB0aGlzIGZ1bmN0
aW9uIGNhbGwsIGlmCisgICAgLy8gc29tZWJvZHkgZG9lcyAlMDAgYXMgZnVsbHdpZHRoLCBJQ1Ug
d2lsbCBjb252ZXJ0IHRoaXMgdG8gQVNDSUkuCisgICAgYm9vbCBzdWNjZXNzID0gRG9TaW1wbGVI
b3N0KHdpZGVPdXRwdXQuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWRlT3V0cHV0Lmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsICZoYXNOb25BU0NJSSk7CisgICAgQVNTRVJUKCFoYXNOb25BU0NJSSk7CisgICAgcmV0dXJu
IHN1Y2Nlc3M7Cit9CisKKy8vIDgtYml0IGNvbnZlcnQgaG9zdCB0byBpdHMgQVNDSUkgdmVyc2lv
bjogdGhpcyBjb252ZXJ0cyB0aGUgVVRGLTggaW5wdXQgdG8KKy8vIFVURi0xNi4gVGhlIGhhc0Vz
Y2FwZWQgZmxhZyBzaG91bGQgYmUgc2V0IGlmIHRoZSBpbnB1dCBzdHJpbmcgcmVxdWlyZXMKKy8v
IHVuZXNjYXBpbmcuCitib29sIERvQ29tcGxleEhvc3QoY29uc3QgY2hhciogaG9zdCwgaW50IGhv
c3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNOb25BU0NJSSwgYm9vbCBoYXNF
c2NhcGVkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICAvLyBTYXZlIHRoZSBjdXJy
ZW50IHBvc2l0aW9uIGluIHRoZSBvdXRwdXQuIFdlIG1heSB3cml0ZSBzdHVmZiBhbmQgcmV3aW5k
IGl0CisgICAgLy8gYmVsb3csIHNvIHdlIG5lZWQgdG8ga25vdyB3aGVyZSB0byByZXdpbmQgdG8u
CisgICAgaW50IGJlZ2luTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCgpOworCisgICAgLy8gUG9pbnRz
IHRvIHRoZSBVVEYtOCBkYXRhIHdlIHdhbnQgdG8gY29udmVydC4gVGhpcyB3aWxsIGVpdGhlciBi
ZSB0aGUKKyAgICAvLyBpbnB1dCBvciB0aGUgdW5lc2NhcGVkIHZlcnNpb24gd3JpdHRlbiB0byB8
b3V0cHV0fCBpZiBuZWNlc3NhcnkuCisgICAgY29uc3QgY2hhciogdXRmOFNvdXJjZTsKKyAgICBp
bnQgdXRmOFNvdXJjZUxlbmd0aDsKKyAgICBpZiAoaGFzRXNjYXBlZCkgeworICAgICAgICAvLyBV
bmVzY2FwZSBiZWZvcmUgY29udmVydGluZyB0byBVVEYtMTYgZm9yIElETi4gV2Ugd3JpdGUgdGhp
cyBpbnRvIHRoZQorICAgICAgICAvLyBvdXRwdXQgYmVjYXVzZSBpdCBtb3N0IGxpa2VseSBkb2Vz
IG5vdCByZXF1aXJlIElETml6YXRpb24sIGFuZCB3ZSBjYW4KKyAgICAgICAgLy8gc2F2ZSBhbm90
aGVyIGh1Z2Ugc3RhY2sgYnVmZmVyLiBJdCB3aWxsIGJlIHJlcGxhY2VkIGJlbG93IGlmIGl0IHJl
cXVpcmVzCisgICAgICAgIC8vIElETi4gVGhpcyB3aWxsIGFsc28gdXBkYXRlIG91ciBub24tQVND
SUkgZmxhZyBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgIC8vIHVuZXNjYXBlZCBpbnB1
dCByZXF1aXJlcyBJRE4uCisgICAgICAgIGlmICghRG9TaW1wbGVIb3N0KGhvc3QsIGhvc3RMZW5n
dGgsIG91dHB1dCwgJmhhc05vbkFTQ0lJKSkgeworICAgICAgICAgICAgLy8gRXJyb3Igd2l0aCBz
b21lIGVzY2FwZSBzZXF1ZW5jZS4gV2UnbGwgY2FsbCB0aGUgY3VycmVudCBvdXRwdXQKKyAgICAg
ICAgICAgIC8vIGNvbXBsZXRlLiBEb1NpbXBsZUhvc3Qgd2lsbCBoYXZlIHdyaXR0ZW4gc29tZSAi
cmVhc29uYWJsZSIgb3V0cHV0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVW5lc2NhcGluZyBtYXkgaGF2ZSBsZWZ0IHVzIHdpdGggQVNDSUkgaW5w
dXQsIGluIHdoaWNoIGNhc2UgdGhlCisgICAgICAgIC8vIHVuZXNjYXBlZCB2ZXJzaW9uIHdlIHdy
b3RlIHRvIG91dHB1dCBpcyBjb21wbGV0ZS4KKyAgICAgICAgaWYgKCFoYXNOb25BU0NJSSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIFNhdmUgdGhlIHBvaW50ZXIgaW50
byB0aGUgZGF0YSB3YXMganVzdCBjb252ZXJ0ZWQgKGl0IG1heSBiZSBhcHBlbmRlZCB0bworICAg
ICAgICAvLyBvdGhlciBkYXRhIGluIHRoZSBvdXRwdXQgYnVmZmVyKS4KKyAgICAgICAgdXRmOFNv
dXJjZSA9ICZvdXRwdXQuZGF0YSgpW2JlZ2luTGVuZ3RoXTsKKyAgICAgICAgdXRmOFNvdXJjZUxl
bmd0aCA9IG91dHB1dC5sZW5ndGgoKSAtIGJlZ2luTGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdW5lc2NhcGUsIHVzZSBpbnB1dCBmb3IgSUROaXphdGlv
biBsYXRlci4gKFdlIGtub3cgdGhlCisgICAgICAgIC8vIGlucHV0IGhhcyBub24tQVNDSUksIG9y
IHRoZSBzaW1wbGUgdmVyc2lvbiB3b3VsZCBoYXZlIGJlZW4gY2FsbGVkCisgICAgICAgIC8vIGlu
c3RlYWQgb2YgdXMuKQorICAgICAgICB1dGY4U291cmNlID0gaG9zdDsKKyAgICAgICAgdXRmOFNv
dXJjZUxlbmd0aCA9IGhvc3RMZW5ndGg7CisgICAgfQorCisgICAgLy8gTm9uLUFTQ0lJIGlucHV0
IHJlcXVpcmVzIElETiwgY29udmVydCB0byBVVEYtMTYgYW5kIGRvIHRoZSBJRE4gY29udmVyc2lv
bi4KKyAgICAvLyBBYm92ZSwgd2UgbWF5IGhhdmUgdXNlZCB0aGUgb3V0cHV0IHRvIHdyaXRlIHRo
ZSB1bmVzY2FwZWQgdmFsdWVzIHRvLCBzbworICAgIC8vIHdlIGhhdmUgdG8gcmV3aW5kIGl0IHRv
IHdoZXJlIHdlIHN0YXJ0ZWQgYWZ0ZXIgd2UgY29udmVydCBpdCB0byBVVEYtMTYuCisgICAgU3Rh
Y2tCdWZmZXJXIHV0ZjE2OworICAgIGlmICghQ29udmVydFVURjhUb1VURjE2KHV0ZjhTb3VyY2Us
IHV0ZjhTb3VyY2VMZW5ndGgsIHV0ZjE2KSkgeworICAgICAgICAvLyBJbiB0aGlzIGVycm9yIGNh
c2UsIHRoZSBpbnB1dCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgb3V0cHV0LgorICAgICAgICBTdGFj
a0J1ZmZlciB1dGY4OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHV0ZjhTb3VyY2VMZW5n
dGg7IGkrKykKKyAgICAgICAgICAgIHV0ZjguYXBwZW5kKHV0ZjhTb3VyY2VbaV0pOworICAgICAg
ICBvdXRwdXQuc2V0TGVuZ3RoKGJlZ2luTGVuZ3RoKTsKKyAgICAgICAgQXBwZW5kSW52YWxpZE5h
cnJvd1N0cmluZyh1dGY4LmRhdGEoKSwgMCwgdXRmOC5sZW5ndGgoKSwgb3V0cHV0KTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBvdXRwdXQuc2V0TGVuZ3RoKGJlZ2luTGVuZ3Ro
KTsKKworICAgIC8vIFRoaXMgd2lsbCBjYWxsIERvU2ltcGxlSG9zdCB3aGljaCB3aWxsIGRvIG5v
cm1hbCBBU0NJSSBjYW5vbmljYWxpemF0aW9uCisgICAgLy8gYW5kIGFsc28gY2hlY2sgZm9yIElQ
IGFkZHJlc3NlcyBpbiB0aGUgb3V0cHQuCisgICAgcmV0dXJuIERvSUROSG9zdCh1dGYxNi5kYXRh
KCksIHV0ZjE2Lmxlbmd0aCgpLCBvdXRwdXQpOworfQorCisvLyBVVEYtMTYgY29udmVydCBob3N0
IHRvIGl0cyBBU0NJSSB2ZXJzaW9uLiBUaGUgc2V0IHVwIGlzIGFscmVhZHkgcmVhZHkgZm9yCisv
LyB0aGUgYmFja2VuZCwgc28gd2UganVzdCBwYXNzIHRocm91Z2guIFRoZSBoYXNFc2NhcGVkIGZs
YWcgc2hvdWxkIGJlIHNldCBpZgorLy8gdGhlIGlucHV0IHN0cmluZyByZXF1aXJlcyB1bmVzY2Fw
aW5nLgorYm9vbCBEb0NvbXBsZXhIb3N0KGNvbnN0IFVDaGFyKiBob3N0LCBpbnQgaG9zdExlbmd0
aCwgYm9vbCBoYXNOb25BU0NJSSwgYm9vbCBoYXNFc2NhcGVkLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCkKK3sKKyAgICBpZiAoaGFzRXNjYXBlZCkgeworICAgICAgICAvLyBZaWtlcywgd2UgaGF2
ZSBlc2NhcGVkIGNoYXJhY3RlcnMgd2l0aCB3aWRlIGlucHV0LiBUaGUgZXNjYXBlZAorICAgICAg
ICAvLyBjaGFyYWN0ZXJzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBVVEYtOC4gVG8gc29sdmUg
dGhpcyBwcm9ibGVtLAorICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIFVURi04LCB1bmVzY2FwZSwg
dGhlbiBjb252ZXJ0IGJhY2sgdG8gVVRGLTE2IGZvciBJRE4uCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdlIGRvbid0IGJvdGhlciB0byBvcHRpbWl6ZSB0aGUgY29udmVyc2lvbiBpbiB0aGUgQVND
SUkgY2FzZSAod2hpY2gKKyAgICAgICAgLy8gKmNvdWxkKiBqdXN0IGJlIGEgY29weSkgYW5kIHVz
ZSB0aGUgVVRGLTggcGF0aCwgYmVjYXVzZSBpdCBzaG91bGQgYmUKKyAgICAgICAgLy8gdmVyeSBy
YXJlIHRoYXQgaG9zdCBuYW1lcyBoYXZlIGVzY2FwZWQgY2hhcmFjdGVycywgYW5kIGl0IGlzIHJl
bGF0aXZlbHkKKyAgICAgICAgLy8gZmFzdCB0byBkbyB0aGUgY29udmVyc2lvbiBhbnl3YXkuCisg
ICAgICAgIFN0YWNrQnVmZmVyIHV0Zjg7CisgICAgICAgIGlmICghQ29udmVydFVURjE2VG9VVEY4
KGhvc3QsIGhvc3RMZW5ndGgsIHV0ZjgpKSB7CisgICAgICAgICAgICBBcHBlbmRJbnZhbGlkTmFy
cm93U3RyaW5nKGhvc3QsIDAsIGhvc3RMZW5ndGgsIG91dHB1dCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmNlIHdlIGNvbnZlcnQgdG8gVVRG
LTgsIHdlIGNhbiB1c2UgdGhlIDgtYml0IHZlcnNpb24gb2YgdGhlIGNvbXBsZXgKKyAgICAgICAg
Ly8gaG9zdCBoYW5kbGluZyBjb2RlIGFib3ZlLgorICAgICAgICByZXR1cm4gRG9Db21wbGV4SG9z
dCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSwgaGFzTm9uQVNDSUksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc0VzY2FwZWQsIG91dHB1dCk7CisgICAgfQorCisgICAgLy8gTm8g
dW5lc2NhcGluZyBuZWNlc3NhcnksIHdlIGNhbiBzYWZlbHkgcGFzcyB0aGUgaW5wdXQgdG8gSUNV
LiBUaGlzCisgICAgLy8gZnVuY3Rpb24gd2lsbCBvbmx5IGdldCBjYWxsZWQgaWYgd2UgZWl0aGVy
IGhhdmUgZXNjYXBlZCBvciBub24tYXNjaWkKKyAgICAvLyBpbnB1dCwgc28gaXQncyBzYWZlIHRv
IGp1c3QgdXNlIElDVSBub3cuIEV2ZW4gaWYgdGhlIGlucHV0IGlzIEFTQ0lJLAorICAgIC8vIHRo
aXMgZnVuY3Rpb24gd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgKGp1c3Qgc2xvd2VyIHRoYW4gd2Ug
Y291bGQpLgorICAgIHJldHVybiBEb0lETkhvc3QoaG9zdCwgaG9zdExlbmd0aCwgb3V0cHV0KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Cit2b2lkIERvSG9z
dChjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0
LAorICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICBDYW5v
bkhvc3RJbmZvKiBob3N0SW5mbykKK3sKKyAgICBpZiAoaG9zdC5sZW5ndGgoKSA8PSAwKSB7Cisg
ICAgICAgIC8vIEVtcHR5IGhvc3RzIGRvbid0IG5lZWQgYW55dGhpbmcuCisgICAgICAgIGhvc3RJ
bmZvLT5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpORVVUUkFMOworICAgICAgICBob3N0SW5mby0+
b3VwdXRIb3N0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBib29sIGhhc05vbkFTQ0lJOworICAgIGJvb2wgaGFzRXNjYXBlZDsKKyAgICBTY2FuSG9zdG5h
bWU8Q0hBUiwgVUNIQVI+KHNwZWMsIGhvc3QsICZoYXNOb25BU0NJSSwgJmhhc0VzY2FwZWQpOwor
CisgICAgLy8gS2VlcCB0cmFjayBvZiBvdXRwdXQncyBpbml0aWFsIGxlbmd0aCwgc28gd2UgY2Fu
IHJld2luZCBsYXRlci4KKyAgICBjb25zdCBpbnQgb3V0cHV0QmVnaW4gPSBvdXRwdXQubGVuZ3Ro
KCk7CisKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgaWYgKCFoYXNOb25BU0NJSSAmJiAhaGFzRXNj
YXBlZCkgeworICAgICAgICBzdWNjZXNzID0gRG9TaW1wbGVIb3N0KCZzcGVjW2hvc3QuYmVnaW4o
KV0sIGhvc3QubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LCAmaGFzTm9uQVNDSUkpOworICAgICAgICBBU1NFUlQoIWhhc05vbkFTQ0lJKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBzdWNjZXNzID0gRG9Db21wbGV4SG9zdCgmc3BlY1tob3N0LmJlZ2luKCld
LCBob3N0Lmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOb25B
U0NJSSwgaGFzRXNjYXBlZCwgb3V0cHV0KTsKKyAgICB9CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgLy8gQ2Fub25pY2FsaXphdGlvbiBmYWlsZWQuIFNldCBCUk9LRU4gdG8gbm90aWZ5
IHRoZSBjYWxsZXIuCisgICAgICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpC
Uk9LRU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQWZ0ZXIgYWxsIHRoZSBvdGhlciBjYW5v
bmljYWxpemF0aW9uLCBjaGVjayBpZiB3ZSBlbmRlZCB1cCB3aXRoIGFuIElQCisgICAgICAgIC8v
IGFkZHJlc3MuIElQIGFkZHJlc3NlcyBhcmUgc21hbGwsIHNvIHdyaXRpbmcgaW50byB0aGlzIHRl
bXBvcmFyeSBidWZmZXIKKyAgICAgICAgLy8gc2hvdWxkIG5vdCBjYXVzZSBhbiBhbGxvY2F0aW9u
LgorICAgICAgICBSYXdVUkxCdWZmZXI8Y2hhciwgNjQ+IGNhbm9uX2lwOworICAgICAgICBDYW5v
bmljYWxpemVJUEFkZHJlc3Mob3V0cHV0LmRhdGEoKSwgVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
b3V0cHV0QmVnaW4sIG91dHB1dC5sZW5ndGgoKSksIGNhbm9uX2lwLCBob3N0SW5mbyk7CisKKyAg
ICAgICAgLy8gSWYgd2UgZ290IGFuIElQdjQvSVB2NiBhZGRyZXNzLCBjb3B5IHRoZSBjYW5vbmlj
YWwgZm9ybSBiYWNrIHRvIHRoZQorICAgICAgICAvLyByZWFsIGJ1ZmZlci4gT3RoZXJ3aXNlLCBp
dCdzIGEgaG9zdG5hbWUgb3IgYnJva2VuIElQLCBpbiB3aGljaCBjYXNlCisgICAgICAgIC8vIHdl
IGp1c3QgbGVhdmUgaXQgaW4gcGxhY2UuCisgICAgICAgIGlmIChob3N0SW5mby0+SXNJUEFkZHJl
c3MoKSkgeworICAgICAgICAgICAgb3V0cHV0LnNldExlbmd0aChvdXRwdXRCZWdpbik7CisgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKGNhbm9uX2lwLmRhdGEoKSwgY2Fub25faXAubGVuZ3RoKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgaG9zdEluZm8tPm91cHV0SG9zdCA9IFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKG91dHB1dEJlZ2luLCBvdXRwdXQubGVuZ3RoKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQorCitib29sIENhbm9uaWNhbGl6ZUhvc3QoY29uc3QgY2hhciogc3BlYywKKyAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgVVJMQ29tcG9uZW50KiBvdXB1dEhvc3QpCit7CisgICAgQ2Fub25Ib3N0SW5mbyBob3N0SW5m
bzsKKyAgICBEb0hvc3Q8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCAm
aG9zdEluZm8pOworICAgICpvdXB1dEhvc3QgPSBob3N0SW5mby5vdXB1dEhvc3Q7CisgICAgcmV0
dXJuIChob3N0SW5mby5mYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOKTsKK30KKworYm9v
bCBDYW5vbmljYWxpemVIb3N0KGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQq
IG91cHV0SG9zdCkKK3sKKyAgICBDYW5vbkhvc3RJbmZvIGhvc3RJbmZvOworICAgIERvSG9zdDxV
Q2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgJmhvc3RJbmZvKTsKKyAgICAqb3VwdXRI
b3N0ID0gaG9zdEluZm8ub3VwdXRIb3N0OworICAgIHJldHVybiAoaG9zdEluZm8uZmFtaWx5ICE9
IENhbm9uSG9zdEluZm86OkJST0tFTik7Cit9CisKK3ZvaWQgQ2Fub25pY2FsaXplSG9zdFZlcmJv
c2UoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fub25Ib3N0
SW5mbyogaG9zdEluZm8pCit7CisgICAgRG9Ib3N0PGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMs
IGhvc3QsIG91dHB1dCwgaG9zdEluZm8pOworfQorCit2b2lkIENhbm9uaWNhbGl6ZUhvc3RWZXJi
b3NlKGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5vbkhv
c3RJbmZvKiBob3N0SW5mbykKK3sKKyAgICBEb0hvc3Q8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0
LCBvdXRwdXQsIGhvc3RJbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
cgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4NTJiMGE5MTA3OGM4MzAw
OGNkOGIzYmNhMjRhMzA2NGE0MmM1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLy8gQ29weXJpZ2h0
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBJQ1UgaW50ZWdyYXRpb24gZnVuY3Rpb25zLgor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiIC8v
IGZvciBfaXRvYV9zCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y252X2NiLmg+Cisj
aW5jbHVkZSA8dW5pY29kZS91aWRuYS5oPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsKKwor
Ly8gQ2FsbGVkIHdoZW4gY29udmVydGluZyBhIGNoYXJhY3RlciB0aGF0IGNhbiBub3QgYmUgcmVw
cmVzZW50ZWQsIHRoaXMgd2lsbAorLy8gYXBwZW5kIGFuIGVzY2FwZWQgdmVyc2lvbiBvZiB0aGUg
bnVtZXJpY2FsIGNoYXJhY3RlciByZWZlcmVuY2UgZm9yIHRoYXQgY29kZQorLy8gcG9pbnQuIEl0
IGlzIG9mIHRoZSBmb3JtICImIzEyMzQ7IiBhbmQgd2Ugd2lsbCBlc2NhcGUgdGhlIG5vbi1kaWdp
dHMgdG8KKy8vICIlMjYlMjMxMjM0JTNCIi4gV2h5PyBUaGlzIGlzIHdoYXQgTmV0c2NhcGUgZGlk
IGJhY2sgaW4gdGhlIG9sZGVuIGRheXMuCit2b2lkIGFwcGVuZFVSTEVzY2FwZWRDaGFyKGNvbnN0
IHZvaWQqIC8qIGNvbnRleHQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0
ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21BcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVQ2hhciogLyogY29kZV91bml0cyAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAvKiBsZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIg
Y29kZVBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tS
ZWFzb24gcmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlcnIp
Cit7CisgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQpIHsKKyAgICAgICAgKmVyciA9
IFVfWkVST19FUlJPUjsKKworICAgICAgICBjb25zdCBzdGF0aWMgaW50IHByZWZpeExlbmd0aCA9
IDY7CisgICAgICAgIGNvbnN0IHN0YXRpYyBjaGFyIHByZWZpeFtwcmVmaXhMZW5ndGggKyAxXSA9
ICIlMjYlMjMiOyAvLyAiJiMiIHBlcmNlbnQtZXNjYXBlZAorICAgICAgICB1Y252X2NiRnJvbVVX
cml0ZUJ5dGVzKGZyb21BcmdzLCBwcmVmaXgsIHByZWZpeExlbmd0aCwgMCwgZXJyKTsKKworICAg
ICAgICBBU1NFUlQoY29kZVBvaW50IDwgMHgxMTAwMDApOworICAgICAgICBjaGFyIG51bWJlcls4
XTsgLy8gTWF4IFVuaWNvZGUgY29kZSBwb2ludCBpcyA3IGRpZ2l0cy4KKyAgICAgICAgX2l0b2Ff
cyhjb2RlUG9pbnQsIG51bWJlciwgMTApOworICAgICAgICBpbnQgbnVtYmVyTGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8aW50PihzdHJsZW4obnVtYmVyKSk7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRl
Qnl0ZXMoZnJvbUFyZ3MsIG51bWJlciwgbnVtYmVyTGVuZ3RoLCAwLCBlcnIpOworCisgICAgICAg
IGNvbnN0IHN0YXRpYyBpbnQgcG9zdGZpeExlbmd0aCA9IDM7CisgICAgICAgIGNvbnN0IHN0YXRp
YyBjaGFyIHBvc3RmaXhbcG9zdGZpeExlbmd0aCArIDFdID0gIiUzQiI7IC8vICI7IiBwZXJjZW50
LWVzY2FwZWQKKyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVCeXRlcyhmcm9tQXJncywgcG9zdGZp
eCwgcG9zdGZpeExlbmd0aCwgMCwgZXJyKTsKKyAgICB9Cit9CisKKy8vIEEgY2xhc3MgZm9yIHNj
b3BpbmcgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgaW52YWxpZCBjaGFyYWN0ZXIgY2FsbGJhY2su
CitjbGFzcyBBcHBlbmRIYW5kbGVySW5zdGFsbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgb3du
ZXIgb2YgdGhpcyBvYmplY3QgbXVzdCBlbnN1cmUgdGhhdCB0aGUgY29udmVydGVyIGlzIGFsaXZl
IGZvciB0aGUKKyAgICAvLyBkdXJhdGlvbiBvZiB0aGlzIG9iamVjdCdzIGxpZmV0aW1lLgorICAg
IEFwcGVuZEhhbmRsZXJJbnN0YWxsZXIoVUNvbnZlcnRlciogY29udmVydGVyKQorICAgICAgICA6
IG1fY29udmVydGVyKGNvbnZlcnRlcikKKyAgICB7CisgICAgICAgIFVFcnJvckNvZGUgZXJyID0g
VV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXIs
IGFwcGVuZFVSTEVzY2FwZWRDaGFyLCAwLCAmbV9vbGRDYWxsYmFjaywgJm1fb2xkQ29udGV4dCwg
JmVycik7CisgICAgfQorCisgICAgfkFwcGVuZEhhbmRsZXJJbnN0YWxsZXIoKQorICAgIHsKKyAg
ICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJv
bVVDYWxsQmFjayhtX2NvbnZlcnRlciwgbV9vbGRDYWxsYmFjaywgbV9vbGRDb250ZXh0LCAwLCAw
LCAmZXJyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7
CisKKyAgICBVQ29udmVydGVyRnJvbVVDYWxsYmFjayBtX29sZENhbGxiYWNrOworICAgIGNvbnN0
IHZvaWQqIG1fb2xkQ29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKy8vIENvbnZlcnRz
IHRoZSBVbmljb2RlIGlucHV0IHJlcHJlc2VudGluZyBhIGhvc3RuYW1lIHRvIEFTQ0lJIHVzaW5n
IElETiBydWxlcy4KKy8vIFRoZSBvdXRwdXQgbXVzdCBiZSBBU0NJSSwgYnV0IGlzIHJlcHJlc2Vu
dGVkIGFzIHdpZGUgY2hhcmFjdGVycy4KKy8vCisvLyBPbiBzdWNjZXNzLCB0aGUgb3V0cHV0IHdp
bGwgYmUgZmlsbGVkIHdpdGggdGhlIEFTQ0lJIGhvc3QgbmFtZSBhbmQgaXQgd2lsbAorLy8gcmV0
dXJuIHRydWUuIFVubGlrZSBtb3N0IG90aGVyIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zLCB0
aGlzIGFzc3VtZXMgdGhhdAorLy8gdGhlIG91dHB1dCBpcyBlbXB0eS4gVGhlIGJlZ2lubmluZyBv
ZiB0aGUgaG9zdCB3aWxsIGJlIGF0IG9mZnNldCAwLCBhbmQKKy8vIHRoZSBsZW5ndGggb2YgdGhl
IG91dHB1dCB3aWxsIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgaG9zdCBuYW1lLgor
Ly8KKy8vIE9uIGVycm9yLCB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlLiBUaGUgb3V0cHV0IGluIHRo
aXMgY2FzZSBpcyB1bmRlZmluZWQuCitib29sIElETlRvQVNDSUkoY29uc3QgVUNoYXIqIHNyYywg
aW50IHNvdXJjZUxlbmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KQoreworICAgIEFTU0VS
VCghb3V0cHV0Lmxlbmd0aCgpKTsgLy8gT3V0cHV0IGJ1ZmZlciBpcyBhc3N1bWVkIGVtcHR5Lgor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFVzZSBBTExPV19VTkFTU0lHTkVEIHRvIGJl
IG1vcmUgdG9sZXJhbnQgb2YgaG9zdG5hbWVzIHRoYXQgdmlvbGF0ZQorICAgICAgICAvLyB0aGUg
c3BlYyAod2hpY2ggZG8gZXhpc3QpLiBUaGlzIGRvZXMgbm90IHByZXNlbnQgYW55IHJpc2sgYW5k
IGlzIGEKKyAgICAgICAgLy8gbGl0dGxlIG1vcmUgZnV0dXJlIHByb29mLgorICAgICAgICBVRXJy
b3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgaW50IG51bUNvbnZlcnRlZCA9IHVp
ZG5hX0lETlRvQVNDSUkoc3JjLCBzb3VyY2VMZW5ndGgsIG91dHB1dC5kYXRhKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuY2FwYWNpdHkoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJRE5BX0FMTE9X
X1VOQVNTSUdORUQsIDAsICZlcnIpOworICAgICAgICBpZiAoZXJyID09IFVfWkVST19FUlJPUikg
eworICAgICAgICAgICAgb3V0cHV0LnNldExlbmd0aChudW1Db252ZXJ0ZWQpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVyciAhPSBVX0JVRkZFUl9P
VkVSRkxPV19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVW5rbm93biBlcnJv
ciwgZ2l2ZSB1cC4KKworICAgICAgICAvLyBOb3QgZW5vdWdoIHJvb20gaW4gb3VyIGJ1ZmZlciwg
ZXhwYW5kLgorICAgICAgICBvdXRwdXQucmVzaXplKG91dHB1dC5jYXBhY2l0eSgpICogMik7Cisg
ICAgfQorfQorCitib29sIHJlYWRVVEZDaGFyKGNvbnN0IGNoYXIqIHN0ciwgaW50KiBiZWdpbiwg
aW50IGxlbmd0aCwgdW5zaWduZWQqIGNvZGVQb2ludE91dCkKK3sKKyAgICBpbnQgY29kZVBvaW50
OyAvLyBBdm9pZHMgd2FybmluZyB3aGVuIFU4X05FWFQgd3JpdGVzIC0xIHRvIGl0LgorICAgIFU4
X05FWFQoc3RyLCAqYmVnaW4sIGxlbmd0aCwgY29kZVBvaW50KTsKKyAgICAqY29kZVBvaW50T3V0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVQb2ludCk7CisKKyAgICAvLyBUaGUgSUNVIG1h
Y3JvIGFib3ZlIG1vdmVzIHRvIHRoZSBuZXh0IGNoYXIsIHdlIHdhbnQgdG8gcG9pbnQgdG8gdGhl
IGxhc3QKKyAgICAvLyBjaGFyIGNvbnN1bWVkLgorICAgICgqYmVnaW4pLS07CisKKyAgICAvLyBW
YWxpZGF0ZSB0aGUgZGVjb2RlZCB2YWx1ZS4KKyAgICBpZiAoVV9JU19VTklDT0RFX0NIQVIoY29k
ZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgKmNvZGVQb2ludE91dCA9IGtVbmlj
b2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIHJl
YWRVVEZDaGFyKGNvbnN0IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGludCBsZW5ndGgsIHVuc2ln
bmVkKiBjb2RlUG9pbnQpCit7CisgICAgaWYgKFUxNl9JU19TVVJST0dBVEUoc3RyWypiZWdpbl0p
KSB7CisgICAgICAgIGlmICghVTE2X0lTX1NVUlJPR0FURV9MRUFEKHN0clsqYmVnaW5dKSB8fCAq
YmVnaW4gKyAxID49IGxlbmd0aCB8fCAhVTE2X0lTX1RSQUlMKHN0clsqYmVnaW4gKyAxXSkpIHsK
KyAgICAgICAgICAgIC8vIEludmFsaWQgc3Vycm9nYXRlIHBhaXIuCisgICAgICAgICAgICAqY29k
ZVBvaW50ID0ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFZhbGlkIHN1cnJvZ2F0ZSBwYWlyLgor
ICAgICAgICAqY29kZVBvaW50ID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKHN0clsqYmVnaW5dLCBz
dHJbKmJlZ2luICsgMV0pOworICAgICAgICAoKmJlZ2luKSsrOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCBhIHN1cnJvZ2F0ZSwganVzdCBvbmUgMTYtYml0IHdvcmQuCisgICAgICAgICpj
b2RlUG9pbnQgPSBzdHJbKmJlZ2luXTsKKyAgICB9CisKKyAgICBpZiAoVV9JU19VTklDT0RFX0NI
QVIoKmNvZGVQb2ludCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSW52YWxpZCBj
b2RlIHBvaW50LgorICAgICpjb2RlUG9pbnQgPSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVy
OworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
cgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSVAuY3BwIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjMyZDliZGIwMzRkZDkwZTU2
YTNkM2I5MzhkMTliZDRmMGEyYTczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbklQLmNwcApAQCAtMCwwICsxLDcwMSBAQAorLy8gQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJV
UkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMQ2hhcmFjdGVyVHlwZXMuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9u
aWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisvLyBDb252ZXJ0cyBvbmUgb2YgdGhlIGNoYXJh
Y3RlciB0eXBlcyB0aGF0IHJlcHJlc2VudCBhIG51bWVyaWNhbCBiYXNlIHRvIHRoZQorLy8gY29y
cmVzcG9uZGluZyBiYXNlLgorc3RhdGljIGlubGluZSBpbnQgYmFzZUZvclR5cGUoVVJMQ2hhcmFj
dGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBVUkxDaGFyYWN0ZXJUeXBlczo6SGV4YWRlY2ltYWxDaGFyYWN0ZXI6CisgICAgICAg
IHJldHVybiAxNjsKKyAgICBjYXNlIFVSTENoYXJhY3RlclR5cGVzOjpEZWNpbWFsQ2hhcmFjdGVy
OgorICAgICAgICByZXR1cm4gMTA7CisgICAgY2FzZSBVUkxDaGFyYWN0ZXJUeXBlczo6T2N0YWxD
aGFyYWN0ZXI6CisgICAgICAgIHJldHVybiA4OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKworLy8gQ29udmVydHMgYW4gSVB2NCBjb21wb25lbnQgdG8gYSAzMi1i
aXQgbnVtYmVyLCB3aGlsZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cuCisvLworLy8gUG9zc2libGUg
cmV0dXJuIHZhbHVlczoKKy8vIC0gSVBWNCAgICAtIFRoZSBudW1iZXIgd2FzIHZhbGlkLCBhbmQg
ZGlkIG5vdCBvdmVyZmxvdy4KKy8vIC0gQlJPS0VOICAtIFRoZSBpbnB1dCB3YXMgbnVtZXJpYywg
YnV0IHRvbyBsYXJnZSBmb3IgYSAzMi1iaXQgZmllbGQuCisvLyAtIE5FVVRSQUwgLSBJbnB1dCB3
YXMgbm90IG51bWVyaWMuCisvLworLy8gVGhlIGlucHV0IGlzIGFzc3VtZWQgdG8gYmUgQVNDSUku
IEZpbmRJUHY0Q29tcG9uZW50cyBzaG91bGQgaGF2ZSBzdHJpcHBlZAorLy8gb3V0IGFueSBpbnB1
dCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiA3IGJpdHMuIFRoZSBjb21wb25lbnRzIGFyZSBhc3N1bWVk
CisvLyB0byBiZSBub24tZW1wdHkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Q2Fub25Ib3N0SW5mbzo6RmFtaWx5IElQdjRDb21wb25lbnRUb051bWJlcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXBvbmVudCwgdWludDMyX3QqIG51
bWJlcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IHRoZSBiYXNlCisgICAgVVJMQ2hhcmFjdGVyVHlw
ZXM6OkNoYXJhY3RlclR5cGVzIGJhc2U7CisgICAgaW50IGJhc2VQcmVmaXhMZW5ndGggPSAwOyAv
LyBTaXplIG9mIHRoZSBwcmVmaXggZm9yIHRoaXMgYmFzZS4KKyAgICBpZiAoc3BlY1tjb21wb25l
bnQuYmVnaW4oKV0gPT0gJzAnKSB7CisgICAgICAgIC8vIEVpdGhlciBoZXggb3IgZGVjLCBvciBh
IHN0YW5kYWxvbmUgemVyby4KKyAgICAgICAgaWYgKGNvbXBvbmVudC5sZW5ndGgoKSA9PSAxKSB7
CisgICAgICAgICAgICBiYXNlID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkRlY2ltYWxDaGFyYWN0ZXI7
CisgICAgICAgIH0gZWxzZSBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4oKSArIDFdID09ICdYJyB8
fCBzcGVjW2NvbXBvbmVudC5iZWdpbigpICsgMV0gPT0gJ3gnKSB7CisgICAgICAgICAgICBiYXNl
ID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkhleGFkZWNpbWFsQ2hhcmFjdGVyOworICAgICAgICAgICAg
YmFzZVByZWZpeExlbmd0aCA9IDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNl
ID0gVVJMQ2hhcmFjdGVyVHlwZXM6Ok9jdGFsQ2hhcmFjdGVyOworICAgICAgICAgICAgYmFzZVBy
ZWZpeExlbmd0aCA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9IFVS
TENoYXJhY3RlclR5cGVzOjpEZWNpbWFsQ2hhcmFjdGVyOworCisgICAgLy8gRXh0ZW5kIHRoZSBw
cmVmaXggdG8gY29uc3VtZSBhbGwgbGVhZGluZyB6ZXJvcy4KKyAgICB3aGlsZSAoYmFzZVByZWZp
eExlbmd0aCA8IGNvbXBvbmVudC5sZW5ndGgoKSAmJiBzcGVjW2NvbXBvbmVudC5iZWdpbigpICsg
YmFzZVByZWZpeExlbmd0aF0gPT0gJzAnKQorICAgICAgICArK2Jhc2VQcmVmaXhMZW5ndGg7CisK
KyAgICAvLyBQdXQgdGhlIGNvbXBvbmVudCwgbWludXMgYW55IGJhc2UgcHJlZml4LCBpbnRvIGEg
emVyby10ZXJtaW5hdGVkIGJ1ZmZlciBzbworICAgIC8vIHdlIGNhbiBjYWxsIHRoZSBzdGFuZGFy
ZCBsaWJyYXJ5LiBCZWNhdXNlIGxlYWRpbmcgemVyb3MgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAv
LyBkaXNjYXJkZWQsIGZpbGxpbmcgdGhlIGVudGlyZSBidWZmZXIgaXMgZ3VhcmFudGVlZCB0byB0
cmlnZ2VyIHRoZSAzMi1iaXQKKyAgICAvLyBvdmVyZmxvdyBjaGVjay4KKyAgICBjb25zdCBpbnQg
a01heENvbXBvbmVudExlbiA9IDE2OworICAgIGNoYXIgYnVmW2tNYXhDb21wb25lbnRMZW4gKyAx
XTsgLy8gZGlnaXRzICsgJ1wwJworICAgIGludCBkZXN0SSA9IDA7CisgICAgZm9yIChpbnQgaSA9
IGNvbXBvbmVudC5iZWdpbigpICsgYmFzZVByZWZpeExlbmd0aDsgaSA8IGNvbXBvbmVudC5lbmQo
KTsgaSsrKSB7CisgICAgICAgIC8vIFdlIGtub3cgdGhlIGlucHV0IGlzIDctYml0LCBzbyBjb252
ZXJ0IHRvIG5hcnJvdyAoaWYgdGhpcyBpcyB0aGUgd2lkZQorICAgICAgICAvLyB2ZXJzaW9uIG9m
IHRoZSB0ZW1wbGF0ZSkgYnkgY2FzdGluZy4KKyAgICAgICAgY2hhciBpbnB1dCA9IHN0YXRpY19j
YXN0PGNoYXI+KHNwZWNbaV0pOworCisgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhpcyBjaGFy
YWN0ZXIgaXMgT0sgZm9yIHRoZSBnaXZlbiBiYXNlLgorICAgICAgICBpZiAoIVVSTENoYXJhY3Rl
clR5cGVzOjppc0NoYXJhY3Rlck9mVHlwZShpbnB1dCwgYmFzZSkpCisgICAgICAgICAgICByZXR1
cm4gQ2Fub25Ib3N0SW5mbzo6TkVVVFJBTDsKKworICAgICAgICAvLyBGaWxsIHRoZSBidWZmZXIs
IGlmIHRoZXJlJ3Mgc3BhY2UgcmVtYWluaW5nLiBUaGlzIGNoZWNrIGFsbG93cyB1cyB0bworICAg
ICAgICAvLyB2ZXJpZnkgdGhhdCBhbGwgY2hhcmFjdGVycyBhcmUgbnVtZXJpYywgZXZlbiB0aG9z
ZSB0aGF0IGRvbid0IGZpdC4KKyAgICAgICAgaWYgKGRlc3RJIDwga01heENvbXBvbmVudExlbikK
KyAgICAgICAgICAgIGJ1ZltkZXN0SSsrXSA9IGlucHV0OworICAgIH0KKworICAgIGJ1ZltkZXN0
SV0gPSAnXDAnOworCisgICAgLy8gVXNlIHRoZSA2NC1iaXQgc3RydG9pIHNvIHdlIGdldCBhIGJp
ZyBudW1iZXIgKG5vIGhleCwgZGVjaW1hbCwgb3Igb2N0YWwKKyAgICAvLyBudW1iZXIgY2FuIG92
ZXJmbG93IGEgNjQtYml0IG51bWJlciBpbiA8PSAxNiBjaGFyYWN0ZXJzKS4KKyAgICB1aW50NjRf
dCBudW0gPSBfc3RydG91aTY0KGJ1ZiwgMCwgYmFzZUZvclR5cGUoYmFzZSkpOworCisgICAgLy8g
Q2hlY2sgZm9yIDMyLWJpdCBvdmVyZmxvdy4KKyAgICBpZiAobnVtID4gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJP
S0VOOworCisgICAgLy8gTm8gb3ZlcmZsb3cuIFN1Y2Nlc3MhCisgICAgKm51bWJlciA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihudW0pOworICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpJUFY0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jv
b2wgRG9GaW5kSVB2NENvbXBvbmVudHMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQgY29tcG9uZW50c1s0XSkKK3sKKyAgICBp
ZiAoIWhvc3QuaXNOb25FbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQg
Y3VycmVudENvbXBvbmVudCA9IDA7IC8vIEluZGV4IG9mIHRoZSBjb21wb25lbnQgd2UncmUgd29y
a2luZyBvbi4KKyAgICBpbnQgY3VycmVudENvbXBvbmVudEJlZ2luID0gaG9zdC5iZWdpbigpOyAv
LyBTdGFydCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCisgICAgaW50IGVuZCA9IGhvc3QuZW5k
KCk7CisgICAgZm9yIChpbnQgaSA9IGhvc3QuYmVnaW4oKTsgLyogbm90aGluZyAqLzsgKytpKSB7
CisgICAgICAgIGlmIChpID49IGVuZCB8fCBzcGVjW2ldID09ICcuJykgeworICAgICAgICAgICAg
Ly8gRm91bmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCisgICAgICAgICAgICBp
bnQgY29tcG9uZW50TGVuZ3RoID0gaSAtIGN1cnJlbnRDb21wb25lbnRCZWdpbjsKKyAgICAgICAg
ICAgIGNvbXBvbmVudHNbY3VycmVudENvbXBvbmVudF0gPSBVUkxDb21wb25lbnQoY3VycmVudENv
bXBvbmVudEJlZ2luLCBjb21wb25lbnRMZW5ndGgpOworCisgICAgICAgICAgICAvLyBUaGUgbmV4
dCBjb21wb25lbnQgc3RhcnRzIGFmdGVyIHRoZSBkb3QuCisgICAgICAgICAgICBjdXJyZW50Q29t
cG9uZW50QmVnaW4gPSBpICsgMTsKKyAgICAgICAgICAgIGN1cnJlbnRDb21wb25lbnQrKzsKKwor
ICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZW1wdHkgY29tcG9uZW50cyAodHdvIGRvdHMgaW4g
YSByb3cpLCBleGNlcHQgd2UgbWF5CisgICAgICAgICAgICAvLyBhbGxvdyBhbiBlbXB0eSBjb21w
b25lbnQgYXQgdGhlIGVuZCAodGhpcyB3b3VsZCBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAgICAg
ICAgLy8gaW5wdXQgZW5kcyBpbiBhIGRvdCkuIFdlIGFsc28gd2FudCB0byBlcnJvciBpZiB0aGUg
Y29tcG9uZW50IGlzCisgICAgICAgICAgICAvLyBlbXB0eSBhbmQgaXQncyB0aGUgb25seSBjb21w
b25lbnQgKGN1cnJlbnRDb21wb25lbnQgPT0gMSkuCisgICAgICAgICAgICBpZiAoIWNvbXBvbmVu
dExlbmd0aCAmJiAoaSA8IGVuZCB8fCBjdXJyZW50Q29tcG9uZW50ID09IDEpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGkgPj0gZW5kKQorICAgICAg
ICAgICAgICAgIGJyZWFrOyAvLyBFbmQgb2YgdGhlIGlucHV0LgorCisgICAgICAgICAgICBpZiAo
Y3VycmVudENvbXBvbmVudCA9PSA0KSB7CisgICAgICAgICAgICAgICAgLy8gQW55dGhpbmcgZWxz
ZSBhZnRlciB0aGUgNHRoIGNvbXBvbmVudCBpcyBhbiBlcnJvciB1bmxlc3MgaXQgaXMgYQorICAg
ICAgICAgICAgICAgIC8vIGRvdCB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSB0cmVhdGVkIGFzIHRo
ZSBlbmQgb2YgaW5wdXQuCisgICAgICAgICAgICAgICAgaWYgKHNwZWNbaV0gPT0gJy4nICYmIGkg
KyAxID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRpY19j
YXN0PFVDSEFSPihzcGVjW2ldKSA+PSAweDgwIHx8ICFVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0
Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKKyAgICAgICAgICAg
IC8vIEludmFsaWQgY2hhcmFjdGVyIGZvciBhbiBJUHY0IGFkZHJlc3MuCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaWxsIGluIGFueSB1bnVz
ZWQgY29tcG9uZW50cy4KKyAgICB3aGlsZSAoY3VycmVudENvbXBvbmVudCA8IDQpCisgICAgICAg
IGNvbXBvbmVudHNbY3VycmVudENvbXBvbmVudCsrXSA9IFVSTENvbXBvbmVudCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBGaW5kSVB2NENvbXBvbmVudHMoY29uc3QgY2hh
ciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQgY29tcG9uZW50
c1s0XSkKK3sKKyAgICByZXR1cm4gRG9GaW5kSVB2NENvbXBvbmVudHM8Y2hhciwgdW5zaWduZWQg
Y2hhcj4oc3BlYywgaG9zdCwgY29tcG9uZW50cyk7Cit9CisKK3N0YXRpYyBib29sIEZpbmRJUHY0
Q29tcG9uZW50cyhjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBV
UkxDb21wb25lbnQgY29tcG9uZW50c1s0XSkKK3sKKyAgICByZXR1cm4gRG9GaW5kSVB2NENvbXBv
bmVudHM8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0LCBjb21wb25lbnRzKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQ0hBUj4KK0Nhbm9uSG9zdEluZm86OkZhbWlseSBEb0lQdjRBZGRyZXNzVG9O
dW1iZXIoY29uc3QgQ0hBUiogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogaXB2NENvbXBvbmVu
dHNDb3VudCkKK3sKKyAgICAvLyBUaGUgaWRlbnRpZmllZCBjb21wb25lbnRzLiBOb3QgYWxsIG1h
eSBleGlzdC4KKyAgICBVUkxDb21wb25lbnQgY29tcG9uZW50c1s0XTsKKyAgICBpZiAoIUZpbmRJ
UHY0Q29tcG9uZW50cyhzcGVjLCBob3N0LCBjb21wb25lbnRzKSkKKyAgICAgICAgcmV0dXJuIENh
bm9uSG9zdEluZm86Ok5FVVRSQUw7CisKKyAgICAvLyBDb252ZXJ0IGV4aXN0aW5nIGNvbXBvbmVu
dHMgdG8gZGlnaXRzLiBWYWx1ZXMgdXAgdG8KKyAgICAvLyB8ZXhpc3RpbmdDb21wb25lbnRzfCB3
aWxsIGJlIHZhbGlkLgorICAgIHVpbnQzMl90IGNvbXBvbmVudFZhbHVlc1s0XTsKKyAgICBpbnQg
ZXhpc3RpbmdDb21wb25lbnRzID0gMDsKKworICAgIC8vIFNldCB0byB0cnVlIGlmIG9uZSBvciBt
b3JlIGNvbXBvbmVudHMgYXJlIEJST0tFTi4gQlJPS0VOIGlzIG9ubHkKKyAgICAvLyByZXR1cm5l
ZCBpZiBhbGwgY29tcG9uZW50cyBhcmUgSVBWNCBvciBCUk9LRU4sIHNvLCBmb3IgZXhhbXBsZSwK
KyAgICAvLyAxMjM0NTY3ODkxMjM0NS5kZSByZXR1cm5zIE5FVVRSQUwgcmF0aGVyIHRoYW4gYnJv
a2VuLgorICAgIGJvb2wgYnJva2VuID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0
OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0ubGVuZ3RoKCkgPD0gMCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBDYW5vbkhvc3RJbmZvOjpGYW1pbHkgZmFtaWx5ID0g
SVB2NENvbXBvbmVudFRvTnVtYmVyKHNwZWMsIGNvbXBvbmVudHNbaV0sICZjb21wb25lbnRWYWx1
ZXNbZXhpc3RpbmdDb21wb25lbnRzXSk7CisKKyAgICAgICAgaWYgKGZhbWlseSA9PSBDYW5vbkhv
c3RJbmZvOjpCUk9LRU4pCisgICAgICAgICAgICBicm9rZW4gPSB0cnVlOworICAgICAgICBlbHNl
IGlmIChmYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6SVBWNCkgeworICAgICAgICAgICAgLy8gU3Rv
cCBpZiB3ZSBoaXQgYSBub24tQlJPS0VOIGludmFsaWQgbm9uLWVtcHR5IGNvbXBvbmVudC4KKyAg
ICAgICAgICAgIHJldHVybiBmYW1pbHk7CisgICAgICAgIH0KKworICAgICAgICBleGlzdGluZ0Nv
bXBvbmVudHMrKzsKKyAgICB9CisKKyAgICBpZiAoYnJva2VuKQorICAgICAgICByZXR1cm4gQ2Fu
b25Ib3N0SW5mbzo6QlJPS0VOOworCisgICAgLy8gVXNlIHRoYXQgc2VxdWVuY2Ugb2YgbnVtYmVy
cyB0byBmaWxsIG91dCB0aGUgNC1jb21wb25lbnQgSVAgYWRkcmVzcy4KKworICAgIC8vIEZpcnN0
LCBwcm9jZXNzIGFsbCBjb21wb25lbnRzIGJ1dCB0aGUgbGFzdCwgd2hpbGUgbWFraW5nIHN1cmUg
ZWFjaCBmaXRzCisgICAgLy8gd2l0aGluIGFuIDgtYml0IGZpZWxkLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZXhpc3RpbmdDb21wb25lbnRzIC0gMTsgaSsrKSB7CisgICAgICAgIGlmIChjb21w
b25lbnRWYWx1ZXNbaV0gPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSkKKyAg
ICAgICAgICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpCUk9LRU47CisgICAgICAgIGFkZHJlc3Nb
aV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjb21wb25lbnRWYWx1ZXNbaV0pOworICAg
IH0KKworICAgIC8vIE5leHQsIGNvbnN1bWUgdGhlIGxhc3QgY29tcG9uZW50IHRvIGZpbGwgaW4g
dGhlIHJlbWFpbmluZyBieXRlcy4KKyAgICB1aW50MzJfdCBsYXN0VmFsdWUgPSBjb21wb25lbnRW
YWx1ZXNbZXhpc3RpbmdDb21wb25lbnRzIC0gMV07CisgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0g
ZXhpc3RpbmdDb21wb25lbnRzIC0gMTsgaS0tKSB7CisgICAgICAgIGFkZHJlc3NbaV0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsYXN0VmFsdWUpOworICAgICAgICBsYXN0VmFsdWUgPj49
IDg7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGxhc3QgY29tcG9uZW50IGhhcyByZXNpZHVhbCBi
aXRzLCByZXBvcnQgb3ZlcmZsb3cuCisgICAgaWYgKGxhc3RWYWx1ZSkKKyAgICAgICAgcmV0dXJu
IENhbm9uSG9zdEluZm86OkJST0tFTjsKKworICAgIC8vIFRlbGwgdGhlIGNhbGxlciBob3cgbWFu
eSBjb21wb25lbnRzIHdlIHNhdy4KKyAgICAqaXB2NENvbXBvbmVudHNDb3VudCA9IGV4aXN0aW5n
Q29tcG9uZW50czsKKworICAgIC8vIFN1Y2Nlc3MhCisgICAgcmV0dXJuIENhbm9uSG9zdEluZm86
OklQVjQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRJUHY0QWRkcmVzcyhjb25zdCB1
bnNpZ25lZCBjaGFyIGFkZHJlc3NbNF0sIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIGNoYXIgYnVmZmVyWzE2XTsK
KyAgICAgICAgX2l0b2FfcyhhZGRyZXNzW2ldLCBidWZmZXIsIDEwKTsKKworICAgICAgICBmb3Ig
KGludCBjaCA9IDA7IGJ1ZmZlcltjaF07IGNoKyspCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KGJ1ZmZlcltjaF0pOworCisgICAgICAgIGlmIChpICE9IDMpCisgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCcuJyk7CisgICAgfQorfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBtYWRlIGEg
ZmluYWwgSVBWNC9CUk9LRU4gZGVjaXNpb24sIGZhbHNlIGlmIHRoZSByZXN1bHQKKy8vIGlzIE5F
VVRSQUwsIGFuZCB3ZSBjb3VsZCB1c2UgYSBzZWNvbmQgb3Bpbmlvbi4KK3RlbXBsYXRlPHR5cGVu
YW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZUlQdjRBZGRyZXNz
KGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbm9u
SG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBEb0lQdjRBZGRy
ZXNzVG9OdW1iZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGVjLCBob3N0LCBob3N0SW5mby0+YWRkcmVzcywgJmhvc3RJbmZvLT5pcHY0Q29tcG9uZW50
c0NvdW50KTsKKworICAgIHN3aXRjaCAoaG9zdEluZm8tPmZhbWlseSkgeworICAgIGNhc2UgQ2Fu
b25Ib3N0SW5mbzo6SVBWNDoKKyAgICAgICAgLy8gRGVmaW5pdGVseSBhbiBJUHY0IGFkZHJlc3Mu
CisgICAgICAgIGhvc3RJbmZvLT5vdXB1dEhvc3Quc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsK
KyAgICAgICAgYXBwZW5kSVB2NEFkZHJlc3MoaG9zdEluZm8tPmFkZHJlc3MsIG91dHB1dCk7Cisg
ICAgICAgIGhvc3RJbmZvLT5vdXB1dEhvc3Quc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIGhv
c3RJbmZvLT5vdXB1dEhvc3QuYmVnaW4oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOgorICAgICAgICAvLyBEZWZpbml0ZWx5IGJyb2tlbi4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gQ291bGQgYmUg
SVB2NiBvciBhIGhvc3RuYW1lLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisv
LyBIZWxwZXIgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIG1haW4gY29tcG9uZW50cyBvZiBhbiBJ
UHY2IGlucHV0IHN0cmluZy4KKy8vIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIHRvIHVuZGVy
c3RhbmQgaG93IGl0IGJyZWFrcyB1cCBhbiBpbnB1dCBzdHJpbmc6CisvLworLy8gW0V4YW1wbGUg
MV06IGlucHV0ID0gIls6OmFhOmJiXSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9IDIKKy8v
ICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgzLDIpICJhYSIKKy8vICA9PT4gaGV4
Q29tcG9uZW50c1sxXSA9IENvbXBvbmVudCg2LDIpICJiYiIKKy8vICA9PT4gaW5kZXhPZkNvbnRy
YWN0aW9uID0gMAorLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQorLy8K
Ky8vIFtFeGFtcGxlIDJdOiBpbnB1dCA9ICJbMToyOjozOjQ6NV0iCisvLyAgPT0+IG51bUhleENv
bXBvbmVudHMgPSA1CisvLyAgPT0+IGhleENvbXBvbmVudHNbMF0gPSBDb21wb25lbnQoMSwxKSAi
MSIKKy8vICA9PT4gaGV4Q29tcG9uZW50c1sxXSA9IENvbXBvbmVudCgzLDEpICIyIgorLy8gID09
PiBoZXhDb21wb25lbnRzWzJdID0gQ29tcG9uZW50KDYsMSkgIjMiCisvLyAgPT0+IGhleENvbXBv
bmVudHNbM10gPSBDb21wb25lbnQoOCwxKSAiNCIKKy8vICA9PT4gaGV4Q29tcG9uZW50c1s0XSA9
IENvbXBvbmVudCgxMCwxKSAiNSIKKy8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9uID0gMgorLy8g
ID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQorLy8KKy8vIFtFeGFtcGxlIDNd
OiBpbnB1dCA9ICJbOjpmZmZmOjE5Mi4xNjguMC4xXSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50
cyA9IDEKKy8vICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgzLDQpICJmZmZmIgor
Ly8gID09PiBpbmRleE9mQ29udHJhY3Rpb24gPSAwCisvLyAgPT0+IGlwdjRDb21wb25lbnQgPSBD
b21wb25lbnQoOCwgMTEpICIxOTIuMTY4LjAuMSIKKy8vCisvLyBbRXhhbXBsZSA0XTogaW5wdXQg
PSAiWzE6Ol0iCisvLyAgPT0+IG51bUhleENvbXBvbmVudHMgPSAxCisvLyAgPT0+IGhleENvbXBv
bmVudHNbMF0gPSBDb21wb25lbnQoMSwxKSAiMSIKKy8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9u
ID0gMQorLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQorLy8KKy8vIFtF
eGFtcGxlIDVdOiBpbnB1dCA9ICJbOjoxOTIuMTY4LjAuMV0iCisvLyAgPT0+IG51bUhleENvbXBv
bmVudHMgPSAwCisvLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDAKKy8vICA9PT4gaXB2NENv
bXBvbmVudCA9IENvbXBvbmVudCg4LCAxMSkgIjE5Mi4xNjguMC4xIgorLy8KK3N0cnVjdCBJUHY2
UGFyc2VkIHsKKyAgICAvLyBaZXJvLW91dCB0aGUgcGFyc2UgaW5mb3JtYXRpb24uCisgICAgdm9p
ZCByZXNldCgpCisgICAgeworICAgICAgICBudW1IZXhDb21wb25lbnRzID0gMDsKKyAgICAgICAg
aW5kZXhPZkNvbnRyYWN0aW9uID0gLTE7CisgICAgICAgIGlwdjRDb21wb25lbnQucmVzZXQoKTsK
KyAgICB9CisKKyAgICAvLyBUaGVyZSBjYW4gYmUgdXAgdG8gOCBoZXggY29tcG9uZW50cyAoY29s
b24gc2VwYXJhdGVkKSBpbiB0aGUgbGl0ZXJhbC4KKyAgICBVUkxDb21wb25lbnQgaGV4Q29tcG9u
ZW50c1s4XTsKKworICAgIC8vIFRoZSBjb3VudCBvZiBoZXggY29tcG9uZW50cyBwcmVzZW50LiBS
YW5nZXMgZnJvbSBbMCw4XS4KKyAgICBpbnQgbnVtSGV4Q29tcG9uZW50czsKKworICAgIC8vIFRo
ZSBpbmRleCBvZiB0aGUgaGV4IGNvbXBvbmVudCB0aGF0IHRoZSAiOjoiIGNvbnRyYWN0aW9uIHBy
ZWNlZGVzLCBvcgorICAgIC8vIC0xIGlmIHRoZXJlIGlzIG5vIGNvbnRyYWN0aW9uLgorICAgIGlu
dCBpbmRleE9mQ29udHJhY3Rpb247CisKKyAgICAvLyBUaGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3
aGljaCBhcmUgYW4gSVB2NCBsaXRlcmFsLgorICAgIFVSTENvbXBvbmVudCBpcHY0Q29tcG9uZW50
OworfTsKKworLy8gUGFyc2UgdGhlIElQdjYgaW5wdXQgc3RyaW5nLiBJZiBwYXJzaW5nIHN1Y2Nl
ZWRlZCByZXR1cm5zIHRydWUgYW5kIGZpbGxzCisvLyB8cGFyc2VkfCB3aXRoIHRoZSBpbmZvcm1h
dGlvbi4gSWYgcGFyc2luZyBmYWlsZWQgKGJlY2F1c2UgdGhlIGlucHV0IGlzCisvLyBpbnZhbGlk
KSByZXR1cm5zIGZhbHNlLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+
Citib29sIERvUGFyc2VJUHY2KGNvbnN0IENIQVIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
aG9zdCwgSVB2NlBhcnNlZCogcGFyc2VkKQoreworICAgIC8vIFplcm8tb3V0IHRoZSBpbmZvLgor
ICAgIHBhcnNlZC0+cmVzZXQoKTsKKworICAgIGlmICghaG9zdC5pc05vbkVtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBpbmRleCBmb3Igc3RhcnQgYW5kIGVuZCBv
ZiBhZGRyZXNzIHJhbmdlIChubyBicmFja2V0cykuCisgICAgaW50IGJlZ2luID0gaG9zdC5iZWdp
bigpOworICAgIGludCBlbmQgPSBob3N0LmVuZCgpOworCisgICAgaW50IGN1cnJlbnRDb21wb25l
bnRCZWdpbiA9IGJlZ2luOyAvLyBTdGFydCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCisKKyAg
ICAvLyBTY2FuIHRocm91Z2ggdGhlIGlucHV0LCBzZWFyY2hpbmcgZm9yIGhleCBjb21wb25lbnRz
LCAiOjoiIGNvbnRyYWN0aW9ucywKKyAgICAvLyBhbmQgSVB2NCBjb21wb25lbnRzLgorICAgIGZv
ciAoaW50IGkgPSBiZWdpbjsgLyogaSA8PSBlbmQgKi87IGkrKykgeworICAgICAgICBib29sIGlz
Q29sb24gPSBzcGVjW2ldID09ICc6JzsKKyAgICAgICAgYm9vbCBpc0NvbnRyYWN0aW9uID0gaXND
b2xvbiAmJiBpIDwgZW5kIC0gMSAmJiBzcGVjW2kgKyAxXSA9PSAnOic7CisKKyAgICAgICAgLy8g
V2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpZiB3ZSBlbmNvdW50
ZXIgYSBjb2xvbgorICAgICAgICAvLyAoc2VwYXJhdG9yIGJldHdlZW4gaGV4IGNvbXBvbmVudHMs
IG9yIHN0YXJ0IG9mIGEgY29udHJhY3Rpb24pLCBvciBlbmQgb2YKKyAgICAgICAgLy8gaW5wdXQu
CisgICAgICAgIGlmIChpc0NvbG9uIHx8IGkgPT0gZW5kKSB7CisgICAgICAgICAgICBpbnQgY29t
cG9uZW50TGVuZ3RoID0gaSAtIGN1cnJlbnRDb21wb25lbnRCZWdpbjsKKworICAgICAgICAgICAg
Ly8gQSBjb21wb25lbnQgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiA0IGhleCBkaWdpdHMuCisg
ICAgICAgICAgICBpZiAoY29tcG9uZW50TGVuZ3RoID4gNCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGVtcHR5IGNvbXBvbmVudHMu
CisgICAgICAgICAgICBpZiAoIWNvbXBvbmVudExlbmd0aCkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBleGNlcHRpb24gaXMgd2hlbiBjb250cmFjdGlvbnMgYXBwZWFyIGF0IGJlZ2lubmluZyBv
ZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBpbnB1dCBvciBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1
dC4KKyAgICAgICAgICAgICAgICBpZiAoISgoaXNDb250cmFjdGlvbiAmJiBpID09IGJlZ2luKSB8
fCAoaSA9PSBlbmQgJiYgcGFyc2VkLT5pbmRleE9mQ29udHJhY3Rpb24gPT0gcGFyc2VkLT5udW1I
ZXhDb21wb25lbnRzKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRoZSBoZXggY29tcG9uZW50IHdlIGp1c3Qg
Zm91bmQgdG8gcnVubmluZyBsaXN0LgorICAgICAgICAgICAgaWYgKGNvbXBvbmVudExlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCBoYXZlIG1vcmUgdGhhbiA4IGNvbXBvbmVu
dHMhCisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZC0+bnVtSGV4Q29tcG9uZW50cyA+PSA4KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBwYXJz
ZWQtPmhleENvbXBvbmVudHNbcGFyc2VkLT5udW1IZXhDb21wb25lbnRzKytdID0KKyAgICAgICAg
ICAgICAgICBVUkxDb21wb25lbnQoY3VycmVudENvbXBvbmVudEJlZ2luLCBjb21wb25lbnRMZW5n
dGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPT0gZW5kKQor
ICAgICAgICAgICAgYnJlYWs7IC8vIFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIERPTkUu
CisKKyAgICAgICAgLy8gV2UgZm91bmQgYSAiOjoiIGNvbnRyYWN0aW9uLgorICAgICAgICBpZiAo
aXNDb250cmFjdGlvbikgeworICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGF0IG1vc3Qgb25l
IGNvbnRyYWN0aW9uIGluIHRoZSBsaXRlcmFsLgorICAgICAgICAgICAgaWYgKHBhcnNlZC0+aW5k
ZXhPZkNvbnRyYWN0aW9uICE9IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHBhcnNlZC0+aW5kZXhPZkNvbnRyYWN0aW9uID0gcGFyc2VkLT5udW1IZXhDb21w
b25lbnRzOworICAgICAgICAgICAgKytpOyAvLyBDb25zdW1lIHRoZSBjb2xvbiB3ZSBwZWVrZWQu
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNDb2xvbikgeworICAgICAgICAgICAgLy8gQ29s
b25zIGFyZSBzZXBhcmF0b3JzIGJldHdlZW4gY29tcG9uZW50cywga2VlcCB0cmFjayBvZiB3aGVy
ZSB0aGUKKyAgICAgICAgICAgIC8vIGN1cnJlbnQgY29tcG9uZW50IHN0YXJ0ZWQgKGFmdGVyIHRo
aXMgY29sb24pLgorICAgICAgICAgICAgY3VycmVudENvbXBvbmVudEJlZ2luID0gaSArIDE7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNb
aV0pID49IDB4ODApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgQVNDSUku
CisKKyAgICAgICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzSGV4Q2hhcihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBSZWd1
bGFyIGNvbXBvbmVudHMgYXJlIGhleCBudW1iZXJzLiBJdCBpcyBhbHNvIHBvc3NpYmxlIGZvcgor
ICAgICAgICAgICAgICAgIC8vIGEgY29tcG9uZW50IHRvIGJlIGFuIElQdjQgYWRkcmVzcyBpbiBk
b3R0ZWQgZm9ybS4KKyAgICAgICAgICAgICAgICBpZiAoVVJMQ2hhcmFjdGVyVHlwZXM6OmlzSVB2
NENoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFNpbmNlIElQdjQgYWRkcmVzcyBjYW4gb25seSBhcHBlYXIgYXQgdGhlIGVu
ZCwgYXNzdW1lIHRoZSByZXN0CisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzdHJpbmcg
aXMgYW4gSVB2NCBhZGRyZXNzLiAoV2Ugd2lsbCBwYXJzZSB0aGlzIHNlcGFyYXRlbHkKKyAgICAg
ICAgICAgICAgICAgICAgLy8gbGF0ZXIpLgorICAgICAgICAgICAgICAgICAgICBwYXJzZWQtPmlw
djRDb21wb25lbnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjdXJyZW50Q29tcG9uZW50QmVn
aW4sIGVuZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIHdhcyBuZWl0aGVyIGEgaGV4IGRpZ2l0
LCBub3IgYW4gSVB2NCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIFZlcmlmaWVzIHRoZSBwYXJzZWQgSVB2NiBpbmZvcm1hdGlvbiwgY2hlY2tpbmcgdGhhdCB0
aGUgdmFyaW91cyBjb21wb25lbnRzCisvLyBhZGQgdXAgdG8gdGhlIHJpZ2h0IG51bWJlciBvZiBi
aXRzIChoZXggY29tcG9uZW50cyBhcmUgMTYgYml0cywgd2hpbGUKKy8vIGVtYmVkZGVkIElQdjQg
Zm9ybWF0cyBhcmUgMzIgYml0cywgYW5kIGNvbnRyYWN0aW9ucyBhcmUgcGxhY2Vob2xkZXMgZm9y
CisvLyAxNiBvciBtb3JlIGJpdHMpLiBSZXR1cm5zIHRydWUgaWYgc2l6ZXMgbWF0Y2ggdXAsIGZh
bHNlIG90aGVyd2lzZS4gT24KKy8vIHN1Y2Nlc3Mgd3JpdGVzIHRoZSBsZW5ndGggb2YgdGhlIGNv
bnRyYWN0aW9uIChpZiBhbnkpIHRvCisvLyB8b3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9ufC4KK2Jv
b2wgQ2hlY2tJUHY2Q29tcG9uZW50c1NpemUoY29uc3QgSVB2NlBhcnNlZCYgcGFyc2VkLCBpbnQq
IG91dE51bUJ5dGVzT2ZDb250cmFjdGlvbikKK3sKKyAgICAvLyBFYWNoIGdyb3VwIG9mIGZvdXIg
aGV4IGRpZ2l0cyBjb250cmlidXRlcyAxNiBiaXRzLgorICAgIGludCBudW1CeXRlc1dpdGhvdXRD
b250cmFjdGlvbiA9IHBhcnNlZC5udW1IZXhDb21wb25lbnRzICogMjsKKworICAgIC8vIElmIGFu
IElQdjQgYWRkcmVzcyB3YXMgZW1iZWRkZWQgYXQgdGhlIGVuZCwgaXQgY29udHJpYnV0ZXMgMzIg
Yml0cy4KKyAgICBpZiAocGFyc2VkLmlwdjRDb21wb25lbnQuaXNWYWxpZCgpKQorICAgICAgICBu
dW1CeXRlc1dpdGhvdXRDb250cmFjdGlvbiArPSA0OworCisgICAgLy8gSWYgdGhlcmUgd2FzIGEg
Ijo6IiBjb250cmFjdGlvbiwgaXRzIHNpemUgaXMgZ29pbmcgdG8gYmU6CisgICAgLy8gTUFYKFsx
NmJpdHNdLCBbMTI4Yml0c10gLSBudW1CeXRlc1dpdGhvdXRDb250cmFjdGlvbikuCisgICAgaW50
IG51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IDA7CisgICAgaWYgKHBhcnNlZC5pbmRleE9mQ29udHJh
Y3Rpb24gIT0gLTEpIHsKKyAgICAgICAgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0gMTYgLSBudW1C
eXRlc1dpdGhvdXRDb250cmFjdGlvbjsKKyAgICAgICAgaWYgKG51bUJ5dGVzT2ZDb250cmFjdGlv
biA8IDIpCisgICAgICAgICAgICBudW1CeXRlc09mQ29udHJhY3Rpb24gPSAyOworICAgIH0KKwor
ICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlcnMgYWRkIHVwLgorICAgIGlmIChudW1CeXRlc1dp
dGhvdXRDb250cmFjdGlvbiArIG51bUJ5dGVzT2ZDb250cmFjdGlvbiAhPSAxNikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgKm91dE51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IG51bUJ5dGVz
T2ZDb250cmFjdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ29udmVydHMgYSBoZXgg
Y29tb25lbnQgaW50byBhIG51bWJlci4gVGhpcyBjYW5ub3QgZmFpbCBzaW5jZSB0aGUgY2FsbGVy
IGhhcworLy8gYWxyZWFkeSB2ZXJpZmllZCB0aGF0IGVhY2ggY2hhcmFjdGVyIGluIHRoZSBzdHJp
bmcgd2FzIGEgaGV4IGRpZ2l0LCBhbmQKKy8vIHRoYXQgdGhlcmUgd2VyZSBubyBtb3JlIHRoYW4g
NCBjaGFyYWN0ZXJzLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3VpbnQxNl90
IElQdjZIZXhDb21wb25lbnRUb051bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIGNvbXBvbmVudCkKK3sKKyAgICBBU1NFUlQoY29tcG9uZW50Lmxlbmd0
aCgpIDw9IDQpOworCisgICAgLy8gQ29weSB0aGUgaGV4IHN0cmluZyBpbnRvIGEgQy1zdHJpbmcu
CisgICAgY2hhciBidWZbNV07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgYnVmW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tjb21w
b25lbnQuYmVnaW4oKSArIGldKTsKKyAgICBidWZbY29tcG9uZW50Lmxlbmd0aCgpXSA9ICdcMCc7
CisKKyAgICAvLyBDb252ZXJ0IGl0IHRvIGEgbnVtYmVyIChvdmVyZmxvdyBpcyBub3QgcG9zc2li
bGUsIHNpbmNlIHdpdGggNCBoZXgKKyAgICAvLyBjaGFyYWN0ZXJzIHdlIGNhbiBhdCBtb3N0IGhh
dmUgYSAxNiBiaXQgbnVtYmVyKS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KF9z
dHJ0b3VpNjQoYnVmLCAwLCAxNikpOworfQorCisvLyBDb252ZXJ0cyBhbiBJUHY2IGFkZHJlc3Mg
dG8gYSAxMjgtYml0IG51bWJlciAobmV0d29yayBieXRlIG9yZGVyKSwgcmV0dXJuaW5nCisvLyB0
cnVlIG9uIHN1Y2Nlc3MuIEZhbHNlIG1lYW5zIHRoYXQgdGhlIGlucHV0IHdhcyBub3QgYSB2YWxp
ZCBJUHY2IGFkZHJlc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4K
K2Jvb2wgRG9JUHY2QWRkcmVzc1RvTnVtYmVyKGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdKQoreworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgY29tcG9uZW50IGlzIGJvdW5kZWQgYnkgJ1snIGFuZCAnXScuCisgICAgaW50IGVu
ZCA9IGhvc3QuZW5kKCk7CisgICAgaWYgKCFob3N0LmlzTm9uRW1wdHkoKSB8fCBzcGVjW2hvc3Qu
YmVnaW4oKV0gIT0gJ1snIHx8IHNwZWNbZW5kIC0gMV0gIT0gJ10nKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBFeGNsdWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCisgICAgVVJMQ29t
cG9uZW50IGlwdjZDb21wb25lbnQoaG9zdC5iZWdpbigpICsgMSwgaG9zdC5sZW5ndGgoKSAtIDIp
OworCisgICAgLy8gUGFyc2UgdGhlIElQdjYgYWRkcmVzcyAtLSBpZGVudGlmeSB3aGVyZSBhbGwg
dGhlIGNvbG9uIHNlcGFyYXRlZCBoZXgKKyAgICAvLyBjb21wb25lbnRzIGFyZSwgdGhlICI6OiIg
Y29udHJhY3Rpb24sIGFuZCB0aGUgZW1iZWRkZWQgSVB2NCBhZGRyZXNzLgorICAgIElQdjZQYXJz
ZWQgaXB2NlBhcnNlZDsKKyAgICBpZiAoIURvUGFyc2VJUHY2PENIQVIsIFVDSEFSPihzcGVjLCBp
cHY2Q29tcG9uZW50LCAmaXB2NlBhcnNlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIERvIHNvbWUgYmFzaWMgc2l6ZSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJl
c3MgZG9lc24ndAorICAgIC8vIHNwZWNpZnkgbW9yZSB0aGFuIDEyOCBiaXRzIG9yIGZld2VyIHRo
YW4gMTI4IGJpdHMuIFRoaXMgYWxzbyByZXNvbHZlcworICAgIC8vIGhvdyBtYXkgemVybyBieXRl
cyB0aGUgIjo6IiBjb250cmFjdGlvbiByZXByZXNlbnRzLgorICAgIGludCBudW1CeXRlc09mQ29u
dHJhY3Rpb247CisgICAgaWYgKCFDaGVja0lQdjZDb21wb25lbnRzU2l6ZShpcHY2UGFyc2VkLCAm
bnVtQnl0ZXNPZkNvbnRyYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50
IGN1cnJlbnRJbmRleEluQWRkcmVzcyA9IDA7CisKKyAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBo
ZXggY29tcG9uZW50cywgYW5kIGNvbnRyYWN0aW9uIGluIG9yZGVyLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IGlwdjZQYXJzZWQubnVtSGV4Q29tcG9uZW50czsgKytpKSB7CisgICAgICAgIC8v
IEFwcGVuZCB0aGUgY29udHJhY3Rpb24gaWYgaXQgYXBwZWFycyBiZWZvcmUgdGhpcyBjb21wb25l
bnQuCisgICAgICAgIGlmIChpID09IGlwdjZQYXJzZWQuaW5kZXhPZkNvbnRyYWN0aW9uKSB7Cisg
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bUJ5dGVzT2ZDb250cmFjdGlvbjsgKytq
KQorICAgICAgICAgICAgICAgIGFkZHJlc3NbY3VycmVudEluZGV4SW5BZGRyZXNzKytdID0gMDsK
KyAgICAgICAgfQorICAgICAgICAvLyBBcHBlbmQgdGhlIGhleCBjb21wb25lbnQncyB2YWx1ZS4K
KyAgICAgICAgaWYgKGkgIT0gaXB2NlBhcnNlZC5udW1IZXhDb21wb25lbnRzKSB7CisgICAgICAg
ICAgICAvLyBHZXQgdGhlIDE2LWJpdCB2YWx1ZSBmb3IgdGhpcyBoZXggY29tcG9uZW50LgorICAg
ICAgICAgICAgdWludDE2X3QgbnVtYmVyID0gSVB2NkhleENvbXBvbmVudFRvTnVtYmVyPENIQVI+
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwZWMsIGlwdjZQYXJzZWQuaGV4Q29tcG9uZW50c1tpXSk7CisgICAgICAgICAgICAv
LyBBcHBlbmQgdG8gfGFkZHJlc3N8LCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgICAgICAgICAg
ICBhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzcysrXSA9IChudW1iZXIgJiAweEZGMDApID4+
IDg7CisgICAgICAgICAgICBhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzcysrXSA9IChudW1i
ZXIgJiAweDAwRkYpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgd2FzIGFu
IElQdjQgc2VjdGlvbiwgY29udmVydCBpdCBpbnRvIGEgMzItYml0IG51bWJlciBhbmQgYXBwZW5k
CisgICAgLy8gaXQgdG8gfGFkZHJlc3N8LgorICAgIGlmIChpcHY2UGFyc2VkLmlwdjRDb21wb25l
bnQuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEFwcGVuZCB0aGUgMzItYml0IG51bWJlciB0byB8
YWRkcmVzc3wuCisgICAgICAgIGludCBpZ25vcmVkSVB2NENvbXBvbmVudHNDb3VudDsKKyAgICAg
ICAgaWYgKENhbm9uSG9zdEluZm86OklQVjQgIT0KKyAgICAgICAgICAgIERvSVB2NEFkZHJlc3NU
b051bWJlcihzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZQYXJz
ZWQuaXB2NENvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRk
cmVzc1tjdXJyZW50SW5kZXhJbkFkZHJlc3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZpZ25vcmVkSVB2NENvbXBvbmVudHNDb3VudCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFNlYXJjaGVzIGZvciB0
aGUgbG9uZ2VzdCBzZXF1ZW5jZSBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wsIGFuZCB3cml0ZXMgdGhl
CisvLyByYW5nZSBpbnRvIHxjb250cmFjdGlvblJhbmdlfC4gVGhlIHJ1biBvZiB6ZXJvcyBtdXN0
IGJlIGF0IGxlYXN0IDE2IGJpdHMsCisvLyBhbmQgaWYgdGhlcmUgaXMgYSB0aWUgdGhlIGZpcnN0
IGlzIGNob3Nlbi4KK3ZvaWQgQ2hvb3NlSVB2NkNvbnRyYWN0aW9uUmFuZ2UoY29uc3QgdW5zaWdu
ZWQgY2hhciBhZGRyZXNzWzE2XSwgVVJMQ29tcG9uZW50KiBjb250cmFjdGlvblJhbmdlKQorewor
ICAgIC8vIFRoZSBsb25nZXN0IHJ1biBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wgc2VlbiBzbyBmYXIu
CisgICAgVVJMQ29tcG9uZW50IG1heFJhbmdlOworCisgICAgLy8gVGhlIGN1cnJlbnQgcnVuIG9m
IHplcm9zIGluIHxhZGRyZXNzfCBiZWluZyBpdGVyYXRlZCBvdmVyLgorICAgIFVSTENvbXBvbmVu
dCBjdXJyZW50UmFuZ2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICs9IDIpIHsK
KyAgICAgICAgLy8gVGVzdCBmb3IgMTYgYml0cyB3b3J0aCBvZiB6ZXJvLgorICAgICAgICBib29s
IGlzWmVybyA9ICghYWRkcmVzc1tpXSAmJiAhYWRkcmVzc1tpICsgMV0pOworCisgICAgICAgIGlm
IChpc1plcm8pIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgemVybyB0byB0aGUgY3VycmVudCBy
YW5nZSAob3Igc3RhcnQgYSBuZXcgb25lKS4KKyAgICAgICAgICAgIGlmICghY3VycmVudFJhbmdl
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSBVUkxDb21wb25lbnQo
aSwgMCk7CisgICAgICAgICAgICBjdXJyZW50UmFuZ2Uuc2V0TGVuZ3RoKGN1cnJlbnRSYW5nZS5s
ZW5ndGgoKSArIDIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc1plcm8gfHwgaSA9PSAx
NCkgeworICAgICAgICAgICAgLy8gSnVzdCBjb21wbGV0ZWQgYSBydW4gb2YgemVyb3MuIElmIHRo
ZSBydW4gaXMgZ3JlYXRlciB0aGFuIDE2IGJpdHMsCisgICAgICAgICAgICAvLyBpdCBpcyBhIGNh
bmRpZGF0ZSBmb3IgdGhlIGNvbnRyYWN0aW9uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRSYW5n
ZS5sZW5ndGgoKSA+IDIgJiYgY3VycmVudFJhbmdlLmxlbmd0aCgpID4gbWF4UmFuZ2UubGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgbWF4UmFuZ2UgPSBjdXJyZW50UmFuZ2U7CisKKyAgICAgICAg
ICAgIGN1cnJlbnRSYW5nZS5yZXNldCgpOworICAgICAgICB9CisgICAgfQorICAgICpjb250cmFj
dGlvblJhbmdlID0gbWF4UmFuZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRJUHY2
QWRkcmVzcyhjb25zdCB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCkKK3sKKyAgICAvLyBXZSB3aWxsIG91dHB1dCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcg
dG8gdGhlIHJ1bGVzIGluOgorICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0
LWthd2FtdXJhLWlwdjYtdGV4dC1yZXByZXNlbnRhdGlvbi0wMSNzZWN0aW9uLTQKKworICAgIC8v
IFN0YXJ0IGJ5IGZpbmRpbmcgd2hlcmUgdG8gcGxhY2UgdGhlICI6OiIgY29udHJhY3Rpb24gKGlm
IGFueSkuCisgICAgVVJMQ29tcG9uZW50IGNvbnRyYWN0aW9uUmFuZ2U7CisgICAgQ2hvb3NlSVB2
NkNvbnRyYWN0aW9uUmFuZ2UoYWRkcmVzcywgJmNvbnRyYWN0aW9uUmFuZ2UpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gMTQ7KSB7CisgICAgICAgIC8vIFdlIGNoZWNrIDIgYnl0ZXMgYXQg
YSB0aW1lLCBmcm9tIGJ5dGVzICgwLCAxKSB0byAoMTQsIDE1KSwgaW5jbHVzaXZlLgorICAgICAg
ICBBU1NFUlQoIShpICUgMikpOworICAgICAgICBpZiAoaSA9PSBjb250cmFjdGlvblJhbmdlLmJl
Z2luKCkgJiYgY29udHJhY3Rpb25SYW5nZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIC8v
IEp1bXAgb3ZlciB0aGUgY29udHJhY3Rpb24uCisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgn
OicpOworICAgICAgICAgICAgaSA9IGNvbnRyYWN0aW9uUmFuZ2UuZW5kKCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBDb25zdW1lIHRoZSBuZXh0IDE2IGJpdHMgZnJvbSB8YWRk
cmVzc3wuCisgICAgICAgICAgICBpbnQgeCA9IGFkZHJlc3NbaV0gPDwgOCB8IGFkZHJlc3NbaSAr
IDFdOworCisgICAgICAgICAgICBpICs9IDI7CisKKyAgICAgICAgICAgIC8vIFN0cmluZ2lmeSB0
aGUgMTYgYml0IG51bWJlciAoYXQgbW9zdCByZXF1aXJlcyA0IGhleCBkaWdpdHMpLgorICAgICAg
ICAgICAgY2hhciBzdHJbNV07CisgICAgICAgICAgICBfaXRvYV9zKHgsIHN0ciwgMTYpOworICAg
ICAgICAgICAgZm9yIChpbnQgY2ggPSAwOyBzdHJbY2hdOyArK2NoKQorICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoc3RyW2NoXSk7CisKKyAgICAgICAgICAgIC8vIFB1dCBhIGNvbG9uIGFm
dGVyIGVhY2ggbnVtYmVyLCBleGNlcHQgdGhlIGxhc3QuCisgICAgICAgICAgICBpZiAoaSA8IDE2
KQorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJzonKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgbWFkZSBhIGZpbmFsIElQVjYvQlJPS0VOIGRl
Y2lzaW9uLCBmYWxzZSBpZiB0aGUgcmVzdWx0CisvLyBpcyBORVVUUkFMLCBhbmQgd2UgY291bGQg
dXNlIGEgc2Vjb25kIG9waW5pb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBV
Q0hBUj4KK2Jvb2wgRG9DYW5vbmljYWxpemVJUHY2QWRkcmVzcyhjb25zdCBDSEFSKiBzcGVjLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5vbkhvc3RJbmZvKiBob3N0SW5mbykK
K3sKKyAgICAvLyBUdXJuIHRoZSBJUCBhZGRyZXNzIGludG8gYSAxMjggYml0IG51bWJlci4KKyAg
ICBpZiAoIURvSVB2NkFkZHJlc3NUb051bWJlcjxDSEFSLCBVQ0hBUj4oc3BlYywgaG9zdCwgaG9z
dEluZm8tPmFkZHJlc3MpKSB7CisgICAgICAgIC8vIElmIGl0J3Mgbm90IGFuIElQdjYgYWRkcmVz
cywgc2NhbiBmb3IgY2hhcmFjdGVycyB0aGF0IHNob3VsZCAqb25seSoKKyAgICAgICAgLy8gZXhp
c3QgaW4gYW4gSVB2NiBhZGRyZXNzLgorICAgICAgICBmb3IgKGludCBpID0gaG9zdC5iZWdpbigp
OyBpIDwgaG9zdC5lbmQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsK
KyAgICAgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAg
ICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBob3N0SW5mby0+ZmFtaWx5ID0gQ2Fub25Ib3N0
SW5mbzo6QlJPS0VOOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gaW52YWxpZCBjaGFyYWN0ZXJzLiBDb3VsZCBz
dGlsbCBiZSBJUHY0IG9yIGEgaG9zdG5hbWUuCisgICAgICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBD
YW5vbkhvc3RJbmZvOjpORVVUUkFMOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaG9zdEluZm8tPm91cHV0SG9zdC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIG91
dHB1dC5hcHBlbmQoJ1snKTsKKyAgICBhcHBlbmRJUHY2QWRkcmVzcyhob3N0SW5mby0+YWRkcmVz
cywgb3V0cHV0KTsKKyAgICBvdXRwdXQuYXBwZW5kKCddJyk7CisgICAgaG9zdEluZm8tPm91cHV0
SG9zdC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gaG9zdEluZm8tPm91cHV0SG9zdC5iZWdp
bigpKTsKKworICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpJUFY2OworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIENhbm9uaWNhbGl6ZUlQ
QWRkcmVzcyhjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5vbkhvc3RJ
bmZvKiBob3N0SW5mbykKK3sKKyAgICBpZiAoRG9DYW5vbmljYWxpemVJUHY0QWRkcmVzczxjaGFy
LCB1bnNpZ25lZCBjaGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChEb0Nhbm9uaWNhbGl6ZUlQdjZBZGRyZXNzPGNoYXIsIHVuc2lnbmVk
IGNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQorICAgIHJldHVybjsKK30KKwor
dm9pZCBDYW5vbmljYWxpemVJUEFkZHJlc3MoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENhbm9uSG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIGlmIChEb0Nhbm9uaWNh
bGl6ZUlQdjRBZGRyZXNzPFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0SW5m
bykpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoRG9DYW5vbmljYWxpemVJUHY2QWRkcmVzczxV
Q2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQorICAgICAgICByZXR1
cm47Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMv
VVJMQ2Fub25JbnRlcm5hbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDc5ZDkzNTQ1YTBiYmE5MGEzODlhYTFk
YmQxNTk5NTJmYTFiYjE5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvVVJMQ2Fub25JbnRlcm5hbC5jcHAKQEAgLTAsMCArMSwzMjggQEAKKy8vIENvcHlyaWdodCAy
MDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIs
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVS
TENhbm9uSW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2lmIFVTRShXVEZV
UkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisK
K25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgor
dm9pZCBEb2FwcGVuZFN0cmluZ09mVHlwZShjb25zdCBDSEFSKiBzb3VyY2UsIGludCBsZW5ndGgs
IFVSTENoYXJhY3RlclR5cGVzOjpDaGFyYWN0ZXJUeXBlcyB0eXBlLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hBUj4oc291cmNlW2ldKSA+PSAweDgwKSB7CisgICAgICAg
ICAgICAvLyBSZWFkQ2hhciB3aWxsIGZpbGwgdGhlIGNvZGUgcG9pbnQgd2l0aCBrVW5pY29kZVJl
cGxhY2VtZW50Q2hhcmFjdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoZSBpbnB1dCBpcyBpbnZh
bGlkLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICB1bnNpZ25lZCBjb2RlUG9p
bnQ7CisgICAgICAgICAgICByZWFkVVRGQ2hhcihzb3VyY2UsICZpLCBsZW5ndGgsICZjb2RlUG9p
bnQpOworICAgICAgICAgICAgQXBwZW5kVVRGOEVzY2FwZWRWYWx1ZShjb2RlUG9pbnQsIG91dHB1
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBKdXN0IGFwcGVuZCB0aGUgNy1i
aXQgY2hhcmFjdGVyLCBwb3NzaWJseSBlc2NhcGluZyBpdC4KKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgdWNoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc291cmNlW2ldKTsKKyAgICAg
ICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzQ2hhcmFjdGVyT2ZUeXBlKHVjaCwgdHlw
ZSkpCisgICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rlcih1Y2gsIG91dHB1
dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh1Y2gp
OworICAgICAgICB9CisgICAgfQorfQorCisvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGlu
cHV0IHZhbHVlcyBhcmUgYWxsIGNvbnRhaW5lZCBpbiA4LWJpdCwKKy8vIGFsdGhvdWdoIGl0IGFs
bG93cyBhbnkgdHlwZS4gUmV0dXJucyB0cnVlIGlmIGlucHV0IGlzIHZhbGlkLCBmYWxzZSBpZiBu
b3QuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4KK3ZvaWQgRG9BcHBl
bmRJbnZhbGlkTmFycm93U3RyaW5nKGNvbnN0IENIQVIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVu
ZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZm9yIChpbnQgaSA9IGJlZ2luOyBp
IDwgZW5kOyBpKyspIHsKKyAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNw
ZWNbaV0pOworICAgICAgICBpZiAodWNoID49IDB4ODApIHsKKyAgICAgICAgICAgIC8vIEhhbmRs
ZSBVVEYtOC8xNiBlbmNvZGluZ3MuIFRoaXMgY2FsbCB3aWxsIGNvcnJlY3RseSBoYW5kbGUgdGhl
IGVycm9yCisgICAgICAgICAgICAvLyBjYXNlIGJ5IGFwcGVuZGluZyB0aGUgaW52YWxpZCBjaGFy
YWN0ZXIuCisgICAgICAgICAgICBBcHBlbmRVVEY4RXNjYXBlZENoYXIoc3BlYywgJmksIGVuZCwg
b3V0cHV0KTsKKyAgICAgICAgfSBlbHNlIGlmICh1Y2ggPD0gJyAnIHx8IHVjaCA9PSAweDdmKSB7
CisgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvciBlcnJvciBoYW5kbGluZywgc28g
d2UgZXNjYXBlIGFsbCBjb250cm9sCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGFuZCBzcGFj
ZXMsIGJ1dCBub3QgYW55dGhpbmcgZWxzZSBzaW5jZSB3ZSBsYWNrCisgICAgICAgICAgICAvLyBj
b250ZXh0IHRvIGRvIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgorICAgICAgICAgICAgYXBwZW5k
VVJMRXNjYXBlZENoYXJhY3RlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1Y2gpLCBvdXRw
dXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nh
c3Q8Y2hhcj4odWNoKSk7CisgICAgfQorfQorCisvLyBPdmVycmlkZXMgb25lIGNvbXBvbmVudCwg
c2VlIHRoZSBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHMgc3RydWN0dXJlIGZvcgorLy8g
d2hhdCB0aGUgdmFyaW91cyBjb21iaW9uYXRpb25zIG9mIHNvdXJjZSBwb2ludGVyIGFuZCBjb21w
b25lbnQgbWVhbi4KK3ZvaWQgRG9PdmVycmlkZUNvbXBvbmVudChjb25zdCBjaGFyKiBvdmVycmlk
ZVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIG92
ZXJyaWRlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBk
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZGVzdGluYXRpb25D
b21wb25lbnQpCit7CisgICAgaWYgKG92ZXJyaWRlU291cmNlKSB7CisgICAgICAgICpkZXN0ID0g
b3ZlcnJpZGVTb3VyY2U7CisgICAgICAgICpkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG92ZXJyaWRl
Q29tcG9uZW50OworICAgIH0KK30KKworLy8gU2ltaWxhciB0byBEb092ZXJyaWRlQ29tcG9uZW50
IGV4Y2VwdCB0aGF0IGl0IHRha2VzIGEgVVRGLTE2IGlucHV0IGFuZCBkb2VzCisvLyBub3QgYWN0
dWFsbHkgc2V0IHRoZSBvdXRwdXQgY2hhcmFjdGVyIHBvaW50ZXIuCisvLworLy8gVGhlIGlucHV0
IGlzIGNvbnZlcnRlZCB0byBVVEYtOCBhdCB0aGUgZW5kIG9mIHRoZSBnaXZlbiBidWZmZXIgYXMg
YSB0ZW1wb3JhcnkKKy8vIGhvbGRpbmcgcGxhY2UuIFRoZSBjb21wb25lbnQgaW5kZW50aWZ5aW5n
IHRoZSBwb3J0aW9uIG9mIHRoZSBidWZmZXIgdXNlZCBpbgorLy8gdGhlIHx1dGY4QnVmZmVyfCB3
aWxsIGJlIHNwZWNpZmllZCBpbiB8KmRlc3RpbmF0aW9uQ29tcG9uZW50fC4KKy8vCisvLyBUaGlz
IHdpbGwgbm90IGFjdHVhbGx5IHNldCBhbnkgfGRlc3R8IHBvaW50ZXIgbGlrZSBEb092ZXJyaWRl
Q29tcG9uZW50CisvLyBkb2VzIGJlY2F1c2UgYWxsIG9mIHRoZSBwb2ludGVycyB3aWxsIHBvaW50
IGludG8gdGhlIHx1dGY4QnVmZmVyfCwgd2hpY2gKKy8vIG1heSBnZXQgcmVzaXplZCB3aGlsZSB3
ZSdyZSBvdmVycmlkaW5nIGEgc3Vic2VxdWVudCBjb21wb25lbnQuIEluc3RlYWQsIHRoZQorLy8g
Y2FsbGVyIHNob3VsZCB1c2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgfHV0ZjhCdWZmZXJ8IGFzIHRo
ZSBzdHJpbmcgcG9pbnRlcgorLy8gZm9yIGFsbCBjb21wb25lbnRzIG9uY2UgYWxsIG92ZXJyaWRl
cyBoYXZlIGJlZW4gcHJlcGFyZWQuCitib29sIFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50
KAorICAgIGNvbnN0IFVDaGFyKiBvdmVycmlkZVNvdXJjZSwKKyAgICBjb25zdCBVUkxDb21wb25l
bnQmIG92ZXJyaWRlQ29tcG9uZW50LAorICAgIFVSTEJ1ZmZlcjxjaGFyPiYgdXRmOEJ1ZmZlciwK
KyAgICBVUkxDb21wb25lbnQqIGRlc3RpbmF0aW9uQ29tcG9uZW50KQoreworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CisgICAgaWYgKG92ZXJyaWRlU291cmNlKSB7CisgICAgICAgIGlmICghb3Zl
cnJpZGVDb21wb25lbnQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAvLyBOb24tInZhbGlkIiBj
b21wb25lbnQgKG1lYW5zIGRlbGV0ZSksIHNvIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhhdC4KKyAg
ICAgICAgICAgICpkZXN0aW5hdGlvbkNvbXBvbmVudCA9IFVSTENvbXBvbmVudCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ29udmVydCB0byBVVEYtOC4KKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50LT5zZXRCZWdpbih1dGY4QnVmZmVyLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBDb252ZXJ0VVRGMTZUb1VURjgoJm92ZXJyaWRlU291cmNlW292
ZXJyaWRlQ29tcG9uZW50LmJlZ2luKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdmVycmlkZUNvbXBvbmVudC5sZW5ndGgoKSwgdXRmOEJ1ZmZlcik7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudC0+c2V0TGVuZ3RoKHV0ZjhCdWZmZXIubGVuZ3Ro
KCkgLSBkZXN0aW5hdGlvbkNvbXBvbmVudC0+YmVnaW4oKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK2NvbnN0IGNoYXIga0No
YXJUb0hleExvb2t1cFs4XSA9IHsKKyAgICAwLCAvLyAweDAwIC0gMHgxZgorICAgICcwJywgLy8g
MHgyMCAtIDB4M2Y6IGRpZ2l0cyAwIC0gOSBhcmUgMHgzMCAtIDB4MzkKKyAgICAnQScgLSAxMCwg
Ly8gMHg0MCAtIDB4NWY6IGxldHRlcnMgQSAtIEYgYXJlIDB4NDEgLSAweDQ2CisgICAgJ2EnIC0g
MTAsIC8vIDB4NjAgLSAweDdmOiBsZXR0ZXJzIGEgLSBmIGFyZSAweDYxIC0gMHg2NgorICAgIDAs
IC8vIDB4ODAgLSAweDlGCisgICAgMCwgLy8gMHhBMCAtIDB4QkYKKyAgICAwLCAvLyAweEMwIC0g
MHhERgorICAgIDAsIC8vIDB4RTAgLSAweEZGCit9OworCitjb25zdCBVQ2hhciBrVW5pY29kZVJl
cGxhY2VtZW50Q2hhcmFjdGVyID0gMHhmZmZkOworCit2b2lkIGFwcGVuZFN0cmluZ09mVHlwZShj
b25zdCBjaGFyKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTENoYXJhY3RlclR5cGVzOjpDaGFyYWN0
ZXJUeXBlcyB1cmxDb21wb25lbnRUeXBlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAg
ICBEb2FwcGVuZFN0cmluZ09mVHlwZTxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIGxlbmd0
aCwgdXJsQ29tcG9uZW50VHlwZSwgb3V0cHV0KTsKK30KKwordm9pZCBhcHBlbmRTdHJpbmdPZlR5
cGUoY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFjdGVyVHlwZXM6OkNo
YXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIERvYXBwZW5kU3RyaW5nT2ZUeXBlPFVDaGFyLCBVQ2hhcj4oc291cmNlLCBsZW5ndGgs
IHVybENvbXBvbmVudFR5cGUsIG91dHB1dCk7Cit9CisKK3ZvaWQgQXBwZW5kSW52YWxpZE5hcnJv
d1N0cmluZyhjb25zdCBjaGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0KQoreworICAgIERvQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZzxjaGFyLCB1
bnNpZ25lZCBjaGFyPihzcGVjLCBiZWdpbiwgZW5kLCBvdXRwdXQpOworfQorCit2b2lkIEFwcGVu
ZEludmFsaWROYXJyb3dTdHJpbmcoY29uc3QgVUNoYXIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVu
ZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgRG9BcHBlbmRJbnZhbGlkTmFycm93
U3RyaW5nPFVDaGFyLCBVQ2hhcj4oc3BlYywgYmVnaW4sIGVuZCwgb3V0cHV0KTsKK30KKworYm9v
bCBDb252ZXJ0VVRGMTZUb1VURjgoY29uc3QgVUNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgs
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CisgICAgICAgIHVuc2ln
bmVkIGNvZGVQb2ludDsKKyAgICAgICAgc3VjY2VzcyAmPSByZWFkVVRGQ2hhcihpbnB1dCwgJmks
IGlucHV0TGVuZ3RoLCAmY29kZVBvaW50KTsKKyAgICAgICAgQXBwZW5kVVRGOFZhbHVlKGNvZGVQ
b2ludCwgb3V0cHV0KTsKKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgQ29u
dmVydFVURjhUb1VURjE2KGNvbnN0IGNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1
ZmZlcjxVQ2hhcj4mIG91dHB1dCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBj
b2RlUG9pbnQ7CisgICAgICAgIHN1Y2Nlc3MgJj0gcmVhZFVURkNoYXIoaW5wdXQsICZpLCBpbnB1
dExlbmd0aCwgJmNvZGVQb2ludCk7CisgICAgICAgIEFwcGVuZFVURjE2VmFsdWUoY29kZVBvaW50
LCBvdXRwdXQpOworICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBTZXR1cE92
ZXJyaWRlQ29tcG9uZW50cyhjb25zdCBjaGFyKiAvKiBiYXNlICovLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiogc291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIC8v
IEdldCB0aGUgc291cmNlIGFuZCBwYXJzZWQgc3RydWN0dXJlcyBvZiB0aGUgdGhpbmdzIHdlIGFy
ZSByZXBsYWNpbmcuCisgICAgY29uc3QgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+JiByZXBsU291
cmNlID0gcmVwbC5zb3VyY2VzKCk7CisgICAgY29uc3QgVVJMU2VnbWVudHMmIHJlcGxQYXJzZWQg
PSByZXBsLmNvbXBvbmVudHMoKTsKKworICAgIERvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJj
ZS5zY2hlbWUsIHJlcGxQYXJzZWQuc2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNv
dXJjZS0+c2NoZW1lLCAmcGFyc2VkLT5zY2hlbWUpOworICAgIERvT3ZlcnJpZGVDb21wb25lbnQo
cmVwbFNvdXJjZS51c2VybmFtZSwgcmVwbFBhcnNlZC51c2VybmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICZzb3VyY2UtPnVzZXJuYW1lLCAmcGFyc2VkLT51c2VybmFtZSk7CisgICAgRG9P
dmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnBhc3N3b3JkLCByZXBsUGFyc2VkLnBhc3N3b3Jk
LAorICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cGFzc3dvcmQsICZwYXJzZWQtPnBh
c3N3b3JkKTsKKworICAgIC8vIE91ciBob3N0IHNob3VsZCBiZSBlbXB0eSBpZiBub3QgcHJlc2Vu
dCwgc28gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2V0dXAuCisgICAgRG9PdmVycmlkZUNvbXBvbmVu
dChyZXBsU291cmNlLmhvc3QsIHJlcGxQYXJzZWQuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICZzb3VyY2UtPmhvc3QsICZwYXJzZWQtPmhvc3QpOworICAgIGlmIChwYXJzZWQtPmhvc3Qu
bGVuZ3RoKCkgPT0gLTEpCisgICAgICAgIHBhcnNlZC0+aG9zdC5zZXRMZW5ndGgoMCk7CisKKyAg
ICBEb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucG9ydCwgcmVwbFBhcnNlZC5wb3J0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cG9ydCwgJnBhcnNlZC0+cG9ydCk7Cisg
ICAgRG9PdmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnBhdGgsIHJlcGxQYXJzZWQucGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2UtPnBhdGgsICZwYXJzZWQtPnBhdGgpOwor
ICAgIERvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5xdWVyeSwgcmVwbFBhcnNlZC5xdWVy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2UtPnF1ZXJ5LCAmcGFyc2VkLT5xdWVy
eSk7CisgICAgRG9PdmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnJlZiwgcmVwbFBhcnNlZC5m
cmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2UtPnJlZiwgJnBhcnNlZC0+
ZnJhZ21lbnQpOworfQorCitib29sIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoY29uc3Qg
Y2hhciogLyogYmFzZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgdXRmOEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4qIHNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogcGFyc2VkKQorICAgIHsKKyAg
ICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAvLyBHZXQgdGhlIHNvdXJjZSBh
bmQgcGFyc2VkIHN0cnVjdHVyZXMgb2YgdGhlIHRoaW5ncyB3ZSBhcmUgcmVwbGFjaW5nLgorICAg
ICAgICBjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+JiByZXBsU291cmNlID0gcmVwbC5z
b3VyY2VzKCk7CisgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiByZXBsUGFyc2VkID0gcmVwbC5j
b21wb25lbnRzKCk7CisKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNv
bXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBsU291cmNlLnNjaGVtZSwgcmVwbFBhcnNlZC5zY2hlbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+c2No
ZW1lKTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291
cmNlLnVzZXJuYW1lLCByZXBsUGFyc2VkLnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnVzZXJuYW1l
KTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNl
LnBhc3N3b3JkLCByZXBsUGFyc2VkLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBhc3N3b3JkKTsK
KyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNlLmhv
c3QsIHJlcGxQYXJzZWQuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5ob3N0KTsKKyAgICAgICAgc3VjY2Vz
cyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNlLnBvcnQsIHJlcGxQYXJzZWQu
cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
dGY4QnVmZmVyLCAmcGFyc2VkLT5wb3J0KTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRG
MTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBsU291cmNlLnBhdGgsIHJlcGxQYXJzZWQucGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFy
c2VkLT5wYXRoKTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBv
bmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsU291cmNlLnF1ZXJ5LCByZXBsUGFyc2VkLnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnF1ZXJ5KTsK
KyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNlLnJl
ZiwgcmVwbFBhcnNlZC5mcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5mcmFnbWVudCk7CisKKyAgICAg
ICAgLy8gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQgd2lsbCBub3QgaGF2ZSBzZXQgdGhl
IGRhdGEgcG9pbnRlciBzaW5jZSB0aGUKKyAgICAgICAgLy8gYnVmZmVyIGNvdWxkIGJlIHJlc2l6
ZWQsIGludmFsaWRhdGluZyB0aGUgcG9pbnRlcnMuIFdlIHNldCB0aGUgZGF0YQorICAgICAgICAv
LyBwb2ludGVycyBmb3IgYWZmZWN0ZWQgY29tcG9uZW50cyBub3cgdGhhdCB0aGUgYnVmZmVyIGlz
IGZpbmFsaXplZC4KKyAgICAgICAgaWYgKHJlcGxTb3VyY2Uuc2NoZW1lKQorICAgICAgICAgICAg
c291cmNlLT5zY2hlbWUgPSB1dGY4QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3Vy
Y2UudXNlcm5hbWUpCisgICAgICAgICAgICBzb3VyY2UtPnVzZXJuYW1lID0gdXRmOEJ1ZmZlci5k
YXRhKCk7CisgICAgICAgIGlmIChyZXBsU291cmNlLnBhc3N3b3JkKQorICAgICAgICAgICAgc291
cmNlLT5wYXNzd29yZCA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNvdXJj
ZS5ob3N0KQorICAgICAgICAgICAgc291cmNlLT5ob3N0ID0gdXRmOEJ1ZmZlci5kYXRhKCk7Cisg
ICAgICAgIGlmIChyZXBsU291cmNlLnBvcnQpCisgICAgICAgICAgICBzb3VyY2UtPnBvcnQgPSB1
dGY4QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucGF0aCkKKyAgICAgICAg
ICAgIHNvdXJjZS0+cGF0aCA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNv
dXJjZS5xdWVyeSkKKyAgICAgICAgICAgIHNvdXJjZS0+cXVlcnkgPSB1dGY4QnVmZmVyLmRhdGEo
KTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucmVmKQorICAgICAgICAgICAgc291cmNlLT5yZWYg
PSB1dGY4QnVmZmVyLmRhdGEoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzczsKK30KKworI2lm
ICFPUyhXSU5ET1dTKQoraW50IF9pdG9hX3MoaW50IHZhbHVlLCBjaGFyKiBidWZmZXIsIHNpemVf
dCBzaXplSW5DaGFycywgaW50IHJhZGl4KQoreworICAgIGludCB3cml0dGVuOworICAgIGlmIChy
YWRpeCA9PSAxMCkKKyAgICAgICAgd3JpdHRlbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZUluQ2hh
cnMsICIlZCIsIHZhbHVlKTsKKyAgICBlbHNlIGlmIChyYWRpeCA9PSAxNikKKyAgICAgICAgd3Jp
dHRlbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZUluQ2hhcnMsICIleCIsIHZhbHVlKTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiBFSU5WQUw7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90
Pih3cml0dGVuKSA+PSBzaXplSW5DaGFycykgeworICAgICAgICAvLyBPdXRwdXQgd2FzIHRydW5j
YXRlZCwgb3Igd3JpdHRlbiB3YXMgbmVnYXRpdmUuCisgICAgICAgIHJldHVybiBFSU5WQUw7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFyKiBi
dWZmZXIsIHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KQoreworICAgIGlmIChyYWRpeCAh
PSAxMCkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIC8vIE5vIG1vcmUgdGhhbiAxMiBj
aGFyYWN0ZXJzIHdpbGwgYmUgcmVxdWlyZWQgZm9yIGEgMzItYml0IGludGVnZXIuCisgICAgLy8g
QWRkIGFuIGV4dHJhIGJ5dGUgZm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsLgorICAgIGNoYXIgdGVt
cFsxM107CisgICAgaW50IHdyaXR0ZW4gPSBzbnByaW50Zih0ZW1wLCBzaXplb2YodGVtcCksICIl
ZCIsIHZhbHVlKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3cml0dGVuKSA+PSBzaXpl
SW5DaGFycykgeworICAgICAgICAvLyBPdXRwdXQgd2FzIHRydW5jYXRlZCwgb3Igd3JpdHRlbiB3
YXMgbmVnYXRpdmUuCisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB3cml0dGVuOyArK2kpCisgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRpY19j
YXN0PFVDaGFyPih0ZW1wW2ldKTsKKyAgICBidWZmZXJbd3JpdHRlbl0gPSAnXDAnOworICAgIHJl
dHVybiAwOworfQorCisjZW5kaWYgLy8gIU9TKFdJTkRPV1MpCisKK30gLy8gbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFs
LmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMGYzYmMzMmExZThmY2I3ZjUzZjU4ZjU5OWYzOGQ2MDMzMjIzYzQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmgKQEAgLTAsMCAr
MSwzOTIgQEAKKy8vIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8g
ZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhpcyBm
aWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGluIGFub3RoZXIgQysrIGZpbGUgd2hlcmUg
dGhlIGNoYXJhY3RlcgorLy8gdHlwZXMgYXJlIGRlZmluZWQuIFRoaXMgYWxsb3dzIHVzIHRvIHdy
aXRlIG1vc3RseSBnZW5lcmljIGNvZGUsIGJ1dCBub3QgaGF2ZQorLy8gdGVtcGxhY2UgYmxvYXQg
YmVjYXVzZSBldmVyeXRoaW5nIGlzIGlubGluZWQgd2hlbiBhbnlib2R5IGNhbGxzIGFueSBvZiBv
dXIKKy8vIGZ1bmN0aW9ucy4KKworI2lmbmRlZiBVUkxDYW5vbkludGVybmFsX2gKKyNkZWZpbmUg
VVJMQ2Fub25JbnRlcm5hbF9oCisKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorI2luY2x1ZGUgIlVS
TENoYXJhY3RlclR5cGVzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL0hl
eE51bWJlci5oPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVz
cGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRv
IHRoZSBvdXRwdXQsIGVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QKKy8vIG1hdGNoIHRo
ZSBnaXZlbiB8dHlwZXwgaW4gU2hhcmVkQ2hhclR5cGVzLgordm9pZCBhcHBlbmRTdHJpbmdPZlR5
cGUoY29uc3QgY2hhciogc291cmNlLCBpbnQgbGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hh
cmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlwZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwor
dm9pZCBhcHBlbmRTdHJpbmdPZlR5cGUoY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwg
VVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0KTsKKworLy8gVGhpcyBsb29rdXAgdGFibGUgYWxsb3dzIGZhc3Qg
Y29udmVyc2lvbiBiZXR3ZWVuIEFTQ0lJIGhleCBsZXR0ZXJzIGFuZCB0aGVpcgorLy8gY29ycmVz
cG9uZGluZyBudW1lcmljYWwgdmFsdWUuIFRoZSA4LWJpdCByYW5nZSBpcyBkaXZpZGVkIHVwIGlu
dG8gOAorLy8gcmVnaW9ucyBvZiAweDIwIGNoYXJhY3RlcnMgZWFjaC4gRWFjaCBvZiB0aGUgdGhy
ZWUgY2hhcmFjdGVyIHR5cGVzIChudW1iZXJzLAorLy8gdXBwZXJjYXNlLCBsb3dlcmNhc2UpIGZh
bGxzIGludG8gZGlmZmVyZW50IHJlZ2lvbnMgb2YgdGhpcyByYW5nZS4gVGhlIHRhYmxlCisvLyBj
b250YWlucyB0aGUgYW1vdW50IHRvIHN1YnRyYWN0IGZyb20gY2hhcmFjdGVycyBpbiB0aGF0IHJh
bmdlIHRvIGdldCBhdAorLy8gdGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpY2FsIHZhbHVlLgorLy8K
Ky8vIFNlZSBIZXhEaWdpdFRvVmFsdWUgZm9yIHRoZSBsb29rdXAuCitleHRlcm4gY29uc3QgY2hh
ciBrQ2hhclRvSGV4TG9va3VwWzhdOworCisvLyBBc3N1bWVzIHRoZSBpbnB1dCBpcyBhIHZhbGlk
IGhleCBkaWdpdCEgQ2FsbCBpc0hleENoYXIgYmVmb3JlIHVzaW5nIHRoaXMuCitpbmxpbmUgdW5z
aWduZWQgY2hhciBoZXhDaGFyVG9WYWx1ZSh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKK3sKKyAg
ICByZXR1cm4gY2hhcmFjdGVyIC0ga0NoYXJUb0hleExvb2t1cFtjaGFyYWN0ZXIgLyAweDIwXTsK
K30KKworLy8gSW5kaWNhdGVzIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSBkb3Qgb3IgZG90
IGVxdWl2YWxlbnQsIHJldHVybmluZyB0aGUKKy8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRha2Vu
IGJ5IGl0LiBUaGlzIHdpbGwgYmUgb25lIGZvciBhIGxpdGVyYWwgZG90LCAzIGZvcgorLy8gYW4g
ZXNjYXBlZCBkb3QuIElmIHRoZSBjaGFyYWN0ZXIgaXMgbm90IGEgZG90LCB0aGlzIHdpbGwgcmV0
dXJuIDAuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGludCBpc0Rv
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgb2Zmc2V0LCBpbnQgZW5kKQoreworICAg
IGlmIChzcGVjW29mZnNldF0gPT0gJy4nKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChz
cGVjW29mZnNldF0gPT0gJyUnICYmIG9mZnNldCArIDMgPD0gZW5kICYmIHNwZWNbb2Zmc2V0ICsg
MV0gPT0gJzInICYmIChzcGVjW29mZnNldCArIDJdID09ICdlJyB8fCBzcGVjW29mZnNldCArIDJd
ID09ICdFJykpIHsKKyAgICAgICAgLy8gRm91bmQgIiUyZSIKKyAgICAgICAgcmV0dXJuIDM7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCisvLyBSZXR1cm5zIHRoZSBjYW5vbmljYWxpemVkIHZl
cnNpb24gb2YgdGhlIGlucHV0IGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gc2NoZW1lCisvLyBydWxl
cy4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhbG9uZ3NpZGUgdGhlIHNjaGVtZSBjYW5vbmljYWxpemVy
LCBhbmQgaXMKKy8vIHJlcXVpcmVkIGZvciByZWxhdGl2ZSBVUkwgcmVzb2x2aW5nIHRvIHRlc3Qg
Zm9yIHNjaGVtZSBlcXVhbGl0eS4KKy8vCisvLyBSZXR1cm5zIDAgaWYgdGhlIGlucHV0IGNoYXJh
Y3RlciBpcyBub3QgYSB2YWxpZCBzY2hlbWUgY2hhcmFjdGVyLgorY2hhciBjYW5vbmljYWxTY2hl
bWVDaGFyKFVDaGFyKTsKKworLy8gV3JpdGUgYSBzaW5nbGUgY2hhcmFjdGVyLCBlc2NhcGVkLCB0
byB0aGUgb3V0cHV0LiBUaGlzIGFsd2F5cyBlc2NhcGVzOiBpdAorLy8gZG9lcyBubyBjaGVja2lu
ZyB0aGF0IHRoZWUgY2hhcmFjdGVyIHJlcXVpcmVzIGVzY2FwaW5nLgorLy8gRXNjYXBpbmcgbWFr
ZXMgc2Vuc2Ugb25seSA4IGJpdCBjaGFycywgc28gY29kZSB3b3JrcyBpbiBhbGwgY2FzZXMgb2YK
Ky8vIGlucHV0IHBhcmFtZXRlcnMgKDgvMTZiaXQpLgordGVtcGxhdGU8dHlwZW5hbWUgSW5DaGFy
LCB0eXBlbmFtZSBPdXRDaGFyPgoraW5saW5lIHZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rl
cihJbkNoYXIgY2hhcmFjdGVyLCBVUkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBi
dWZmZXIuYXBwZW5kKCclJyk7CisgICAgYnVmZmVyLmFwcGVuZChXVEY6OkludGVybmFsOjp1cHBl
ckhleERpZ2l0c1tjaGFyYWN0ZXIgPj4gNF0pOworICAgIGJ1ZmZlci5hcHBlbmQoV1RGOjpJbnRl
cm5hbDo6dXBwZXJIZXhEaWdpdHNbY2hhcmFjdGVyICYgMHhmXSk7Cit9CisKKy8vIFRoZSBjaGFy
YWN0ZXIgd2UnbGwgc3Vic3RpdHV0ZSBmb3IgdW5kZWNvZGFibGUgb3IgaW52YWxpZCBjaGFyYWN0
ZXJzLgorZXh0ZXJuIGNvbnN0IFVDaGFyIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisK
Ky8vIFVURi04IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUmVhZHMgb25lIGNoYXJhY3RlciBpbiBVVEYt
OCBzdGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2VzCisvLyB0aGUgZGVjb2Rl
ZCB2YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgd2Ug
d2lsbAorLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJldHVybiBmYWxzZSBhbmQg
cHV0IHRoZQorLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBpbnRvIHwqY29kZVBvaW50
fC4KKy8vCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhc3Qg
Y2hhcmFjdGVyIGNvbnN1bWVkIHNvIGl0CisvLyBjYW4gYmUgaW5jcmVtZW50ZWQgaW4gYSBsb29w
IGFuZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisvLyAoZm9yIGEgc2lu
Z2xlLWJ5dGUgQVNDSUkgY2hhcmFjdGVyLCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkKS4KKy8vCisv
LyBJbXBsZW1lbnRhdGlvbiBpcyBpbiBVUkxDYW5vbmljYWxpemVyX2ljdS5jYy4KK2Jvb2wgcmVh
ZFVURkNoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3RoLCB1bnNpZ25l
ZCogY29kZVBvaW50T3V0KTsKKworLy8gR2VuZXJpYyBUby1VVEYtOCBjb252ZXJ0ZXIuIFRoaXMg
d2lsbCBjYWxsIHRoZSBnaXZlbiBhcHBlbmQgbWV0aG9kIGZvciBlYWNoCisvLyBjaGFyYWN0ZXIg
dGhhdCBzaG91bGQgYmUgYXBwZW5kZWQsIHdpdGggdGhlIGdpdmVuIG91dHB1dCBtZXRob2QuIFdy
YXBwZXJzCisvLyBhcmUgcHJvdmlkZWQgYmVsb3cgZm9yIGVzY2FwZWQgYW5kIG5vbi1lc2NhcGVk
IHZlcnNpb25zIG9mIHRoaXMuCisvLworLy8gVGhlIGNoYXJhY3RlcnZhbHVlIG11c3QgaGF2ZSBh
bHJlYWR5IGJlZW4gY2hlY2tlZCB0aGF0IGl0J3MgYSB2YWxpZCBVbmljb2RlCisvLyBjaGFyYWN0
ZXIuCit0ZW1wbGF0ZTxjbGFzcyBPdXRwdXQsIHZvaWQgYXBwZW5kRnVuY3Rpb24odW5zaWduZWQg
Y2hhciwgT3V0cHV0Jik+CitpbmxpbmUgdm9pZCBkb0FwcGVuZFVURjgodW5zaWduZWQgY2hhcmFj
dGVydmFsdWUsIE91dHB1dCYgb3V0cHV0KQoreworICAgIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAw
eDdmKSB7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGNoYXJhY3RlcnZhbHVlKSwgb3V0cHV0KTsKKyAgICB9IGVsc2UgaWYgKGNoYXJhY3RlcnZhbHVl
IDw9IDB4N2ZmKSB7CisgICAgICAgIC8vIDExMHh4eHh4IDEweHh4eHh4CisgICAgICAgIGFwcGVu
ZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4QzAgfCAoY2hhcmFjdGVydmFs
dWUgPj4gNikpLCBvdXRwdXQpOworICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigweDgwIHwgKGNoYXJhY3RlcnZhbHVlICYgMHgzZikpLCBvdXRwdXQpOwor
ICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVydmFsdWUgPD0gMHhmZmZmKSB7CisgICAgICAgIC8vIDEx
MTB4eHh4IDEweHh4eHh4IDEweHh4eHh4CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDB4ZTAgfCAoY2hhcmFjdGVydmFsdWUgPj4gMTIpKSwgb3V0cHV0
KTsKKyAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4
MCB8ICgoY2hhcmFjdGVydmFsdWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7CisgICAgICAgIGFw
cGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVy
dmFsdWUgJiAweDNmKSksIG91dHB1dCk7CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8
PSAweDEwRkZGRikgeyAvLyBNYXggdW5pY29kZSBjb2RlIHBvaW50LgorICAgICAgICAvLyAxMTEx
MHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAorICAgICAgICBhcHBlbmRGdW5jdGlvbihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGYwIHwgKGNoYXJhY3RlcnZhbHVlID4+IDE4KSks
IG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDB4ODAgfCAoKGNoYXJhY3RlcnZhbHVlID4+IDEyKSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAg
ICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8ICgo
Y2hhcmFjdGVydmFsdWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1
bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVydmFsdWUg
JiAweDNmKSksIG91dHB1dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW52YWxpZCBVVEYt
OCBjaGFyYWN0ZXIgKD4yMCBiaXRzKS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCisvLyBIZWxwZXIgdXNlZCBieSBBcHBlbmRVVEY4VmFsdWUgYmVsb3cuIFdlIHVz
ZSBhbiB1bnNpZ25lZCBwYXJhbWV0ZXIgc28gdGhlcmUKKy8vIGFyZSBubyBmdW5ueSBzaWduIHBy
b2JsZW1zIHdpdGggdGhlIGlucHV0LCBidXQgdGhlbiBoYXZlIHRvIGNvbnZlcnQgaXQgdG8KKy8v
IGEgcmVndWxhciBjaGFyIGZvciBhcHBlbmRpbmcuCitpbmxpbmUgdm9pZCBBcHBlbmRDaGFyVG9P
dXRwdXQodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVyKSk7Cit9CisK
Ky8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTguIFRo
aXMgZG9lcyBOTyBjaGVja2luZworLy8gb2YgdGhlIHZhbGlkaXR5IG9mIHRoZSB1bmljb2RlIGNo
YXJhY3RlcnM7IHRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0CisvLyB0aGUgdmFsdWUgaXQg
aXMgYXBwZW5kaW5nIGlzIHZhbGlkIHRvIGFwcGVuZC4KK2lubGluZSB2b2lkIEFwcGVuZFVURjhW
YWx1ZSh1bnNpZ25lZCBjaGFyYWN0ZXJ2YWx1ZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7
CisgICAgZG9BcHBlbmRVVEY4PFVSTEJ1ZmZlcjxjaGFyPiwgQXBwZW5kQ2hhclRvT3V0cHV0Pihj
aGFyYWN0ZXJ2YWx1ZSwgb3V0cHV0KTsKK30KKworLy8gV3JpdGVzIHRoZSBnaXZlbiBjaGFyYWN0
ZXIgdG8gdGhlIG91dHB1dCBhcyBVVEYtOCwgZXNjYXBpbmcgQUxMCisvLyBjaGFyYWN0ZXJzIChl
dmVuIHdoZW4gdGhleSBhcmUgQVNDSUkpLiBUaGlzIGRvZXMgTk8gY2hlY2tpbmcgb2YgdGhlCisv
LyB2YWxpZGl0eSBvZiB0aGUgdW5pY29kZSBjaGFyYWN0ZXJzOyB0aGUgY2FsbGVyIHNob3VsZCBl
bnN1cmUgdGhhdCB0aGUgdmFsdWUKKy8vIGl0IGlzIGFwcGVuZGluZyBpcyB2YWxpZCB0byBhcHBl
bmQuCitpbmxpbmUgdm9pZCBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKHVuc2lnbmVkIGNoYXJhY3Rl
cnZhbHVlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBkb0FwcGVuZFVURjg8VVJM
QnVmZmVyPGNoYXI+LCBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyPihjaGFyYWN0ZXJ2YWx1ZSwg
b3V0cHV0KTsKK30KKworLy8gVVRGLTE2IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWFkcyBvbmUgY2hh
cmFjdGVyIGluIFVURi0xNiBzdGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2Vz
CisvLyB0aGUgZGVjb2RlZCB2YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3Rl
ciBpcyB2YWxpZCwgd2Ugd2lsbAorLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJl
dHVybiBmYWxzZSBhbmQgcHV0IHRoZQorLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBp
bnRvIHwqY29kZVBvaW50fC4KKy8vCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9p
bnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGNvbnN1bWVkIHNvIGl0CisvLyBjYW4gYmUgaW5jcmVt
ZW50ZWQgaW4gYSBsb29wIGFuZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIu
CisvLyAoZm9yIGEgc2luZ2xlLTE2LWJpdC13b3JkIGNoYXJhY3RlciwgaXQgd2lsbCBub3QgYmUg
Y2hhbmdlZCkuCisvLworLy8gSW1wbGVtZW50YXRpb24gaXMgaW4gVVJMQ2Fub25pY2FsaXplcl9p
Y3UuY2MuCitib29sIHJlYWRVVEZDaGFyKGNvbnN0IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGlu
dCBsZW5ndGgsIHVuc2lnbmVkKiBjb2RlUG9pbnQpOworCisvLyBFcXVpdmFsZW50IHRvIFUxNl9B
UFBFTkRfVU5TQUZFIGluIElDVSBidXQgdXNlcyBvdXIgb3V0cHV0IG1ldGhvZC4KK2lubGluZSB2
b2lkIEFwcGVuZFVURjE2VmFsdWUodW5zaWduZWQgY29kZVBvaW50LCBVUkxCdWZmZXI8VUNoYXI+
JiBvdXRwdXQpCit7CisgICAgaWYgKGNvZGVQb2ludCA+IDB4ZmZmZikgeworICAgICAgICBvdXRw
dXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ID4+IDEwKSArIDB4ZDdjMCkp
OworICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ICYg
MHgzZmYpIHwgMHhkYzAwKSk7CisgICAgfSBlbHNlCisgICAgICAgIG91dHB1dC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCkpOworfQorCisvLyBFc2NhcGluZyBmdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKy8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTgs
IGVzY2FwZWQuIENhbGwgdGhpcworLy8gZnVuY3Rpb24gb25seSB3aGVuIHRoZSBpbnB1dCBpcyB3
aWRlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gRmFpbHVyZQorLy8gbWVhbnMgdGhlcmUgd2Fz
IHNvbWUgcHJvYmxlbSB3aXRoIHRoZSBlbmNvZGluZywgd2UnbGwgc3RpbGwgdHJ5IHRvCisvLyB1
cGRhdGUgdGhlIHwqYmVnaW58IHBvaW50ZXIgYW5kIGFkZCBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rl
ciB0byB0aGUKKy8vIG91dHB1dCBzbyBwcm9jZXNzaW5nIGNhbiBjb250aW51ZS4KKy8vCisvLyBX
ZSB3aWxsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIHN0YXJ0aW5nIGF0IGNoW2JlZ2luXSB3aXRoIHRo
ZSBidWZmZXIgY2gKKy8vIGJlaW5nIHxsZW5ndGh8LiB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQg
dG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyCisvLyBjb25zdW1lZCAod2UgbWF5IGNvbnN1
bWUgbW9yZSB0aGFuIG9uZSBmb3IgVVRGLTE2KSBzbyB0aGF0IGlmIGNhbGxlZCBpbgorLy8gYSBs
b29wLCBpbmNyZW1lbnRpbmcgdGhlIHBvaW50ZXIgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYXJh
Y3Rlci4KKy8vCisvLyBFdmVyeSBzaW5nbGUgb3V0cHV0IGNoYXJhY3RlciB3aWxsIGJlIGVzY2Fw
ZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UKKy8vIGdpdmUgaXQgYW4gQVNDSUkgY2hhcmFjdGVy
IGFzIGlucHV0LCBpdCB3aWxsIGJlIGVzY2FwZWQuIFNvbWUgY29kZSB1c2VzCisvLyB0aGlzIHdo
ZW4gaXQga25vd3MgdGhhdCBhIGNoYXJhY3RlciBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBpdHMg
cnVsZXMKKy8vIGZvciB2YWxpZGl0eS4gSWYgeW91IGRvbid0IHdhbnQgZXNjYXBpbmcgZm9yIEFT
Q0lJIGNoYXJhY3RlcnMsIHlvdSB3aWxsCisvLyBoYXZlIHRvIGZpbHRlciB0aGVtIG91dCBwcmlv
ciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLworLy8gQXNzdW1lcyB0aGF0IGNoW2JlZ2lu
XSBpcyB3aXRoaW4gcmFuZ2UgaW4gdGhlIGFycmF5LCBidXQgZG9lcyBub3QgYXNzdW1lCisvLyB0
aGF0IGFueSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmUuCitpbmxpbmUgYm9vbCBBcHBlbmRVVEY4
RXNjYXBlZENoYXIoY29uc3QgVUNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgLy8gVVRGLTE2IGlucHV0LiBSZWFkVUNoYXIg
d2lsbCBoYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZQorICAgIC8vIHVz
IHRoZSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRv
IHNwZWNpYWwKKyAgICAvLyBjaGVja2luZyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3Vn
aCB0aGUgZmFpbHVyZSB0byB0aGUgY2FsbGVyLgorICAgIHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVl
OworICAgIGJvb2wgc3VjY2VzcyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNo
YXJhY3RlcnZhbHVlKTsKKyAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNoYXJhY3RlcnZhbHVl
LCBvdXRwdXQpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBIYW5kbGVzIFVURi04IGlu
cHV0LiBTZWUgdGhlIHdpZGUgdmVyc2lvbiBhYm92ZSBmb3IgdXNhZ2UuCitpbmxpbmUgYm9vbCBB
cHBlbmRVVEY4RXNjYXBlZENoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVu
Z3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICAvLyBSZWFkVVRGOENoYXIgd2ls
bCBoYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZSB1cyB0aGUKKyAgICAv
LyBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHNw
ZWNpYWwgY2hlY2tpbmcKKyAgICAvLyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3VnaCB0
aGUgZmFpbHVyZSB0byB0aGUgY2FsbGVyLgorICAgIHVuc2lnbmVkIGNoOworICAgIGJvb2wgc3Vj
Y2VzcyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNoKTsKKyAgICBBcHBlbmRV
VEY4RXNjYXBlZFZhbHVlKGNoLCBvdXRwdXQpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisv
LyBHaXZlbiBhICclJyBjaGFyYWN0ZXIgYXQgfCpiZWdpbnwgaW4gdGhlIHN0cmluZyB8c3BlY3ws
IHRoaXMgd2lsbCBkZWNvZGUKKy8vIHRoZSBlc2NhcGVkIHZhbHVlIGFuZCBwdXQgaXQgaW50byB8
KnVuZXNjYXBlZFZhbHVlfCBvbiBzdWNjZXNzIChyZXR1cm5zCisvLyB0cnVlKS4gT24gZmFpbHVy
ZSwgdGhpcyB3aWxsIHJldHVybiBmYWxzZSwgYW5kIHdpbGwgbm90IHdyaXRlIGludG8KKy8vIHwq
dW5lc2NhcGVkVmFsdWV8LgorLy8KKy8vIHwqYmVnaW58IHdpbGwgYmUgdXBkYXRlZCB0byBwb2lu
dCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGVzY2FwZQorLy8gc2VxdWVuY2Ugc28gdGhh
dCB3aGVuIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBvZiBhIGZvciBsb29wLCB0aGUgbmV4dCB0aW1l
CisvLyB0aHJvdWdoIGl0IHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNv
bnNpZGVyZWQuIE9uIGZhaWx1cmUsCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVuY2hhbmdlZC4KK2lu
bGluZSBib29sIElzOEJpdENoYXIoY2hhcikKK3sKKyAgICByZXR1cm4gdHJ1ZTsgLy8gdGhpcyBj
YXNlIGlzIHNwZWNpYWxpemVkIHRvIGF2b2lkIGEgd2FybmluZworfQoraW5saW5lIGJvb2wgSXM4
Qml0Q2hhcihVQ2hhciBjKQoreworICAgIHJldHVybiBjIDw9IDI1NTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ0hBUj4KK2lubGluZSBib29sIERlY29kZUVzY2FwZWQoY29uc3QgQ0hBUiogc3Bl
YywgaW50KiBiZWdpbiwgaW50IGVuZCwgdW5zaWduZWQgY2hhciogdW5lc2NhcGVkVmFsdWUpCit7
CisgICAgaWYgKCpiZWdpbiArIDMgPiBlbmQgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAx
XSkgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAyXSkpIHsKKyAgICAgICAgLy8gSW52YWxp
ZCBlc2NhcGUgc2VxdWVuY2UgYmVjYXVzZSB0aGVyZSdzIG5vdCBlbm91Z2ggcm9vbSwgb3IgdGhl
CisgICAgICAgIC8vIGRpZ2l0cyBhcmUgbm90IEFTQ0lJLgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBmaXJzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHNwZWNbKmJlZ2luICsgMV0pOworICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1sqYmVnaW4gKyAyXSk7CisgICAgaWYgKCFVUkxD
aGFyYWN0ZXJUeXBlczo6aXNIZXhDaGFyKGZpcnN0KSB8fCAhVVJMQ2hhcmFjdGVyVHlwZXM6Omlz
SGV4Q2hhcihzZWNvbmQpKSB7CisgICAgICAgIC8vIEludmFsaWQgaGV4IGRpZ2l0cywgZmFpbC4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZhbGlkIGVzY2FwZSBzZXF1
ZW5jZS4KKyAgICAqdW5lc2NhcGVkVmFsdWUgPSAoaGV4Q2hhclRvVmFsdWUoZmlyc3QpIDw8IDQp
ICsgaGV4Q2hhclRvVmFsdWUoc2Vjb25kKTsKKyAgICAqYmVnaW4gKz0gMjsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIHRvIHRoZSBvdXRwdXQs
IGVzY2FwaW5nICJzb21lIiBjaGFyYWN0ZXJzIHRoYXQKKy8vIGl0IGZlZWxzIG1heSBub3QgYmUg
c2FmZS4gSXQgYXNzdW1lcyB0aGUgaW5wdXQgdmFsdWVzIGFyZSBhbGwgY29udGFpbmVkIGluCisv
LyA4LWJpdCBhbHRob3VnaCBpdCBhbGxvd3MgYW55IHR5cGUuCisvLworLy8gVGhpcyBpcyB1c2Vk
IGluIGVycm9yIGNhc2VzIHRvIGFwcGVuZCBpbnZhbGlkIG91dHB1dCBzbyB0aGF0IGl0IGxvb2tz
CisvLyBhcHByb3hpbWF0ZWx5IGNvcnJlY3QuIE5vbi1lcnJvciBjYXNlcyBzaG91bGQgbm90IGNh
bGwgdGhpcyBmdW5jdGlvbiBzaW5jZQorLy8gdGhlIGVzY2FwaW5nIHJ1bGVzIGFyZSBub3QgZ3Vh
cmFudGVlZCEKK3ZvaWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBjaGFyKiBzcGVj
LCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKK3ZvaWQgQXBw
ZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBVQ2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQg
ZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7CisKKy8vIE1pc2MgY2Fub25pY2FsaXphdGlv
biBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworLy8gQ29udmVydHMgYmV0d2VlbiBVVEYtOCBhbmQgVVRGLTE2LCByZXR1cm5pbmcgdHJ1ZSBv
biBzdWNjZXNzZnVsIGNvbnZlcnNpb24uCisvLyBUaGUgb3V0cHV0IHdpbGwgYmUgYXBwZW5kZWQg
dG8gdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZXIgb3V0cHV0IChzbyBtYWtlIHN1cmUKKy8vIGl0J3Mg
ZW1wdHkgaWYgeW91IHdhbnQgdG8gcmVwbGFjZSkuCisvLworLy8gT24gaW52YWxpZCBpbnB1dCwg
dGhpcyB3aWxsIHN0aWxsIHdyaXRlIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLAorLy8gcmVw
bGFjaW5nIHRoZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCB0aGUgImludmFsaWQgY2hhcmFjdGVy
Ii4gSXQgd2lsbAorLy8gcmV0dXJuIGZhbHNlIGluIHRoZSBmYWlsdXJlIGNhc2UsIGFuZCB0aGUg
Y2FsbGVyIHNob3VsZCBub3QgY29udGludWUgYXMKKy8vIG5vcm1hbC4KK2Jvb2wgQ29udmVydFVU
RjE2VG9VVEY4KGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCk7Citib29sIENvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBjaGFyKiBpbnB1
dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpOworCisvLyBDb252
ZXJ0cyBmcm9tIFVURi0xNiB0byA4LWJpdCB1c2luZyB0aGUgY2hhcmFjdGVyIHNldCBjb252ZXJ0
ZXIuIElmIHRoZQorLy8gY29udmVydGVyIGlzIG51bGwsIHRoaXMgd2lsbCB1c2UgVVRGLTguCit2
b2lkIENvbnZlcnRVVEYxNlRvUXVlcnlFbmNvZGluZyhjb25zdCBVQ2hhciogaW5wdXQsIGNvbnN0
IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCk7CisKKy8vIEFwcGxpZXMgdGhlIHJlcGxhY2VtZW50cyB0byB0aGUgZ2l2ZW4gY29t
cG9uZW50IHNvdXJjZS4gVGhlIGNvbXBvbmVudCBzb3VyY2UKKy8vIHNob3VsZCBiZSBwcmUtaW5p
dGlhbGl6ZWQgdG8gdGhlICJvbGQiIGJhc2UuIFRoYXQgaXMsIGFsbCBwb2ludGVycyB3aWxsCisv
LyBwb2ludCB0byB0aGUgc3BlYyBvZiB0aGUgb2xkIFVSTCwgYW5kIGFsbCBvZiB0aGUgUGFyc2Vk
IGNvbXBvbmVudHMgd2lsbAorLy8gYmUgaW5kaWNlcyBpbnRvIHRoYXQgc3RyaW5nLgorLy8KKy8v
IFRoZSBwb2ludGVycyBhbmQgY29tcG9uZW50cyBpbiB0aGUgfHNvdXJjZXwgZm9yIGFsbCBub24t
bnVsbCBzdHJpbmdzIGluIHRoZQorLy8gfHJlcGx8IChyZXBsYWNlbWVudHMpIHdpbGwgYmUgdXBk
YXRlZCB0byByZWZlcmVuY2UgdGhvc2Ugc3RyaW5ncy4KKy8vIENhbm9uaWNhbGl6aW5nIHdpdGgg
dGhlIG5ldyB8c291cmNlfCBhbmQgfHBhcnNlZHwgY2FuIHRoZW4gY29tYmluZSBVUkwKKy8vIGNv
bXBvbmVudHMgZnJvbSBtYW55IGRpZmZlcmVudCBzdHJpbmdzLgordm9pZCBTZXR1cE92ZXJyaWRl
Q29tcG9uZW50cyhjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxTZWdtZW50cyogcGFyc2VkKTsKKworLy8gTGlrZSB0aGUgYWJvdmUgOC1iaXQgdmVyc2lv
biwgZXhjZXB0IHRoYXQgaXQgYWRkaXRpb25hbGx5IGNvbnZlcnRzIHRoZQorLy8gVVRGLTE2IGlu
cHV0IHRvIFVURi04IGJlZm9yZSBkb2luZyB0aGUgb3ZlcnJpZGVzLgorLy8KKy8vIFRoZSBnaXZl
biB1dGY4QnVmZmVyIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbnZlcnRlZCBjb21wb25lbnRzLiBU
aGV5IHdpbGwKKy8vIGJlIGFwcGVuZGVkIG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIHRoZSBwYXJz
ZWQgc3RydWN0dXJlIGlkZW50aWZ5aW5nIHRoZQorLy8gYXBwcm9wcmlhdGUgc3Vic3RyaW5ncy4g
VGhpcyBidWZmZXIgaXMgYSBwYXJhbWV0ZXIgYmVjYXVzZSB0aGUgc291cmNlIGhhcworLy8gbm8g
c3RvcmFnZSwgc28gdGhlIGJ1ZmZlciBtdXN0IGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUgYXMgdGhl
IHNvdXJjZQorLy8gcGFyYW1ldGVyIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisvLworLy8gVEhFIENB
TExFUiBNVVNUIE5PVCBBREQgVE8gVEhFIHx1dGY4QnVmZmVyfCBBRlRFUiBUSElTIENBTEwuIE1l
bWJlcnMgb2YKKy8vIHxzb3VyY2V8IHdpbGwgcG9pbnQgaW50byB0aGlzIGJ1ZmZlciwgd2hpY2gg
Y291bGQgYmUgaW52YWxpZGF0ZWQgaWYKKy8vIGFkZGl0aW9uYWwgZGF0YSBpcyBhZGRlZCBhbmQg
dGhlIENhbm9uT3V0cHV0IHJlc2l6ZXMgaXRzIGJ1ZmZlci4KKy8vCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzcy4gRmFsZXMgbWVhbnMgdGhhdCB0aGUgaW5wdXQgd2FzIG5vdCB2YWxpZCBVVEYt
MTYsCisvLyBhbHRob3VnaCB3ZSB3aWxsIGhhdmUgc3RpbGwgZG9uZSB0aGUgb3ZlcnJpZGUgd2l0
aCAiaW52YWxpZCBjaGFyYWN0ZXJzIiBpbgorLy8gcGxhY2Ugb2YgZXJyb3JzLgorYm9vbCBTZXR1
cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiB1dGY4QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFy
PiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIHBhcnNl
ZCk7CisKKy8vIEltcGxlbWVudGVkIGluIFVSTENhbm9uaWNhbGl6ZXJfcGF0aC5jYywgdGhlc2Ug
YXJlIHJlcXVpcmVkIGJ5IHRoZSByZWxhdGl2ZSBVUkwKKy8vIHJlc29sdmVyIGFzIHdlbGwsIHNv
IHdlIGRlY2xhcmUgdGhlbSBoZXJlLgorYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25z
dCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21w
b25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5J
bk91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpOworYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBVQ2hhciogc3BlYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKKworI2lm
ICFPUyhXSU5ET1dTKQorLy8gSW1wbGVtZW50YXRpb25zIG9mIFdpbmRvd3MnIGludC10by1zdHJp
bmcgY29udmVyc2lvbnMKK2ludCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciogYnVmZmVyLCBzaXpl
X3Qgc2l6ZUluQ2hhcnMsIGludCByYWRpeCk7CitpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFy
KiBidWZmZXIsIHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KTsKKworLy8gU2VjdXJlIHRl
bXBsYXRlIG92ZXJsb2FkcyBmb3IgdGhlc2UgZnVuY3Rpb25zCit0ZW1wbGF0ZTxzaXplX3QgTj4K
K2lubGluZSBpbnQgX2l0b2FfcyhpbnQgdmFsdWUsIGNoYXIgKCZidWZmZXIpW05dLCBpbnQgcmFk
aXgpCit7CisgICAgcmV0dXJuIF9pdG9hX3ModmFsdWUsIGJ1ZmZlciwgTiwgcmFkaXgpOworfQor
Cit0ZW1wbGF0ZTxzaXplX3QgTj4KK2lubGluZSBpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFy
ICgmYnVmZmVyKVtOXSwgaW50IHJhZGl4KQoreworICAgIHJldHVybiBfaXRvd19zKHZhbHVlLCBi
dWZmZXIsIE4sIHJhZGl4KTsKK30KKworLy8gX3N0cnRvdWk2NCBhbmQgc3RydG91bGwgYmVoYXZl
IHRoZSBzYW1lCitpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9zdHJ0b3VpNjQoY29uc3QgY2hh
ciogbnB0ciwgY2hhcioqIGVuZHB0ciwgaW50IGJhc2UpCit7CisgICAgcmV0dXJuIHN0cnRvdWxs
KG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworfSAvLyBu
YW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxDYW5vbkludGVybmFsX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbk1haWx0by5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDliYWYxZGIxMzBj
MjdmNGZiOWFkZjFhNTdhMzIxZjA5NTM5NWRjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvLyBD
b3B5cmlnaHQgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIEZ1bmN0aW9ucyBmb3IgY2Fub25p
Y2FsaXppbmcgIm1haWx0bzoiIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJM
Q2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJz
ZUludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisKK3RlbXBsYXRlPHR5
cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZU1haWx0b1VS
TChjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q0hBUj4mIHNvdXJjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgLy8gbWFpbHRv
OiBvbmx5IHVzZXMge3NjaGVtZSwgcGF0aCwgcXVlcnl9IC0tIGNsZWFyIHRoZSByZXN0LgorICAg
IG91dHB1dFBhcnNlZC0+dXNlcm5hbWUgPSBVUkxDb21wb25lbnQoKTsKKyAgICBvdXRwdXRQYXJz
ZWQtPnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5ob3N0ID0g
VVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5wb3J0ID0gVVJMQ29tcG9uZW50KCk7
CisgICAgb3V0cHV0UGFyc2VkLT5mcmFnbWVudCA9IFVSTENvbXBvbmVudCgpOworCisgICAgLy8g
U2NoZW1lIChrbm93biwgc28gd2UgZG9uJ3QgYm90aGVyIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUg
bW9yZQorICAgIC8vIGNvbXBsaWNhdGVkIHNjaGVtZSBjYW5vbmljYWxpemVyKS4KKyAgICBvdXRw
dXRQYXJzZWQtPnNjaGVtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIG91dHB1dC5h
cHBlbmQoIm1haWx0bzoiLCA3KTsKKyAgICBvdXRwdXRQYXJzZWQtPnNjaGVtZS5zZXRMZW5ndGgo
Nik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgLy8gUGF0aAorICAgIGlmIChw
YXJzZWQucGF0aC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0cHV0UGFyc2VkLT5wYXRoLnNldEJl
Z2luKG91dHB1dC5sZW5ndGgoKSk7CisKKyAgICAgICAgLy8gQ29weSB0aGUgcGF0aCB1c2luZyBw
YXRoIFVSTCdzIG1vcmUgbGF4IGVzY2FwaW5nIHJ1bGVzLgorICAgICAgICAvLyBXZSBjb252ZXJ0
IHRvIFVURi04IGFuZCBlc2NhcGUgbm9uLUFTQ0lJLCBidXQgbGVhdmUgYWxsCisgICAgICAgIC8v
IEFTQ0lJIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgIGludCBlbmQgPSBwYXJzZWQucGF0aC5l
bmQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHBhcnNlZC5wYXRoLmJlZ2luKCk7IGkgPCBlbmQ7
ICsraSkgeworICAgICAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNvdXJj
ZS5wYXRoW2ldKTsKKyAgICAgICAgICAgIGlmICh1Y2ggPCAweDIwIHx8IHVjaCA+PSAweDgwKQor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRDaGFyKHNvdXJjZS5w
YXRoLCAmaSwgZW5kLCBvdXRwdXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odWNoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBvdXRwdXRQYXJzZWQtPnBhdGguc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1
dFBhcnNlZC0+cGF0aC5iZWdpbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBwYXRo
IGF0IGFsbAorICAgICAgICBvdXRwdXRQYXJzZWQtPnBhdGgucmVzZXQoKTsKKyAgICB9CisKKyAg
ICAvLyBRdWVyeSAtLSBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IHV0ZjggY2hhcnNldCBjb252ZXJ0
ZXIuCisgICAgQ2Fub25pY2FsaXplUXVlcnkoc291cmNlLnF1ZXJ5LCBwYXJzZWQucXVlcnksIDAs
IG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgQ2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IGNo
YXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICBy
ZXR1cm4gRG9DYW5vbmljYWxpemVNYWlsdG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJMQ29t
cG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsK
K30KKworYm9vbCBDYW5vbmljYWxpemVNYWlsdG9VUkwoY29uc3QgVUNoYXIqIHNwZWMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fu
b25pY2FsaXplTWFpbHRvVVJMPFVDaGFyLCBVQ2hhcj4oVVJMQ29tcG9uZW50U291cmNlPFVDaGFy
PihzcGVjKSwgcGFyc2VkLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgUmVwbGFj
ZU1haWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
cGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRz
KiBvdXRwdXRQYXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShi
YXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVy
cmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAg
ICByZXR1cm4gRG9DYW5vbmljYWxpemVNYWlsdG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291
cmNlLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9vbCBSZXBsYWNlTWFp
bHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJM
U2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFj
ZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBv
dXRwdXRQYXJzZWQpCit7CisgICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7CisgICAgVVJMQ29t
cG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJzZWQo
YmFzZVBhcnNlZCk7CisgICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBs
YWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBEb0Nhbm9uaWNh
bGl6ZU1haWx0b1VSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgb3V0cHV0
LCBvdXRwdXRQYXJzZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRoLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2Fub25QYXRoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTNmYzE3NWJhMWM5MjI2OGRm
OTA3OTRlZjc0NDk1M2NiYzE5YTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vblBhdGguY3BwCkBAIC0wLDAgKzEsMzkwIEBACisvLyBDb3B5cmlnaHQg
MjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEy
LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisvLyBDYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucyBmb3Ig
dGhlIHBhdGhzIG9mIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxD
YW5vbi5oIgorCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTFBh
cnNlSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKK2VudW0gQ2hhcmFj
dGVyRmxhZ3MgeworICAgIC8vIFBhc3MgdGhyb3VnaCB1bmNoYW5nZWQsIHdoZXRoZXIgZXNjYXBl
ZCBvciB1bmVzY2FwZWQuIFRoaXMgZG9lc24ndAorICAgIC8vIGFjdHVhbGx5IHNldCBhbnl0aGlu
ZyBzbyB5b3UgY2FuJ3QgT1IgaXQgdG8gY2hlY2ssIGl0J3MganVzdCB0byBtYWtlIHRoZQorICAg
IC8vIHRhYmxlIGJlbG93IG1vcmUgY2xlYXIgd2hlbiBuZWl0aGVyIEVTQ0FQRSBvciBVTkVTQ0FQ
RSBpcyBzZXQuCisgICAgUEFTUyA9IDAsCisKKyAgICAvLyBUaGlzIGNoYXJhY3RlciByZXF1aXJl
cyBzcGVjaWFsIGhhbmRsaW5nIGluIERvUGFydGlhbFBhdGguIERvaW5nIHRoaXMgdGVzdAorICAg
IC8vIGZpcnN0IGFsbG93cyB1cyB0byBmaWx0ZXIgb3V0IHRoZSBjb21tb24gY2FzZXMgb2YgcmVn
dWxhciBjaGFyYWN0ZXJzIHRoYXQKKyAgICAvLyBjYW4gYmUgZGlyZWN0bHkgY29waWVkLgorICAg
IFNQRUNJQUwgPSAxLAorCisgICAgLy8gVGhpcyBjaGFyYWN0ZXIgbXVzdCBiZSBlc2NhcGVkIGlu
IHRoZSBjYW5vbmljYWwgb3V0cHV0LiBOb3RlIHRoYXQgYWxsCisgICAgLy8gZXNjYXBlZCBjaGFy
cyBhbHNvIGhhdmUgdGhlICJzcGVjaWFsIiBiaXQgc2V0IHNvIHRoYXQgdGhlIGNvZGUgdGhhdCBs
b29rcworICAgIC8vIGZvciB0aGlzIGlzIHRyaWdnZXJlZC4gTm90IHZhbGlkIHdpdGggUEFTUyBv
ciBFU0NBUEUKKyAgICBFU0NBUEVfQklUID0gMiwKKyAgICBFU0NBUEUgPSBFU0NBUEVfQklUIHwg
U1BFQ0lBTCwKKworICAgIC8vIFRoaXMgY2hhcmFjdGVyIG11c3QgYmUgdW5lc2NhcGVkIGluIGNh
bm9uaWNhbCBvdXRwdXQuIE5vdCB2YWxpZCB3aXRoCisgICAgLy8gRVNDQVBFIG9yIFBBU1MuIFdl
IERPTidUIHNldCB0aGUgU1BFQ0lBTCBmbGFnIHNpbmNlIGlmIHdlIGVuY291bnRlciB0aGVzZQor
ICAgIC8vIGNoYXJhY3RlcnMgdW5lc2NhcGVkLCB0aGV5IHNob3VsZCBqdXN0IGJlIGNvcGllZC4K
KyAgICBVTkVTQ0FQRSA9IDQsCisKKyAgICAvLyBUaGlzIGNoYXJhY3RlciBpcyBkaXNhbGxvd2Vk
IGluIFVSTHMuIE5vdGUgdGhhdCB0aGUgInNwZWNpYWwiIGJpdCBpcyBhbHNvCisgICAgLy8gc2V0
IHRvIHRyaWdnZXIgaGFuZGxpbmcuCisgICAgSU5WQUxJRF9CSVQgPSA4LAorICAgIElOVkFMSUQg
PSBJTlZBTElEX0JJVCB8IFNQRUNJQUwsCit9OworCisvLyBUaGlzIHRhYmxlIGNvbnRhaW5zIG9u
ZSBvZiB0aGUgYWJvdmUgZmxhZyB2YWx1ZXMuIE5vdGUgc29tZSBmbGFncyBhcmUgbW9yZQorLy8g
dGhhbiBvbmUgYml0cyBiZWNhdXNlIHRoZXkgYWxzbyB0dXJuIG9uIHRoZSAic3BlY2lhbCIgZmxh
Zy4gU3BlY2lhbCBpcyB0aGUKKy8vIG9ubHkgZmxhZyB0aGF0IG1heSBiZSBjb21iaW5lZCB3aXRo
IG90aGVycy4KKy8vCisvLyBUaGlzIHRhYmxlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIGV4YWN0bHkg
d2hhdCBJRSBkb2VzIHdpdGggdGhlIGNoYXJhY3RlcnMuCisvLworLy8gRG90IGlzIGV2ZW4gbW9y
ZSBzcGVjaWFsLCBhbmQgdGhlIGVzY2FwZWQgdmVyc2lvbiBpcyBoYW5kbGVkIHNwZWNpYWxseSBi
eQorLy8gaXNEb3QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0aGUgImVzY2FwZSIgZmxhZywg
YW5kIGV2ZW4gdGhlICJ1bmVzY2FwZSIKKy8vIGJpdCBpcyBuZXZlciBoYW5kbGVkICh3ZSBqdXN0
IG5lZWQgdGhlICJzcGVjaWFsIikgYml0LgorY29uc3QgdW5zaWduZWQgY2hhciBrUGF0aENoYXJM
b29rdXBbMHgxMDBdID0geworLy8gICBudWxsICAgICBjb250cm9sIGNoYXJzLi4uCisgICAgIElO
VkFMSUQsICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKy8vICAgY29udHJvbCBj
aGFycy4uLgorICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
CisvLyAgICcgJyAgICAgICAhICAgICAgICAgIiAgICAgICAgICMgICAgICAgICAkICAgICAgICAg
JSAgICAgICAgICYgICAgICAgICAnICAgICAgICAgKCAgICAgICAgICkgICAgICAgICAqICAgICAg
ICAgKyAgICAgICAgICwgICAgICAgICAtICAgICAgICAgLiAgICAgICAgIC8KKyAgICAgRVNDQVBF
LCAgIFBBU1MsICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIFBBU1MsICAgICBFU0NBUEUsICAgUEFT
UywgICAgIFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywgICAgIFBBU1MsICAgICBQQVNTLCAgICAg
UEFTUywgICAgIFVORVNDQVBFLCBTUEVDSUFMLCAgUEFTUywKKy8vICAgMCAgICAgICAgIDEgICAg
ICAgICAyICAgICAgICAgMyAgICAgICAgIDQgICAgICAgICA1ICAgICAgICAgNiAgICAgICAgIDcg
ICAgICAgICA4ICAgICAgICAgOSAgICAgICAgIDogICAgICAgICA7ICAgICAgICAgPCAgICAgICAg
ID0gICAgICAgICAgPiAgICAgICAgPworICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVND
QVBFLCBVTkVTQ0FQRSwgUEFTUywgICAgIFBBU1MsICAgICBFU0NBUEUsICAgUEFTUywgICAgIEVT
Q0FQRSwgICBFU0NBUEUsCisvLyAgIEAgICAgICAgICBBICAgICAgICAgQiAgICAgICAgIEMgICAg
ICAgICBEICAgICAgICAgRSAgICAgICAgIEYgICAgICAgICBHICAgICAgICAgSCAgICAgICAgIEkg
ICAgICAgICBKICAgICAgICAgSyAgICAgICAgIEwgICAgICAgICBNICAgICAgICAgTiAgICAgICAg
IE8KKyAgICAgUEFTUywgICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVND
QVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsCisv
LyAgIFAgICAgICAgICBRICAgICAgICAgUiAgICAgICAgIFMgICAgICAgICBUICAgICAgICAgVSAg
ICAgICAgIFYgICAgICAgICBXICAgICAgICAgWCAgICAgICAgIFkgICAgICAgICBaICAgICAgICAg
WyAgICAgICAgIFwgICAgICAgICBdICAgICAgICAgXiAgICAgICAgIF8KKyAgICAgVU5FU0NBUEUs
IFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBQQVNTLCAgICAgRVND
QVBFLCAgIFBBU1MsICAgICBFU0NBUEUsICAgVU5FU0NBUEUsCisvLyAgIGAgICAgICAgICBhICAg
ICAgICAgYiAgICAgICAgIGMgICAgICAgICBkICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBn
ICAgICAgICAgaCAgICAgICAgIGkgICAgICAgICBqICAgICAgICAgayAgICAgICAgIGwgICAgICAg
ICBtICAgICAgICAgbiAgICAgICAgIG8KKyAgICAgRVNDQVBFLCAgIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBV
TkVTQ0FQRSwgVU5FU0NBUEUsCisvLyAgIHAgICAgICAgICBxICAgICAgICAgciAgICAgICAgIHMg
ICAgICAgICB0ICAgICAgICAgdSAgICAgICAgIHYgICAgICAgICB3ICAgICAgICAgeCAgICAgICAg
IHkgICAgICAgICB6ICAgICAgICAgeyAgICAgICAgIHwgICAgICAgICB9ICAgICAgICAgfiAgICAg
ICAgIDxOQlNQPgorICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIFVORVNDQVBFLCBFU0NB
UEUsCisvLyAgIC4uLmFsbCB0aGUgaGlnaC1iaXQgY2hhcmFjdGVycyBhcmUgZXNjYXBlZAorICAg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorICAgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLAorICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRX07CisK
K2VudW0gRG90RGlzcG9zaXRpb24geworICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMganVzdCBwYXJ0
IG9mIGEgZmlsZW5hbWUgYW5kIGlzIG5vdCBzcGVjaWFsLgorICAgIE5PVF9BX0RJUkVDVE9SWSwK
KworICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgIERJ
UkVDVE9SWV9DVVIsCisKKyAgICAvLyBUaGUgZ2l2ZW4gZG90IGlzIHRoZSBmaXJzdCBvZiBhIGRv
dWJsZSBkb3QgdGhhdCBzaG91bGQgdGFrZSB1cyB1cCBvbmUuCisgICAgRElSRUNUT1JZX1VQCit9
OworCisvLyBXaGVuIHRoZSBwYXRoIHJlc29sdmVyIGZpbmRzIGEgZG90LCB0aGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aXRoIHRoZQorLy8gY2hhcmFjdGVyIGZvbGxvd2luZyB0aGF0IGRvdCB0byBz
ZWUgd2hhdCBpdCBpcy4gVGhlIHJldHVybiB2YWx1ZQorLy8gaW5kaWNhdGVzIHdoYXQgdHlwZSB0
aGlzIGRvdCBpcyAoc2VlIGFib3ZlKS4gVGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNhc2UKKy8vIHdo
ZXJlIHRoZSBkb3QgaXMgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCisvLworLy8gfCpjb25zdW1l
ZExlbmd0aHwgd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgaW5w
dXQgdGhhdAorLy8gZXhwcmVzcyB3aGF0IHdlIGZvdW5kLgorLy8KKy8vIElmIHRoZSBpbnB1dCBp
cyAiLi4vZm9vIiwgfGFmdGVyRG90fCA9IDEsIHxlbmR8ID0gNiwgYW5kCisvLyBhdCB0aGUgZW5k
LCB8KmNvbnN1bWVkTGVuZ3RofCA9IDIgZm9yIHRoZSAiLi8iIHRoaXMgZnVuY3Rpb24gY29uc3Vt
ZWQuIFRoZQorLy8gb3JpZ2luYWwgZG90IGxlbmd0aCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUg
Y2FsbGVyLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK0RvdERpc3Bvc2l0aW9uIENsYXNzaWZ5
QWZ0ZXJEb3QoY29uc3QgQ0hBUiogc3BlYywgaW50IGFmdGVyRG90LCBpbnQgZW5kLCBpbnQqIGNv
bnN1bWVkTGVuZ3RoKQoreworICAgIGlmIChhZnRlckRvdCA9PSBlbmQpIHsKKyAgICAgICAgLy8g
U2luZ2xlIGRvdCBhdCB0aGUgZW5kLgorICAgICAgICAqY29uc3VtZWRMZW5ndGggPSAwOworICAg
ICAgICByZXR1cm4gRElSRUNUT1JZX0NVUjsKKyAgICB9CisgICAgaWYgKFVSTFBhcnNlcjo6aXNV
UkxTbGFzaChzcGVjW2FmdGVyRG90XSkpIHsKKyAgICAgICAgLy8gU2luZ2xlIGRvdCBmb2xsb3dl
ZCBieSBhIHNsYXNoLgorICAgICAgICAqY29uc3VtZWRMZW5ndGggPSAxOyAvLyBDb25zdW1lIHRo
ZSBzbGFzaAorICAgICAgICByZXR1cm4gRElSRUNUT1JZX0NVUjsKKyAgICB9CisKKyAgICBpbnQg
c2Vjb25kRG90TGVuZ3RoID0gaXNEb3Qoc3BlYywgYWZ0ZXJEb3QsIGVuZCk7CisgICAgaWYgKHNl
Y29uZERvdExlbmd0aCkgeworICAgICAgICBpbnQgYWZ0ZXJTZWNvbmREb3QgPSBhZnRlckRvdCAr
IHNlY29uZERvdExlbmd0aDsKKyAgICAgICAgaWYgKGFmdGVyU2Vjb25kRG90ID09IGVuZCkgewor
ICAgICAgICAgICAgLy8gRG91YmxlIGRvdCBhdCB0aGUgZW5kLgorICAgICAgICAgICAgKmNvbnN1
bWVkTGVuZ3RoID0gc2Vjb25kRG90TGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIERJUkVDVE9S
WV9VUDsKKyAgICAgICAgfQorICAgICAgICBpZiAoVVJMUGFyc2VyOjppc1VSTFNsYXNoKHNwZWNb
YWZ0ZXJTZWNvbmREb3RdKSkgeworICAgICAgICAgICAgLy8gRG91YmxlIGRvdCBmb2xsb3dlZCBi
eSBhIHNsYXNoLgorICAgICAgICAgICAgKmNvbnN1bWVkTGVuZ3RoID0gc2Vjb25kRG90TGVuZ3Ro
ICsgMTsKKyAgICAgICAgICAgIHJldHVybiBESVJFQ1RPUllfVVA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBUaGUgZG90cyBhcmUgZm9sbG93ZWQgYnkgc29tZXRoaW5nIGVsc2UsIG5vdCBh
IGRpcmVjdG9yeS4KKyAgICAqY29uc3VtZWRMZW5ndGggPSAwOworICAgIHJldHVybiBOT1RfQV9E
SVJFQ1RPUlk7Cit9CisKKy8vIFJld2luZHMgdGhlIG91dHB1dCB0byB0aGUgcHJldmlvdXMgc2xh
c2guIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgb3V0cHV0CisvLyBlbmRzIHdpdGggYSBzbGFzaCBh
bmQgdGhpcyBkb2Vzbid0IGNvdW50ICh3ZSBjYWxsIHRoaXMgd2hlbiB3ZSBhcmUKKy8vIGFwcGVu
ZGluZyBkaXJlY3RvcnkgcGF0aHMsIHNvIHRoZSBwcmV2aW91cyBwYXRoIGNvbXBvbmVudCBoYXMg
YW5kIGVuZGluZworLy8gc2xhc2gpLgorLy8KKy8vIFRoaXMgd2lsbCBzdG9wIGF0IHRoZSBmaXJz
dCBzbGFzaCAoYXNzdW1lZCB0byBiZSBhdCBwb3NpdGlvbgorLy8gfHBhdGhCZWdpbkluT3V0cHV0
fCBhbmQgbm90IGdvIGFueSBoaWdoZXIgdGhhbiB0aGF0LiBTb21lIHdlYiBwYWdlcworLy8gZG8g
Ii4uIiB0b28gbWFueSB0aW1lcywgc28gd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBicm9rZW5uZXNz
LgorLy8KKy8vIEl0IHNlYXJjaGVzIGZvciBhIGxpdGVyYWwgc2xhc2ggcmF0aGVyIHRoYW4gaW5j
bHVkaW5nIGEgYmFja3NsYXNoIGFzIHdlbGwKKy8vIGJlY2F1c2UgaXQgaXMgcnVuIG9ubHkgb24g
dGhlIGNhbm9uaWNhbCBvdXRwdXQuCisvLworLy8gVGhlIG91dHB1dCBpcyBndWFyYW50ZWVkIHRv
IGVuZCBpbiBhIHNsYXNoIHdoZW4gdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMuCit2b2lkIEJhY2tV
cFRvUHJldmlvdXNTbGFzaChpbnQgcGF0aEJlZ2luSW5PdXRwdXQsIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0KQoreworICAgIEFTU0VSVChvdXRwdXQubGVuZ3RoKCkgPiAwKTsKKworICAgIGludCBp
ID0gb3V0cHV0Lmxlbmd0aCgpIC0gMTsKKyAgICBBU1NFUlQob3V0cHV0LmF0KGkpID09ICcvJyk7
CisgICAgaWYgKGkgPT0gcGF0aEJlZ2luSW5PdXRwdXQpCisgICAgICAgIHJldHVybjsgLy8gV2Un
cmUgYXQgdGhlIGZpcnN0IHNsYXNoLCBub3RoaW5nIHRvIGRvLgorCisgICAgLy8gTm93IGJhY2sg
dXAgKHNraXBwaW5nIHRoZSB0cmFpbGluZyBzbGFzaCkgdW50aWwgd2UgZmluZCBhbm90aGVyIHNs
YXNoLgorICAgIGktLTsKKyAgICB3aGlsZSAob3V0cHV0LmF0KGkpICE9ICcvJyAmJiBpID4gcGF0
aEJlZ2luSW5PdXRwdXQpCisgICAgICAgIGktLTsKKworICAgIC8vIE5vdyBzaHJpbmsgdGhlIG91
dHB1dCB0byBqdXN0IGluY2x1ZGUgdGhhdCBsYXN0IHNsYXNoIHdlIGZvdW5kLgorICAgIG91dHB1
dC5zZXRMZW5ndGgoaSArIDEpOworfQorCisvLyBBcHBlbmRzIHRoZSBnaXZlbiBwYXRoIHRvIHRo
ZSBvdXRwdXQuIEl0IGFzc3VtZXMgdGhhdCBpZiB0aGUgaW5wdXQgcGF0aAorLy8gc3RhcnRzIHdp
dGggYSBzbGFzaCwgaXQgc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0LiBJZiBubyBwYXRo
IGhhcworLy8gYWxyZWFkeSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgKHRoZSBjYXNlIHdo
ZW4gbm90IHJlc29sdmluZworLy8gcmVsYXRpdmUgVVJMcyksIHRoZSBwYXRoIHNob3VsZCBiZWdp
biB3aXRoIGEgc2xhc2guCisvLworLy8gSWYgdGhlcmUgYXJlIGFscmVhZHkgcGF0aCBjb21wb25l
bnRzICh0aGlzIG1vZGUgaXMgdXNlZCB3aGVuIGFwcGVuZGluZworLy8gcmVsYXRpdmUgcGF0aHMg
Zm9yIHJlc29sdmluZyksIGl0IGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGFscmVhZHkgaGFzCisv
LyBhIHRyYWlsaW5nIHNsYXNoIGFuZCB0aGF0IGlmIHRoZSBpbnB1dCBiZWdpbnMgd2l0aCBhIHNs
YXNoLCBpdCBzaG91bGQgYmUKKy8vIGNvcGllZCB0byB0aGUgb3V0cHV0LgorLy8KKy8vIFdlIGRv
IG5vdCBjb2xsYXBzZSBtdWx0aXBsZSBzbGFzaGVzIGluIGEgcm93IHRvIGEgc2luZ2xlIHNsYXNo
LiBJdCBzZWVtcworLy8gbm8gd2ViIGJyb3dzZXJzIGRvIHRoaXMsIGFuZCB3ZSBkb24ndCB3YW50
IGluY29tcGFiYWJpbGl0aWVzLCBldmVuIHRob3VnaAorLy8gaXQgd291bGQgYmUgY29ycmVjdCBm
b3IgbW9zdCBzeXN0ZW1zLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+
Citib29sIERvUGFydGlhbFBhdGgoY29uc3QgQ0hBUiogc3BlYywKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgaW50IHBhdGhC
ZWdpbkluT3V0cHV0LAorICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
KQoreworICAgIGludCBlbmQgPSBwYXRoLmVuZCgpOworCisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKyAgICBmb3IgKGludCBpID0gcGF0aC5iZWdpbigpOyBpIDwgZW5kOyBpKyspIHsKKyAgICAg
ICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pOworICAgICAgICBpZiAo
c2l6ZW9mKENIQVIpID4gc2l6ZW9mKGNoYXIpICYmIHVjaCA+PSAweDgwKSB7CisgICAgICAgICAg
ICAvLyBXZSBvbmx5IG5lZWQgdG8gdGVzdCB3aWRlIGlucHV0IGZvciBoYXZpbmcgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuIEZvcgorICAgICAgICAgICAgLy8gbmFycm93IGlucHV0LCB3ZSdsbCBhbHdh
eXMganVzdCB1c2UgdGhlIGxvb2t1cCB0YWJsZS4gV2UgZG9uJ3QgdHJ5IHRvCisgICAgICAgICAg
ICAvLyBkbyBhbnl0aGluZyB0cmlja3kgd2l0aCBkZWNvZGluZy92YWxpZGF0aW5nIFVURi04LiBU
aGlzIGZ1bmN0aW9uIHdpbGwKKyAgICAgICAgICAgIC8vIHJlYWQgb25lIG9yIHR3byBVVEYtMTYg
Y2hhcmFjdGVycyBhbmQgYXBwZW5kIHRoZSBvdXRwdXQgYXMgVVRGLTguIFRoaXMKKyAgICAgICAg
ICAgIC8vIGNhbGwgd2lsbCBiZSByZW1vdmVkIGluIDgtYml0IG1vZGUuCisgICAgICAgICAgICBz
dWNjZXNzICY9IEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAmaSwgZW5kLCBvdXRwdXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm9ybWFsIEFTQ0lJIGNoYXJhY3RlciBv
ciA4LWJpdCBpbnB1dCwgdXNlIHRoZSBsb29rdXAgdGFibGUuCisgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIG91dENoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odWNoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MgPSBrUGF0aENoYXJMb29rdXBbb3V0Q2hdOworICAgICAg
ICAgICAgaWYgKGZsYWdzICYgU1BFQ0lBTCkgeworICAgICAgICAgICAgICAgIC8vIE5lZWRzIHNw
ZWNpYWwgaGFuZGxpbmcgb2Ygc29tZSBzb3J0LgorICAgICAgICAgICAgICAgIGludCBkb3RsZW47
CisgICAgICAgICAgICAgICAgaWYgKChkb3RsZW4gPSBpc0RvdChzcGVjLCBpLCBlbmQpKSA+IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZG90IHdhcyBwcmVjZWVkZWQg
YnkgYSBzbGFzaCBpbiB0aGUgb3V0cHV0LiBXZQorICAgICAgICAgICAgICAgICAgICAvLyBhc3N1
bWUgdGhhdCB3aGVuIGNhbm9uaWNhbGl6aW5nIHBhdGhzLCB0aGV5IHdpbGwgYWx3YXlzCisgICAg
ICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHdpdGggYSBzbGFzaCBhbmQgbm90IGEgZG90LCBzbyB3
ZSBkb24ndCBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kcyBjaGVjayB0aGUg
b3V0cHV0LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgd2UgY2hlY2sgdGhpcyBpbiB0aGUgY2FzZSBvZiBkb3RzIHNvIHdlIGRvbid0IGhh
dmUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIHNsYXNoZXMuIFNpbmNl
IHNsYXNoZXMgYXJlIG11Y2ggbW9yZSBjb21tb24gdGhhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkb3RzLCB0aGlzIGFjdHVhbGx5IGluY3JlYXNlcyBwZXJmb3JtYW5jZSBtZWFzdXJhYmx5ICh0
aG91Z2gKKyAgICAgICAgICAgICAgICAgICAgLy8gc2xpZ2h0bHkpLgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQob3V0cHV0Lmxlbmd0aCgpID4gcGF0aEJlZ2luSW5PdXRwdXQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCgpID4gcGF0aEJlZ2luSW5PdXRwdXQgJiYg
b3V0cHV0LmF0KG91dHB1dC5sZW5ndGgoKSAtIDEpID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU2xhc2ggZm9sbG93ZWQgYnkgYSBkb3QsIGNoZWNrIHRvIHNlZSBpZiB0aGlz
IGlzIG1lYW5zIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29uc3VtZWRM
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKENsYXNzaWZ5QWZ0ZXJEb3Q8
Q0hBUj4oc3BlYywgaSArIGRvdGxlbiwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25zdW1lZExlbmd0aCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIE5PVF9BX0RJUkVDVE9SWToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgZG90IHRvIHRoZSBvdXRwdXQsIGl0IG1lYW5z
IG5vdGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZCgnLicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGRvdGxl
biAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUT1JZX0NVUjogLy8gQ3VycmVudCBkaXJlY3Rv
cnksIGp1c3Qgc2tpcCB0aGUgaW5wdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkgKz0gZG90bGVuICsgY29uc3VtZWRMZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJUkVD
VE9SWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja1VwVG9QcmV2aW91
c1NsYXNoKHBhdGhCZWdpbkluT3V0cHV0LCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpICs9IGRvdGxlbiArIGNvbnN1bWVkTGVuZ3RoIC0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGRvdCBpcyBub3QgcHJlY2VlZGVkIGJ5IGEgc2xhc2gsIGl0IGlzIGp1c3QgcGFydCBvZiBz
b21lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlIG5hbWUuCisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ICs9IGRvdGxlbiAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAob3V0Q2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICAvLyBDb252
ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcworICAgICAgICAgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCcvJyk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG91dENoID09
ICclJykgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZXNjYXBlIHNlcXVlbmNlcy4K
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB1bmVzY2FwZWRWYWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKERlY29kZUVzY2FwZWQoc3BlYywgJmksIGVuZCwgJnVuZXNjYXBl
ZFZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgZXNjYXBlIHNlcXVl
bmNlLCBzZWUgaWYgd2Uga2VlcCwgcmVqZWN0LCBvciB1bmVzY2FwZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgdW5lc2NhcGVkRmxhZ3MgPSBrUGF0aENoYXJMb29rdXBbdW5lc2Nh
cGVkVmFsdWVdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkRmxhZ3Mg
JiBVTkVTQ0FQRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZXNjYXBl
ZCB2YWx1ZSBzaG91bGRuJ3QgYmUgZXNjYXBlZCwgY29weSBpdC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVuZXNjYXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodW5lc2NhcGVkRmxhZ3MgJiBJTlZBTElEX0JJVCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIsIGNv
cHkgaXQgYW5kIHJlbWVtYmVyIHRoZSBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKCclJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVjW2kgLSAxXSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFs
aWQgZXNjYXBlZCBjaGFyYWN0ZXIgYnV0IHdlIHNob3VsZCBrZWVwIGl0IGVzY2FwZWQuIFdlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIGNh
c2Ugb2YgYW55IGhleCBsZXR0ZXJzIGluIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgc2VydmVyIGlzIHNlbnNpdGl2ZSB0byB0aGF0LCBzbyB3ZSBqdXN0IGNvcHkgdGhl
IHR3bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgd2l0aG91dCBj
aGVja2luZyAoRGVjb2RlRXNjYXBlIHdpbGwgaGF2ZSBhZHZhbmNlZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcGFpcikuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJScpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpIC0g
MV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19j
YXN0PGNoYXI+KHNwZWNbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQg
ZXNjYXBlIHNlcXVlbmNlLiBJRTcgcmVqZWN0cyBhbnkgVVJMcyB3aXRoIHN1Y2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNlcXVlbmNlcywgd2hpbGUgRmlyZWZveCwgSUU2LCBhbmQgU2Fm
YXJpIGFsbCBwYXNzIGl0IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuY2hh
bmdlZC4gV2UgYXJlIG1vcmUgcGVybWlzc2l2ZSB1bmxpa2UgSUU3LiBJIGRvbid0IHRoaW5rIHRo
aXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwcm9i
bGVtcywgaWYgaXQgZG9lcywgd2Ugc2hvdWxkIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gYmUgbW9yZSBsaWtlIElFNy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoJyUnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChmbGFncyAmIElOVkFMSURfQklUKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZvciBOVUxMcywgZXRjLiBmYWlsLgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2Nh
cGVkQ2hhcmFjdGVyKG91dENoLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgRVNDQVBFX0JJ
VCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNoYXJhY3RlciBzaG91bGQgYmUgZXNj
YXBlZC4KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihvdXRD
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIE5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGlzIGNoYXJhY3RlciwganVz
dCBhcHBlbmQgaXQuCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChvdXRDaCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb1BhdGgoY29uc3Qg
Q0hBUiogc3BlYywKKyAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiBvdXRwdXRQYXRoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgb3V0cHV0UGF0
aC0+c2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBpZiAocGF0aC5sZW5ndGgoKSA+IDAp
IHsKKyAgICAgICAgLy8gV3JpdGUgb3V0IGFuIGluaXRpYWwgc2xhc2ggaWYgdGhlIGlucHV0IGhh
cyBub25lLiBJZiB3ZSBqdXN0IHBhcnNlIGEgVVJMCisgICAgICAgIC8vIGFuZCB0aGVuIGNhbm9u
aWNhbGl6ZSBpdCwgaXQgd2lsbCBvZiBjb3Vyc2UgaGF2ZSBhIHNsYXNoIGFscmVhZHkuIFRoaXMK
KyAgICAgICAgLy8gY2hlY2sgaXMgZm9yIHRoZSByZXBsYWNlbWVudCBhbmQgcmVsYXRpdmUgVVJM
IHJlc29sdmluZyBjYXNlcyBvZiBmaWxlCisgICAgICAgIC8vIFVSTHMuCisgICAgICAgIGlmICgh
VVJMUGFyc2VyOjppc1VSTFNsYXNoKHNwZWNbcGF0aC5iZWdpbigpXSkpCisgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCcvJyk7CisKKyAgICAgICAgc3VjY2VzcyA9IERvUGFydGlhbFBhdGg8Q0hB
UiwgVUNIQVI+KHNwZWMsIHBhdGgsIG91dHB1dFBhdGgtPmJlZ2luKCksIG91dHB1dCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gTm8gaW5wdXQsIGNhbm9uaWNhbCBwYXRoIGlzIGEgc2xhc2gu
CisgICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKyAgICB9CisgICAgb3V0cHV0UGF0aC0+c2V0
TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBhdGgtPmJlZ2luKCkpOworICAgIHJldHVy
biBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIENhbm9uaWNhbGl6ZVBhdGgo
Y29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25l
bnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQoreworICAg
IHJldHVybiBEb1BhdGg8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCBv
dXRwdXRQYXRoKTsKK30KKworYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IFVDaGFyKiBzcGVj
LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAg
ICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgpCit7CisgICAgcmV0dXJuIERvUGF0aDxV
Q2hhciwgVUNoYXI+KHNwZWMsIHBhdGgsIG91dHB1dCwgb3V0cHV0UGF0aCk7Cit9CisKK2Jvb2wg
Q2Fub25pY2FsaXplUGFydGlhbFBhdGgoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIHJldHVybiBEb1BhcnRp
YWxQYXRoPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIHBhdGgsIHBhdGhCZWdpbkluT3V0cHV0
LCBvdXRwdXQpOworfQorCitib29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKGNvbnN0IFVDaGFy
KiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
Cit7CisgICAgcmV0dXJuIERvUGFydGlhbFBhdGg8VUNoYXIsIFVDaGFyPihzcGVjLCBwYXRoLCBw
YXRoQmVnaW5Jbk91dHB1dCwgb3V0cHV0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25p
Y2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgx
OWM4OWQxMTQ1NTIzYTdhZDlhYWNmYmU4M2I1NGYwMGQ2NmUwNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRodXJsLmNwcApAQCAtMCwwICsxLDEy
MCBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0
cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBGdW5jdGlvbnMg
Zm9yIGNhbm9uaWNhbGl6aW5nICJwYXRoIiBVUkxzLiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0
aGUgcGF0aAorLy8gb2YgYSBVUkwsIHRoZXNlIGFyZSBVUkxzIHRoYXQgaGF2ZSBubyBhdXRob3Jp
dHkgc2VjdGlvbiwgb25seSBhIHBhdGguIEZvcgorLy8gZXhhbXBsZSwgImphdmFzY3JpcHQ6IiBh
bmQgImRhdGE6Ii4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgi
CisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFs
LmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9DYW5vbmljYWxpemVQYXRoVVJMKGNv
bnN0IFVSTENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291cmNlLCBjb25zdCBVUkxT
ZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91
cHV0UGFyc2VkKQoreworICAgIC8vIFNjaGVtZTogdGhpcyB3aWxsIGFwcGVuZCB0aGUgY29sb24u
CisgICAgYm9vbCBzdWNjZXNzID0gQ2Fub25pY2FsaXplU2NoZW1lKHNvdXJjZS5zY2hlbWUsIHBh
cnNlZC5zY2hlbWUsIG91dHB1dCwgJm91cHV0UGFyc2VkLnNjaGVtZSk7CisKKyAgICAvLyBXZSBh
c3N1bWUgdGhlcmUncyBubyBhdXRob3JpdHkgZm9yIHBhdGggVVJMcy4gTm90ZSB0aGF0IGhvc3Rz
IHNob3VsZCBuZXZlcgorICAgIC8vIGhhdmUgLTEgbGVuZ3RoLgorICAgIG91cHV0UGFyc2VkLnVz
ZXJuYW1lLnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICBv
dXB1dFBhcnNlZC5ob3N0LnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQucG9ydC5yZXNldCgpOwor
CisgICAgaWYgKHBhcnNlZC5wYXRoLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBDb3B5IHRoZSBw
YXRoIHVzaW5nIHBhdGggVVJMJ3MgbW9yZSBsYXggZXNjYXBpbmcgcnVsZXMgKHRoaW5rIGZvcgor
ICAgICAgICAvLyBqYXZhc2NyaXB0OikuIFdlIGNvbnZlcnQgdG8gVVRGLTggYW5kIGVzY2FwZSBu
b24tQVNDSUksIGJ1dCBsZWF2ZSBhbGwKKyAgICAgICAgLy8gQVNDSUkgY2hhcmFjdGVycyBhbG9u
ZS4gVGhpcyBoZWxwcyByZWFkYWJpbGl0eSBvZiBKYXZhU3RyaXB0LgorICAgICAgICBvdXB1dFBh
cnNlZC5wYXRoLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgICAgIGludCBlbmQgPSBw
YXJzZWQucGF0aC5lbmQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHBhcnNlZC5wYXRoLmJlZ2lu
KCk7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8
VUNIQVI+KHNvdXJjZS5wYXRoW2ldKTsKKyAgICAgICAgICAgIGlmICh1Y2ggPCAweDIwIHx8IHVj
aCA+PSAweDgwKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRD
aGFyKHNvdXJjZS5wYXRoLCAmaSwgZW5kLCBvdXRwdXQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odWNoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgb3VwdXRQYXJzZWQucGF0aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgp
IC0gb3VwdXRQYXJzZWQucGF0aC5iZWdpbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBF
bXB0eSBwYXRoLgorICAgICAgICBvdXB1dFBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgfQorCisg
ICAgLy8gQXNzdW1lIHRoZXJlJ3Mgbm8gcXVlcnkgb3IgcmVmLgorICAgIG91cHV0UGFyc2VkLnF1
ZXJ5LnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQuZnJhZ21lbnQucmVzZXQoKTsKKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIGNhbm9uaWNhbGl6ZVBh
dGhVUkwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkKK3sKKyAgICByZXR1
cm4gZG9DYW5vbmljYWxpemVQYXRoVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KFVSTENvbXBvbmVu
dFNvdXJjZTxjaGFyPihzcGVjKSwgcGFyc2VkLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKwor
Ym9vbCBjYW5vbmljYWxpemVQYXRoVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdt
ZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0
UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8VUNoYXIsIFVDaGFy
PihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3VwdXRQ
YXJzZWQpOworfQorCitib29sIFJlcGxhY2VQYXRoVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxh
Y2VtZW50cywgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNl
ZCkKK3sKKyAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVS
TFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cE92ZXJyaWRlQ29tcG9uZW50
cyhiYXNlLCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBkb0Nh
bm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIG91
dHB1dCwgKm91cHV0UGFyc2VkKTsKK30KKworYm9vbCBSZXBsYWNlUGF0aFVSTChjb25zdCBjaGFy
KiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgY29uc3QgUmVwbGFjZW1lbnRz
PFVDaGFyPiYgcmVwbGFjZW1lbnRzLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVu
dHMqIG91cHV0UGFyc2VkKQoreworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OworICAgIFVS
TENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMgcGFy
c2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwg
cmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gZG9DYW5v
bmljYWxpemVQYXRoVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBvdXRw
dXQsICpvdXB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblF1ZXJ5LmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdmMjVhMjBjZDViNWJl
ODEwYTcxNGJiYmMzYjg3YzlmNWEyNzI4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHAKQEAgLTAsMCArMSwxODYgQEAKKy8vIENvcHly
aWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJV
UkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMQ2hhcmFjdGVyVHlwZXMuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg+CisKKy8vIFF1ZXJ5IGNhbm9uaWNhbGl6YXRp
b24gaW4gSUUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElFIGlzIHZlcnkg
cGVybWlzc2l2ZSBmb3IgcXVlcnkgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gbGlua3Mgb24gdGhl
IHBhZ2UKKy8vIChpbiBjb250cmFzdCB0byBsaW5rcyB0aGF0IGl0IGNvbnN0cnVjdHMgaXRzZWxm
IGJhc2VkIG9uIGZvcm0gZGF0YSkuIEl0IGRvZXMKKy8vIG5vdCB1bmVzY2FwZSBhbnkgY2hhcmFj
dGVyLiBJdCBkb2VzIG5vdCByZWplY3QgYW55IGVzY2FwZSBzZXF1ZW5jZSAoYmUgdGhleQorLy8g
aW52YWxpZCBsaWtlICIlMnkiIG9yIGZyZWFreSBsaWtlICUwMCkuCisvLworLy8gSUUgb25seSBl
c2NhcGVzIHNwYWNlcyBhbmQgbm90aGluZyBlbHNlLiBFbWJlZGRlZCBOVUxMcywgdGFicyAoMHgw
OSksCisvLyBMRiAoMHgwYSksIGFuZCBDUiAoMHgwZCkgYXJlIHJlbW92ZWQgKHRoaXMgcHJvYmFi
bHkgaGFwcGVucyBhdCBhbiBlYXJsaWVyCisvLyBsYXllciBzaW5jZSB0aGV5IGFyZSByZW1vdmVk
IGZyb20gYWxsIHBvcnRpb25zIG9mIHRoZSBVUkwpLiBBbGwgb3RoZXIKKy8vIGNoYXJhY3RlcnMg
YXJlIHBhc3NlZCB1bm1vZGlmaWVkLiBJbnZhbGlkIFVURi0xNiBzZXF1ZW5jZXMgYXJlIHByZXNl
cnZlZCBhcworLy8gd2VsbCwgd2l0aCBlYWNoIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgYmVpbmcg
Y29udmVydGVkIHRvIFVURi04LiBJdCBpcyB0aGUKKy8vIHNlcnZlcidzIGpvYiB0byBtYWtlIHNl
bnNlIG9mIHRoaXMgaW52YWxpZCBxdWVyeS4KKy8vCisvLyBJbnZhbGlkIG11bHRpYnl0ZSBzZXF1
ZW5jZXMgKGZvciBleGFtcGxlLCBpbnZhbGlkIFVURi04IG9uIGEgVVRGLTggcGFnZSkKKy8vIGFy
ZSBjb252ZXJ0ZWQgdG8gdGhlIGludmFsaWQgY2hhcmFjdGVyIGFuZCBzZW50IGFzIHVuZXNjYXBl
ZCBVVEYtOCAoMHhlZiwKKy8vIDB4YmYsIDB4YmQpLiBUaGlzIG1heSBub3QgYmUgY2Fub25pY2Fs
aXphdGlvbiwgdGhlIHBhcnNlciBtYXkgZ2VuZXJhdGUgdGhlc2UKKy8vIHN0cmluZ3MgYmVmb3Jl
IHRoZSBVUkwgaGFuZGxlciBldmVyIHNlZXMgdGhlbS4KKy8vCisvLyBPdXIgcXVlcnkgY2Fub25p
Y2FsaXphdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdlIGVzY2FwZSBh
bGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycywgbGlrZSBGaXJl
Zm94LgorLy8gVGhpcyBpcyBtb3JlIGNvbmZvcm1hbnQgdG8gdGhlIFVSTCBzcGVjLCBhbmQgdGhl
cmUgZG8gbm90IHNlZW0gdG8gYmUgbWFueQorLy8gcHJvYmxlbXMgcmVsYXRpbmcgdG8gRmlyZWZv
eCdzIGJlaGF2aW9yLgorLy8KKy8vIExpa2UgSUUsIHdlIHdpbGwgbmV2ZXIgdW5lc2NhcGUgKGFs
dGhvdWdoIHRoZSBhcHBsaWNhdGlvbiBtYXkgd2FudCB0byB0cnkKKy8vIHVuZXNjYXBpbmcgdG8g
cHJlc2VudCB0aGUgdXNlciB3aXRoIGEgbW9yZSB1bmRlcnN0YW5kYWJsZSBVUkwpLiBXZSB3aWxs
CisvLyByZXBsYWNlIGFsbCBpbnZhbGlkIHNlcXVlbmNlcyAoaW5jbHVkaW5nIGludmFsaWQgVVRG
LTE2IHNlcXVlbmNlcywgd2hpY2ggSUUKKy8vIGRvZXNuJ3QpIHdpdGggdGhlICJpbnZhbGlkIGNo
YXJhY3RlciwiIGFuZCB3ZSB3aWxsIGVzY2FwZSBpdC4KKworI2lmIFVTRShXVEZVUkwpCisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVycyBzdGFydGluZyBhdCB8YmVn
aW58IGFuZCBnb2luZyB1bnRpbCB8ZW5kfAorLy8gKG5vbi1pbmNsdXNpdmUpIGFyZSBhbGwgcmVw
cmVzZW50YWJsZSBpbiA3LWJpdHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Ym9vbCBpc0FsbEFTQ0lJKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcXVlcnkpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShzcGVjICsg
cXVlcnkuYmVnaW4oKSwgcXVlcnkubGVuZ3RoKCkpOworfQorCisvLyBGSVhNRTogQmVuamFtaW46
IGdldCByaWQgb2YgdGhpcyB3aGVuIGV2ZXJ5dGhpbmcgaXMgYmFzZWQgb24gTENoYXIuCit0ZW1w
bGF0ZTw+Citib29sIGlzQWxsQVNDSUk8Y2hhcj4oY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBxdWVyeSkKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzcGVjICsgcXVlcnkuYmVnaW4oKSksIHF1ZXJ5
Lmxlbmd0aCgpKTsKK30KKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBvdXRw
dXQsIGVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QKKy8vIG1hdGNoIHRoZSBnaXZlbiB8
dHlwZXwgaW4gU2hhcmVkQ2hhclR5cGVzLiBUaGlzIHZlcnNpb24gd2lsbCBhY2NlcHQgOCBvciAx
NgorLy8gYml0IGNoYXJhY3RlcnMsIGJ1dCBhc3N1bWVzIHRoYXQgdGhleSBoYXZlIG9ubHkgNy1i
aXQgdmFsdWVzLiBJdCBhbHNvIGFzc3VtZXMKKy8vIHRoYXQgYWxsIFVURi04IHZhbHVlcyBhcmUg
Y29ycmVjdCwgc28gZG9lc24ndCBib3RoZXIgY2hlY2tpbmcKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Cit2b2lkIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFVUkxD
aGFyYWN0ZXJUeXBlczo6aXNRdWVyeUNoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc291
cmNlW2ldKSkpCisgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KHNvdXJjZVtpXSksIG91dHB1dCk7CisgICAgICAgIGVsc2UgLy8g
RG9lc24ndCBuZWVkIGVzY2FwaW5nLgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNf
Y2FzdDxjaGFyPihzb3VyY2VbaV0pKTsKKyAgICB9Cit9CisKKy8vIFJ1bnMgdGhlIGNvbnZlcnRl
ciBvbiB0aGUgZ2l2ZW4gVVRGLTggaW5wdXQuIFNpbmNlIHRoZSBjb252ZXJ0ZXIgZXhwZWN0cwor
Ly8gVVRGLTE2LCB3ZSBoYXZlIHRvIGNvbnZlcnQgZmlyc3QuIFRoZSBjb252ZXJ0ZXIgbXVzdCBi
ZSBub24tbnVsbC4KK3ZvaWQgcnVuQ29udmVydGVyKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJlcGxhY2UgYW55
IG1pc2VuY29kZWQgdmFsdWVzIHdpdGggdGhlIGludmFsaWQKKyAgICAvLyBjaGFyYWN0ZXIuIFRo
aXMgaXMgd2hhdCB3ZSB3YW50IHNvIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIGVycm9yLgor
ICAgIFJhd1VSTEJ1ZmZlcjxVQ2hhcj4gdXRmMTY7CisgICAgQ29udmVydFVURjhUb1VURjE2KCZz
cGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgdXRmMTYpOworICAgIGNvbnZlcnRl
ci0+Q29udmVydEZyb21VVEYxNih1dGYxNi5kYXRhKCksIHV0ZjE2Lmxlbmd0aCgpLCBvdXRwdXQp
OworfQorCisvLyBSdW5zIHRoZSBjb252ZXJ0ZXIgd2l0aCB0aGUgZ2l2ZW4gVVRGLTE2IGlucHV0
LiBXZSBkb24ndCBoYXZlIHRvIGRvCisvLyBhbnl0aGluZywgYnV0IHRoaXMgb3ZlcnJpZGRkZW4g
ZnVuY3Rpb24gYWxsb3dzIHVzIHRvIHVzZSB0aGUgc2FtZSBjb2RlCisvLyBmb3IgYm90aCBVVEYt
OCBhbmQgVVRGLTE2IGlucHV0Lgordm9pZCBydW5Db252ZXJ0ZXIoY29uc3QgVUNoYXIqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgY29udmVydGVyLT5Db252ZXJ0RnJvbVVU
RjE2KCZzcGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgb3V0cHV0KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9Db252ZXJ0VG9RdWVyeUVu
Y29kaW5nKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVl
cnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
Cit7CisgICAgaWYgKGlzQWxsQVNDSUkoc3BlYywgcXVlcnkpKSB7CisgICAgICAgIC8vIEVhc3k6
IHRoZSBpbnB1dCBjYW4ganVzdCBhcHBlbmRlZCB3aXRoIG5vIGNoYXJhY3RlciBzZXQgY29udmVy
c2lvbnMuCisgICAgICAgIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZygmc3BlY1txdWVyeS5iZWdp
bigpXSwgcXVlcnkubGVuZ3RoKCksIG91dHB1dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
SGFyZGVyOiBjb252ZXJ0IHRvIHRoZSBwcm9wZXIgZW5jb2RpbmcgZmlyc3QuCisgICAgICAgIGlm
IChjb252ZXJ0ZXIpIHsKKyAgICAgICAgICAgIC8vIFJ1biB0aGUgY29udmVydGVyIHRvIGdldCBh
biA4LWJpdCBzdHJpbmcsIHRoZW4gYXBwZW5kIGl0LCBlc2NhcGluZworICAgICAgICAgICAgLy8g
bmVjZXNzYXJ5IHZhbHVlcy4KKyAgICAgICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiBlaWdodEJp
dFF1ZXJ5U3RyaW5nOworICAgICAgICAgICAgcnVuQ29udmVydGVyKHNwZWMsIHF1ZXJ5LCBjb252
ZXJ0ZXIsIGVpZ2h0Qml0UXVlcnlTdHJpbmcpOworICAgICAgICAgICAgYXBwZW5kUmF3OEJpdFF1
ZXJ5U3RyaW5nKGVpZ2h0Qml0UXVlcnlTdHJpbmcuZGF0YSgpLCBlaWdodEJpdFF1ZXJ5U3RyaW5n
Lmxlbmd0aCgpLCBvdXRwdXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8g
Y29udmVydGVyLCBkbyBvdXIgb3duIFVURi04IGNvbnZlcnNpb24uCisgICAgICAgICAgICBhcHBl
bmRTdHJpbmdPZlR5cGUoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBVUkxD
aGFyYWN0ZXJUeXBlczo6UXVlcnlDaGFyYWN0ZXIsIG91dHB1dCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRvQ2Fub25pY2Fs
aXplUXVlcnkoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBx
dWVyeSwgQ2hhcnNldENvbnZlcnRlciogY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFF1ZXJ5Q29t
cG9uZW50KQoreworICAgIGlmIChxdWVyeS5sZW5ndGgoKSA8IDApIHsKKyAgICAgICAgb3V0cHV0
UXVlcnlDb21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG91dHB1dC5hcHBlbmQoJz8nKTsKKyAgICBvdXRwdXRRdWVyeUNvbXBvbmVudC5zZXRC
ZWdpbihvdXRwdXQubGVuZ3RoKCkpOworCisgICAgZG9Db252ZXJ0VG9RdWVyeUVuY29kaW5nPENo
YXJhY3RlclR5cGU+KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCk7CisKKyAgICBvdXRw
dXRRdWVyeUNvbXBvbmVudC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UXVlcnlD
b21wb25lbnQuYmVnaW4oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgQ2Fub25pY2Fs
aXplUXVlcnkoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hh
cnNldENvbnZlcnRlciogY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeUNvbXBvbmVudCkKK3sK
KyAgICBkb0Nhbm9uaWNhbGl6ZVF1ZXJ5KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCwg
Km91dHB1dFF1ZXJ5Q29tcG9uZW50KTsKK30KKwordm9pZCBDYW5vbmljYWxpemVRdWVyeShjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hhcnNldENvbnZlcnRl
ciogY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeUNvbXBvbmVudCkKK3sKKyAgICBkb0Nhbm9u
aWNhbGl6ZVF1ZXJ5KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFF1ZXJ5
Q29tcG9uZW50KTsKK30KKwordm9pZCBDb252ZXJ0VVRGMTZUb1F1ZXJ5RW5jb2RpbmcoY29uc3Qg
VUNoYXIqIGlucHV0LCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVy
KiBjb252ZXJ0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGRvQ29udmVydFRv
UXVlcnlFbmNvZGluZzxVQ2hhcj4oaW5wdXQsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblJlbGF0aXZlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fu
b25SZWxhdGl2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgwNzcyMmVkYzk0MzEwZjM0Mzk2Y2ZiNzc1Zjcy
YjlhM2VhYWNkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2Fub25SZWxhdGl2ZS5jcHAKQEAgLTAsMCArMSw1ODcgQEAKKy8vIENvcHlyaWdodCAyMDA3LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworLy8gQ2Fub25pY2FsaXplciBmdW5jdGlvbnMgZm9yIHdvcmtpbmcg
d2l0aCBhbmQgcmVzb2x2aW5nIHJlbGF0aXZlIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisjaW5j
bHVkZSAiVVJMVXRpbEludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2Ug
V1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisv
LyBGaXJlZm94IGRvZXMgYSBjYXNlLXNlbnNpdGl2ZSBjb21wYXJlICh3aGljaCBpcyBwcm9iYWJs
eSB3cm9uZy0tTW96aWxsYSBidWcKKy8vIDM3OTAzNCksIHdoZXJlYXMgSUUgaXMgY2FzZS1pbnNl
bnNldGl2ZS4KKy8vCisvLyBXZSBjaG9vc2UgdG8gYmUgbW9yZSBwZXJtaXNzaXZlIGxpa2UgSUUu
IFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKy8vIHVuZXNjYXBpbmcgb3IgYW55dGhpbmcg
aGVyZTogbmVpdGhlciBJRSBvciBGaXJlZm94IGFsbG93IHRoaXMuIFdlIGFsc28KKy8vIGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgaW52YWxpZCBzY2hlbWUgY2hhcmFjdGVycyBzaW5jZSB3ZSBh
cmUgY29tcGFyaW5nCisvLyBhZ2FpbnN0IHRoZSBjYW5vbmljYWwgc2NoZW1lIG9mIHRoZSBiYXNl
LgorLy8KKy8vIFRoZSBiYXNlIFVSTCBzaG91bGQgYWx3YXlzIGJlIGNhbm9uaWNhbCwgdGhlcmVm
b3JlIGlzIEFTQ0lJLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgQXJlU2NoZW1lc0Vx
dWFsKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21w
b25lbnQmIGJhc2VTY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSKiBjbXAs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGNtcFNjaGVtZSkKK3sK
KyAgICBpZiAoYmFzZVNjaGVtZS5sZW5ndGgoKSAhPSBjbXBTY2hlbWUubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJhc2VTY2hlbWUubGVu
Z3RoKCk7IGkrKykgeworICAgICAgICAvLyBXZSBhc3N1bWUgdGhlIGJhc2UgaXMgYWxyZWFkeSBj
YW5vbmljYWwsIHNvIHdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgLy8gY2Fub25pY2FsaXplIGl0
LgorICAgICAgICBpZiAoY2Fub25pY2FsU2NoZW1lQ2hhcihjbXBbY21wU2NoZW1lLmJlZ2luKCkg
KyBpXSkgIT0KKyAgICAgICAgICAgIGJhc2VbYmFzZVNjaGVtZS5iZWdpbigpICsgaV0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisjaWYg
T1MoV0lORE9XUykKKy8vIEhlcmUsIHdlIGFsc28gYWxsb3cgV2luZG93cyBwYXRocyB0byBiZSBy
ZXByZXNlbnRlZCBhcyAiL0M6LyIgc28gd2UgY2FuIGJlCisvLyBjb25zaXN0ZW50IGFib3V0IFVS
TCBwYXRocyBiZWdpbm5pbmcgd2l0aCBzbGFzaGVzLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UKKy8v
IERvZXNCZWdpbldpbmRvd3NEcml2ZVBhdGggZXhjZXB0IHRoYXQgaXQgYWxzbyByZXF1aXJlcyBh
IHNsYXNoIGF0IHRoZQorLy8gYmVnaW5uaW5nLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jv
b2wgRG9lc0JlZ2luU2xhc2hXaW5kb3dzRHJpdmVTcGVjKGNvbnN0IENIQVIqIHNwZWMsIGludCBz
dGFydE9mZnNldCwgaW50IHNwZWNMZW5ndGgpCit7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IHNw
ZWNMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gVVJMUGFyc2VyOjpp
c1VSTFNsYXNoKHNwZWNbc3RhcnRPZmZzZXRdKSAmJiBVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRv
d3NEcml2ZVNwZWMoc3BlYywgc3RhcnRPZmZzZXQgKyAxLCBzcGVjTGVuZ3RoKTsKK30KKworI2Vu
ZGlmIC8vIE9TKFdJTkRPV1MpCisKKy8vIFNlZSBpc1JlbGF0aXZlVVJMIGluIHRoZSBoZWFkZXIg
ZmlsZSBmb3IgdXNhZ2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorYm9vbCBEb0lzUmVsYXRp
dmVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogdXJs
LAorICAgICAgICAgICAgICAgICAgICAgaW50IHVybExlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCog
aXNSZWxhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogcmVsYXRpdmVD
b21wb25lbnQpCit7CisgICAgKmlzUmVsYXRpdmUgPSBmYWxzZTsgLy8gU28gd2UgY2FuIGRlZmF1
bHQgbGF0ZXIgdG8gbm90IHJlbGF0aXZlLgorCisgICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGFuZCBj
b25zdHJ1Y3QgYSBuZXcgcmFuZ2UgZm9yIHRoZSBzdWJzdHJpbmcuCisgICAgaW50IGJlZ2luID0g
MDsKKyAgICBVUkxQYXJzZXI6OnRyaW1VUkwodXJsLCAmYmVnaW4sICZ1cmxMZW5ndGgpOworICAg
IGlmIChiZWdpbiA+PSB1cmxMZW5ndGgpIHsKKyAgICAgICAgLy8gRW1wdHkgVVJMcyBhcmUgcmVs
YXRpdmUsIGJ1dCBkbyBub3RoaW5nLgorICAgICAgICAqcmVsYXRpdmVDb21wb25lbnQgPSBVUkxD
b21wb25lbnQoYmVnaW4sIDApOworICAgICAgICAqaXNSZWxhdGl2ZSA9IHRydWU7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gV2Ugc3BlY2lh
bCBjYXNlIHBhdGhzIGxpa2UgIkM6XGZvbyIgc28gdGhleSBjYW4gbGluayBkaXJlY3RseSB0byB0
aGUKKyAgICAvLyBmaWxlIG9uIFdpbmRvd3MgKElFIGNvbXBhdGFiaWxpdHkpLiBUaGUgc2VjdXJp
dHkgZG9tYWluIHN0dWZmIHNob3VsZAorICAgIC8vIHByZXZlbnQgYSBsaW5rIGxpa2UgdGhpcyBm
cm9tIGFjdHVhbGx5IGJlaW5nIGZvbGxvd2VkIGlmIGl0cyBvbiBhCisgICAgLy8gd2ViIHBhZ2Uu
CisgICAgLy8KKyAgICAvLyBXZSB0cmVhdCAiQzovZm9vIiBhcyBhbiBhYnNvbHV0ZSBVUkwuIFdl
IGNhbiBnbyBhaGVhZCBhbmQgdHJlYXQgIi9jOi8iCisgICAgLy8gYXMgcmVsYXRpdmUsIGFzIHRo
aXMgd2lsbCBqdXN0IHJlcGxhY2UgdGhlIHBhdGggd2hlbiB0aGUgYmFzZSBzY2hlbWUKKyAgICAv
LyBpcyBhIGZpbGUgYW5kIHRoZSBhbnN3ZXIgd2lsbCBzdGlsbCBiZSBjb3JyZWN0LgorICAgIC8v
CisgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgYmFja3NsYXNoZXMgd2hlbiBkZXRlY3RpbmcgVU5D
IHNpbmNlIHR3byBmb3J3YXJkCisgICAgLy8gc2hhc2hlcyBzaG91bGQgYmUgdHJlYXRlZCBhIGEg
cmVsYXRpdmUgVVJMIHdpdGggYSBob3N0bmFtZS4KKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVn
aW5XaW5kb3dzRHJpdmVTcGVjKHVybCwgYmVnaW4sIHVybExlbmd0aCkgfHwgVVJMUGFyc2VyOjpk
b2VzQmVnaW5VTkNQYXRoKHVybCwgYmVnaW4sIHVybExlbmd0aCwgdHJ1ZSkpCisgICAgICAgIHJl
dHVybiB0cnVlOworI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKKyAgICAvLyBTZWUgaWYgd2UndmUg
Z290IGEgc2NoZW1lLCBpZiBub3QsIHdlIGtub3cgdGhpcyBpcyBhIHJlbGF0aXZlIFVSTC4KKyAg
ICAvLyBCVVQ6IEp1c3QgYmVjYXVzZSB3ZSBoYXZlIGEgc2NoZW1lLCBkb2Vzbid0IG1ha2UgaXQg
YWJzb2x1dGUuCisgICAgLy8gImh0dHA6Zm9vLmh0bWwiIGlzIGEgcmVsYXRpdmUgVVJMIHdpdGgg
cGF0aCAiZm9vLmh0bWwiLiBJZiB0aGUgc2NoZW1lIGlzCisgICAgLy8gZW1wdHksIHdlIHRyZWF0
IGl0IGFzIHJlbGF0aXZlICgiOmZvbyIpIGxpa2UgSUUgZG9lcy4KKyAgICBVUkxDb21wb25lbnQg
c2NoZW1lOworICAgIGlmICghVVJMUGFyc2VyOjpFeHRyYWN0U2NoZW1lKHVybCwgdXJsTGVuZ3Ro
LCAmc2NoZW1lKSB8fCAhc2NoZW1lLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIERvbid0IGFsbG93
IHJlbGF0aXZlIFVSTHMgaWYgdGhlIGJhc2Ugc2NoZW1lIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKyAg
ICAgICAgaWYgKCFpc0Jhc2VIaWVyYXJjaGljYWwpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgKnJlbGF0aXZlQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
YmVnaW4sIHVybExlbmd0aCk7CisgICAgICAgICppc1JlbGF0aXZlID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNjaGVtZSBpc24ndCB2YWxpZCwg
dGhlbiBpdCdzIHJlbGF0aXZlLgorICAgIGludCBzY2hlbWVFbmQgPSBzY2hlbWUuZW5kKCk7Cisg
ICAgZm9yIChpbnQgaSA9IHNjaGVtZS5iZWdpbigpOyBpIDwgc2NoZW1lRW5kOyBpKyspIHsKKyAg
ICAgICAgaWYgKCFjYW5vbmljYWxTY2hlbWVDaGFyKHVybFtpXSkpIHsKKyAgICAgICAgICAgICpy
ZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2luLCB1cmxMZW5n
dGgpOworICAgICAgICAgICAgKmlzUmVsYXRpdmUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgc2NoZW1lIGlzIG5vdCB0
aGUgc2FtZSwgdGhlbiB3ZSBjYW4ndCBjb3VudCBpdCBhcyByZWxhdGl2ZS4KKyAgICBpZiAoIUFy
ZVNjaGVtZXNFcXVhbChiYXNlLCBiYXNlUGFyc2VkLnNjaGVtZSwgdXJsLCBzY2hlbWUpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdoZW4gdGhlIHNjaGVtZSB0aGF0IHRoZXkgYm90
aCBzaGFyZSBpcyBub3QgaGllcmFyY2hpY2FsLCB0cmVhdCB0aGUKKyAgICAvLyBpbmNvbWluZyBz
Y2hlbWUgYXMgYWJzb2x1dGUgKHRoaXMgd2F5IHdpdGggdGhlIGJhc2Ugb2YgImRhdGE6Zm9vIiwK
KyAgICAvLyAiZGF0YTpiYXIiIHdpbGwgYmUgcmVwb3J0ZWQgYXMgYWJzb2x1dGUuCisgICAgaWYg
KCFpc0Jhc2VIaWVyYXJjaGljYWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IGNv
bG9uT2Zmc2V0ID0gc2NoZW1lLmVuZCgpOworCisgICAgLy8gSWYgaXQncyBhIGZpbGVzeXN0ZW0g
VVJMLCB0aGUgb25seSB2YWxpZCB3YXkgdG8gbWFrZSBpdCByZWxhdGl2ZSBpcyBub3QgdG8KKyAg
ICAvLyBzdXBwbHkgYSBzY2hlbWUuIFRoZXJlJ3Mgbm8gZXF1aXZhbGVudCB0byBlLmcuIGh0dHA6
aW5kZXguaHRtbC4KKyAgICBpZiAoVVJMVXRpbGl0aWVzOjpDb21wYXJlU2NoZW1lQ29tcG9uZW50
KHVybCwgc2NoZW1lLCAiZmlsZXN5c3RlbSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIEV4dHJhY3RTY2hlbWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjb2xvbiBpbW1lZGlhdGVseSBm
b2xsb3dzIHdoYXQgaXQKKyAgICAvLyBjb25zaWRlcnMgdG8gYmUgdGhlIHNjaGVtZS4gY291bnRD
b25zZWN1dGl2ZVNsYXNoZXMgd2lsbCBoYW5kbGUgdGhlCisgICAgLy8gY2FzZSB3aGVyZSB0aGUg
YmVnaW4gb2Zmc2V0IGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0LgorICAgIGludCBudW1TbGFzaGVz
ID0gVVJMUGFyc2VyOjpjb3VudENvbnNlY3V0aXZlU2xhc2hlcyh1cmwsIGNvbG9uT2Zmc2V0ICsg
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsTGVuZ3RoKTsKKworICAgIGlmICghbnVtU2xhc2hlcyB8fCBudW1TbGFzaGVzID09IDEp
IHsKKyAgICAgICAgLy8gTm8gc2xhc2hlcyBtZWFucyBpdCdzIGEgcmVsYXRpdmUgcGF0aCBsaWtl
ICJodHRwOmZvby5odG1sIi4gT25lIHNsYXNoCisgICAgICAgIC8vIGlzIGFuIGFic29sdXRlIHBh
dGguICJodHRwOi9ob21lL2Zvby5odG1sIgorICAgICAgICAqaXNSZWxhdGl2ZSA9IHRydWU7Cisg
ICAgICAgICpyZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGNvbG9u
T2Zmc2V0ICsgMSwgdXJsTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gVHdvIG9yIG1vcmUgc2xhc2hlcyBhZnRlciB0aGUgc2NoZW1lIHdlIHRyZWF0IGFzIGFi
c29sdXRlLgorICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb3BpZXMgYWxsIGNoYXJhY3RlcnMg
aW4gdGhlIHJhbmdlIFtiZWdpbiwgZW5kKSBvZiB8c3BlY3wgdG8gdGhlIG91dHB1dCwKKy8vIHVw
IHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3Qgc2xhc2guIFRoZXJlIHNob3VsZCBiZSBhIHNs
YXNoIGluIHRoZQorLy8gcmFuZ2UsIGlmIG5vdCwgbm90aGluZyB3aWxsIGJlIGNvcGllZC4KKy8v
CisvLyBUaGUgaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBjYW5vbmljYWwsIHNvIHdlIHNlYXJjaCBv
bmx5IGZvciBleGFjdCBzbGFzaGVzCisvLyBhbmQgbm90IGJhY2tzbGFzaGVzIGFzIHdlbGwuIFdl
IGFsc28ga25vdyB0aGF0IGl0J3MgQVNDSUkuCit2b2lkIENvcHlUb0xhc3RTbGFzaChjb25zdCBj
aGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIC8vIEZpbmQgdGhlIGxhc3Qgc2xhc2guCisgICAgaW50IGxhc3RTbGFzaCA9IC0xOwor
ICAgIGZvciAoaW50IGkgPSBlbmQgLSAxOyBpID49IGJlZ2luOyAtLWkpIHsKKyAgICAgICAgaWYg
KHNwZWNbaV0gPT0gJy8nKSB7CisgICAgICAgICAgICBsYXN0U2xhc2ggPSBpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxhc3RTbGFzaCA8IDApCisgICAg
ICAgIHJldHVybjsgLy8gTm8gc2xhc2guCisKKyAgICAvLyBDb3B5LgorICAgIGZvciAoaW50IGkg
PSBiZWdpbjsgaSA8PSBsYXN0U2xhc2g7ICsraSkKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzcGVj
W2ldKTsKK30KKworLy8gQ29waWVzIGEgc2luZ2xlIGNvbXBvbmVudCBmcm9tIHRoZSBzb3VyY2Ug
dG8gdGhlIG91dHB1dC4gVGhpcyBpcyB1c2VkCisvLyB3aGVuIHJlc29sdmluZyByZWxhdGl2ZSBV
UkxzIGFuZCBhIGdpdmVuIGNvbXBvbmVudCBpcyB1bmNoYW5nZWQuIFNpbmNlIHRoZQorLy8gc291
cmNlIHNob3VsZCBhbHJlYWR5IGJlIGNhbm9uaWNhbCwgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0
aGluZyBzcGVjaWFsLAorLy8gYW5kIHRoZSBpbnB1dCBpcyBBU0NJSS4KK3ZvaWQgQ29weU9uZUNv
bXBvbmVudChjb25zdCBjaGFyKiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBzb3VyY2VDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiBvdXRwdXRDb21wb25lbnQpCit7CisgICAgaWYgKHNvdXJjZUNvbXBvbmVudC5sZW5ndGgoKSA8
IDApIHsKKyAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgbm90IHByZXNlbnQuCisgICAgICAg
ICpvdXRwdXRDb21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG91dHB1dENvbXBvbmVudC0+c2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAg
ICBpbnQgc291cmNlRW5kID0gc291cmNlQ29tcG9uZW50LmVuZCgpOworICAgIGZvciAoaW50IGkg
PSBzb3VyY2VDb21wb25lbnQuYmVnaW4oKTsgaSA8IHNvdXJjZUVuZDsgaSsrKQorICAgICAgICBv
dXRwdXQuYXBwZW5kKHNvdXJjZVtpXSk7CisgICAgb3V0cHV0Q29tcG9uZW50LT5zZXRMZW5ndGgo
b3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0Q29tcG9uZW50LT5iZWdpbigpKTsKK30KKworI2lmIE9T
KFdJTkRPV1MpCisKKy8vIENhbGxlZCBvbiBXaW5kb3dzIHdoZW4gdGhlIGJhc2UgVVJMIGlzIGEg
ZmlsZSBVUkwsIHRoaXMgd2lsbCBjb3B5IHRoZSAiQzoiCisvLyB0byB0aGUgb3V0cHV0LCBpZiB0
aGVyZSBpcyBhIGRyaXZlIGxldHRlciBhbmQgaWYgdGhhdCBkcml2ZSBsZXR0ZXIgaXMgbm90Cisv
LyBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSByZWxhdGl2ZSBVUkwuIE90aGVyd2lzZSwgZG8gbm90
aGluZy4KKy8vCisvLyBJdCB3aWxsIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlCisvLyBiYXNlIHRvIGJlIHByb2Nlc3NlZDogaWYg
dGhlcmUgaXMgYSAiQzoiLCB0aGUgc2xhc2ggYWZ0ZXIgaXQsIG9yIGlmCisvLyB0aGVyZSBpcyBu
byBkcml2ZSBsZXR0ZXIsIHRoZSBzbGFzaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLCBv
cgorLy8gdGhlIGVuZCBvZiB0aGUgYmFzZS4gVGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUgc3RhcnRp
bmcgb2Zmc2V0IGZvciBmdXJ0aGVyCisvLyBwYXRoIHByb2Nlc3NpbmcuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDSEFSPgoraW50IENvcHlCYXNlRHJpdmVTcGVjSWZOZWNlc3NhcnkoY29uc3QgY2hhciog
YmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNlUGF0aEJl
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2VQYXRoRW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVsYXRpdmVVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aFN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbGF0aXZlVXJsTGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7Cisg
ICAgaWYgKGJhc2VQYXRoQmVnaW4gPj0gYmFzZVBhdGhFbmQpCisgICAgICAgIHJldHVybiBiYXNl
UGF0aEJlZ2luOyAvLyBObyBwYXRoLgorCisgICAgLy8gSWYgdGhlIHJlbGF0aXZlIGJlZ2lucyB3
aXRoIGEgZHJpdmUgc3BlYywgZG9uJ3QgZG8gYW55dGhpbmcuIFRoZSBleGlzdGluZworICAgIC8v
IGRyaXZlIHNwZWMgaW4gdGhlIGJhc2Ugd2lsbCBiZSByZXBsYWNlZC4KKyAgICBpZiAoVVJMUGFy
c2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJlbGF0aXZlVVJMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFN0YXJ0LCByZWxhdGl2ZVVybExl
bmd0aCkpIHsKKyAgICAgICAgcmV0dXJuIGJhc2VQYXRoQmVnaW47IC8vIFJlbGF0aXZlIFVSTCBw
YXRoIGlzICJDOi9mb28iCisgICAgfQorCisgICAgLy8gVGhlIHBhdGggc2hvdWxkIGJlZ2luIHdp
dGggYSBzbGFzaCAoYXMgYWxsIGNhbm9uaWNhbCBwYXRocyBkbykuIFdlIGNoZWNrCisgICAgLy8g
aWYgaXQgaXMgZm9sbG93ZWQgYnkgYSBkcml2ZSBsZXR0ZXIgYW5kIGNvcHkgaXQuCisgICAgaWYg
KERvZXNCZWdpblNsYXNoV2luZG93c0RyaXZlU3BlYyhiYXNlVVJMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVBhdGhCZWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXRoRW5kKSkgeworICAgICAgICAvLyBDb3B5IHRo
ZSB0d28tY2hhcmFjdGVyIGRyaXZlIHNwZWMgdG8gdGhlIG91dHB1dC4gSXQgd2lsbCBub3cgbG9v
ayBsaWtlCisgICAgICAgIC8vICJmaWxlOi8vL0M6IiBzbyB0aGUgcmVzdCBvZiBpdCBjYW4gYmUg
dHJlYXRlZCBsaWtlIGEgc3RhbmRhcmQgcGF0aC4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycp
OworICAgICAgICBvdXRwdXQuYXBwZW5kKGJhc2VVUkxbYmFzZVBhdGhCZWdpbiArIDFdKTsKKyAg
ICAgICAgb3V0cHV0LmFwcGVuZChiYXNlVVJMW2Jhc2VQYXRoQmVnaW4gKyAyXSk7CisgICAgICAg
IHJldHVybiBiYXNlUGF0aEJlZ2luICsgMzsKKyAgICB9CisKKyAgICByZXR1cm4gYmFzZVBhdGhC
ZWdpbjsKK30KKworI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKKy8vIEEgc3Vicm91dGluZSBvZiBk
b1Jlc29sdmVSZWxhdGl2ZVVSTCwgdGhpcyByZXNvbHZlcyB0aGUgVVJMIGtub3duaW5nIHRoYXQK
Ky8vIHRoZSBpbnB1dCBpcyBhIHJlbGF0aXZlIHBhdGggb3IgbGVzcyAocXl1ZXJ5IG9yIHJlZiku
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorYm9vbCBkb1Jlc29sdmVSZWxhdGl2ZVBhdGgoY29u
c3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKiBi
YXNlSXNGaWxlICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVs
YXRpdmVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENv
bnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAgIC8v
IFdlIGtub3cgdGhlIGF1dGhvcml0eSBzZWN0aW9uIGRpZG4ndCBjaGFuZ2UsIGNvcHkgaXQgdG8g
dGhlIG91dHB1dC4gV2UKKyAgICAvLyBhbHNvIGtub3cgd2UgaGF2ZSBhIHBhdGggc28gY2FuIGNv
cHkgdXAgdG8gdGhlcmUuCisgICAgVVJMQ29tcG9uZW50IHBhdGgsIHF1ZXJ5LCByZWY7CisgICAg
VVJMUGFyc2VyOjpwYXJzZVBhdGhJbnRlcm5hbChyZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
cXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVmKTsKKyAgICAvLyBD
YW5vbmljYWwgVVJMcyBhbHdheXMgaGF2ZSBhIHBhdGgsIHNvIHdlIGNhbiB1c2UgdGhhdCBvZmZz
ZXQuCisgICAgb3V0cHV0LmFwcGVuZChiYXNlVVJMLCBiYXNlUGFyc2VkLnBhdGguYmVnaW4oKSk7
CisKKyAgICBpZiAocGF0aC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlIHBhdGggaXMg
cmVwbGFjZWQgb3IgbW9kaWZpZWQuCisgICAgICAgIGludCB0cnVlUGF0aEJlZ2luID0gb3V0cHV0
Lmxlbmd0aCgpOworCisgICAgICAgIC8vIEZvciBmaWxlOiBVUkxzIG9uIFdpbmRvd3MsIHdlIGRv
bid0IHdhbnQgdG8gdHJlYXQgdGhlIGRyaXZlIGxldHRlciBhbmQKKyAgICAgICAgLy8gY29sb24g
YXMgcGFydCBvZiB0aGUgcGF0aCBmb3IgcmVsYXRpdmUgZmlsZSByZXNvbHV0aW9uIHdoZW4gdGhl
CisgICAgICAgIC8vIGluY29taW5nIFVSTCBkb2VzIG5vdCBwcm92aWRlIGEgZHJpdmUgc3BlYy4g
V2Ugc2F2ZSB0aGUgdHJ1ZSBwYXRoCisgICAgICAgIC8vIGJlZ2lubmluZyBzbyB3ZSBjYW4gZml4
IGl0IHVwIGFmdGVyIHdlIGFyZSBkb25lLgorICAgICAgICBpbnQgYmFzZVBhdGhCZWdpbiA9IGJh
c2VQYXJzZWQucGF0aC5iZWdpbigpOworI2lmIE9TKFdJTkRPV1MpCisgICAgICAgIGlmIChiYXNl
SXNGaWxlKSB7CisgICAgICAgICAgICBiYXNlUGF0aEJlZ2luID0gQ29weUJhc2VEcml2ZVNwZWNJ
Zk5lY2Vzc2FyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VVUkwsIGJhc2VQYXJzZWQucGF0aC5iZWdpbigpLCBiYXNlUGFyc2Vk
LnBhdGguZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWxhdGl2ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQuYmVnaW4oKSwgcmVs
YXRpdmVDb21wb25lbnQuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworICAgICAgICAgICAgLy8gTm93IHRoZSBv
dXRwdXQgbG9va3MgbGlrZSBlaXRoZXIgImZpbGU6Ly8iIG9yICJmaWxlOi8vL0M6IgorICAgICAg
ICAgICAgLy8gYW5kIHdlIGNhbiBzdGFydCBhcHBlbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIHBhdGgu
IHxiYXNlUGF0aEJlZ2lufAorICAgICAgICAgICAgLy8gcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIg
aW4gdGhlIGJhc2UgdGhhdCBjb21lcyBuZXh0LgorICAgICAgICB9CisjZW5kaWYgLy8gT1MoV0lO
RE9XUykKKworICAgICAgICBpZiAoVVJMUGFyc2VyOjppc1VSTFNsYXNoKHJlbGF0aXZlVVJMW3Bh
dGguYmVnaW4oKV0pKSB7CisgICAgICAgICAgICAvLyBFYXN5IGNhc2U6IHRoZSBwYXRoIGlzIGFu
IGFic29sdXRlIHBhdGggb24gdGhlIHNlcnZlciwgc28gd2UgY2FuCisgICAgICAgICAgICAvLyBq
dXN0IHJlcGxhY2UgZXZlcnl0aGluZyBmcm9tIHRoZSBwYXRoIG9uIHdpdGggdGhlIG5ldyB2ZXJz
aW9ucy4KKyAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBpbnB1dCBzaG91bGQgYmUgY2Fub25pY2Fs
IGhpZXJhcmNoaWNhbCBVUkwsIHdlIHNob3VsZAorICAgICAgICAgICAgLy8gYWx3YXlzIGhhdmUg
YSBwYXRoLgorICAgICAgICAgICAgc3VjY2VzcyAmPSBDYW5vbmljYWxpemVQYXRoKHJlbGF0aXZl
VVJMLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgJm91dHB1dFBhcnNlZC0+cGF0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBSZWxhdGl2ZSBwYXRoLCByZXBsYWNlIHRoZSBxdWVyeSwgYW5kIHJlZmVyZW5jZS4gV2UgdGFr
ZSB0aGUKKyAgICAgICAgICAgIC8vIG9yaWdpbmFsIHBhdGggd2l0aCB0aGUgZmlsZSBwYXJ0IHN0
cmlwcGVkLCBhbmQgYXBwZW5kIHRoZSBuZXcgcGF0aC4KKyAgICAgICAgICAgIC8vIFRoZSBjYW5v
bmljYWxpemVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc29sdmluZyAiLi4iIGFuZCAiLiIKKyAgICAg
ICAgICAgIGludCBwYXRoQmVnaW4gPSBvdXRwdXQubGVuZ3RoKCk7CisgICAgICAgICAgICBDb3B5
VG9MYXN0U2xhc2goYmFzZVVSTCwgYmFzZVBhdGhCZWdpbiwgYmFzZVBhcnNlZC5wYXRoLmVuZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisgICAgICAgICAgICBzdWNj
ZXNzICY9IENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKHJlbGF0aXZlVVJMLCBwYXRoLCBwYXRoQmVn
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCk7CisgICAgICAgICAgICBvdXRwdXRQYXJzZWQtPnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21S
YW5nZShwYXRoQmVnaW4sIG91dHB1dC5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgIC8vIENvcHkg
dGhlIHJlc3Qgb2YgdGhlIHN0dWZmIGFmdGVyIHRoZSBwYXRoIGZyb20gdGhlIHJlbGF0aXZlIHBh
dGguCisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5pc2ggd2l0aCB0aGUgcXVlcnkgYW5kIHJl
ZmVyZW5jZSBwYXJ0ICh0aGVzZSBjYW4ndCBmYWlsKS4KKyAgICAgICAgQ2Fub25pY2FsaXplUXVl
cnkocmVsYXRpdmVVUkwsIHF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisgICAgICAgIENhbm9uaWNh
bGl6ZVJlZihyZWxhdGl2ZVVSTCwgcmVmLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPmZyYWdtZW50
KTsKKworICAgICAgICAvLyBGaXggdGhlIHBhdGggYmVnaW5uaW5nIHRvIGFkZCBiYWNrIHRoZSAi
QzoiIHdlIG1heSBoYXZlIHdyaXR0ZW4gYWJvdmUuCisgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0
aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHRydWVQYXRoQmVnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0
aC5lbmQoKSk7CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKworICAgIC8vIElmIHdl
IGdldCBoZXJlLCB0aGUgcGF0aCBpcyB1bmNoYW5nZWQ6IGNvcHkgdG8gb3V0cHV0LgorICAgIENv
cHlPbmVDb21wb25lbnQoYmFzZVVSTCwgYmFzZVBhcnNlZC5wYXRoLCBvdXRwdXQsICZvdXRwdXRQ
YXJzZWQtPnBhdGgpOworCisgICAgaWYgKHF1ZXJ5LmlzVmFsaWQoKSkgeworICAgICAgICAvLyBK
dXN0IHRoZSBxdWVyeSBzcGVjaWZpZWQsIHJlcGxhY2UgdGhlIHF1ZXJ5IGFuZCByZWZlcmVuY2Ug
KGlnbm9yZQorICAgICAgICAvLyBmYWlsdXJlcyBmb3IgcmVmcykKKyAgICAgICAgQ2Fub25pY2Fs
aXplUXVlcnkocmVsYXRpdmVVUkwsIHF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisgICAgICAgIENh
bm9uaWNhbGl6ZVJlZihyZWxhdGl2ZVVSTCwgcmVmLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPmZy
YWdtZW50KTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorCisgICAgLy8gSWYgd2Ug
Z2V0IGhlcmUsIHRoZSBxdWVyeSBpcyB1bmNoYW5nZWQ6IGNvcHkgdG8gb3V0cHV0LiBOb3RlIHRo
YXQgdGhlCisgICAgLy8gcmFuZ2Ugb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlciBkb2Vzbid0IGluY2x1
ZGUgdGhlIHF1ZXN0aW9uIG1hcmssIHNvIHdlCisgICAgLy8gaGF2ZSB0byBhZGQgaXQgbWFudWFs
bHkgaWYgdGhlcmUgaXMgYSBjb21wb25lbnQuCisgICAgaWYgKGJhc2VQYXJzZWQucXVlcnkuaXNW
YWxpZCgpKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCc/Jyk7CisgICAgQ29weU9uZUNvbXBvbmVu
dChiYXNlVVJMLCBiYXNlUGFyc2VkLnF1ZXJ5LCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnF1ZXJ5
KTsKKworICAgIGlmIChyZWYuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEp1c3QgdGhlIHJlZmVy
ZW5jZSBzcGVjaWZpZWQ6IHJlcGxhY2UgaXQgKGlnbm9yaW5nIGZhaWx1cmVzKS4KKyAgICAgICAg
Q2Fub25pY2FsaXplUmVmKHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
ZnJhZ21lbnQpOworICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisKKyAgICAvLyBXZSBz
aG91bGQgYWx3YXlzIGhhdmUgc29tZXRoaW5nIHRvIGRvIGluIHRoaXMgZnVuY3Rpb24sIHRoZSBj
YWxsZXIgY2hlY2tzCisgICAgLy8gdGhhdCBzb21lIGNvbXBvbmVudCBpcyBiZWluZyByZXBsYWNl
ZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwor
Ly8gUmVzb2x2ZXMgYSByZWxhdGl2ZSBVUkwgdGhhdCBjb250YWlucyBhIGhvc3QuIFR5cGljYWxs
eSwgdGhlc2Ugd2lsbAorLy8gYmUgb2YgdGhlIGZvcm0gIi8vd3d3LmFwcGxlLmNvbS9mb28vYmFy
P2JheiNmcmFnbWVudCIgYW5kIHRoZSBvbmx5IHRoaW5nIHdoaWNoCisvLyBzaG91bGQgYmUga2Vw
dCBmcm9tIHRoZSBvcmlnaW5hbCBVUkwgaXMgdGhlIHNjaGVtZS4KK3RlbXBsYXRlPHR5cGVuYW1l
IENIQVI+Citib29sIGRvUmVzb2x2ZVJlbGF0aXZlSG9zdChjb25zdCBjaGFyKiBiYXNlVVJMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSKiByZWxhdGl2ZVVSTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21w
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBQYXJzZSB0aGUgcmVsYXRpdmUgVVJMLCBqdXN0IGxpa2Ugd2Ugd291
bGQgZm9yIGFueXRoaW5nIGZvbGxvd2luZyBhCisgICAgLy8gc2NoZW1lLgorICAgIFVSTFNlZ21l
bnRzIHJlbGF0aXZlUGFyc2VkOyAvLyBFdmVyeXRoaW5nIGJ1dCB0aGUgc2NoZW1lIGlzIHZhbGlk
LgorICAgIFVSTFBhcnNlcjo6UGFyc2VBZnRlclNjaGVtZSgmcmVsYXRpdmVVUkxbcmVsYXRpdmVD
b21wb25lbnQuYmVnaW4oKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0
aXZlQ29tcG9uZW50Lmxlbmd0aCgpLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVsYXRpdmVQYXJzZWQpOworCisgICAgLy8gTm93
IHdlIGNhbiBqdXN0IHVzZSB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdG8gcmVwbGFjZSBhbGwg
dGhlIG5lY2Vzc2FyeQorICAgIC8vIHBhcnRzIG9mIHRoZSBvbGQgVVJMIHdpdGggdGhlIG5ldyBv
bmUuCisgICAgUmVwbGFjZW1lbnRzPENIQVI+IHJlcGxhY2VtZW50czsKKyAgICByZXBsYWNlbWVu
dHMuU2V0VXNlcm5hbWUocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnVzZXJuYW1lKTsKKyAg
ICByZXBsYWNlbWVudHMuU2V0UGFzc3dvcmQocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnBh
c3N3b3JkKTsKKyAgICByZXBsYWNlbWVudHMuU2V0SG9zdChyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQ
YXJzZWQuaG9zdCk7CisgICAgcmVwbGFjZW1lbnRzLlNldFBvcnQocmVsYXRpdmVVUkwsIHJlbGF0
aXZlUGFyc2VkLnBvcnQpOworICAgIHJlcGxhY2VtZW50cy5TZXRQYXRoKHJlbGF0aXZlVVJMLCBy
ZWxhdGl2ZVBhcnNlZC5wYXRoKTsKKyAgICByZXBsYWNlbWVudHMuU2V0UXVlcnkocmVsYXRpdmVV
UkwsIHJlbGF0aXZlUGFyc2VkLnF1ZXJ5KTsKKyAgICByZXBsYWNlbWVudHMuU2V0UmVmKHJlbGF0
aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5mcmFnbWVudCk7CisKKyAgICByZXR1cm4gUmVwbGFjZVN0
YW5kYXJkVVJMKGJhc2VVUkwsIGJhc2VQYXJzZWQsIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7
Cit9CisKKy8vIFJlc29sdmVzIGEgcmVsYXRpdmUgVVJMIHRoYXQgaGFwcGVucyB0byBiZSBhbiBh
YnNvbHV0ZSBmaWxlIHBhdGguIEV4YW1wbGVzCisvLyBpbmNsdWRlOiAiLy9ob3N0bmFtZS9wYXRo
IiwgIi9jOi9mb28iLCBhbmQgIi8vaG9zdG5hbWUvYzovZm9vIi4KK3RlbXBsYXRlPHR5cGVuYW1l
IENIQVI+Citib29sIERvUmVzb2x2ZUFic29sdXRlRmlsZShjb25zdCBDSEFSKiByZWxhdGl2ZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRp
dmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVy
KiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICAvLyBQYXJzZSB0aGUgZmlsZSBVUkwuIFRoZSBmaWxlIFVSbCBw
YXJzaW5nIGZ1bmN0aW9uIHVzZXMgdGhlIHNhbWUgbG9naWMKKyAgICAvLyBhcyB3ZSBkbyBmb3Ig
ZGV0ZXJtaW5pbmcgaWYgdGhlIGZpbGUgaXMgYWJzb2x1dGUsIGluIHdoaWNoIGNhc2UgaXQgd2ls
bAorICAgIC8vIG5vdCBib3RoZXIgdG8gbG9vayBmb3IgYSBzY2hlbWUuCisgICAgVVJMU2VnbWVu
dHMgcmVsYXRpdmVQYXJzZWQ7CisgICAgVVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwoJnJlbGF0aXZl
VVJMW3JlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCldLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbGF0aXZlQ29tcG9uZW50Lmxlbmd0aCgpLCAmcmVsYXRpdmVQYXJzZWQpOworCisgICAg
cmV0dXJuIENhbm9uaWNhbGl6ZUZpbGVVUkwoJnJlbGF0aXZlVVJMW3JlbGF0aXZlQ29tcG9uZW50
LmJlZ2luKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9u
ZW50Lmxlbmd0aCgpLCByZWxhdGl2ZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCisvLyBUT0RP
KGJyZXR0dykgdHJlYXQgdHdvIHNsYXNoZXMgYXMgcm9vdCBsaWtlIE1vemlsbGEgZm9yIEZUUD8K
K3RlbXBsYXRlPHR5cGVuYW1lIENIQVI+Citib29sIGRvUmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0
IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJhc2VJc0Zp
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZlVVJMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29t
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJz
ZWQpCit7CisgICAgLy8gU3RhcnRpbmcgcG9pbnQgZm9yIG91ciBvdXRwdXQgcGFyc2VkLiBXZSds
bCBmaXggd2hhdCB3ZSBjaGFuZ2UuCisgICAgKm91dHB1dFBhcnNlZCA9IGJhc2VQYXJzZWQ7CisK
KyAgICAvLyBTYW5pdHkgY2hlY2s6IHRoZSBpbnB1dCBzaG91bGQgaGF2ZSBhIGhvc3Qgb3Igd2Un
bGwgYnJlYWsgYmFkbHkgYmVsb3cuCisgICAgLy8gV2UgY2FuIG9ubHkgcmVzb2x2ZSByZWxhdGl2
ZSBVUkxzIHdpdGggYmFzZSBVUkxzIHRoYXQgaGF2ZSBob3N0cyBhbmQKKyAgICAvLyBwYXRocyAo
ZXZlbiB0aGUgZGVmYXVsdCBwYXRoIG9mICIvIiBpcyBPSykuCisgICAgLy8KKyAgICAvLyBXZSBh
bGxvdyBob3N0cyB3aXRoIG5vIGxlbmd0aCBzbyB3ZSBjYW4gaGFuZGxlIGZpbGUgVVJMcywgZm9y
IGV4YW1wbGUuCisgICAgaWYgKGJhc2VQYXJzZWQucGF0aC5sZW5ndGgoKSA8PSAwKSB7CisgICAg
ICAgIC8vIE9uIGVycm9yLCByZXR1cm4gdGhlIGlucHV0IChyZXNvbHZpbmcgYSByZWxhdGl2ZSBV
Ukwgb24gYSBub24tcmVsYXRpdmUKKyAgICAgICAgLy8gYmFzZSA9IHRoZSBiYXNlKS4KKyAgICAg
ICAgaW50IGJhc2VMZW5ndGggPSBiYXNlUGFyc2VkLmxlbmd0aCgpOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGJhc2VMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
YmFzZVVSTFtpXSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVs
YXRpdmVDb21wb25lbnQubGVuZ3RoKCkgPD0gMCkgeworICAgICAgICAvLyBFbXB0eSByZWxhdGl2
ZSBVUkwsIGxlYXZlIHVuY2hhbmdlZCwgb25seSByZW1vdmluZyB0aGUgcmVmIGNvbXBvbmVudC4K
KyAgICAgICAgaW50IGJhc2VMZW5ndGggPSBiYXNlUGFyc2VkLmxlbmd0aCgpOworICAgICAgICBi
YXNlTGVuZ3RoIC09IGJhc2VQYXJzZWQuZnJhZ21lbnQubGVuZ3RoKCkgKyAxOworICAgICAgICBv
dXRwdXRQYXJzZWQtPmZyYWdtZW50LnJlc2V0KCk7CisgICAgICAgIG91dHB1dC5hcHBlbmQoYmFz
ZVVSTCwgYmFzZUxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlu
dCBudW1TbGFzaGVzID0gVVJMUGFyc2VyOjpjb3VudENvbnNlY3V0aXZlU2xhc2hlcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRp
dmVVUkwsIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCksIHJlbGF0aXZlQ29tcG9uZW50LmVuZCgp
KTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gT24gV2luZG93cywgdHdvIHNsYXNoZXMgZm9y
IGEgZmlsZSBwYXRoIChyZWdhcmRsZXNzIG9mIHdoaWNoIGRpcmVjdGlvbgorICAgIC8vIHRoZXkg
YXJlKSBtZWFucyB0aGF0IGl0J3MgVU5DLiBUd28gYmFja3NsYXNoZXMgb24gYW55IGJhc2Ugc2No
ZW1lIG1lYW4KKyAgICAvLyB0aGF0IGl0J3MgYW4gYWJzb2x1dGUgVU5DIHBhdGggKHdlIHVzZSB0
aGUgYmFzZUlzRmlsZSBmbGFnIHRvIGNvbnRyb2wKKyAgICAvLyBob3cgc3RyaWN0IHRoZSBVTkMg
ZmluZGVyIGlzKS4KKyAgICAvLworICAgIC8vIFdlIGFsc28gYWxsb3cgV2luZG93cyBhYnNvbHV0
ZSBkcml2ZSBzcGVjcyBvbiBhbnkgc2NoZW1lIChmb3IgZXhhbXBsZQorICAgIC8vICJjOlxmb28i
KSBsaWtlIElFIGRvZXMuIFRoZXJlIG11c3QgYmUgbm8gcHJlY2VlZGluZyBzbGFzaGVzIGluIHRo
aXMKKyAgICAvLyBjYXNlICh3ZSByZWplY3QgYW55dGhpbmcgbGlrZSAiL2M6L2ZvbyIpIGJlY2F1
c2UgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAorICAgIC8vIGFzIGEgcGF0aC4gRm9yIGZpbGUgVVJM
cywgd2UgYWxsb3cgYW55IG51bWJlciBvZiBzbGFzaGVzIHNpbmNlIHRoYXQgd291bGQKKyAgICAv
LyBiZSBzZXR0aW5nIHRoZSBwYXRoLgorICAgIC8vCisgICAgLy8gVGhpcyBhc3N1bWVzIHRoZSBh
YnNvbHV0ZSBwYXRoIHJlc29sdmVyIGhhbmRsZXMgYWJzb2x1dGUgVVJMcyBsaWtlIHRoaXMKKyAg
ICAvLyBwcm9wZXJseS4gVVJMVXRpbGl0aWVzOjpEb0Nhbm9uaWNhbGl6ZSBkb2VzIHRoaXMuCisg
ICAgaW50IGFmdGVyU2xhc2hlcyA9IHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luICsgbnVtU2xhc2hl
czsKKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVnaW5VTkNQYXRoKHJlbGF0aXZlVVJMLCByZWxh
dGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxhdGl2ZUNvbXBvbmVudC5lbmQoKSwgIWJhc2VJc0Zp
bGUpCisgICAgICAgIHx8ICgoIW51bVNsYXNoZXMgfHwgYmFzZUlzRmlsZSkgJiYgVVJMUGFyc2Vy
Ojpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJlbGF0aXZlVVJMLCBhZnRlclNsYXNoZXMsIHJl
bGF0aXZlQ29tcG9uZW50LmVuZCgpKSkpIHsKKyAgICAgICAgICAgICByZXR1cm4gRG9SZXNvbHZl
QWJzb2x1dGVGaWxlKHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91
dHB1dFBhcnNlZCk7CisgICAgICAgICB9CisjZWxzZQorICAgIC8vIE90aGVyIHBsYXRmb3JtcyBu
ZWVkIGV4cGxpY2l0IGhhbmRsaW5nIGZvciBmaWxlOiBVUkxzIHdpdGggbXVsdGlwbGUKKyAgICAv
LyBzbGFzaGVzIGJlY2F1c2UgdGhlIGdlbmVyaWMgc2NoZW1lIHBhcnNpbmcgYWx3YXlzIGV4dHJh
Y3RzIGEgaG9zdCwgYnV0IGEKKyAgICAvLyBmaWxlOiBVUkwgb25seSBoYXMgYSBob3N0IGlmIGl0
IGhhcyBleGFjdGx5IDIgc2xhc2hlcy4gVGhpcyBhbHNvCisgICAgLy8gaGFuZGxlcyB0aGUgc3Bl
Y2lhbCBjYXNlIHdoZXJlIHRoZSBVUkwgaXMgb25seSBzbGFzaGVzLCBzaW5jZSB0aGF0CisgICAg
Ly8gZG9lc24ndCBoYXZlIGEgaG9zdCBwYXJ0IGVpdGhlci4KKyAgICBpZiAoYmFzZUlzRmlsZSAm
JiAobnVtU2xhc2hlcyA+IDIgfHwgbnVtU2xhc2hlcyA9PSByZWxhdGl2ZUNvbXBvbmVudC5sZW5n
dGgoKSkpIHsKKyAgICAgICAgcmV0dXJuIERvUmVzb2x2ZUFic29sdXRlRmlsZShyZWxhdGl2ZVVS
TCwgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisjZW5kaWYK
KworICAgIC8vIEFueSBvdGhlciBkb3VibGUtc2xhc2hlcyBtZWFuIHRoYXQgdGhpcyBpcyByZWxh
dGl2ZSB0byB0aGUgc2NoZW1lLgorICAgIGlmIChudW1TbGFzaGVzID49IDIpIHsKKyAgICAgICAg
cmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlSG9zdChiYXNlVVJMLCBiYXNlUGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnZlcnRl
ciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIFdoZW4gd2UgZ2V0IGhl
cmUsIHdlIGtub3cgdGhhdCB0aGUgcmVsYXRpdmUgVVJMIGlzIG9uIHRoZSBzYW1lIGhvc3QuCisg
ICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlUGF0aChiYXNlVVJMLCBiYXNlUGFyc2VkLCBiYXNl
SXNGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVUkwsIHJl
bGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlD
b252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
Ym9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGZyYWdtZW50TGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAg
ICAgICAgIGJvb2wqIGlzUmVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiByZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gRG9Jc1JlbGF0aXZlVVJMPGNoYXI+
KGJhc2UsIGJhc2VQYXJzZWQsIGZyYWdtZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFy
Y2hpY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSwgcmVs
YXRpdmVDb21wb25lbnQpOworfQorCitib29sIGlzUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAg
ICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZnJhZ21lbnQsCisgICAgICAgICAgICAgICAg
ICAgaW50IGZyYWdtZW50TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGll
cmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzUmVsYXRpdmUsCisgICAgICAg
ICAgICAgICAgICAgVVJMQ29tcG9uZW50KiByZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICByZXR1
cm4gRG9Jc1JlbGF0aXZlVVJMPFVDaGFyPihiYXNlLCBiYXNlUGFyc2VkLCBmcmFnbWVudCwgZnJh
Z21lbnRMZW5ndGgsIGlzQmFzZUhpZXJhcmNoaWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1JlbGF0aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Cit9CisKK2Jvb2wgcmVz
b2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmFzZUlzRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHJlbGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252
ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0
cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZVVSTDxjaGFyPihiYXNl
VVJMLCBiYXNlUGFyc2VkLCBiYXNlSXNGaWxlLCByZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVy
LCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlVVJMKGNv
bnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdt
ZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmFzZUlzRmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiByZWxhdGl2ZVVSTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZl
cnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAg
ICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2VVUkwsIGJhc2VQYXJzZWQs
IGJhc2VJc0ZpbGUsIHJlbGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1
dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblN0ZFVSTC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTENhbm9uU3RkVVJMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWY2YThmZjU3MDM0MWM4NTc3NjU4
MGExNmJiOWY5YTNkNGNiYjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblN0ZFVSTC5jcHAKQEAgLTAsMCArMSwyMjIgQEAKKy8vIENvcHlyaWdodCAy
MDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIs
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gRnVuY3Rpb25zIHRvIGNhbm9uaWNhbGl6ZSAic3Rh
bmRhcmQiIFVSTHMsIHdoaWNoIGFyZSBvbmVzIHRoYXQgaGF2ZSBhbgorLy8gYXV0aG9yaXR5IHNl
Y3Rpb24gaW5jbHVkaW5nIGEgaG9zdCBuYW1lLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUg
IlVSTENhbm9uSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYg
eworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZVN0
YW5kYXJkVVJMKGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxDSEFSPiYgc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBTY2hlbWU6IHRoaXMgd2lsbCBhcHBlbmQgdGhlIGNvbG9uLgorICAg
IGJvb2wgc3VjY2VzcyA9IENhbm9uaWNhbGl6ZVNjaGVtZShzb3VyY2Uuc2NoZW1lLCBwYXJzZWQu
c2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZv
dXRwdXRQYXJzZWQtPnNjaGVtZSk7CisKKyAgICAvLyBBdXRob3JpdHkgKHVzZXJuYW1lLCBwYXNz
d29yZCwgaG9zdCwgcG9ydCkKKyAgICBib29sIGhhdmVBdXRob3JpdHk7CisgICAgaWYgKHBhcnNl
ZC51c2VybmFtZS5pc05vbkVtcHR5KCkgfHwgcGFyc2VkLnBhc3N3b3JkLmlzVmFsaWQoKSB8fCBw
YXJzZWQuaG9zdC5pc05vbkVtcHR5KCkgfHwgcGFyc2VkLnBvcnQuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGhhdmVBdXRob3JpdHkgPSB0cnVlOworCisgICAgICAgIC8vIE9ubHkgd3JpdGUgdGhlIGF1
dGhvcml0eSBzZXBhcmF0b3JzIHdoZW4gd2UgaGF2ZSBhIHNjaGVtZS4KKyAgICAgICAgaWYgKHBh
cnNlZC5zY2hlbWUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7
CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBVc2VyIGluZm86IHRoZSBjYW5vbmljYWxpemVyIHdpbGwgaGFuZGxlIHRoZSA6IGFuZCBALgor
ICAgICAgICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVVzZXJJbmZvKHNvdXJjZS51c2VybmFtZSwg
cGFyc2VkLnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZS5wYXNzd29yZCwgcGFyc2VkLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmb3V0cHV0UGFyc2VkLT51c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmb3V0cHV0UGFyc2VkLT5wYXNzd29yZCk7CisKKyAgICAgICAg
c3VjY2VzcyAmPSBDYW5vbmljYWxpemVIb3N0KHNvdXJjZS5ob3N0LCBwYXJzZWQuaG9zdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
aG9zdCk7CisKKyAgICAgICAgLy8gSG9zdCBtdXN0IG5vdCBiZSBlbXB0eSBmb3Igc3RhbmRhcmQg
VVJMcy4KKyAgICAgICAgaWYgKCFwYXJzZWQuaG9zdC5pc05vbkVtcHR5KCkpCisgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgLy8gUG9ydDogdGhlIHBvcnQgY2Fub25pY2Fs
aXplciB3aWxsIGhhbmRsZSB0aGUgY29sb24uCisgICAgICAgIGludCBkZWZhdWx0UG9ydCA9IERl
ZmF1bHRQb3J0Rm9yU2NoZW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm91dHB1dC5kYXRhKClbb3V0cHV0UGFyc2VkLT5zY2hlbWUuYmVnaW4oKV0s
IG91dHB1dFBhcnNlZC0+c2NoZW1lLmxlbmd0aCgpKTsKKyAgICAgICAgc3VjY2VzcyAmPSBDYW5v
bmljYWxpemVQb3J0KHNvdXJjZS5wb3J0LCBwYXJzZWQucG9ydCwgZGVmYXVsdFBvcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnBv
cnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIGF1dGhvcml0eSwgY2xlYXIgdGhlIGNv
bXBvbmVudHMuCisgICAgICAgIGhhdmVBdXRob3JpdHkgPSBmYWxzZTsKKyAgICAgICAgb3V0cHV0
UGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgICAgIG91dHB1dFBhcnNlZC0+dXNlcm5hbWUucmVz
ZXQoKTsKKyAgICAgICAgb3V0cHV0UGFyc2VkLT5wYXNzd29yZC5yZXNldCgpOworICAgICAgICBv
dXRwdXRQYXJzZWQtPnBvcnQucmVzZXQoKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBT
dGFuZGFyZCBVUkxzIG11c3QgaGF2ZSBhbiBhdXRob3JpdHkuCisgICAgfQorCisgICAgLy8gUGF0
aAorICAgIGlmIChwYXJzZWQucGF0aC5pc05vbkVtcHR5KCkpIHsKKyAgICAgICAgc3VjY2VzcyAm
PSBDYW5vbmljYWxpemVQYXRoKHNvdXJjZS5wYXRoLCBwYXJzZWQucGF0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cGF0aCk7Cisg
ICAgfSBlbHNlIGlmIChoYXZlQXV0aG9yaXR5IHx8IHBhcnNlZC5xdWVyeS5pc05vbkVtcHR5KCkg
fHwgcGFyc2VkLmZyYWdtZW50LmlzTm9uRW1wdHkoKSkgeworICAgICAgICAvLyBXaGVuIHdlIGhh
dmUgYW4gZW1wdHkgcGF0aCwgbWFrZSB1cCBhIHBhdGggd2hlbiB3ZSBoYXZlIGFuIGF1dGhvcml0
eQorICAgICAgICAvLyBvciBzb21ldGhpbmcgZm9sbG93aW5nIHRoZSBwYXRoLiBUaGUgb25seSB0
aW1lIHdlIGFsbG93IGFuIGVtcHR5CisgICAgICAgIC8vIG91dHB1dCBwYXRoIGlzIHdoZW4gdGhl
cmUgaXMgbm90aGluZyBlbHNlLgorICAgICAgICBvdXRwdXRQYXJzZWQtPnBhdGggPSBVUkxDb21w
b25lbnQob3V0cHV0Lmxlbmd0aCgpLCAxKTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHBhdGggYXQgYWxsCisgICAgICAgIG91dHB1dFBh
cnNlZC0+cGF0aC5yZXNldCgpOworICAgIH0KKworICAgIC8vIFF1ZXJ5CisgICAgQ2Fub25pY2Fs
aXplUXVlcnkoc291cmNlLnF1ZXJ5LCBwYXJzZWQucXVlcnksIHF1ZXJ5Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkpOworCisgICAg
Ly8gUmVmOiBpZ25vcmUgZmFpbHVyZSBmb3IgdGhpcywgc2luY2UgdGhlIHBhZ2UgY2FuIHByb2Jh
Ymx5IHN0aWxsIGJlIGxvYWRlZC4KKyAgICBDYW5vbmljYWxpemVSZWYoc291cmNlLnJlZiwgcGFy
c2VkLmZyYWdtZW50LCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPmZyYWdtZW50KTsKKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCisKKy8vIFJldHVybnMgdGhlIGRl
ZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbCBzY2hlbWUsIG9yIFBPUlRfVU5TUEVD
SUZJRUQKKy8vIGlmIHRoZSBzY2hlbWUgaXMgdW5rbm93bi4KK2ludCBEZWZhdWx0UG9ydEZvclNj
aGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIGludCBzY2hlbWVMZW5ndGgpCit7CisgICAgaW50IGRl
ZmF1bHRQb3J0ID0gVVJMUGFyc2VyOjpQT1JUX1VOU1BFQ0lGSUVEOworICAgIHN3aXRjaCAoc2No
ZW1lTGVuZ3RoKSB7CisgICAgY2FzZSA0OgorICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAi
aHR0cCIsIHNjaGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDgwOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJo
dHRwcyIsIHNjaGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDQ0MzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAi
ZnRwIiwgc2NoZW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gMjE7CisgICAg
ICAgIGVsc2UgaWYgKCFzdHJuY21wKHNjaGVtZSwgIndzcyIsIHNjaGVtZUxlbmd0aCkpCisgICAg
ICAgICAgICBkZWZhdWx0UG9ydCA9IDQ0MzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA2Ogor
ICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAiZ29waGVyIiwgc2NoZW1lTGVuZ3RoKSkKKyAg
ICAgICAgICAgIGRlZmF1bHRQb3J0ID0gNzA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoK
KyAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVtZSwgIndzIiwgc2NoZW1lTGVuZ3RoKSkKKyAgICAg
ICAgICAgIGRlZmF1bHRQb3J0ID0gODA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gZGVmYXVsdFBvcnQ7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3Qg
Y2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHNwZWNMZW5n
dGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemVTdGFuZGFyZFVSTDxjaGFy
LCB1bnNpZ25lZCBjaGFyPihVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4oc3BlYyksIHBhcnNlZCwg
cXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIENhbm9u
aWNhbGl6ZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nh
bm9uaWNhbGl6ZVN0YW5kYXJkVVJMPFVDaGFyLCBVQ2hhcj4oVVJMQ29tcG9uZW50U291cmNlPFVD
aGFyPihzcGVjKSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30K
KworLy8gSXQgbWlnaHQgYmUgbmljZSBpbiB0aGUgZnV0dXJlIHRvIG9wdGltaXplIHRoaXMgc28g
dW5jaGFuZ2VkIGNvbXBvbmVudHMgZG9uJ3QKKy8vIG5lZWQgdG8gYmUgcmVjYW5vbmljYWxpemVk
LiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBzaW5jZSB0aGUgY29tbW9uIGNhc2UgZm9yCisvLyBS
ZXBsYWNlQ29tcG9uZW50cyBpcyByZW1vdmluZyB0aGluZ3Mgd2UgZG9uJ3Qgd2FudCwgbGlrZSBy
ZWZlcmVuY2UgZnJhZ21lbnRzCisvLyBhbmQgdXNlcm5hbWVzLiBUaGVzZSBjYXNlcyBjYW4gYmVj
b21lIG1vcmUgZWZmaWNpZW50IGlmIHdlIGNhbiBhc3N1bWUgdGhlCisvLyByZXN0IG9mIHRoZSBV
UkwgaXMgT0sgd2l0aCB0aGVzZSByZW1vdmVkIChvciBvbmx5IHRoZSBtb2RpZmllZCBwYXJ0cwor
Ly8gcmVjYW5vbmljYWxpemVkKS4gVGhpcyB3b3VsZCBiZSBtdWNoIG1vcmUgY29tcGxleCB0byBp
bXBsZW1lbnQsIGhvd2V2ZXIuCisvLworLy8gWW91IHdvdWxkIGFsc28gbmVlZCB0byB1cGRhdGUg
RG9SZXBsYWNlQ29tcG9uZW50cyBpbiBVUkxVdGlsaXRpZXMuY2Mgd2hpY2gKKy8vIHJlbGllcyBv
biB0aGlzIHJlLWNoZWNraW5nIGV2ZXJ5dGhpbmcgKHNlZSB0aGUgY29tbWVudCB0aGVyZSBmb3Ig
d2h5KS4KK2Jvb2wgUmVwbGFjZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgVVJM
Q29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJz
ZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFj
ZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemVTdGFu
ZGFyZFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgcXVlcnlDb252ZXJ0
ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworLy8gRm9yIDE2LWJpdCByZXBsYWNlbWVu
dHMsIHdlIHR1cm4gYWxsIHRoZSByZXBsYWNlbWVudHMgaW50byBVVEYtOCBzbyB0aGUKKy8vIHJl
Z3VsYXIgY29kZXBhdGggY2FuIGJlIHVzZWQuCitib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25z
dCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMm
IGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8
VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29u
dmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKKyAgICBVUkxDb21w
b25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChi
YXNlUGFyc2VkKTsKKyAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxh
Y2VtZW50cywgdXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERvQ2Fub25pY2Fs
aXplU3RhbmRhcmRVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIHF1ZXJ5
Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBl
cy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmNwcAppbmRl
eCBmNTZlNzIwN2NjNWU2NmRiYTk3OTZiZjYxNjMxMWI1NzcyZmMzNGRkLi43ZTNlMTNkMjA5NDFj
M2ZlNGUwZDU2YzE3OTVjNTY2ZmM1NGEzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTENoYXJhY3RlclR5cGVzLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2lmIFVTRShXVEZVUkwp
CiAKIG5hbWVzcGFjZSBXVEYgewotCiBjb25zdCB1bnNpZ25lZCBjaGFyIFVSTENoYXJhY3RlclR5
cGVzOjpjaGFyYWN0ZXJUeXBlVGFibGVbMHgxMDBdID0gewogICAgIEludmFsaWRDaGFyYWN0ZXIs
IEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCiAg
ICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rlciwg
SW52YWxpZENoYXJhY3RlciwKQEAgLTQzLDEwMCArNDIsMTAwIEBAIGNvbnN0IHVuc2lnbmVkIGNo
YXIgVVJMQ2hhcmFjdGVyVHlwZXM6OmNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF0gPSB7CiAgICAg
SW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52
YWxpZENoYXJhY3RlciwKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJ
bnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDEwIC0gMHgxZgogICAgIElu
dmFsaWRDaGFyYWN0ZXIsIC8vIDB4MjAgICcgJyAoZXNjYXBlIHNwYWNlcyBpbiBxdWVyaWVzKQot
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjEgICEKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDIxICAhCiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgyMiAgIgogICAgIEludmFsaWRD
aGFyYWN0ZXIsIC8vIDB4MjMgICMgIChpbnZhbGlkIGluIHF1ZXJ5IHNpbmNlIGl0IG1hcmtzIHRo
ZSByZWYpCiAgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyNCAg
JAogICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjUgICUKICAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI2ICAmCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyNyAgJwotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjggICgKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI5ICApCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHgyYSAgKgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MjcgICcKKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDI4
ICAoCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHgyOSAgKQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MmEgICoKICAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJiICArCiAgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHgyYyAgLAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIsIC8vIDB4MmQgIC0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciwgLy8gMHgyZSAgLgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MmQgIC0KKyAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHgyZSAgLgogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDJmICAvCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBI
ZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzAg
IDAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3Rl
ciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8g
MHgzMSAgMQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hh
cmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVy
LCAvLyAweDMyICAyCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQ
djRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFy
YWN0ZXIsIC8vIDB4MzMgIDMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3Rh
bENoYXJhY3RlciwgLy8gMHgzNCAgNAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8
IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDM1ICA1Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFj
dGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxD
aGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzNyAgNwotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVj
aW1hbENoYXJhY3RlciwgLy8gMHgzOCAgOAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3Rl
ciwgLy8gMHgzOSAgOQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJ
UHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwg
T2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzAgIDAKKyAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNp
bWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDMxICAxCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxD
aGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzMiAg
MgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzMgIDMKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVy
IHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDM0ICA0CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQ
djRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBP
Y3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzNSAgNQorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2lt
YWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENo
YXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDM3ICA3
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIg
fCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4MzggIDgKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzOSAgOQogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAv
LyAweDNhICA6CiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4M2IgIDsKLSAgICBJbnZhbGlkQ2hh
cmFjdGVyLCAvLyAweDNjICA8CisgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgzYyAgPCAgKFRy
eSB0byBwcmV2ZW50IGNlcnRhaW4gdHlwZXMgb2YgWFNTLikKICAgICBRdWVyeUNoYXJhY3Rlciwg
Ly8gMHgzZCAgPQotICAgIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4M2UgID4KKyAgICBJbnZhbGlk
Q2hhcmFjdGVyLCAvLyAweDNlICA+ICAoVHJ5IHRvIHByZXZlbnQgY2VydGFpbiB0eXBlcyBvZiBY
U1MuKQogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNmICA/CiAgICAgUXVlcnlDaGFyYWN0ZXIs
IC8vIDB4NDAgIEAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2
NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0MSAgQQotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAw
eDQyICBCCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFy
YWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDMgIEMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0NCAg
RAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4Q2hhcmFjdGVyLCAvLyAweDQ1ICBFCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDYgIEYKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDQ3ICBHCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0OCAgSAotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NDkgIEkKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDRhICBKCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHg0YiAgSwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIsIC8vIDB4NGMgIEwKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyLCAvLyAweDRkICBNCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciwgLy8gMHg0ZSAgTgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8v
IDB4NGYgIE8KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUw
ICBQCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1MSAgUQot
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTIgIFIKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUzICBTCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1NCAgVAotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTUgIFUKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDU2ICBWCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHg1NyAgVwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyLCAvLyAweDU4ICBYCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1OSAgWQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIsIC8vIDB4NWEgIFoKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDQxICBBCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHg0MiAgQgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NDMgIEMKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDQ0ICBECisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHg0NSAgRQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0
ZXIsIC8vIDB4NDYgIEYKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ3ICBHCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0OCAgSAorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4
NDkgIEkKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50
Q2hhcmFjdGVyLCAvLyAweDRhICBKCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0YiAgSworICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGMgIEwKKyAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDRkICBNCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENv
bXBvbmVudENoYXJhY3RlciwgLy8gMHg0ZSAgTgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGYgIE8KKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDUw
ICBQCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg1MSAgUQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTIgIFIKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDUzICBTCisgICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg1NCAgVAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NTUgIFUKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU2ICBWCisgICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1NyAg
VworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU4ICBYCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1OSAgWQorICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NWEgIFoKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1YiAgWwogICAgIFF1ZXJ5Q2hhcmFj
dGVyLCAvLyAweDVjICAnXCcKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1ZCAgXQogICAgIFF1
ZXJ5Q2hhcmFjdGVyLCAvLyAweDVlICBeCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciwgLy8gMHg1ZiAgXworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NWYgIF8KICAgICBRdWVyeUNoYXJhY3Rlciwg
Ly8gMHg2MCAgYAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0
Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDYxICBhCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4
NjIgIGIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJh
Y3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2MyAgYwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDY0ICBk
Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIg
fCBIZXhDaGFyYWN0ZXIsIC8vIDB4NjUgIGUKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2NiAgZgotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NjcgIGcKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDY4ICBoCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2OSAgaQotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NmEgIGoKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDZiICBrCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciwgLy8gMHg2YyAgbAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIsIC8vIDB4NmQgIG0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
LCAvLyAweDZlICBuCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8g
MHg2ZiAgbwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzAg
IHAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDcxICBxCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3MiAgcgotICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzMgIHMKLSAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc0ICB0Ci0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3NSAgdQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzYgIHYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyLCAvLyAweDc3ICB3Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIsIC8vIDB4NzggIHgKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc5ICB5Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHg3YSAgegorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4NjEgIGEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50
Q2hhcmFjdGVyLCAvLyAweDYyICBiCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg2MyAgYworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4NjQgIGQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDY1ICBlCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rl
ciwgLy8gMHg2NiAgZgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjcgIGcKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY4ICBoCisgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2
OSAgaQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NmEgIGoKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZiICBrCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2YyAgbAorICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4NmQgIG0KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDZlICBuCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2ZiAgbworICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzAg
IHAKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDcxICBxCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3MiAgcgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzMgIHMKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDc0ICB0CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHg3NSAgdQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzYgIHYKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc3ICB3
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzggIHgKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc5ICB5CisgICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8g
MHg3YSAgegogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDdiICB7CiAgICAgUXVlcnlDaGFyYWN0
ZXIsIC8vIDB4N2MgIHwKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg3ZCAgfQotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4N2UgIH4KKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDdlICB+
CiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHg3ZgogICAgIEludmFsaWRDaGFyYWN0ZXIsIElu
dmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCiAgICAg
SW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52
YWxpZENoYXJhY3RlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hh
cmFjdGVyVHlwZXMuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMu
aAppbmRleCA2ZWRiOThjYTIwMzllYzRlNjg2N2EzNmY3NmY4MTIyZDBlZmMwNDdjLi41MzQ0ZTlj
NGFiNjFmNjdhNzg1NGU5ODgwY2YwMDQzZjFmNzZiZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmgKKysrIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5oCkBAIC0zNSwyNyArMzUsMjkgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIGNsYXNzIFVSTENoYXJhY3RlclR5cGVzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNRdWVyeUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5
cGUoYywgUXVlcnlDaGFyYWN0ZXIpOyB9Ci0gICAgc3RhdGljIGlubGluZSBib29sIGlzSVB2NENo
YXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5cGUoYywgSVB2NENoYXJhY3Rl
cik7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZXhDaGFyKHVuc2lnbmVkIGNoYXIgYykg
eyByZXR1cm4gaXNDaGFyT2ZUeXBlKGMsIEhleENoYXJhY3Rlcik7IH0KLQotcHJpdmF0ZToKLSAg
ICBlbnVtIENoYXJUeXBlcyB7CisgICAgZW51bSBDaGFyYWN0ZXJUeXBlcyB7CiAgICAgICAgIElu
dmFsaWRDaGFyYWN0ZXIgPSAwLAogICAgICAgICBRdWVyeUNoYXJhY3RlciA9IDEgPDwgMCwKICAg
ICAgICAgVXNlckluZm9DaGFyYWN0ZXIgPSAxIDw8IDEsCiAgICAgICAgIElQdjRDaGFyYWN0ZXIg
PSAxIDw8IDIsCi0gICAgICAgIEhleENoYXJhY3RlciA9IDEgPDwgMywKKyAgICAgICAgSGV4YWRl
Y2ltYWxDaGFyYWN0ZXIgPSAxIDw8IDMsCiAgICAgICAgIERlY2ltYWxDaGFyYWN0ZXIgPSAxIDw8
IDQsCiAgICAgICAgIE9jdGFsQ2hhcmFjdGVyID0gMSA8PCA1LAorICAgICAgICBDb21wb25lbnRD
aGFyYWN0ZXIgPSAxIDw8IDYsCiAgICAgfTsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIGNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF07CisgICAgc3RhdGljIGlubGluZSBib29sIGlz
Q29tcG9uZW50Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gaXNDaGFyYWN0
ZXJPZlR5cGUoY2hhcmFjdGVyLCBDb21wb25lbnRDaGFyYWN0ZXIpOyB9CisgICAgc3RhdGljIGlu
bGluZSBib29sIGlzSGV4Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gaXND
aGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBIZXhhZGVjaW1hbENoYXJhY3Rlcik7IH0KKyAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNJUHY0Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyBy
ZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBJUHY0Q2hhcmFjdGVyKTsgfQorICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1F1ZXJ5Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3Rlcikg
eyByZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBRdWVyeUNoYXJhY3Rlcik7IH0K
IAotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoYXJPZlR5cGUodW5zaWduZWQgY2hhciBjLCBD
aGFyVHlwZXMgdHlwZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGFyYWN0ZXJPZlR5cGUo
dW5zaWduZWQgY2hhciBIZXhDaGFyYWN0ZXIsIENoYXJhY3RlclR5cGVzIHR5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gISEoY2hhcmFjdGVyVHlwZVRhYmxlW2NdICYgdHlwZSk7CisgICAgICAg
IHJldHVybiAhIShjaGFyYWN0ZXJUeXBlVGFibGVbSGV4Q2hhcmFjdGVyXSAmIHR5cGUpOwogICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJU
eXBlVGFibGVbMHgxMDBdOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxFc2NhcGUuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxFc2NhcGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWNkY2RlMjRkNjc2ZTFhOTQ3MzgxM2Yy
ZjIzOTllNGNmMGMyNGZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMRXNjYXBlLmgiCi0KLSNpZiBV
U0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotY29uc3QgY2hhciBoZXhDaGFyYWN0ZXJU
YWJsZVsxNl0gPSB7Ci0gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycs
Ci0gICAgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi19OwotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxFc2NhcGUuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMTAwMTJhM2Y4YmVlN2U5M2Q4Mjg0ZDBkMjA0NWI2
OTBlODgxODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxFc2NhcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUz
ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSNp
Zm5kZWYgVVJMRXNjYXBlX2gKLSNkZWZpbmUgVVJMRXNjYXBlX2gKLQotI2lmIFVTRShXVEZVUkwp
Ci0KLSNpbmNsdWRlICJVUkxCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWV4dGVybiBj
b25zdCBjaGFyIGhleENoYXJhY3RlclRhYmxlWzE2XTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSW5D
aGFyLCB0eXBlbmFtZSBPdXRDaGFyPgotaW5saW5lIHZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXJh
Y3RlcihJbkNoYXIgY2gsIFVSTEJ1ZmZlcjxPdXRDaGFyPiYgYnVmZmVyKQotewotICAgIGJ1ZmZl
ci5hcHBlbmQoJyUnKTsKLSAgICBidWZmZXIuYXBwZW5kKGhleENoYXJhY3RlclRhYmxlW2NoID4+
IDRdKTsKLSAgICBidWZmZXIuYXBwZW5kKGhleENoYXJhY3RlclRhYmxlW2NoICYgMHhmXSk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxGaWxlLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TEZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODY2YzEwNDhhYjQ4MzNkYTk3YjQ3ZTk5NjQzN2NhMTU0YjM5
MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxGaWxlLmgK
QEAgLTAsMCArMSwxMTQgQEAKKy8vIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
Ly8gUHJvdmlkZXMgc2hhcmVkIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBpbnRlcm5hbHMgb2YgdGhl
IHBhcnNlciBhbmQKKy8vIGNhbm9uaWNhbGl6ZXIgZm9yIGZpbGUgVVJMcy4gRG8gbm90IHVzZSBv
dXRzaWRlIG9mIHRoZXNlIG1vZHVsZXMuCisKKyNpZm5kZWYgVVJMRmlsZV9oCisjZGVmaW5lIFVS
TEZpbGVfaAorCisjaW5jbHVkZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgorI2luY2x1ZGUgPHd0Zi91
bmljb2RlL1VuaWNvZGUuaD4KKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgewor
CituYW1lc3BhY2UgVVJMUGFyc2VyIHsKKworI2lmIE9TKFdJTkRPV1MpCisvLyBXZSBhbGxvdyBi
b3RoICJjOiIgYW5kICJjfCIgYXMgZHJpdmUgaWRlbnRpZmllcnMuCitpbmxpbmUgYm9vbCBpc1dp
bmRvd3NEcml2ZVNlcGFyYXRvcihVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGNoYXJh
Y3RlciA9PSAnOicgfHwgY2hhcmFjdGVyID09ICd8JzsKK30KK2lubGluZSBib29sIGlzV2luZG93
c0RyaXZlTGV0dGVyKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gKGNoYXJhY3RlciA+
PSAnQScgJiYgY2hhcmFjdGVyIDw9ICdaJykgfHwgKGNoYXJhY3RlciA+PSAnYScgJiYgY2hhcmFj
dGVyIDw9ICd6Jyk7Cit9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgdGhlIG5leHQgc2xhc2ggaW4gdGhlIGlucHV0IGFmdGVyIHRoZSBnaXZlbiBpbmRl
eCwgb3IKKy8vIHNwZWNMZW5ndGggaWYgdGhlIGVuZCBvZiB0aGUgaW5wdXQgaXMgcmVhY2hlZC4K
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgaW50IGZpbmROZXh0U2xh
c2goY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IGJlZ2luSW5kZXgsIGludCBzcGVjTGVu
Z3RoKQoreworICAgIGludCBpZHggPSBiZWdpbkluZGV4OworICAgIHdoaWxlIChpZHggPCBzcGVj
TGVuZ3RoICYmICFpc1VSTFNsYXNoKHNwZWNbaWR4XSkpCisgICAgICAgICsraWR4OworICAgIHJl
dHVybiBpZHg7Cit9CisKKyNpZiBPUyhXSU5ET1dTKQorLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBz
dGFydE9mZnNldCBpbiB0aGUgZ2l2ZW4gc3BlYyBsb29rcyBsaWtlIGl0IGJlZ2lucyBhCisvLyBk
cml2ZSBzcGVjLCBmb3IgZXhhbXBsZSAiYzoiLiBUaGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgaGFu
ZGxlcyBzdGFydE9mZnNldAorLy8gdmFsdWVzIHRoYXQgYXJlIGVxdWFsIHRvIG9yIGxhcmdlciB0
aGFuIHRoZSBzcGVjTGVuZ3RoIHRvIHNpbXBsaWZ5IGNhbGxlcnMuCisvLworLy8gSWYgdGhpcyBy
ZXR1cm5zIHRydWUsIHRoZSBzcGVjIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIHZhbGlkIGRyaXZl
IGxldHRlcgorLy8gcGx1cyBhIGNvbG9uIHN0YXJ0aW5nIGF0IHxzdGFydE9mZnNldHwuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGJvb2wgZG9lc0JlZ2luV2luZG93
c0RyaXZlU3BlYyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBzcGVjTGVuZ3RoKQoreworICAgIGludCByZW1haW5pbmdMZW5ndGggPSBzcGVjTGVuZ3RoIC0g
c3RhcnRPZmZzZXQ7CisgICAgaWYgKHJlbWFpbmluZ0xlbmd0aCA8IDIpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gTm90IGVub3VnaCByb29tLgorICAgIGlmICghaXNXaW5kb3dzRHJpdmVMZXR0
ZXIoc3BlY1tzdGFydE9mZnNldF0pKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERvZXNuJ3Qg
c3RhcnQgd2l0aCBhIHZhbGlkIGRyaXZlIGxldHRlci4KKyAgICBpZiAoIWlzV2luZG93c0RyaXZl
U2VwYXJhdG9yKHNwZWNbc3RhcnRPZmZzZXQgKyAxXSkpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gSXNuJ3QgZm9sbG93ZWQgd2l0aCBhIGRyaXZlIHNlcGFyYXRvci4KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdGFydE9mZnNldCBpbiB0aGUgZ2l2ZW4g
dGV4dCBsb29rcyBsaWtlIGl0IGJlZ2lucyBhCisvLyBVTkMgcGF0aCwgZm9yIGV4YW1wbGUgIlxc
Ii4gVGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGhhbmRsZXMgc3RhcnRPZmZzZXQKKy8vIHZhbHVl
cyB0aGF0IGFyZSBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiB0aGUgc3BlY0xlbmd0aCB0byBzaW1w
bGlmeSBjYWxsZXJzLgorLy8KKy8vIFdoZW4gc3RyaWN0U2xhc2hlcyBpcyBzZXQsIHRoaXMgZnVu
Y3Rpb24gd2lsbCBvbmx5IGFjY2VwdCBiYWNrc2xhc2hlcyBhcyBpcworLy8gc3RhbmRhcmQgZm9y
IFdpbmRvd3MuIE90aGVyd2lzZSwgaXQgd2lsbCBhY2NlcHQgZm9yd2FyZCBzbGFzaGVzIGFzIHdl
bGwKKy8vIHdoaWNoIHdlIHVzZSBmb3IgYSBsb3Qgb2YgVVJMIGhhbmRsaW5nLgordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBib29sIGRvZXNCZWdpblVOQ1BhdGgoY29u
c3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBib29s
IHN0cmljdFNsYXNoZXMpCit7CisgICAgaW50IHJlbWFpbmluZ0xlbmd0aCA9IGxlbmd0aCAtIHN0
YXJ0T2Zmc2V0OworICAgIGlmIChyZW1haW5pbmdMZW5ndGggPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoc3RyaWN0U2xhc2hlcykKKyAgICAgICAgcmV0dXJuIHRleHRbc3Rh
cnRPZmZzZXRdID09ICdcXCcgJiYgdGV4dFtzdGFydE9mZnNldCArIDFdID09ICdcXCc7CisgICAg
cmV0dXJuIGlzVVJMU2xhc2godGV4dFtzdGFydE9mZnNldF0pICYmIGlzVVJMU2xhc2godGV4dFtz
dGFydE9mZnNldCArIDFdKTsKK30KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQorCit9IC8vIG5hbWVz
cGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQorCisjZW5kaWYgLy8gVVJMRmlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTFBhcnNlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ2M2Q0MGVkN2Q5ZmJmMjRmYjk1YTY2NzBmYmM2Nzg0NjMzYTE5YjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmNwcApAQCAt
MCwwICsxLDc4NyBAQAorLyogQmFzZWQgb24gbnNVUkxQYXJzZXJzLmNjIGZyb20gTW96aWxsYQor
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IChD
KSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0
IDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqICAgRGFyaW4gRmlzaGVyIChvcmlnaW5hbCBhdXRob3IpCisgKgor
ICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1
bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiks
CisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwg
YXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRv
IGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUg
cHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5k
IG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91
IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkg
dXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkg
b25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJ
Q0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVS
TFBhcnNlLmgiCisKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisjaW5jbHVkZSAiVVJM
VXRpbC5oIgorI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNlciB7CisKK25hbWVzcGFjZSB7CisKKy8v
IFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBhdXRob3JpdHkgdGVybWluYXRvciBpbiB0
aGUgaW5wdXQgc3RhcnRpbmcKKy8vIGZyb20gc3RhcnRPZmZzZXQuIElmIG5vIHRlcm1pbmF0b3Ig
aXMgZm91bmQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBlcXVhbAorLy8gdG8gc3BlY0xlbmd0
aC4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbnQgZmluZE5leHRBdXRob3Jp
dHlUZXJtaW5hdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9mZnNldCwg
aW50IHNwZWNMZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9IHN0YXJ0T2Zmc2V0OyBpIDwgc3Bl
Y0xlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChJc0F1dGhvcml0eVRlcm1pbmF0b3Ioc3BlY1tp
XSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIHNwZWNMZW5ndGg7
IC8vIE5vdCBmb3VuZC4KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3Zv
aWQgcGFyc2VVc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHVzZXIsIFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIFVSTENvbXBvbmVudCYgcGFzc3dv
cmQpCit7CisgICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHVzZXIgc2VjdGlvbiwg
d2hpY2ggc2VwYXJhdGVzIHRoZSB1c2VybmFtZSBhbmQKKyAgICAvLyBwYXNzd29yZC4KKyAgICBp
bnQgY29sb25PZmZzZXQgPSAwOworICAgIHdoaWxlIChjb2xvbk9mZnNldCA8IHVzZXIubGVuZ3Ro
KCkgJiYgc3BlY1t1c2VyLmJlZ2luKCkgKyBjb2xvbk9mZnNldF0gIT0gJzonKQorICAgICAgICAr
K2NvbG9uT2Zmc2V0OworCisgICAgaWYgKGNvbG9uT2Zmc2V0IDwgdXNlci5sZW5ndGgoKSkgewor
ICAgICAgICAvLyBGb3VuZCBzZXBhcmF0b3I6IDx1c2VybmFtZT46PHBhc3N3b3JkPgorICAgICAg
ICB1c2VybmFtZSA9IFVSTENvbXBvbmVudCh1c2VyLmJlZ2luKCksIGNvbG9uT2Zmc2V0KTsKKyAg
ICAgICAgcGFzc3dvcmQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZSh1c2VyLmJlZ2luKCkgKyBj
b2xvbk9mZnNldCArIDEsIHVzZXIuZW5kKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5v
IHNlcGFyYXRvciwgdHJlYXQgZXZlcnl0aGluZyBhcyB0aGUgdXNlcm5hbWUKKyAgICAgICAgdXNl
cm5hbWUgPSB1c2VyOworICAgICAgICBwYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgcGFyc2VTZXJ2ZXJJ
bmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2VydmVy
SW5mbywgVVJMQ29tcG9uZW50JiBob3N0bmFtZSwgVVJMQ29tcG9uZW50JiBwb3J0KQoreworICAg
IGlmICghc2VydmVySW5mby5sZW5ndGgoKSkgeworICAgICAgICAvLyBObyBzZXJ2ZXIgaW5mbywg
aG9zdCBuYW1lIGlzIGVtcHR5LgorICAgICAgICBob3N0bmFtZSA9IFVSTENvbXBvbmVudCgpOwor
ICAgICAgICBwb3J0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGUgaG9zdCBzdGFydHMgd2l0aCBhIGxlZnQtYnJhY2tldCwgYXNzdW1lIHRo
ZSBlbnRpcmUgaG9zdCBpcyBhbgorICAgIC8vIElQdjYgbGl0ZXJhbC4gT3RoZXJ3aXNlLCBhc3N1
bWUgbm9uZSBvZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGxpdGVyYWwuCisgICAgLy8gVGhpcyBhc3N1
bXB0aW9uIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB3ZSBmaW5kIGEgcmlnaHQtYnJhY2tldC4KKyAg
ICAvLworICAgIC8vIE91ciBJUHY2IGFkZHJlc3MgY2Fub25pY2FsaXphdGlvbiBjb2RlIHJlcXVp
cmVzIGJvdGggYnJhY2tldHMgdG8gZXhpc3QsCisgICAgLy8gYnV0IHRoZSBhYmlsaXR5IHRvIGxv
Y2F0ZSBhbiBpbmNvbXBsZXRlIGFkZHJlc3MgY2FuIHN0aWxsIGJlIHVzZWZ1bC4KKyAgICBpbnQg
aXB2NlRlcm1pbmF0b3IgPSBzcGVjW3NlcnZlckluZm8uYmVnaW4oKV0gPT0gJ1snID8gc2VydmVy
SW5mby5lbmQoKSA6IC0xOworICAgIGludCBjb2xvbiA9IC0xOworCisgICAgLy8gRmluZCB0aGUg
bGFzdCByaWdodC1icmFja2V0LCBhbmQgdGhlIGxhc3QgY29sb24uCisgICAgZm9yIChpbnQgaSA9
IHNlcnZlckluZm8uYmVnaW4oKTsgaSA8IHNlcnZlckluZm8uZW5kKCk7ICsraSkgeworICAgICAg
ICBzd2l0Y2ggKHNwZWNbaV0pIHsKKyAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICBpcHY2
VGVybWluYXRvciA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnOic6Cisg
ICAgICAgICAgICBjb2xvbiA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChjb2xvbiA+IGlwdjZUZXJtaW5hdG9yKSB7CisgICAgICAgIC8vIEZvdW5k
IGEgcG9ydCBudW1iZXI6IDxob3N0bmFtZT46PHBvcnQ+CisgICAgICAgIGhvc3RuYW1lID0gVVJM
Q29tcG9uZW50Ojpmcm9tUmFuZ2Uoc2VydmVySW5mby5iZWdpbigpLCBjb2xvbik7CisgICAgICAg
IGlmICghaG9zdG5hbWUubGVuZ3RoKCkpCisgICAgICAgICAgICBob3N0bmFtZS5yZXNldCgpOwor
ICAgICAgICBwb3J0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY29sb24gKyAxLCBzZXJ2ZXJJ
bmZvLmVuZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBwb3J0OiA8aG9zdG5hbWU+
CisgICAgICAgIGhvc3RuYW1lID0gc2VydmVySW5mbzsKKyAgICAgICAgcG9ydCA9IFVSTENvbXBv
bmVudCgpOworICAgIH0KK30KKworLy8gR2l2ZW4gYW4gYWxyZWFkeS1pZGVudGlmaWVkIGF1dGgg
c2VjdGlvbiwgYnJlYWtzIGl0IGludG8gaXRzIGNvbnNpdHVlbnQKKy8vIHBhcnRzLiBUaGUgcG9y
dCBudW1iZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHRoZSByZXN1bHRpbmcgaW50ZWdlciB3aWxsIGJl
CisvLyBmaWxsZWQgaW50byB0aGUgZ2l2ZW4gKnBvcnQgdmFyaWFibGUsIG9yIC0xIGlmIHRoZXJl
IGlzIG5vIHBvcnQgbnVtYmVyIG9yIGl0CisvLyBpcyBpbnZhbGlkLgordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9QYXJzZUF1dGhvcml0eShjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGhvcml0eSwgVVJMQ29tcG9uZW50JiB1
c2VybmFtZSwgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwgVVJMQ29tcG9uZW50JiBob3N0bmFtZSwg
VVJMQ29tcG9uZW50JiBwb3J0KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYXV0aG9yaXR5
LmlzVmFsaWQoKSwgIldlIHNob3VsZCBhbHdheXMgZ2V0IGFuIGF1dGhvcml0eSIpOworICAgIGlm
ICghYXV0aG9yaXR5Lmxlbmd0aCgpKSB7CisgICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50
KCk7CisgICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIGhvc3RuYW1l
ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIEAsIHdoaWNo
IGlzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdXNlciBpbmZvIGFuZAorICAgIC8vIHRoZSBz
ZXJ2ZXIgaW5mby4KKyAgICBpbnQgaSA9IGF1dGhvcml0eS5lbmQoKSAtIDE7CisgICAgd2hpbGUg
KGkgPiBhdXRob3JpdHkuYmVnaW4oKSAmJiBzcGVjW2ldICE9ICdAJykKKyAgICAgICAgLS1pOwor
CisgICAgaWYgKHNwZWNbaV0gPT0gJ0AnKSB7CisgICAgICAgIC8vIEZvdW5kIHVzZXIgaW5mbzog
PHVzZXItaW5mbz5APHNlcnZlci1pbmZvPgorICAgICAgICBwYXJzZVVzZXJJbmZvKHNwZWMsIFVS
TENvbXBvbmVudChhdXRob3JpdHkuYmVnaW4oKSwgaSAtIGF1dGhvcml0eS5iZWdpbigpKSwgdXNl
cm5hbWUsIHBhc3N3b3JkKTsKKyAgICAgICAgcGFyc2VTZXJ2ZXJJbmZvKHNwZWMsIFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBhdXRob3JpdHkuZW5kKCkpLCBob3N0bmFtZSwgcG9ydCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gdXNlciBpbmZvLCBldmVyeXRoaW5nIGlzIHNl
cnZlciBpbmZvLgorICAgICAgICB1c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOworICAgICAgICBw
YXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworICAgICAgICBwYXJzZVNlcnZlckluZm8oc3BlYywg
YXV0aG9yaXR5LCBob3N0bmFtZSwgcG9ydCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBwYXJzZVBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBoaWVyYXJjaGljYWxpZGVudGlmaWVycywgVVJMQ29tcG9u
ZW50JiByZXNvdXJjZVBhdGgsIFVSTENvbXBvbmVudCYgcXVlcnksIFVSTENvbXBvbmVudCYgZnJh
Z21lbnQpCit7CisgICAgLy8gcGF0aCA9IFsvXTxzZWdtZW50MT4vPHNlZ21lbnQyPi88Li4uPi88
c2VnbWVudE4+OzxwYXJhbT4/PHF1ZXJ5PiM8cmVmPgorCisgICAgLy8gU3BlY2lhbCBjYXNlIHdo
ZW4gdGhlcmUgaXMgbm8gcGF0aC4KKyAgICBpZiAoaGllcmFyY2hpY2FsaWRlbnRpZmllcnMubGVu
Z3RoKCkgPT0gLTEpIHsKKyAgICAgICAgcmVzb3VyY2VQYXRoID0gVVJMQ29tcG9uZW50KCk7Cisg
ICAgICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIGZyYWdtZW50ID0gVVJMQ29t
cG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShoaWVyYXJjaGljYWxpZGVudGlmaWVycy5sZW5ndGgoKSA+IDAsICJXZSBzaG91bGQgbmV2ZXIg
aGF2ZSAwIGxlbmd0aCBwYXRocyIpOworCisgICAgLy8gU2VhcmNoIGZvciBmaXJzdCBvY2N1cnJl
bmNlIG9mIGVpdGhlciA/IG9yICMuCisgICAgaW50IHBhdGhFbmQgPSBoaWVyYXJjaGljYWxpZGVu
dGlmaWVycy5lbmQoKTsKKworICAgIGludCBxdWVyeVNlcGFyYXRvciA9IC0xOyAvLyBJbmRleCBv
ZiB0aGUgJz8nCisgICAgaW50IGZyYWdtZW50U2VwYXJhdG9yID0gLTE7IC8vIEluZGV4IG9mIHRo
ZSAnIycKKyAgICBmb3IgKGludCBpID0gaGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4oKTsg
aSA8IHBhdGhFbmQ7ICsraSkgeworICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsKKyAgICAgICAg
Y2FzZSAnPyc6CisgICAgICAgICAgICAvLyBPbmx5IG1hdGNoIHRoZSBxdWVyeSBzdHJpbmcgaWYg
aXQgcHJlY2VkZXMgdGhlIHJlZmVyZW5jZSBmcmFnbWVudAorICAgICAgICAgICAgLy8gYW5kIHdo
ZW4gd2UgaGF2ZW4ndCBmb3VuZCBvbmUgYWxyZWFkeS4KKyAgICAgICAgICAgIGlmIChmcmFnbWVu
dFNlcGFyYXRvciA8IDAgJiYgcXVlcnlTZXBhcmF0b3IgPCAwKQorICAgICAgICAgICAgICAgIHF1
ZXJ5U2VwYXJhdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcjJzoK
KyAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgZmlyc3QgIyBzaWduIG9ubHkuCisgICAgICAgICAg
ICBpZiAoZnJhZ21lbnRTZXBhcmF0b3IgPCAwKQorICAgICAgICAgICAgICAgIGZyYWdtZW50U2Vw
YXJhdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gTWFya2VycyBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIGVhY2ggb2YgdGhlc2Ug
Y29ycmVzcG9uZGluZworICAgIC8vIGNvbXBvbmVudHMuIFRoZSBjb2RlIGJlbG93IHdvcmRzIGZy
b20gdGhlIGVuZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsCisgICAgLy8gYW5kIHdpbGwgdXBkYXRl
IHRoZXNlIGluZGljZXMgYXMgaXQgZmluZHMgY29tcG9uZW50cyB0aGF0IGV4aXN0LgorICAgIGlu
dCByZXNvdXJjZVBhdGhFbmQgPSAtMTsKKyAgICBpbnQgcXVlcnlFbmQgPSAtMTsKKworICAgIC8v
IFJlZiBmcmFnbWVudDogZnJvbSB0aGUgIyB0byB0aGUgZW5kIG9mIHRoZSBwYXRoLgorICAgIGlm
IChmcmFnbWVudFNlcGFyYXRvciA+PSAwKSB7CisgICAgICAgIHJlc291cmNlUGF0aEVuZCA9IHF1
ZXJ5RW5kID0gZnJhZ21lbnRTZXBhcmF0b3I7CisgICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UoZnJhZ21lbnRTZXBhcmF0b3IgKyAxLCBwYXRoRW5kKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVyeUVuZCA9IHBhdGhFbmQ7CisgICAg
ICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorCisgICAgLy8gUXVlcnkgZnJh
Z21lbnQ6IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgPyB0byB0aGUgbmV4dCBib3VuZGFyeSAoZWl0aGVy
IHRoZSBlbmQKKyAgICAvLyBvZiB0aGUgcGF0aCBvciB0aGUgcmVmIGZyYWdtZW50KS4KKyAgICBp
ZiAocXVlcnlTZXBhcmF0b3IgPj0gMCkgeworICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVy
eVNlcGFyYXRvcjsKKyAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShxdWVy
eVNlcGFyYXRvciArIDEsIHF1ZXJ5RW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcXVlcnkgPSBV
UkxDb21wb25lbnQoKTsKKworICAgIC8vIEZpbGUgcGF0aDogdHJlYXQgYW4gZW1wdHkgZmlsZSBw
YXRoIGFzIG5vIGZpbGUgcGF0aC4KKyAgICBpZiAocmVzb3VyY2VQYXRoRW5kICE9IGhpZXJhcmNo
aWNhbGlkZW50aWZpZXJzLmJlZ2luKCkpCisgICAgICAgIHJlc291cmNlUGF0aCA9IFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLmJlZ2luKCksIHJlc291cmNl
UGF0aEVuZCk7CisgICAgZWxzZQorICAgICAgICByZXNvdXJjZVBhdGggPSBVUkxDb21wb25lbnQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgZG9FeHRyYWN0
U2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9u
ZW50JiBzY2hlbWUpCit7CisgICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGNvbnRy
b2wgY2hhcmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIHdoaWxlIChiZWdpbiA8IHVy
bExlbmd0aCAmJiBzaG91bGRUcmltRnJvbVVSTCh1cmxbYmVnaW5dKSkKKyAgICAgICAgKytiZWdp
bjsKKworICAgIGlmIChiZWdpbiA9PSB1cmxMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gSW5wdXQgaXMgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UuCisKKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCBjb2xvbiBjaGFyYWN0ZXIuCisgICAgZm9yIChpbnQgaSA9IGJlZ2luOyBpIDwgdXJsTGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHVybFtpXSA9PSAnOicpIHsKKyAgICAgICAgICAgIHNj
aGVtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2luLCBpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsgLy8gTm8gY29s
b24gZm91bmQ6IG5vIHNjaGVtZQorfQorCisvLyBGaWxscyBpbiBhbGwgbWVtYmVycyBvZiB0aGUg
UGFyc2VkIHN0cnVjdHVyZSBleGNlcHQgZm9yIHRoZSBzY2hlbWUuCisvLworLy8gfHNwZWN8IGlz
IHRoZSBmdWxsIHNwZWMgYmVpbmcgcGFyc2VkLCBvZiBsZW5ndGggfHNwZWNMZW5ndGh8LgorLy8g
fGFmdGVyU2NoZW1lfCBpcyB0aGUgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUg
c2NoZW1lIChhZnRlciB0aGUKKy8vICAgY29sb24pIHdoZXJlIHdlJ2xsIGJlZ2luIHBhcnNpbmcu
CisvLworLy8gQ29tcGF0YWJpbGl0eSBkYXRhIHBvaW50cy4gSSBsaXN0ICJob3N0IiwgInBhdGgi
IGV4dHJhY3RlZDoKKy8vIElucHV0ICAgICAgICAgICAgICAgIElFNiAgICAgICAgICAgICBGaXJl
Zm94ICAgICAgICAgICAgICAgIFVzCisvLyAtLS0tLSAgICAgICAgICAgICAgICAtLS0tLS0tLS0t
LS0tLSAgLS0tLS0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLS0tLQorLy8gaHR0cDovL2Zv
by5jb20vICAgICAgImZvby5jb20iLCAiLyIgICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5j
b20iLCAiLyIKKy8vIGh0dHA6Zm9vLmNvbS8gICAgICAgICJmb28uY29tIiwgIi8iICAiZm9vLmNv
bSIsICIvIiAgICAgICAgICJmb28uY29tIiwgIi8iCisvLyBodHRwOi9mb28uY29tLyAgICAgICBm
YWlsKCopICAgICAgICAgImZvby5jb20iLCAiLyIgICAgICAgICAiZm9vLmNvbSIsICIvIgorLy8g
aHR0cDpcZm9vLmNvbS8gICAgICAgZmFpbCgqKSAgICAgICAgICJcZm9vLmNvbSIsICIvIihmYWls
KSAgImZvby5jb20iLCAiLyIKKy8vIGh0dHA6Ly8vL2Zvby5jb20vICAgICJmb28uY29tIiwgIi8i
ICAiZm9vLmNvbSIsICIvIiAgICAgICAgICJmb28uY29tIiwgIi8iCisvLworLy8gKCopIEludGVy
ZXN0aW5nbHksIGFsdGhvdWdoIElFIGZhaWxzIHRvIGxvYWQgdGhlc2UgVVJMcywgaXRzIGhpc3Rv
cnkKKy8vIGNhbm9uaWNhbGl6ZXIgaGFuZGxlcyB0aGVtLCBtZWFuaW5nIGlmIHlvdSd2ZSBiZWVu
IHRvIHRoZSBjb3JyZXNwb25kaW5nCisvLyAiaHR0cDovL2Zvby5jb20vIiBsaW5rLCBpdCB3aWxs
IGJlIGNvbG9yZWQuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9Q
YXJzZUFmdGVyU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3Ro
LCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCit7CisgICAgaW50IHNsYXNo
ZXNDb3VudCA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGFmdGVyU2NoZW1lLCBzcGVj
TGVuZ3RoKTsKKyAgICBpbnQgYWZ0ZXJTbGFzaGVzID0gYWZ0ZXJTY2hlbWUgKyBzbGFzaGVzQ291
bnQ7CisKKyAgICAvLyBGaXJzdCBzcGxpdCBpbnRvIHR3byBtYWluIHBhcnRzLCB0aGUgYXV0aG9y
aXR5ICh1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3QsCisgICAgLy8gYW5kIHBvcnQpIGFuZCB0aGUg
ZnVsbCBwYXRoIChwYXRoLCBxdWVyeSwgYW5kIHJlZmVyZW5jZSkuCisgICAgVVJMQ29tcG9uZW50
IGF1dGhvcml0eTsKKyAgICBVUkxDb21wb25lbnQgZnVsbFBhdGg7CisKKyAgICAvLyBGb3VuZCAi
Ly88c29tZSBkYXRhPiIsIGxvb2tzIGxpa2UgYW4gYXV0aG9yaXR5IHNlY3Rpb24uIFRyZWF0IGV2
ZXJ5dGhpbmcKKyAgICAvLyBmcm9tIHRoZXJlIHRvIHRoZSBuZXh0IHNsYXNoIChvciBlbmQgb2Yg
c3BlYykgdG8gYmUgdGhlIGF1dGhvcml0eS4gTm90ZQorICAgIC8vIHRoYXQgd2UgaWdub3JlIHRo
ZSBudW1iZXIgb2Ygc2xhc2hlcyBhbmQgdHJlYXQgaXQgYXMgdGhlIGF1dGhvcml0eS4KKyAgICBp
bnQgZW5kQXV0aCA9IGZpbmROZXh0QXV0aG9yaXR5VGVybWluYXRvcihzcGVjLCBhZnRlclNsYXNo
ZXMsIHNwZWNMZW5ndGgpOworICAgIGF1dGhvcml0eSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGFmdGVyU2xhc2hlcywgZW5kQXV0aCk7CisKKyAgICBpZiAoZW5kQXV0aCA9PSBzcGVjTGVuZ3Ro
KSAvLyBObyBiZWdpbm5pbmcgb2YgcGF0aCBmb3VuZC4KKyAgICAgICAgZnVsbFBhdGggPSBVUkxD
b21wb25lbnQoKTsKKyAgICBlbHNlIC8vIEV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgc2xh
c2ggdG8gdGhlIGVuZCBpcyB0aGUgcGF0aC4KKyAgICAgICAgZnVsbFBhdGggPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShlbmRBdXRoLCBzcGVjTGVuZ3RoKTsKKworICAgIC8vIE5vdyBwYXJzZSB0
aG9zZSB0d28gc3ViLXBhcnRzLgorICAgIGRvUGFyc2VBdXRob3JpdHkoc3BlYywgYXV0aG9yaXR5
LCBwYXJzZWQudXNlcm5hbWUsIHBhcnNlZC5wYXNzd29yZCwgcGFyc2VkLmhvc3QsIHBhcnNlZC5w
b3J0KTsKKyAgICBwYXJzZVBhdGgoc3BlYywgZnVsbFBhdGgsIHBhcnNlZC5wYXRoLCBwYXJzZWQu
cXVlcnksIHBhcnNlZC5mcmFnbWVudCk7Cit9CisKKy8vIFRoZSBtYWluIHBhcnNpbmcgZnVuY3Rp
b24gZm9yIHN0YW5kYXJkIFVSTHMuIFN0YW5kYXJkIFVSTHMgaGF2ZSBhIHNjaGVtZSwKKy8vIGhv
c3QsIHBhdGgsIGV0Yy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRv
UGFyc2VTdGFuZGFyZFVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0
aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsK
KworICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMgYW5kIGNvbnRyb2wgY2hh
cmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIHRyaW1VUkwoc3BlYywgJmJlZ2luLCAm
c3BlY0xlbmd0aCk7CisKKyAgICBpbnQgYWZ0ZXJTY2hlbWUgPSAtMTsKKyAgICBpZiAoZG9FeHRy
YWN0U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZC5zY2hlbWUpKQorICAgICAgICBhZnRl
clNjaGVtZSA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOyAvLyBTa2lwIHBhc3QgdGhlIGNvbG9u
LgorICAgIGVsc2UgeworICAgICAgICAvLyBTYXkgdGhlcmUncyBubyBzY2hlbWUgd2hlbiB0aGVy
ZSBpcyBubyBjb2xvbi4gV2UgY291bGQgYWxzbyBzYXkgdGhhdAorICAgICAgICAvLyBldmVyeXRo
aW5nIGlzIHRoZSBzY2hlbWUuIEJvdGggd291bGQgcHJvZHVjZSBhbiBpbnZhbGlkIFVSTCwgYnV0
IHRoaXMgd2F5CisgICAgICAgIC8vIHNlZW1zIGxlc3Mgd3JvbmcgaW4gbW9yZSBjYXNlcy4KKyAg
ICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOworICAgICAgICBhZnRlclNjaGVtZSA9IGJlZ2lu
OworICAgIH0KKyAgICBkb1BhcnNlQWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJT
Y2hlbWUsIHBhcnNlZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2
b2lkIGRvUGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBz
cGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQoreworICAgIEFTU0VSVChzcGVjTGVuZ3Ro
ID49IDApOworCisgICAgLy8gR2V0IHRoZSB1bnVzZWQgcGFydHMgb2YgdGhlIFVSTCBvdXQgb2Yg
dGhlIHdheS4KKyAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dv
cmQucmVzZXQoKTsKKyAgICBwYXJzZWQuaG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJl
c2V0KCk7CisgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlzOyByZXNldCBm
b3IgY29udmVuaWVuY2UuCisgICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7IC8vIE1heSB1c2Ug
dGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgorICAgIHBhcnNlZC5xdWVyeS5yZXNldCgpOyAv
LyBNYXkgdXNlIHRoaXM7IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KKyAgICBwYXJzZWQuY2xlYXJJ
bm5lclVSTFNlZ21lbnRzKCk7IC8vIE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNl
LgorCisgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBj
aGFyYWN0ZXJzLgorICAgIGludCBiZWdpbiA9IDA7CisgICAgdHJpbVVSTChzcGVjLCAmYmVnaW4s
ICZzcGVjTGVuZ3RoKTsKKworICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQg
Y29udGFpbiBvbmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBjaGFycy4KKyAgICBpZiAoYmVnaW4g
PT0gc3BlY0xlbmd0aCkgeworICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaW5uZXJTdGFydCA9IC0xOworCisgICAgLy8gRXh0
cmFjdCB0aGUgc2NoZW1lLiBXZSBhbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBu
byBzY2hlbWUuCisgICAgaWYgKGRvRXh0cmFjdFNjaGVtZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5n
dGggLSBiZWdpbiwgcGFyc2VkLnNjaGVtZSkpIHsKKyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1
bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgcGFy
c2VkLnNjaGVtZS5zZXRCZWdpbihwYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBiZWdpbik7CisKKyAg
ICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkgPT0gc3BlY0xlbmd0aCAtIDEpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaW5uZXJTdGFydCA9IHBhcnNlZC5zY2hlbWUuZW5kKCkg
KyAxOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHNjaGVtZSBmb3VuZDsgdGhhdCdzIG5v
dCB2YWxpZCBmb3IgZmlsZXN5c3RlbSBVUkxzLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBVUkxDb21wb25lbnQgaW5uZXJTY2hl
bWU7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5uZXJTcGVjID0gJnNwZWNbaW5uZXJTdGFy
dF07CisgICAgaW50IGlubmVyU3BlY0xlbmd0aCA9IHNwZWNMZW5ndGggLSBpbm5lclN0YXJ0Owor
CisgICAgaWYgKGRvRXh0cmFjdFNjaGVtZShpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgaW5u
ZXJTY2hlbWUpKSB7CisgICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZl
IEV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCisgICAgICAgIGlubmVyU2NoZW1lLnNldEJlZ2lu
KGlubmVyU2NoZW1lLmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKworICAgICAgICBpZiAoaW5uZXJT
Y2hlbWUuZW5kKCkgPT0gc3BlY0xlbmd0aCAtIDEpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kOyB0aGF0J3Mgbm90IHZhbGlkIGZv
ciBmaWxlc3lzdGVtIFVSTHMuCisgICAgICAgIC8vIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyByZXR1
cm4gImZpbGVzeXN0ZW06Ly8iLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVVJMU2Vn
bWVudHMgaW5uZXJQYXJzZWQ7CisgICAgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNv
bXBvbmVudChzcGVjLCBpbm5lclNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVNjaGVtZSkpIHsK
KyAgICAgICAgLy8gRmlsZSBVUkxzIGFyZSBzcGVjaWFsLgorICAgICAgICBQYXJzZUZpbGVVUkwo
aW5uZXJTcGVjLCBpbm5lclNwZWNMZW5ndGgsICZpbm5lclBhcnNlZCk7CisgICAgfSBlbHNlIGlm
IChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgaW5uZXJTY2hlbWUs
IFVSTFV0aWxpdGllczo6a0ZpbGVTeXN0ZW1TY2hlbWUpKSB7CisgICAgICAgIC8vIEZpbGVzeXN0
ZW0gVVJMcyBkb24ndCBuZXN0LgorICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChVUkxV
dGlsaXRpZXM6OklzU3RhbmRhcmQoc3BlYywgaW5uZXJTY2hlbWUpKSB7CisgICAgICAgIC8vIEFs
bCAibm9ybWFsIiBVUkxzLgorICAgICAgICBkb1BhcnNlU3RhbmRhcmRVUkwoaW5uZXJTcGVjLCBp
bm5lclNwZWNMZW5ndGgsIGlubmVyUGFyc2VkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQWxsIG1lbWJlcnMgb2YgaW5uZXJQYXJzZWQgbmVlZCB0byBiZSBvZmZzZXQg
YnkgaW5uZXJTdGFydC4KKyAgICAvLyBJZiB3ZSBoYWQgYW55IHNjaGVtZSB0aGF0IHN1cHBvcnRl
ZCBuZXN0aW5nIG1vcmUgdGhhbiBvbmUgbGV2ZWwgZGVlcCwKKyAgICAvLyB3ZSdkIGhhdmUgdG8g
cmVjdXJzZSBpbnRvIHRoZSBpbm5lclBhcnNlZCdzIGlubmVyUGFyc2VkIHdoZW4KKyAgICAvLyBh
ZGp1c3RpbmcgYnkgaW5uZXJTdGFydC4KKyAgICBpbm5lclBhcnNlZC5zY2hlbWUuc2V0QmVnaW4o
aW5uZXJQYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKyAgICBpbm5lclBhcnNl
ZC51c2VybmFtZS5zZXRCZWdpbihpbm5lclBhcnNlZC51c2VybmFtZS5iZWdpbigpICsgaW5uZXJT
dGFydCk7CisgICAgaW5uZXJQYXJzZWQucGFzc3dvcmQuc2V0QmVnaW4oaW5uZXJQYXJzZWQucGFz
c3dvcmQuYmVnaW4oKSArIGlubmVyU3RhcnQpOworICAgIGlubmVyUGFyc2VkLmhvc3Quc2V0QmVn
aW4oaW5uZXJQYXJzZWQuaG9zdC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQYXJz
ZWQucG9ydC5zZXRCZWdpbihpbm5lclBhcnNlZC5wb3J0LmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsK
KyAgICBpbm5lclBhcnNlZC5xdWVyeS5zZXRCZWdpbihpbm5lclBhcnNlZC5xdWVyeS5iZWdpbigp
ICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQYXJzZWQuZnJhZ21lbnQuc2V0QmVnaW4oaW5uZXJQ
YXJzZWQuZnJhZ21lbnQuYmVnaW4oKSArIGlubmVyU3RhcnQpOworICAgIGlubmVyUGFyc2VkLnBh
dGguc2V0QmVnaW4oaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisKKyAg
ICAvLyBRdWVyeSBhbmQgcmVmIG1vdmUgZnJvbSBpbm5lclBhcnNlZCB0byBwYXJzZWQuCisgICAg
cGFyc2VkLnF1ZXJ5ID0gaW5uZXJQYXJzZWQucXVlcnk7CisgICAgaW5uZXJQYXJzZWQucXVlcnku
cmVzZXQoKTsKKyAgICBwYXJzZWQuZnJhZ21lbnQgPSBpbm5lclBhcnNlZC5mcmFnbWVudDsKKyAg
ICBpbm5lclBhcnNlZC5mcmFnbWVudC5yZXNldCgpOworCisgICAgcGFyc2VkLnNldElubmVyVVJM
U2VnbWVudHMoaW5uZXJQYXJzZWQpOworICAgIGlmICghaW5uZXJQYXJzZWQuc2NoZW1lLmlzVmFs
aWQoKSB8fCAhaW5uZXJQYXJzZWQucGF0aC5pc1ZhbGlkKCkgfHwgaW5uZXJQYXJzZWQuaW5uZXJV
UkxTZWdtZW50cygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgcGF0aCBpbiBpbm5l
clBhcnNlZCBzaG91bGQgc3RhcnQgd2l0aCBhIHNsYXNoLCB0aGVuIGhhdmUgYSBmaWxlc3lzdGVt
CisgICAgLy8gdHlwZSBmb2xsb3dlZCBieSBhIHNsYXNoLiBGcm9tIHRoZSBmaXJzdCBzbGFzaCB1
cCB0byBidXQgZXhjbHVkaW5nIHRoZQorICAgIC8vIHNlY29uZCBzaG91bGQgYmUgd2hhdCBpdCBr
ZWVwczsgdGhlIHJlc3QgZ29lcyB0byBwYXJzZWQuIElmIHRoZSBwYXRoIGVuZHMKKyAgICAvLyBi
ZWZvcmUgdGhlIHNlY29uZCBzbGFzaCwgaXQncyBzdGlsbCBwcmV0dHkgY2xlYXIgd2hhdCB0aGUg
dXNlciBtZWFudCwgc28KKyAgICAvLyB3ZSdsbCBsZXQgdGhhdCB0aHJvdWdoLgorICAgIGlmICgh
aXNVUkxTbGFzaChzcGVjW2lubmVyUGFyc2VkLnBhdGguYmVnaW4oKV0pKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQgaW5uZXJQYXRoRW5kID0gaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpICsg
MTsgLy8gc2tpcCB0aGUgbGVhZGluZyBzbGFzaAorICAgIHdoaWxlIChpbm5lclBhdGhFbmQgPCBz
cGVjTGVuZ3RoICYmICFpc1VSTFNsYXNoKHNwZWNbaW5uZXJQYXRoRW5kXSkpCisgICAgICAgICsr
aW5uZXJQYXRoRW5kOworICAgIHBhcnNlZC5wYXRoLnNldEJlZ2luKGlubmVyUGF0aEVuZCk7Cisg
ICAgaW50IG5ld0lubmVyUGF0aExlbmd0aCA9IGlubmVyUGF0aEVuZCAtIGlubmVyUGFyc2VkLnBh
dGguYmVnaW4oKTsKKyAgICBwYXJzZWQucGF0aC5zZXRMZW5ndGgoaW5uZXJQYXJzZWQucGF0aC5s
ZW5ndGgoKSAtIG5ld0lubmVyUGF0aExlbmd0aCk7CisgICAgaW5uZXJQYXJzZWQucGF0aC5zZXRM
ZW5ndGgobmV3SW5uZXJQYXRoTGVuZ3RoKTsKKyAgICBwYXJzZWQuc2V0SW5uZXJVUkxTZWdtZW50
cyhpbm5lclBhcnNlZCk7Cit9CisKKy8vIEluaXRpYWxpemVzIGEgcGF0aCBVUkwgd2hpY2ggaXMg
bWVyZWx5IGEgc2NoZW1lIGZvbGxvd2VkIGJ5IGEgcGF0aC4gRXhhbXBsZXMKKy8vIGluY2x1ZGUg
ImFib3V0OmZvbyIgYW5kICJqYXZhc2NyaXB0OmFsZXJ0KCdiYXInKTsiCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBkb1BhcnNlUGF0aFVSTChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICAv
LyBHZXQgdGhlIG5vbi1wYXRoIGFuZCBub24tc2NoZW1lIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9m
IHRoZSB3YXksIHdlIG5ldmVyCisgICAgLy8gdXNlIHRoZW0uCisgICAgcGFyc2VkLnVzZXJuYW1l
LnJlc2V0KCk7CisgICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7CisgICAgcGFyc2VkLmhvc3Qu
cmVzZXQoKTsKKyAgICBwYXJzZWQucG9ydC5yZXNldCgpOworICAgIHBhcnNlZC5xdWVyeS5yZXNl
dCgpOworICAgIHBhcnNlZC5mcmFnbWVudC5yZXNldCgpOworCisgICAgLy8gU3RyaXAgbGVhZGlu
ZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBiZWdp
biA9IDA7CisgICAgdHJpbVVSTChzcGVjLCAmYmVnaW4sICZzcGVjTGVuZ3RoKTsKKworICAgIC8v
IEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBvbmx5IHdoaXRlc3BhY2Ug
b3IgY29udHJvbCBjaGFycy4KKyAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgeworICAgICAg
ICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUsIHdpdGgg
dGhlIHBhdGggYmVpbmcgZXZlcnl0aGluZyBmb2xsb3dpbmcuIFdlIGFsc28KKyAgICAvLyBoYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1lLgorICAgIGlmIChFeHRyYWN0U2No
ZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAmcGFyc2VkLnNjaGVtZSkpIHsK
KyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVt
ZSBhIHN1YnN0cmluZy4KKyAgICAgICAgcGFyc2VkLnNjaGVtZS5zZXRCZWdpbihwYXJzZWQuc2No
ZW1lLmJlZ2luKCkgKyBiZWdpbik7CisKKyAgICAgICAgLy8gRm9yIGNvbXBhdGFiaWxpdHkgd2l0
aCB0aGUgc3RhbmRhcmQgVVJMIHBhcnNlciwgd2UgdHJlYXQgbm8gcGF0aCBhcworICAgICAgICAv
LyAtMSwgcmF0aGVyIHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9mIDAgKHdlIG5vcm1hbGx5IHdvdWxk
bid0IGNhcmUgc28KKyAgICAgICAgLy8gbXVjaCBmb3IgdGhlc2Ugbm9uLXN0YW5kYXJkIFVSTHMp
LgorICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKKyAg
ICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGFyc2VkLnNjaGVtZS5lbmQo
KSArIDEsIHNwZWNMZW5ndGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHNjaGVtZSBm
b3VuZCwganVzdCBwYXRoLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAg
IHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4sIHNwZWNMZW5ndGgp
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9Q
YXJzZU1haWx0b1VSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwg
VVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsKKwor
ICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMgb2YgdGhlIFVSTCBv
dXQgb2YgdGhlIHdheSwgd2UgbmV2ZXIKKyAgICAvLyB1c2UgdGhlbS4KKyAgICBwYXJzZWQudXNl
cm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICBwYXJzZWQu
aG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7CisgICAgcGFyc2VkLmZyYWdt
ZW50LnJlc2V0KCk7CisgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7IC8vIE1heSB1c2UgdGhpczsg
cmVzZXQgZm9yIGNvbnZlbmllbmNlLgorCisgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5n
IHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBiZWdpbiA9IDA7CisgICAg
dHJpbVVSTChzcGVjLCAmYmVnaW4sICZzcGVjTGVuZ3RoKTsKKworICAgIC8vIEhhbmRsZSBlbXB0
eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBvbmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBj
aGFycy4KKyAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgeworICAgICAgICBwYXJzZWQuc2No
ZW1lLnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpbnQgcGF0aEJlZ2luID0gLTE7CisgICAgaW50IHBhdGhFbmQgPSAt
MTsKKworICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVy
eXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbworICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGVyZSBpcyBubyBzY2hlbWUuCisgICAgaWYgKEV4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBz
cGVjTGVuZ3RoIC0gYmVnaW4sICZwYXJzZWQuc2NoZW1lKSkgeworICAgICAgICAvLyBPZmZzZXQg
dGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgorICAg
ICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2lu
KTsKKworICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSAhPSBzcGVjTGVuZ3RoIC0gMSkg
eworICAgICAgICAgICAgcGF0aEJlZ2luID0gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDE7CisgICAg
ICAgICAgICBwYXRoRW5kID0gc3BlY0xlbmd0aDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE5vIHNjaGVtZSBmb3VuZCwganVzdCBwYXRoLgorICAgICAgICBwYXJzZWQuc2No
ZW1lLnJlc2V0KCk7CisgICAgICAgIHBhdGhCZWdpbiA9IGJlZ2luOworICAgICAgICBwYXRoRW5k
ID0gc3BlY0xlbmd0aDsKKyAgICB9CisKKyAgICAvLyBTcGxpdCBbcGF0aEJlZ2luLCBwYXRoRW5k
KSBpbnRvIGEgcGF0aCArIHF1ZXJ5LgorICAgIGZvciAoaW50IGkgPSBwYXRoQmVnaW47IGkgPCBw
YXRoRW5kOyArK2kpIHsKKyAgICAgICAgaWYgKHNwZWNbaV0gPT0gJz8nKSB7CisgICAgICAgICAg
ICBwYXJzZWQucXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgcGF0aEVuZCk7
CisgICAgICAgICAgICBwYXRoRW5kID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gRm9yIGNvbXBhdGFiaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJM
IHBhcnNlciwgdHJlYXQgbm8gcGF0aCBhcworICAgIC8vIC0xLCByYXRoZXIgdGhhbiBoYXZpbmcg
YSBsZW5ndGggb2YgMAorICAgIGlmIChwYXRoQmVnaW4gPT0gcGF0aEVuZCkKKyAgICAgICAgcGFy
c2VkLnBhdGgucmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29t
cG9uZW50Ojpmcm9tUmFuZ2UocGF0aEJlZ2luLCBwYXRoRW5kKTsKK30KKworLy8gQ29udmVydHMg
YSBwb3J0IG51bWJlciBpbiBhIHN0cmluZyB0byBhbiBpbnRlZ2VyLiBXZSdkIGxpa2UgdG8ganVz
dCBjYWxsCisvLyBzc2NhbmYgYnV0IG91ciBpbnB1dCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCB3
aGljaCBzc2NhbmYgcmVxdWlyZXMuIEluc3RlYWQsCisvLyB3ZSBjb3B5IHRoZSBkaWdpdHMgdG8g
YSBzbWFsbCBzdGFjayBidWZmZXIgKHNpbmNlIHdlIGtub3cgdGhlIG1heGltdW0gbnVtYmVyCisv
LyBvZiBkaWdpdHMgaW4gYSB2YWxpZCBwb3J0IG51bWJlcikgdGhhdCB3ZSBjYW4gbnVsbCB0ZXJt
aW5hdGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW50IGRvUGFyc2VQb3J0
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50
KQoreworICAgIC8vIEVhc3kgc3VjY2VzcyBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gcG9ydC4KKyAg
ICBjb25zdCBpbnQga01heERpZ2l0cyA9IDU7CisgICAgaWYgKCFjb21wb25lbnQuaXNOb25FbXB0
eSgpKQorICAgICAgICByZXR1cm4gUE9SVF9VTlNQRUNJRklFRDsKKworICAgIC8vIFNraXAgb3Zl
ciBhbnkgbGVhZGluZyAwcy4KKyAgICBVUkxDb21wb25lbnQgZGlnaXRDb21wb25lbnQoY29tcG9u
ZW50LmVuZCgpLCAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudC5sZW5ndGgo
KTsgaSsrKSB7CisgICAgICAgIGlmIChzcGVjW2NvbXBvbmVudC5iZWdpbigpICsgaV0gIT0gJzAn
KSB7CisgICAgICAgICAgICBkaWdpdENvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGNvbXBvbmVudC5iZWdpbigpICsgaSwgY29tcG9uZW50LmVuZCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZGlnaXRDb21wb25lbnQubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiAwOyAvLyBBbGwgZGlnaXRzIHdlcmUgMC4KKworICAgIC8vIFZlcmlm
eSB3ZSBkb24ndCBoYXZlIHRvbyBtYW55IGRpZ2l0cyAod2UnbGwgYmUgY29weWluZyB0byBvdXIg
YnVmZmVyIHNvCisgICAgLy8gd2UgbmVlZCB0byBkb3VibGUtY2hlY2spLgorICAgIGlmIChkaWdp
dENvbXBvbmVudC5sZW5ndGgoKSA+IGtNYXhEaWdpdHMpCisgICAgICAgIHJldHVybiBQT1JUX0lO
VkFMSUQ7CisKKyAgICAvLyBDb3B5IHZhbGlkIGRpZ2l0cyB0byB0aGUgYnVmZmVyLgorICAgIGNo
YXIgZGlnaXRzW2tNYXhEaWdpdHMgKyAxXTsgLy8gKzEgZm9yIG51bGwgdGVybWluYXRvcgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZGlnaXRDb21wb25lbnQubGVuZ3RoKCk7IGkrKykgeworICAg
ICAgICBDaGFyYWN0ZXJUeXBlIGNoID0gc3BlY1tkaWdpdENvbXBvbmVudC5iZWdpbigpICsgaV07
CisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGNoKSkgeworICAgICAgICAgICAgLy8gSW52YWxp
ZCBwb3J0IGRpZ2l0LCBmYWlsLgorICAgICAgICAgICAgcmV0dXJuIFBPUlRfSU5WQUxJRDsKKyAg
ICAgICAgfQorICAgICAgICBkaWdpdHNbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihjaCk7CisgICAg
fQorCisgICAgLy8gTnVsbC10ZXJtaW5hdGUgdGhlIHN0cmluZyBhbmQgY29udmVydCB0byBpbnRl
Z2VyLiBTaW5jZSB3ZSBndWFyYW50ZWUKKyAgICAvLyBvbmx5IGRpZ2l0cywgYXRvaSdzIGxhY2sg
b2YgZXJyb3IgaGFuZGxpbmcgaXMgT0suCisgICAgZGlnaXRzW2RpZ2l0Q29tcG9uZW50Lmxlbmd0
aCgpXSA9IDA7CisgICAgaW50IHBvcnQgPSBhdG9pKGRpZ2l0cyk7CisgICAgaWYgKHBvcnQgPiA2
NTUzNSkKKyAgICAgICAgcmV0dXJuIFBPUlRfSU5WQUxJRDsgLy8gT3V0IG9mIHJhbmdlLgorICAg
IHJldHVybiBwb3J0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9p
ZCBkb0V4dHJhY3RGaWxlTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCYgZmlsZU5hbWUpCit7CisgICAgLy8gSGFuZGxl
IGVtcHR5IHBhdGhzOiB0aGV5IGhhdmUgbm8gZmlsZSBuYW1lcy4KKyAgICBpZiAoIXBhdGguaXNO
b25FbXB0eSgpKSB7CisgICAgICAgIGZpbGVOYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTZWFyY2ggYmFja3dhcmRzIGZvciBhIHBhcmFtZXRl
ciwgd2hpY2ggaXMgYSBub3JtYWxseSB1bnVzZWQgZmllbGQgaW4gYQorICAgIC8vIFVSTCBkZWxp
bWl0ZWQgYnkgYSBzZW1pY29sb24uIFdlIHBhcnNlIHRoZSBwYXJhbWV0ZXIgYXMgcGFydCBvZiB0
aGUKKyAgICAvLyBwYXRoLCBidXQgaGVyZSwgd2UgZG9uJ3Qgd2FudCB0byBjb3VudCBpdC4gVGhl
IGxhc3Qgc2VtaWNvbG9uIGlzIHRoZQorICAgIC8vIHBhcmFtZXRlci4gVGhlIHBhdGggc2hvdWxk
IHN0YXJ0IHdpdGggYSBzbGFzaCwgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjaworICAgIC8vIHRo
ZSBmaXJzdCBvbmUuCisgICAgaW50IGZpbGVFbmQgPSBwYXRoLmVuZCgpOworICAgIGZvciAoaW50
IGkgPSBwYXRoLmVuZCgpIC0gMTsgaSA+IHBhdGguYmVnaW4oKTsgLS1pKSB7CisgICAgICAgIGlm
IChzcGVjW2ldID09ICc7JykgeworICAgICAgICAgICAgZmlsZUVuZCA9IGk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyBzZWFyY2ggYmFja3dhcmRz
IGZyb20gdGhlIGZpbGVuYW1lIGVuZCB0byB0aGUgcHJldmlvdXMgc2xhc2gKKyAgICAvLyB0byBm
aW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVuYW1lLgorICAgIGZvciAoaW50IGkgPSBmaWxl
RW5kIC0gMTsgaSA+PSBwYXRoLmJlZ2luKCk7IC0taSkgeworICAgICAgICBpZiAoaXNVUkxTbGFz
aChzcGVjW2ldKSkgeworICAgICAgICAgICAgLy8gRmlsZSBuYW1lIGlzIGV2ZXJ5dGhpbmcgZm9s
bG93aW5nIHRoaXMgY2hhcmFjdGVyIHRvIHRoZSBlbmQKKyAgICAgICAgICAgIGZpbGVOYW1lID0g
VVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGZpbGVFbmQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm8gc2xhc2ggZm91bmQsIHRoaXMgbWVh
bnMgdGhlIGlucHV0IHdhcyBkZWdlbmVyYXRlIChnZW5lcmFsbHkgcGF0aHMKKyAgICAvLyB3aWxs
IHN0YXJ0IHdpdGggYSBzbGFzaCkuIExldCdzIGNhbGwgZXZlcnl0aGluZyB0aGUgZmlsZSBuYW1l
LgorICAgIGZpbGVOYW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGF0aC5iZWdpbigpLCBm
aWxlRW5kKTsKKyAgICByZXR1cm47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Citib29sIGRvRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQ29tcG9uZW50JiBrZXksIFVSTENvbXBvbmVudCYg
dmFsdWUpCit7CisgICAgaWYgKCFxdWVyeS5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGludCBzdGFydCA9IHF1ZXJ5LmJlZ2luKCk7CisgICAgaW50IGN1cnJlbnQg
PSBzdGFydDsKKyAgICBpbnQgZW5kID0gcXVlcnkuZW5kKCk7CisKKyAgICAvLyBXZSBhc3N1bWUg
dGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgImtleSIg
YW5kIHdlCisgICAgLy8gc2tpcCB0byB0aGUgZW5kIG9mIGl0LgorICAgIGtleS5zZXRCZWdpbihj
dXJyZW50KTsKKyAgICB3aGlsZSAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcm
JyAmJiBzcGVjW2N1cnJlbnRdICE9ICc9JykKKyAgICAgICAgKytjdXJyZW50OworICAgIGtleS5z
ZXRMZW5ndGgoY3VycmVudCAtIGtleS5iZWdpbigpKTsKKworICAgIC8vIFNraXAgdGhlIHNlcGFy
YXRvciBhZnRlciB0aGUga2V5IChpZiBhbnkpLgorICAgIGlmIChjdXJyZW50IDwgZW5kICYmIHNw
ZWNbY3VycmVudF0gPT0gJz0nKQorICAgICAgICArK2N1cnJlbnQ7CisKKyAgICAvLyBGaW5kIHRo
ZSB2YWx1ZSBwYXJ0LgorICAgIHZhbHVlLnNldEJlZ2luKGN1cnJlbnQpOworICAgIHdoaWxlIChj
dXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gIT0gJyYnKQorICAgICAgICArK2N1cnJlbnQ7
CisgICAgdmFsdWUuc2V0TGVuZ3RoKGN1cnJlbnQgLSB2YWx1ZS5iZWdpbigpKTsKKworICAgIC8v
IEZpbmFsbHkgc2tpcCB0aGUgbmV4dCBzZXBhcmF0b3IgaWYgYW55CisgICAgaWYgKGN1cnJlbnQg
PCBlbmQgJiYgc3BlY1tjdXJyZW50XSA9PSAnJicpCisgICAgICAgICsrY3VycmVudDsKKworICAg
IC8vIFNhdmUgdGhlIG5ldyBxdWVyeQorICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworYm9vbCBFeHRyYWN0U2NoZW1lKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJM
Q29tcG9uZW50KiBzY2hlbWUpCit7CisgICAgcmV0dXJuIGRvRXh0cmFjdFNjaGVtZSh1cmwsIHVy
bExlbmd0aCwgKnNjaGVtZSk7Cit9CisKK2Jvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBVQ2hhciog
dXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSkKK3sKKyAgICByZXR1cm4g
ZG9FeHRyYWN0U2NoZW1lKHVybCwgdXJsTGVuZ3RoLCAqc2NoZW1lKTsKK30KKworLy8gVGhpcyBo
YW5kbGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXkgYmUgYW4gYXV0aG9yaXR5IHRlcm1pbmF0b3IsIGlu
Y2x1ZGluZworLy8gYmFja3NsYXNoLiBGb3Igc3BlY2lhbCBiYWNrc2xhc2ggaGFuZGxpbmcgc2Vl
IERvUGFyc2VBZnRlclNjaGVtZS4KK2Jvb2wgSXNBdXRob3JpdHlUZXJtaW5hdG9yKFVDaGFyIGNo
YXJhY3RlcikKK3sKKyAgICByZXR1cm4gaXNVUkxTbGFzaChjaGFyYWN0ZXIpIHx8IGNoYXJhY3Rl
ciA9PSAnPycgfHwgY2hhcmFjdGVyID09ICcjJzsKK30KKwordm9pZCBFeHRyYWN0RmlsZU5hbWUo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCog
ZmlsZU5hbWUpCit7CisgICAgZG9FeHRyYWN0RmlsZU5hbWUodXJsLCBwYXRoLCAqZmlsZU5hbWUp
OworfQorCit2b2lkIEV4dHJhY3RGaWxlTmFtZShjb25zdCBVQ2hhciogdXJsLCBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmlsZU5hbWUpCit7CisgICAgZG9FeHRyYWN0
RmlsZU5hbWUodXJsLCBwYXRoLCAqZmlsZU5hbWUpOworfQorCitib29sIEV4dHJhY3RRdWVyeUtl
eVZhbHVlKGNvbnN0IGNoYXIqIHVybCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50
KiBrZXksIFVSTENvbXBvbmVudCogdmFsdWUpCit7CisgICAgcmV0dXJuIGRvRXh0cmFjdFF1ZXJ5
S2V5VmFsdWUodXJsLCAqcXVlcnksICprZXksICp2YWx1ZSk7Cit9CisKK2Jvb2wgRXh0cmFjdFF1
ZXJ5S2V5VmFsdWUoY29uc3QgVUNoYXIqIHVybCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29t
cG9uZW50KiBrZXksICBVUkxDb21wb25lbnQqIHZhbHVlKQoreworICAgIHJldHVybiBkb0V4dHJh
Y3RRdWVyeUtleVZhbHVlKHVybCwgKnF1ZXJ5LCAqa2V5LCAqdmFsdWUpOworfQorCit2b2lkIFBh
cnNlQXV0aG9yaXR5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwg
VVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwgVVJMQ29tcG9u
ZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKQoreworICAgIGRvUGFyc2VB
dXRob3JpdHkoc3BlYywgYXV0aCwgKnVzZXJuYW1lLCAqcGFzc3dvcmQsICpob3N0bmFtZSwgKnBv
cnROdW1iZXIpOworfQorCit2b2lkIFBhcnNlQXV0aG9yaXR5KGNvbnN0IFVDaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIGF1dGgsIFVSTENvbXBvbmVudCogdXNlcm5hbWUsIFVSTENvbXBv
bmVudCogcGFzc3dvcmQsIFVSTENvbXBvbmVudCogaG9zdG5hbWUsIFVSTENvbXBvbmVudCogcG9y
dE51bWJlcikKK3sKKyAgICBkb1BhcnNlQXV0aG9yaXR5KHNwZWMsIGF1dGgsICp1c2VybmFtZSwg
KnBhc3N3b3JkLCAqaG9zdG5hbWUsICpwb3J0TnVtYmVyKTsKK30KKworaW50IFBhcnNlUG9ydChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCkKK3sKKyAgICByZXR1cm4g
ZG9QYXJzZVBvcnQodXJsLCBwb3J0KTsKK30KKworaW50IFBhcnNlUG9ydChjb25zdCBVQ2hhciog
dXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQpCit7CisgICAgcmV0dXJuIGRvUGFyc2VQb3J0
KHVybCwgcG9ydCk7Cit9CisKK3ZvaWQgUGFyc2VTdGFuZGFyZFVSTChjb25zdCBjaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgZG9QYXJzZVN0YW5k
YXJkVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9pZCBQYXJzZVN0YW5kYXJk
VVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQp
Cit7CisgICAgZG9QYXJzZVN0YW5kYXJkVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30K
Kwordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxT
ZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VQYXRoVVJMKHVybCwgdXJsTGVuZ3RoLCAq
cGFyc2VkKTsKK30KKwordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlUGF0aFVSTCh1cmws
IHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQgUGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0
IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBk
b1BhcnNlRmlsZVN5c3RlbVVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQg
UGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNl
Z21lbnRzKiBwYXJzZWQpCit7CisgICAgZG9QYXJzZUZpbGVTeXN0ZW1VUkwodXJsLCB1cmxMZW5n
dGgsICpwYXJzZWQpOworfQorCit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIHVybCwg
aW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlTWFpbHRv
VVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9pZCBQYXJzZU1haWx0b1VSTChj
b25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQorewor
ICAgIGRvUGFyc2VNYWlsdG9VUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOworfQorCit2b2lk
IHBhcnNlUGF0aEludGVybmFsKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
cGF0aCwgVVJMQ29tcG9uZW50KiBmaWxlcGF0aCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29t
cG9uZW50KiBmcmFnbWVudCkKK3sKKyAgICBwYXJzZVBhdGgoc3BlYywgcGF0aCwgKmZpbGVwYXRo
LCAqcXVlcnksICpmcmFnbWVudCk7Cit9CisKK3ZvaWQgcGFyc2VQYXRoSW50ZXJuYWwoY29uc3Qg
VUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBmaWxl
cGF0aCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50KiBmcmFnbWVudCkKK3sKKyAg
ICBwYXJzZVBhdGgoc3BlYywgcGF0aCwgKmZpbGVwYXRoLCAqcXVlcnksICpmcmFnbWVudCk7Cit9
CisKK3ZvaWQgUGFyc2VBZnRlclNjaGVtZShjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0
aCwgaW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VB
ZnRlclNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCBhZnRlclNjaGVtZSwgKnBhcnNlZCk7Cit9CisK
K3ZvaWQgUGFyc2VBZnRlclNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgs
IGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlQWZ0
ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJTY2hlbWUsICpwYXJzZWQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJz
ZS5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlODU4
NTI4MmY2MGFkNTE2ODAxMDNlYWUxNzI4OGIxYjM0NTg5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8vIENv
cHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBVUkxQYXJzZV9oCisjZGVm
aW5lIFVSTFBhcnNlX2gKKworI2luY2x1ZGUgIlVSTENvbXBvbmVudC5oIgorI2luY2x1ZGUgIlVS
TFNlZ21lbnRzLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCisjaWYgVVNF
KFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxQYXJzZXIgeworCisv
LyBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIHBhcnNlIHRoZSBn
aXZlbiBVUkwsIGZpbGxpbmcgaW4gYWxsIG9mIHRoZSBzdHJ1Y3R1cmUncworLy8gY29tcG9uZW50
cy4gVGhlc2UgZnVuY3Rpb25zIGNhbiBub3QgZmFpbCwgdGhleSB3aWxsIGFsd2F5cyBkbyB0aGVp
ciBiZXN0CisvLyBhdCBpbnRlcnByZXRpbmcgdGhlIGlucHV0IGdpdmVuLgorLy8KKy8vIFRoZSBz
dHJpbmcgbGVuZ3RoIG9mIHRoZSBVUkwgTVVTVCBiZSBzcGVjaWZpZWQsIHdlIGRvIG5vdCBjaGVj
ayBmb3IgTlVMTHMKKy8vIGF0IGFueSBwb2ludCBpbiB0aGUgcHJvY2VzcywgYW5kIHdpbGwgYWN0
dWFsbHkgaGFuZGxlIGVtYmVkZGVkIE5VTExzLgorLy8KKy8vIElNUE9SVEFOVDogVGhlc2UgZnVu
Y3Rpb25zIGRvIE5PVCBoYW5nIG9uIHRvIHRoZSBnaXZlbiBwb2ludGVyIG9yIGNvcHkgaXQKKy8v
IGluIGFueSB3YXkuIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUgc3RydWN0LgorLy8KKy8vIFRo
ZSA4LWJpdCB2ZXJzaW9ucyByZXF1aXJlIFVURi04IGVuY29kaW5nLgorCisvLyBTdGFuZGFyZFVS
TCBpcyBmb3Igd2hlbiB0aGUgc2NoZW1lIGlzIGtub3duIHRvIGJlIG9uZSB0aGF0IGhhcyBhbgor
Ly8gYXV0aG9yaXR5IChob3N0KSBsaWtlICJodHRwIi4gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBo
YW5kbGUgd2VpcmQgb25lcworLy8gbGlrZSAiYWJvdXQ6IiBhbmQgImphdmFzY3JpcHQ6Iiwgb3Ig
ZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciAiZmlsZToiIFVSTHMuCit2b2lkIFBhcnNlU3RhbmRhcmRV
UkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsK
K3ZvaWQgUGFyc2VTdGFuZGFyZFVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBV
UkxTZWdtZW50cyogcGFyc2VkKTsKKworLy8gUGF0aFVSTCBpcyBmb3Igd2hlbiB0aGUgc2NoZW1l
IGlzIGtub3duIG5vdCB0byBoYXZlIGFuIGF1dGhvcml0eSAoaG9zdCkKKy8vIHNlY3Rpb24gYnV0
IHRoYXQgYXJlbid0IGZpbGUgVVJMcyBlaXRoZXIuIFRoZSBzY2hlbWUgaXMgcGFyc2VkLCBhbmQK
Ky8vIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHNjaGVtZSBpcyBjb25zaWRlcmVkIGFzIHRoZSBwYXRo
LiBUaGlzIGlzIHVzZWQgZm9yCisvLyB0aGluZ3MgbGlrZSAiYWJvdXQ6IiBhbmQgImphdmFzY3Jp
cHQ6Igordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBV
UkxTZWdtZW50cyogcGFyc2VkKTsKK3ZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IFVDaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOworCisvLyBGaWxlVVJMIGlzIGZv
ciBmaWxlIFVSTHMuIFRoZXJlIGFyZSBzb21lIHNwZWNpYWwgcnVsZXMgZm9yIGludGVycHJldGlu
ZworLy8gdGhlc2UuCit2b2lkIFBhcnNlRmlsZVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxM
ZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJzZUZpbGVVUkwoY29uc3QgVUNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIEZpbGVz
eXN0ZW0gVVJMcyBhcmUgc3RydWN0dXJlZCBkaWZmZXJlbnRseSB0aGFuIG90aGVyIFVSTHMuCit2
b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVS
TFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJzZUZpbGVTeXN0ZW1VUkwoY29uc3QgVUNoYXIq
IHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIE1haWx0b1VS
TCBpcyBmb3IgbWFpbHRvOiB1cmxzLiBUaGV5IGFyZSBtYWRlIHVwIHNjaGVtZSxwYXRoLHF1ZXJ5
Cit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJM
U2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IFVDaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOworCisvLyBIZWxwZXIgZnVuY3Rp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKy8vIExvY2F0ZXMgdGhlIHNjaGVtZSBhY2NvcmRpbmcgdG8gdGhlIFVSTCAgcGFy
c2VyJ3MgcnVsZXMuIFRoaXMgZnVuY3Rpb24gaXMKKy8vIGRlc2lnbmVkIHNvIHRoZSBjYWxsZXIg
Y2FuIGZpbmQgdGhlIHNjaGVtZSBhbmQgY2FsbCB0aGUgY29ycmVjdCBJbml0KgorLy8gZnVuY3Rp
b24gYWNjb3JkaW5nIHRvIHRoZWlyIGtub3duIHNjaGVtZSB0eXBlcy4KKy8vCisvLyBJdCBhbHNv
IGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24gb24gdGhlIHNjaGVtZS4KKy8vCisvLyBU
aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNjaGVtZSBpcyBmb3VuZCBhbmQg
d2lsbCBwdXQgdGhlCisvLyBzY2hlbWUncyByYW5nZSBpbnRvICpzY2hlbWUuIEZhbHNlIG1lYW5z
IG5vIHNjaGVtZSBjb3VsZCBiZSBmb3VuZC4gTm90ZQorLy8gdGhhdCBhIFVSTCBiZWdpbm5pbmcg
d2l0aCBhIGNvbG9uIGhhcyBhIHNjaGVtZSwgYnV0IGl0IGlzIGVtcHR5LCBzbyB0aGlzCisvLyBm
dW5jdGlvbiB3aWxsIHJldHVybiB0cnVlIGJ1dCAqc2NoZW1lIHdpbGwgPSAoMCwwKS4KKy8vCisv
LyBUaGUgc2NoZW1lIGlzIGZvdW5kIGJ5IHNraXBwaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFy
YWN0ZXJzIGF0IHRoZQorLy8gYmVnaW5uaW5nLCBhbmQgdGFraW5nIGV2ZXJ5dGhpbmcgZnJvbSB0
aGVyZSB0byB0aGUgZmlyc3QgY29sb24gdG8gYmUgdGhlCisvLyBzY2hlbWUuIFRoZSBjaGFyYWN0
ZXIgYXQgc2NoZW1lLmVuZCgpIHdpbGwgYmUgdGhlIGNvbG9uICh3ZSBtYXkgZW5oYW5jZQorLy8g
dGhpcyB0byBoYW5kbGUgZnVsbCB3aWR0aCBjb2xvbnMgb3Igc29tZXRoaW5nLCBzbyBkb24ndCBj
b3VudCBvbiB0aGUKKy8vIGFjdHVhbCBjaGFyYWN0ZXIgdmFsdWUpLiBUaGUgY2hhcmFjdGVyIGF0
IHNjaGVtZS5lbmQoKSsxIHdpbGwgYmUgdGhlCisvLyBiZWdpbm5pbmcgb2YgdGhlIHJlc3Qgb2Yg
dGhlIFVSTCwgYmUgaXQgdGhlIGF1dGhvcml0eSBvciB0aGUgcGF0aCAob3IgdGhlCisvLyBlbmQg
b2YgdGhlIHN0cmluZykuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTgg
ZW5jb2RpbmcuCitib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVu
Z3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSk7Citib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgVUNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50KiBzY2hlbWUpOworCisvLyBSZXR1
cm5zIHRydWUgaWYgY2ggaXMgYSBjaGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzIHRoZSBhdXRob3Jp
dHkgc2VnbWVudCBvZiBhIFVSTC4KK2Jvb2wgSXNBdXRob3JpdHlUZXJtaW5hdG9yKFVDaGFyKTsK
KworLy8gRG9lcyBhIGJlc3QgZWZmb3J0IHBhcnNlIG9mIGlucHV0IHxzcGVjfCwgaW4gcmFuZ2Ug
fGF1dGh8LiBJZiBhIHBhcnRpY3VsYXIKKy8vIGNvbXBvbmVudCBpcyBub3QgZm91bmQsIGl0IHdp
bGwgYmUgc2V0IHRvIGludmFsaWQuCit2b2lkIFBhcnNlQXV0aG9yaXR5KGNvbnN0IGNoYXIqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwKKyAgICAgICAgICAgICAgICAgICAgVVJMQ29t
cG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwgVVJMQ29tcG9uZW50KiBo
b3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKTsKK3ZvaWQgUGFyc2VBdXRob3JpdHko
Y29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwKKyAgICAgICAgICAg
ICAgICAgICAgVVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwg
VVJMQ29tcG9uZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKTsKKworLy8g
Q29tcHV0ZXMgdGhlIGludGVnZXIgcG9ydCB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBwb3J0IGNvbXBv
bmVudC4gVGhlIHBvcnQKKy8vIGNvbXBvbmVudCBzaG91bGQgaGF2ZSBiZWVuIGlkZW50aWZpZWQg
Ynkgb25lIG9mIHRoZSBpbml0IGZ1bmN0aW9ucyBvbgorLy8gfFBhcnNlZHwgZm9yIHRoZSBnaXZl
biBpbnB1dCB1cmwuCisvLworLy8gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEgcG9zaXRpdmUg
aW50ZWdlciBiZXR3ZWVuIDAgYW5kIDY0Sywgb3Igb25lIG9mCisvLyB0aGUgdHdvIHNwZWNpYWwg
dmFsdWVzIGJlbG93LgorZW51bSBTcGVjaWFsUG9ydCB7IFBPUlRfVU5TUEVDSUZJRUQgPSAtMSwg
UE9SVF9JTlZBTElEID0gLTIgfTsKK2ludCBQYXJzZVBvcnQoY29uc3QgY2hhciogdXJsLCBjb25z
dCBVUkxDb21wb25lbnQmIHBvcnQpOworaW50IFBhcnNlUG9ydChjb25zdCBVQ2hhciogdXJsLCBj
b25zdCBVUkxDb21wb25lbnQmIHBvcnQpOworCisvLyBFeHRyYWN0cyB0aGUgcmFuZ2Ugb2YgdGhl
IGZpbGUgbmFtZSBpbiB0aGUgZ2l2ZW4gdXJsLiBUaGUgcGF0aCBtdXN0CisvLyBhbHJlYWR5IGhh
dmUgYmVlbiBjb21wdXRlZCBieSB0aGUgcGFyc2UgZnVuY3Rpb24sIGFuZCB0aGUgbWF0Y2hpbmcg
VVJMCisvLyBhbmQgZXh0cmFjdGVkIHBhdGggYXJlIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24u
IFRoZSBmaWxlbmFtZSBpcworLy8gZGVmaW5lZCBhcyBiZWluZyBldmVyeXRoaW5nIGZyb20gdGhl
IGxhc3Qgc2xhc2gvYmFja3NsYXNoIG9mIHRoZSBwYXRoCisvLyB0byB0aGUgZW5kIG9mIHRoZSBw
YXRoLgorLy8KKy8vIFRoZSBmaWxlIG5hbWUgd2lsbCBiZSBlbXB0eSBpZiB0aGUgcGF0aCBpcyBl
bXB0eSBvciB0aGVyZSBpcyBub3RoaW5nCisvLyBmb2xsb3dpbmcgdGhlIGxhc3Qgc2xhc2guCisv
LworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCit2b2lkIEV4
dHJhY3RGaWxlTmFtZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwg
VVJMQ29tcG9uZW50KiBmaWxlTmFtZSk7Cit2b2lkIEV4dHJhY3RGaWxlTmFtZShjb25zdCBVQ2hh
ciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmlsZU5hbWUp
OworCisvLyBFeHRyYWN0IHRoZSBmaXJzdCBrZXkvdmFsdWUgZnJvbSB0aGUgcmFuZ2UgZGVmaW5l
ZCBieSB8KnF1ZXJ5fC4gVXBkYXRlcworLy8gfCpxdWVyeXwgdG8gc3RhcnQgYXQgdGhlIGVuZCBv
ZiB0aGUgZXh0cmFjdGVkIGtleS92YWx1ZSBwYWlyLiBUaGlzIGlzCisvLyBkZXNpZ25lZCBmb3Ig
dXNlIGluIGEgbG9vcDogeW91IGNhbiBrZWVwIGNhbGxpbmcgaXQgd2l0aCB0aGUgc2FtZSBxdWVy
eQorLy8gb2JqZWN0IGFuZCBpdCB3aWxsIGl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgaW4gdGhlIHF1
ZXJ5LgorLy8KKy8vIFNvbWUga2V5L3ZhbHVlIHBhaXJzIG1heSBoYXZlIHRoZSBrZXksIHRoZSB2
YWx1ZSwgb3IgYm90aCBiZSBlbXB0eSAoZm9yCisvLyBleGFtcGxlLCB0aGUgcXVlcnkgc3RyaW5n
ICI/JiIpLiBUaGVzZSB3aWxsIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgYW4gZW1wdHkKKy8vIGxh
c3QgcGFyYW1ldGVyICJmb28uY29tPyIgb3IgZm9vLmNvbT9hJiIgd2lsbCBub3QgYmUgcmV0dXJu
ZWQsIHRoaXMgY2FzZQorLy8gaXMgdGhlIHNhbWUgYXMgImRvbmUuIgorLy8KKy8vIFRoZSBpbml0
aWFsIHF1ZXJ5IGNvbXBvbmVudCBzaG91bGQgbm90IGluY2x1ZGUgdGhlICc/JyAodGhpcyBpcyB0
aGUgZGVmYXVsdAorLy8gZm9yIHBhcnNlZCBVUkxzKS4KKy8vCisvLyBJZiBubyBrZXkvdmFsdWUg
YXJlIGZvdW5kIHwqa2V5fCBhbmQgfCp2YWx1ZXwgd2lsbCBiZSB1bmNoYW5nZWQgYW5kIGl0IHdp
bGwKKy8vIHJldHVybiBmYWxzZS4KK2Jvb2wgRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgY2hh
ciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGtleSwgVVJMQ29tcG9u
ZW50KiB2YWx1ZSk7Citib29sIEV4dHJhY3RRdWVyeUtleVZhbHVlKGNvbnN0IFVDaGFyKiB1cmws
IFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCoga2V5LCBVUkxDb21wb25lbnQqIHZh
bHVlKTsKKworfSAvLyBuYW1lc3BhY2UgVVJMUGFyc2VyCisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVSTFBhcnNlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VGaWxlLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMUGFyc2VGaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWY2YmRjODk0OTZlZWQ4
ZmYxOThiOTk1M2U1ZmY3ZjMzMzFmMTVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwCkBAIC0wLDAgKzEsMjQ5IEBACisvLyBDb3B5cmln
aHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAy
MDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
Ky8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxQYXJzZS5oIgorCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUgIlVSTFBhcnNl
SW50ZXJuYWwuaCIKKworLy8gSW50ZXJlc3RpbmcgSUUgZmlsZTppc21zLi4uCisvLworLy8gIElO
UFVUICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVAorLy8gID09PT09PT09PT09PT09PT09PT09
PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIGZpbGU6L2Zvby9iYXIg
ICAgICAgICAgICAgIGZpbGU6Ly8vZm9vL2JhcgorLy8gICAgICBUaGUgcmVzdWx0IGhlcmUgc2Vl
bXMgdG90YWxseSBpbnZhbGlkIT8hPyBUaGlzIGlzbid0IFVOQy4KKy8vCisvLyAgZmlsZTovCisv
LyAgZmlsZTovLyBvciBhbnkgb3RoZXIgbnVtYmVyIG9mIHNsYXNoZXMKKy8vICAgICAgSUU2IGRv
ZXNuJ3QgZG8gYW55dGhpbmcgYXQgYWxsIGlmIHlvdSBjbGljayBvbiB0aGlzIGxpbmsuIE5vIGVy
cm9yOgorLy8gICAgICBub3RoaW5nLiBJRTYncyBoaXN0b3J5IHN5c3RlbSBzZWVtcyB0byBhbHdh
eXMgY29sb3IgdGhpcyBsaW5rLCBzbyBJJ20KKy8vICAgICAgZ3Vlc3NpbmcgdGhhdCBpdCBtYXBz
IGludGVybmFsbHkgdG8gdGhlIGVtcHR5IFVSTC4KKy8vCisvLyAgQzpcICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsZTovLy9DOi8KKy8vICAgICAgV2hlbiBvbiBhIGZpbGU6IFVSTCBzb3VyY2Ug
cGFnZSwgdGhpcyBsaW5rIHdpbGwgd29yay4gV2hlbiBvdmVyIEhUVFAsCisvLyAgICAgIHRoZSBm
aWxlOiBVUkwgd2lsbCBhcHBlYXIgaW4gdGhlIHN0YXR1cyBiYXIgYnV0IHRoZSBsaW5rIHdpbGwg
bm90IHdvcmsKKy8vICAgICAgKHNlY3VyaXR5IHJlc3RyaWN0aW9uIGZvciBhbGwgZmlsZSBVUkxz
KS4KKy8vCisvLyAgZmlsZTpmb28vICAgICAgICAgICAgICAgICAgZmlsZTpmb28vICAgICAoaW52
YWxpZD8hPyE/KQorLy8gIGZpbGU6L2Zvby8gICAgICAgICAgICAgICAgIGZpbGU6Ly8vZm9vLyAg
KGludmFsaWQ/IT8hPykKKy8vICBmaWxlOi8vZm9vLyAgICAgICAgICAgICAgICBmaWxlOi8vZm9v
LyAgIChVTkMgdG8gc2VydmVyICJmb28iKQorLy8gIGZpbGU6Ly8vZm9vLyAgICAgICAgICAgICAg
IGZpbGU6Ly8vZm9vLyAgKGludmFsaWQsIHNlZW1zIHRvIGJlIGEgZmlsZSkKKy8vICBmaWxlOi8v
Ly9mb28vICAgICAgICAgICAgICBmaWxlOi8vZm9vLyAgIChVTkMgdG8gc2VydmVyICJmb28iKQor
Ly8gICAgICBBbnkgbW9yZSB0aGFuIGZvdXIgc2xhc2hlcyBpcyBhbHNvIHRyZWF0ZWQgYXMgVU5D
LgorLy8KKy8vICBmaWxlOkM6LyAgICAgICAgICAgICAgICAgICBmaWxlOi8vQzovCisvLyAgZmls
ZTovQzovICAgICAgICAgICAgICAgICAgZmlsZTovL0M6LworLy8gICAgICBUaGUgbnVtYmVyIG9m
IHNsYXNoZXMgYWZ0ZXIgImZpbGU6IiBkb24ndCBtYXR0ZXIgaWYgdGhlIHRoaW5nIGZvbGxvd2lu
ZworLy8gICAgICBpdCBsb29rcyBsaWtlIGFuIGFic29sdXRlIGRyaXZlIHBhdGguIEFsc28sIHNs
YXNoZXMgYW5kIGJhY2tzbGFzaGVzIGFyZQorLy8gICAgICBlcXVhbGx5IHZhbGlkIGhlcmUuCisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNl
ciB7CisKK25hbWVzcGFjZSB7CisKKy8vIEEgc3ViY29tcG9uZW50IG9mIERvSW5pdEZpbGVVUkws
IHRoZSBpbnB1dCBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBhIFVOQworLy8gcGF0aCBuYW1l
LCB3aXRoIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBzbGFzaGVz
IGZvbGxvd2luZworLy8gdGhlIHNjaGVtZSBnaXZlbiBpbiB8YWZ0ZXJTbGFzaGVzfC4gVGhpcyB3
aWxsIGluaXRpYWxpemUgdGhlIGhvc3QsIHBhdGgsCisvLyBxdWVyeSwgYW5kIHJlZiwgYW5kIGxl
YXZlIHRoZSBvdGhlciBvdXRwdXQgY29tcG9uZW50cyB1bnRvdWNoZWQKKy8vIChEb0luaXRGaWxl
VVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Cit2b2lkIERvUGFyc2VVTkMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IGFmdGVy
U2xhc2hlcywgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgaW50
IG5leHRTbGFzaCA9IGZpbmROZXh0U2xhc2goc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3Ro
KTsKKyAgICBpZiAobmV4dFNsYXNoID09IHNwZWNMZW5ndGgpIHsKKyAgICAgICAgLy8gTm8gYWRk
aXRpb25hbCBzbGFzaCBmb3VuZCwgYXMgaW4gImZpbGU6Ly9mb28iLCB0cmVhdCB0aGUgdGV4dCBh
cyB0aGUKKyAgICAgICAgLy8gaG9zdCB3aXRoIG5vIHBhdGggKHRoaXMgd2lsbCBlbmQgdXAgYmVp
bmcgVU5DIHRvIHNlcnZlciAiZm9vIikuCisgICAgICAgIGludCBob3N0TGVuZ3RoID0gc3BlY0xl
bmd0aCAtIGFmdGVyU2xhc2hlczsKKyAgICAgICAgaWYgKGhvc3RMZW5ndGgpCisgICAgICAgICAg
ICBwYXJzZWQtPmhvc3QgPSBVUkxDb21wb25lbnQoYWZ0ZXJTbGFzaGVzLCBob3N0TGVuZ3RoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgICAg
IHBhcnNlZC0+cGF0aC5yZXNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgT1Mo
V0lORE9XUykKKyAgICAvLyBTZWUgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtl
IGEgcGF0aCBmb2xsb3dpbmcgdGhlIGZpcnN0CisgICAgLy8gY29tcG9uZW50LiBBcyBpbiAiZmls
ZTovL2xvY2FsaG9zdC9jOi8iLCB3ZSBnZXQgImM6LyIgb3V0LiBXZSB3YW50IHRvCisgICAgLy8g
dHJlYXQgdGhpcyBhcyBhIGhhdmluZyBubyBob3N0IGJ1dCB0aGUgcGF0aCBnaXZlbi4gV29ya3Mg
b24gV2luZG93cyBvbmx5LgorICAgIGlmIChkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNwZWMs
IG5leHRTbGFzaCArIDEsIHNwZWNMZW5ndGgpKSB7CisgICAgICAgIHBhcnNlZC0+aG9zdC5yZXNl
dCgpOworICAgICAgICBwYXJzZVBhdGhJbnRlcm5hbChzcGVjLCBNYWtlUmFuZ2UobmV4dFNsYXNo
LCBzcGVjTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlZC0+cGF0aCwg
JnBhcnNlZC0+cXVlcnksICZwYXJzZWQtPnJlZik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIC8vIE90aGVyd2lzZSwgZXZlcnl0aGluZyB1cCB1bnRpbCB0aGF0IGZpcnN0
IHNsYXNoIHdlIGZvdW5kIGlzIHRoZSBob3N0IG5hbWUsCisgICAgLy8gd2hpY2ggd2lsbCBlbmQg
dXAgYmVpbmcgdGhlIFVOQyBob3N0LiBGb3IgZXhhbXBsZSAiZmlsZTovL2Zvby9iYXIudHh0Igor
ICAgIC8vIHdpbGwgZ2V0IGEgc2VydmVyIG5hbWUgb2YgImZvbyIgYW5kIGEgcGF0aCBvZiAiL2Jh
ciIuIExhdGVyLCBvbiBXaW5kb3dzLAorICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
dGhlIGZpbGVuYW1lICJcXGZvb1xiYXIudHh0IiBpbiBwcm9wZXIgVU5DCisgICAgLy8gbm90YXRp
b24uCisgICAgaW50IGhvc3RMZW5ndGggPSBuZXh0U2xhc2ggLSBhZnRlclNsYXNoZXM7CisgICAg
aWYgKGhvc3RMZW5ndGgpCisgICAgICAgIHBhcnNlZC0+aG9zdCA9IFVSTENvbXBvbmVudDo6ZnJv
bVJhbmdlKGFmdGVyU2xhc2hlcywgbmV4dFNsYXNoKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNl
ZC0+aG9zdC5yZXNldCgpOworICAgIGlmIChuZXh0U2xhc2ggPCBzcGVjTGVuZ3RoKSB7CisgICAg
ICAgIHBhcnNlUGF0aEludGVybmFsKHNwZWMsIFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKG5leHRT
bGFzaCwgc3BlY0xlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZWQtPnBh
dGgsICZwYXJzZWQtPnF1ZXJ5LCAmcGFyc2VkLT5mcmFnbWVudCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHBhcnNlZC0+cGF0aC5yZXNldCgpOworfQorCisvLyBBIHN1YmNvbXBvbmVudCBvZiBEb1Bh
cnNlRmlsZVVSTCwgdGhlIGlucHV0IHNob3VsZCBiZSBhIGxvY2FsIGZpbGUsIHdpdGggdGhlCisv
LyBiZWdpbm5pbmcgb2YgdGhlIHBhdGggaW5kaWNhdGVkIGJ5IHRoZSBpbmRleCBpbiB8cGF0aEJl
Z2lufC4gVGhpcyB3aWxsCisvLyBpbml0aWFsaXplIHRoZSBob3N0LCBwYXRoLCBxdWVyeSwgYW5k
IHJlZiwgYW5kIGxlYXZlIHRoZSBvdGhlciBvdXRwdXQKKy8vIGNvbXBvbmVudHMgdW50b3VjaGVk
IChEb0luaXRGaWxlVVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Cit2b2lkIERvUGFyc2VMb2NhbEZpbGUoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogc3BlYywgaW50IHBhdGhCZWdpbiwgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJz
ZWQpCit7CisgICAgcGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgcGFyc2VQYXRoSW50ZXJuYWwo
c3BlYywgVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGF0aEJlZ2luLCBzcGVjTGVuZ3RoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAmcGFyc2VkLT5wYXRoLCAmcGFyc2VkLT5xdWVyeSwgJnBhcnNl
ZC0+ZnJhZ21lbnQpOworfQorCisvLyBCYWNrZW5kIGZvciB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25z
IHRoYXQgb3BlcmF0ZXMgb24gZWl0aGVyIGNoYXIgdHlwZS4KKy8vIFdlIGFyZSBoYW5kZWQgdGhl
IGNoYXJhY3RlciBhZnRlciB0aGUgImZpbGU6IiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzcGVj
LgorLy8gVXN1YWxseSB0aGlzIGlzIGEgc2xhc2gsIGJ1dCBuZWVkbid0IGJlOyB3ZSBhbGxvdyBw
YXRocyBsaWtlICJmaWxlOmM6XGZvbyIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgordm9pZCBEb1BhcnNlRmlsZVVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3Bl
Y0xlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xlbmd0aCA+
PSAwKTsKKworICAgIC8vIEdldCB0aGUgcGFydHMgd2UgbmV2ZXIgdXNlIGZvciBmaWxlIFVSTHMg
b3V0IG9mIHRoZSB3YXkuCisgICAgcGFyc2VkLT51c2VybmFtZS5yZXNldCgpOworICAgIHBhcnNl
ZC0+cGFzc3dvcmQucmVzZXQoKTsKKyAgICBwYXJzZWQtPnBvcnQucmVzZXQoKTsKKworICAgIC8v
IE1hbnkgb2YgdGhlIGNvZGUgcGF0aHMgZG9uJ3Qgc2V0IHRoZXNlLCBzbyBpdCdzIGNvbnZlbmll
bnQgdG8ganVzdCBjbGVhcgorICAgIC8vIHRoZW0uIFdlJ2xsIHdyaXRlIHRoZW0gaW4gdGhvc2Ug
Y2FzZXMgd2UgbmVlZCB0aGVtLgorICAgIHBhcnNlZC0+cXVlcnkucmVzZXQoKTsKKyAgICBwYXJz
ZWQtPmZyYWdtZW50LnJlc2V0KCk7CisKKyAgICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcg
c3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgaW50IGJlZ2luID0gMDsKKyAgICB0
cmltVVJMKHNwZWMsICZiZWdpbiwgJnNwZWNMZW5ndGgpOworCisgICAgLy8gRmluZCB0aGUgc2No
ZW1lLgorICAgIGludCBudW1TbGFzaGVzOworICAgIGludCBhZnRlclNjaGVtZTsKKyAgICBpbnQg
YWZ0ZXJTbGFzaGVzOworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gU2VlIGhvdyBtYW55IHNsYXNo
ZXMgdGhlcmUgYXJlLiBXZSB3YW50IHRvIGhhbmRsZSBjYXNlcyBsaWtlIFVOQyBidXQgYWxzbwor
ICAgIC8vICIvYzovZm9vIi4gVGhpcyBpcyB3aGVuIHRoZXJlIGlzIG5vIHNjaGVtZSwgc28gd2Ug
Y2FuIGFsbG93IHBhZ2VzIHRvIGRvCisgICAgLy8gbGlua3MgbGlrZSAiYzovZm9vL2JhciIgb3Ig
Ii8vZm9vL2JhciIuIFRoaXMgaXMgYWxzbyBjYWxsZWQgYnkgdGhlCisgICAgLy8gcmVsYXRpdmUg
VVJMIHJlc29sdmVyIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGVyZSBpcyBhbiBhYnNvbHV0ZSBVUkws
IHdoaWNoCisgICAgLy8gbWF5IGdpdmUgdXMgaW5wdXQgbGlrZSAiL2M6L2ZvbyIuCisgICAgbnVt
U2xhc2hlcyA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3Ro
KTsKKyAgICBhZnRlclNsYXNoZXMgPSBiZWdpbiArIG51bVNsYXNoZXM7CisgICAgaWYgKGRvZXNC
ZWdpbldpbmRvd3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoKSkgewor
ICAgICAgICAvLyBXaW5kb3dzIHBhdGgsIGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUg
KGZvciBleGFtcGxlLCAiYzpcZm9vIikuCisgICAgICAgIHBhcnNlZC0+c2NoZW1lLnJlc2V0KCk7
CisgICAgICAgIGFmdGVyU2NoZW1lID0gYWZ0ZXJTbGFzaGVzOworICAgIH0gZWxzZSBpZiAoZG9l
c0JlZ2luVU5DUGF0aChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCwgZmFsc2UpKSB7CisgICAgICAg
IC8vIFdpbmRvd3MgVU5DIHBhdGg6IGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUsIGJ1
dCBrZWVwIHRoZSBzbGFzaGVzLgorICAgICAgICBwYXJzZWQtPnNjaGVtZS5yZXNldCgpOworICAg
ICAgICBhZnRlclNjaGVtZSA9IGJlZ2luOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAg
ICAgICBpZiAoRXh0cmFjdFNjaGVtZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5ndGggLSBiZWdpbiwg
JnBhcnNlZC0+c2NoZW1lKSkgeworICAgICAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNp
bmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgICAgIHBhcnNl
ZC0+c2NoZW1lLnNldEJlZ2luKHBhcnNlZC0+c2NoZW1lLmJlZ2luKCkgKyBiZWdpbik7CisgICAg
ICAgICAgICBhZnRlclNjaGVtZSA9IHBhcnNlZC0+c2NoZW1lLmVuZCgpICsgMTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIHNjaGVtZSBmb3VuZCwgcmVtZW1iZXIgdGhhdC4K
KyAgICAgICAgICAgIHBhcnNlZC0+c2NoZW1lLnJlc2V0KCk7CisgICAgICAgICAgICBhZnRlclNj
aGVtZSA9IGJlZ2luOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIGVtcHR5IHNw
ZWNzIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJzLAor
ICAgIC8vIG9yIHRoYXQgYXJlIGp1c3QgdGhlIHNjaGVtZSAoZm9yIGV4YW1wbGUgImZpbGU6Iiku
CisgICAgaWYgKGFmdGVyU2NoZW1lID09IHNwZWNMZW5ndGgpIHsKKyAgICAgICAgcGFyc2VkLT5o
b3N0LnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC0+cGF0aC5yZXNldCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbnVtU2xhc2hlcyA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNw
ZWMsIGFmdGVyU2NoZW1lLCBzcGVjTGVuZ3RoKTsKKworICAgIGFmdGVyU2xhc2hlcyA9IGFmdGVy
U2NoZW1lICsgbnVtU2xhc2hlczsKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIGlucHV0IGlzIGEgZHJpdmUgYWdhaW4uIFdlIGNoZWNrZWQgYWJvdmUgZm9yIHdpbmRv
d3MKKyAgICAvLyBkcml2ZSBzcGVjcywgYnV0IHRoYXQncyBvbmx5IGF0IHRoZSB2ZXJ5IGJlZ2lu
bmluZyB0byBzZWUgaWYgd2UgaGF2ZSBhCisgICAgLy8gc2NoZW1lIGF0IGFsbC4gVGhpcyB0ZXN0
IHdpbGwgYmUgZHVwbGljYXRlZCBpbiB0aGF0IGNhc2UsIGJ1dCB3aWxsCisgICAgLy8gYWRkaXRp
b25hbGx5IGhhbmRsZSBhbGwgY2FzZXMgd2l0aCBhIHJlYWwgc2NoZW1lIHN1Y2ggYXMgImZpbGU6
Ly8vQzovIi4KKyAgICBpZiAoIWRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJT
bGFzaGVzLCBzcGVjTGVuZ3RoKSAmJiAgbnVtU2xhc2hlcyAhPSAzKSB7CisgICAgICAgIC8vIEFu
eXRoaW5nIG5vdCBiZWdpbm5pbmcgd2l0aCBhIGRyaXZlIHNwZWMgKCJjOlwiKSBvbiBXaW5kb3dz
IGlzIHRyZWF0ZWQKKyAgICAgICAgLy8gYXMgVU5DLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhy
ZWUgc2xhc2hlcyB3aGljaCBhbHdheXMgbWVhbnMgYSBmaWxlLgorICAgICAgICAvLyBFdmVuIElF
NyB0cmVhdHMgZmlsZTovLy9mb28vYmFyIGFzICIvZm9vL2JhciIsIHdoaWNoIHRoZW4gZmFpbHMu
CisgICAgICAgIERvUGFyc2VVTkMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoLCBwYXJz
ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICAvLyBmaWxlOiBVUkwgd2l0
aCBleGFjdGx5IDIgc2xhc2hlcyBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYSBob3N0IGNvbXBvbmVu
dC4KKyAgICBpZiAobnVtU2xhc2hlcyA9PSAyKSB7CisgICAgICAgIERvUGFyc2VVTkMoc3BlYywg
YWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoLCBwYXJzZWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKKyAgICAvLyBFYXN5IGFuZCBjb21tb24gY2FzZSwg
dGhlIGZ1bGwgcGF0aCBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzY2hlbWUKKyAgICAvLyAobW9k
dWxvIHNsYXNoZXMpLCBhcyBpbiAiZmlsZTovL2M6L2ZvbyIuIEp1c3QgdHJlYXQgZXZlcnl0aGlu
ZyBmcm9tCisgICAgLy8gdGhlcmUgdG8gdGhlIGVuZCBhcyB0aGUgcGF0aC4gRW1wdHkgaG9zdHMg
aGF2ZSAwIGxlbmd0aCBpbnN0ZWFkIG9mIC0xLgorICAgIC8vIFdlIGluY2x1ZGUgdGhlIGxhc3Qg
c2xhc2ggYXMgcGFydCBvZiB0aGUgcGF0aCBpZiB0aGVyZSBpcyBvbmUuCisgICAgRG9QYXJzZUxv
Y2FsRmlsZShzcGVjLAorICAgICAgICAgICAgICAgICAgICAgbnVtU2xhc2hlcyA+IDAgPyBhZnRl
clNjaGVtZSArIG51bVNsYXNoZXMgLSAxIDogYWZ0ZXJTY2hlbWUsCisgICAgICAgICAgICAgICAg
ICAgICBzcGVjTGVuZ3RoLCBwYXJzZWQpOworfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIFBh
cnNlRmlsZVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBw
YXJzZWQpCit7CisgICAgRG9QYXJzZUZpbGVVUkwodXJsLCB1cmxMZW5ndGgsIHBhcnNlZCk7Cit9
CisKK3ZvaWQgUGFyc2VGaWxlVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVS
TFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgRG9QYXJzZUZpbGVVUkwodXJsLCB1cmxMZW5ndGgs
IHBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTFBhcnNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
UGFyc2VJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkZTBjNDViODE3ZGM3ZWE1NmQzMDg5ZjRmMjdj
NWUxYzkxYzUzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFBhcnNlSW50ZXJuYWwuaApAQCAtMCwwICsxLDExNyBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisvLyBDb250YWlucyBjb21tb24gaW5saW5lIGhlbHBlciBmdW5jdGlv
bnMgdXNlZCBieSB0aGUgVVJMIHBhcnNpbmcgcm91dGluZXMuCisKKyNpZm5kZWYgVVJMUGFyc2VJ
bnRlcm5hbF9oCisjZGVmaW5lIFVSTFBhcnNlSW50ZXJuYWxfaAorCisjaW5jbHVkZSAiVVJMUGFy
c2UuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKKyNpZiBVU0UoV1RGVVJM
KQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNlciB7CisKKy8vIFdlIHRy
ZWF0IHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIHRoZSBzYW1lIGZvciBJRSBjb21wYXRhYmlsaXR5
LgoraW5saW5lIGJvb2wgaXNVUkxTbGFzaChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gY2ggPT0g
Jy8nIHx8IGNoID09ICdcXCc7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJp
bSB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBVUkwgYmVjYXVzZSBpdCBpcyBhCisvLyBzcGFjZSBv
ciBhIGNvbnRyb2wgY2hhcmFjdGVyLgoraW5saW5lIGJvb2wgc2hvdWxkVHJpbUZyb21VUkwoVUNo
YXIgY2gpCit7CisgICAgcmV0dXJuIGNoIDw9ICcgJzsKK30KKworLy8gR2l2ZW4gYW4gYWxyZWFk
eS1pbml0aWFsaXplZCBiZWdpbiBpbmRleCBhbmQgbGVuZ3RoLCB0aGlzIHNocmlua3MgdGhlIHJh
bmdlCisvLyB0byBlbGltaW5hdGUgInNob3VsZC1iZS10cmltbWVkIiBjaGFyYWN0ZXJzLiBOb3Rl
IHRoYXQgdGhlIGxlbmd0aCBkb2VzICpub3QqCisvLyBpbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHVu
dHJpbW1lZCBkYXRhIGZyb20gfCpiZWdpbnwsIGJ1dCByYXRoZXIgdGhlIHBvc2l0aW9uCisvLyBp
biB0aGUgaW5wdXQgc3RyaW5nIChzbyB0aGUgc3RyaW5nIHN0YXJ0cyBhdCBjaGFyYWN0ZXIgfCpi
ZWdpbnwgaW4gdGhlIHNwZWMsCisvLyBhbmQgZ29lcyB1bnRpbCB8KmxlbnwpLgordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSB2b2lkIHRyaW1VUkwoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3BlYywgaW50KiBiZWdpbiwgaW50KiBsZW5ndGgpCit7CisgICAgLy8gU3RyaXAg
bGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgd2hpbGUgKCpi
ZWdpbiA8ICpsZW5ndGggJiYgc2hvdWxkVHJpbUZyb21VUkwoc3BlY1sqYmVnaW5dKSkKKyAgICAg
ICAgKCpiZWdpbikrKzsKKworICAgIC8vIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGNv
bnRyb2wgY2hhcmFjdGVycy4gV2UgbmVlZCB0aGUgPmkgdGVzdCBmb3IKKyAgICAvLyB3aGVuIHRo
ZSBpbnB1dCBzdHJpbmcgaXMgYWxsIGJsYW5rczsgd2UgZG9uJ3Qgd2FudCB0byBiYWNrIHBhc3Qg
dGhlIGlucHV0LgorICAgIHdoaWxlICgqbGVuZ3RoID4gKmJlZ2luICYmIHNob3VsZFRyaW1Gcm9t
VVJMKHNwZWNbKmxlbmd0aCAtIDFdKSkKKyAgICAgICAgKCpsZW5ndGgpLS07Cit9CisKKy8vIENv
dW50cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsYXNoZXMgc3RhcnRpbmcgYXQgdGhlIGdp
dmVuIG9mZnNldAorLy8gaW4gdGhlIGdpdmVuIHN0cmluZyBvZiB0aGUgZ2l2ZW4gbGVuZ3RoLgor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBpbnQgY291bnRDb25zZWN1
dGl2ZVNsYXNoZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSAqc3RyLCBpbnQgYmVnaW5fb2Zmc2V0LCBp
bnQgc3RyTGVuZ3RoKQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGJlZ2luX29m
ZnNldCArIGNvdW50IDwgc3RyTGVuZ3RoICYmIGlzVVJMU2xhc2goc3RyW2JlZ2luX29mZnNldCAr
IGNvdW50XSkpCisgICAgICAgICsrY291bnQ7CisgICAgcmV0dXJuIGNvdW50OworfQorCisvLyBJ
bnRlcm5hbCBmdW5jdGlvbnMgaW4gVVJMUGFyc2VyLmNjIHRoYXQgcGFyc2UgdGhlIHBhdGgsIHRo
YXQgaXMsIGV2ZXJ5dGhpbmcKKy8vIGZvbGxvd2luZyB0aGUgYXV0aG9yaXR5IHNlY3Rpb24uIFRo
ZSBpbnB1dCBpcyB0aGUgcmFuZ2Ugb2YgZXZlcnl0aGluZworLy8gZm9sbG93aW5nIHRoZSBhdXRo
b3JpdHkgc2VjdGlvbiwgYW5kIHRoZSBvdXRwdXQgaXMgdGhlIGlkZW50aWZpZWQgcmFuZ2VzLgor
Ly8KKy8vIFRoaXMgaXMgZGVzaWduZWQgZm9yIHRoZSBmaWxlIFVSTCBwYXJzZXIgb3Igb3RoZXIg
Y29uc3VtZXJzIHdobyBtYXkgZG8KKy8vIHNwZWNpYWwgc3R1ZmYgYXQgdGhlIGJlZ2lubmluZywg
YnV0IHdhbnQgcmVndWxhciBwYXRoIHBhcnNpbmcsIGl0IGp1c3QKKy8vIG1hcHMgdG8gdGhlIGlu
dGVybmFsIHBhcnNpbmcgZnVuY3Rpb24gZm9yIHBhdGhzLgordm9pZCBwYXJzZVBhdGhJbnRlcm5h
bChjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21w
b25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZmlsZXBh
dGgsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogcXVlcnksCisgICAgICAg
ICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZnJhZ21lbnQpOwordm9pZCBwYXJzZVBhdGhJ
bnRlcm5hbChjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQq
IGZpbGVwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIHF1ZXJ5LAor
ICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIGZyYWdtZW50KTsKKworCisvLyBH
aXZlbiBhIHNwZWMgYW5kIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBjb2xv
biBmb2xsb3dpbmcgdGhlCisvLyBzY2hlbWUsIHRoaXMgcGFyc2VzIGl0IGFuZCBmaWxscyBpbiB0
aGUgc3RydWN0dXJlLCBFdmVyeSBpdGVtIGluIHRoZSBwYXJzZWQKKy8vIHN0cnVjdHVyZSBpcyBm
aWxsZWQgRVhDRVBUIGZvciB0aGUgc2NoZW1lLCB3aGljaCBpcyB1bnRvdWNoZWQuCit2b2lkIFBh
cnNlQWZ0ZXJTY2hlbWUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGludCBhZnRl
clNjaGVtZSwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlQWZ0ZXJTY2hlbWUoY29u
c3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21l
bnRzKiBwYXJzZWQpOworCit9IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQorCisjZW5kaWYgLy8gVVJMUGFyc2VJbnRl
cm5hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlci5oIGIv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMmI0ZDU5OGEzMTlhM2NhMjdmODY1OTRiZTdjMGI4ZmIxYTA3MThiNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTFBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTk2ICswLDAgQEAKLS8qIEJh
c2VkIG9uIG5zVVJMUGFyc2Vycy5jYyBmcm9tIE1vemlsbGEKLSAqIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21t
dW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogT3RoZXIgY29udHJpYnV0b3JzOgotICogICBE
YXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhvcikKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqIEFs
dGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zCi0gKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAxLjEsIGZvdW5kIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBM
Iikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91
bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCi0gKiAodGhlICJHUEwi
KSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJl
Ci0gKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91cgotICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUg
dGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bwotICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQ
TCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5Ci0gKiBkZWxl
dGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
IGFuZAotICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEws
IGFzIHRoZSBjYXNlIG1heSBiZS4KLSAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgotICovCi0KLSNp
Zm5kZWYgVVJMUGFyc2VyX2gKLSNkZWZpbmUgVVJMUGFyc2VyX2gKLQotI2luY2x1ZGUgIlVSTENv
bXBvbmVudC5oIgotI2luY2x1ZGUgIlVSTFNlZ21lbnRzLmgiCi0jaW5jbHVkZSAiVW51c2VkUGFy
YW0uaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBCYXNlQ2hhcmFjdGVyVHlwZSA9IENoYXJh
Y3RlclR5cGU+Ci1jbGFzcyBVUkxQYXJzZXIgewotcHVibGljOgotICAgIGVudW0gU3BlY2lhbFBv
cnQgewotICAgICAgICBVbnNwZWNpZmllZFBvcnQgPSAtMSwKLSAgICAgICAgSW52YWxpZFBvcnQg
PSAtMiwKLSAgICB9OwotCi0gICAgLy8gVGhpcyBoYW5kbGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXkg
YmUgYW4gYXV0aG9yaXR5IHRlcm1pbmF0b3IsIGluY2x1ZGluZwotICAgIC8vIGJhY2tzbGFzaC4g
Rm9yIHNwZWNpYWwgYmFja3NsYXNoIGhhbmRsaW5nIHNlZSBwYXJzZUFmdGVyU2NoZW1lLgotICAg
IHN0YXRpYyBib29sIGlzUG9zc2libGVBdXRob3JpdHlUZXJtaW5hdG9yKENoYXJhY3RlclR5cGUg
Y2gpCi0gICAgewotICAgICAgICByZXR1cm4gaXNVUkxTbGFzaChjaCkgfHwgY2ggPT0gJz8nIHx8
IGNoID09ICcjJyB8fCBjaCA9PSAnOyc7Ci0gICAgfQotCi0gICAgLy8gR2l2ZW4gYW4gYWxyZWFk
eS1pZGVudGlmaWVkIGF1dGggc2VjdGlvbiwgYnJlYWtzIGl0IGludG8gaXRzIGNvbnN0aXR1ZW50
Ci0gICAgLy8gcGFydHMuIFRoZSBwb3J0IG51bWJlciB3aWxsIGJlIHBhcnNlZCBhbmQgdGhlIHJl
c3VsdGluZyBpbnRlZ2VyIHdpbGwgYmUKLSAgICAvLyBmaWxsZWQgaW50byB0aGUgZ2l2ZW4gKnBv
cnQgdmFyaWFibGUsIG9yIC0xIGlmIHRoZXJlIGlzIG5vIHBvcnQgbnVtYmVyCi0gICAgLy8gb3Ig
aXQgaXMgaW52YWxpZC4KLSAgICBzdGF0aWMgdm9pZCBwYXJzZUF1dGhvcml0eShjb25zdCBDaGFy
YWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGgsIFVSTENvbXBvbmVudCYg
dXNlcm5hbWUsIFVSTENvbXBvbmVudCYgcGFzc3dvcmQsIFVSTENvbXBvbmVudCYgaG9zdCwgVVJM
Q29tcG9uZW50JiBwb3J0KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCBBU1NFUlQoYXV0
aC5pc1ZhbGlkKCkpOyAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhbiBhdXRob3JpdHkuCi0gICAg
ICAgIGlmICghYXV0aC5sZW5ndGgoKSkgewotICAgICAgICAgICAgdXNlcm5hbWUucmVzZXQoKTsK
LSAgICAgICAgICAgIHBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgICAgICBob3N0LnJlc2V0KCk7
Ci0gICAgICAgICAgICBwb3J0LnJlc2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTZWFyY2ggYmFja3dhcmRzIGZvciBALCB3aGljaCBpcyB0aGUgc2Vw
YXJhdG9yIGJldHdlZW4gdGhlIHVzZXIgaW5mbwotICAgICAgICAvLyBhbmQgdGhlIHNlcnZlciBp
bmZvLiBSRkMgMzk4NiBmb3JiaWRzIEAgZnJvbSBvY2N1cmluZyBpbiBhdXRoLCBidXQKLSAgICAg
ICAgLy8gc29tZW9uZSBtaWdodCBpbmNsdWRlIGl0IGluIGEgcGFzc3dvcmQgdW5lc2NhcGVkLgot
ICAgICAgICBpbnQgaSA9IGF1dGguYmVnaW4oKSArIGF1dGgubGVuZ3RoKCkgLSAxOwotICAgICAg
ICB3aGlsZSAoaSA+IGF1dGguYmVnaW4oKSAmJiBzcGVjW2ldICE9ICdAJykKLSAgICAgICAgICAg
IC0taTsKLQotICAgICAgICBpZiAoc3BlY1tpXSA9PSAnQCcpIHsKLSAgICAgICAgICAgIC8vIEZv
dW5kIHVzZXIgaW5mbzogPHVzZXItaW5mbz5APHNlcnZlci1pbmZvPgotICAgICAgICAgICAgcGFy
c2VVc2VySW5mbyhzcGVjLCBVUkxDb21wb25lbnQoYXV0aC5iZWdpbigpLCBpIC0gYXV0aC5iZWdp
bigpKSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKLSAgICAgICAgICAgIHBhcnNlU2VydmVySW5mbyhz
cGVjLCBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgYXV0aC5iZWdpbigpICsgYXV0aC5s
ZW5ndGgoKSksIGhvc3QsIHBvcnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
Tm8gdXNlciBpbmZvLCBldmVyeXRoaW5nIGlzIHNlcnZlciBpbmZvLgotICAgICAgICAgICAgdXNl
cm5hbWUucmVzZXQoKTsKLSAgICAgICAgICAgIHBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBwYXJzZVNlcnZlckluZm8oc3BlYywgYXV0aCwgaG9zdCwgcG9ydCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBleHRyYWN0U2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUq
IHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxDb21wb25lbnQmIHNjaGVtZSkKLSAgICB7Ci0gICAg
ICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCi0g
ICAgICAgIGludCBiZWdpbiA9IDA7Ci0gICAgICAgIHdoaWxlIChiZWdpbiA8IHNwZWNMZW5ndGgg
JiYgc2hvdWxkVHJpbUZyb21VUkwoc3BlY1tiZWdpbl0pKQotICAgICAgICAgICAgYmVnaW4rKzsK
LSAgICAgICAgaWYgKGJlZ2luID09IHNwZWNMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIElucHV0IGlzIGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNlLgotCi0gICAgICAgIC8vIEZp
bmQgdGhlIGZpcnN0IGNvbG9uIGNoYXJhY3Rlci4KLSAgICAgICAgZm9yIChpbnQgaSA9IGJlZ2lu
OyBpIDwgc3BlY0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc3BlY1tpXSA9PSAnOicp
IHsKLSAgICAgICAgICAgICAgICBzY2hlbWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShiZWdp
biwgaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBjb2xvbiBmb3VuZDogbm8gc2NoZW1l
Ci0gICAgfQotCi0gICAgLy8gRmlsbHMgaW4gYWxsIG1lbWJlcnMgb2YgdGhlIFVSTFNlZ21lbnRz
IHN0cnVjdHVyZSAoZXhjZXB0IGZvciB0aGUKLSAgICAvLyBzY2hlbWUpIGZvciBzdGFuZGFyZCBV
UkxzLgotICAgIC8vCi0gICAgLy8gfHNwZWN8IGlzIHRoZSBmdWxsIHNwZWMgYmVpbmcgcGFyc2Vk
LCBvZiBsZW5ndGggfHNwZWNMZW5ndGh8LgotICAgIC8vIHxhZnRlclNjaGVtZXwgaXMgdGhlIGNo
YXJhY3RlciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHNjaGVtZSAoYWZ0ZXIKLSAgICAvLyB0
aGUgY29sb24pIHdoZXJlIHdlJ2xsIGJlZ2luIHBhcnNpbmcuCi0gICAgc3RhdGljIHZvaWQgcGFy
c2VBZnRlclNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwg
aW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAgIHsKLSAgICAgICAgaW50
IG51bWJlck9mU2xhc2hlcyA9IGNvbnNlY3V0aXZlU2xhc2hlcyhzcGVjLCBhZnRlclNjaGVtZSwg
c3BlY0xlbmd0aCk7Ci0gICAgICAgIGludCBhZnRlclNsYXNoZXMgPSBhZnRlclNjaGVtZSArIG51
bWJlck9mU2xhc2hlczsKLQotICAgICAgICAvLyBGaXJzdCBzcGxpdCBpbnRvIHR3byBtYWluIHBh
cnRzLCB0aGUgYXV0aG9yaXR5ICh1c2VybmFtZSwgcGFzc3dvcmQsCi0gICAgICAgIC8vIGhvc3Qs
IGFuZCBwb3J0KSBhbmQgdGhlIGZ1bGwgcGF0aCAocGF0aCwgcXVlcnksIGFuZCByZWZlcmVuY2Up
LgotICAgICAgICBVUkxDb21wb25lbnQgYXV0aG9yaXR5OwotICAgICAgICBVUkxDb21wb25lbnQg
ZnVsbFBhdGg7Ci0KLSAgICAgICAgLy8gRm91bmQgIi8vPHNvbWUgZGF0YT4iLCBsb29rcyBsaWtl
IGFuIGF1dGhvcml0eSBzZWN0aW9uLiBUcmVhdAotICAgICAgICAvLyBldmVyeXRoaW5nIGZyb20g
dGhlcmUgdG8gdGhlIG5leHQgc2xhc2ggKG9yIGVuZCBvZiBzcGVjKSB0byBiZSB0aGUKLSAgICAg
ICAgLy8gYXV0aG9yaXR5LiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBudW1iZXIgb2Ygc2xhc2hl
cyBhbmQgdHJlYXQgaXQgYXMKLSAgICAgICAgLy8gdGhlIGF1dGhvcml0eS4KLSAgICAgICAgaW50
IGF1dGhFbmQgPSBuZXh0QXV0aG9yaXR5VGVybWluYXRvcihzcGVjLCBhZnRlclNsYXNoZXMsIHNw
ZWNMZW5ndGgpOwotICAgICAgICBhdXRob3JpdHkgPSBVUkxDb21wb25lbnQoYWZ0ZXJTbGFzaGVz
LCBhdXRoRW5kIC0gYWZ0ZXJTbGFzaGVzKTsKLQotICAgICAgICBpZiAoYXV0aEVuZCA9PSBzcGVj
TGVuZ3RoKSAvLyBObyBiZWdpbm5pbmcgb2YgcGF0aCBmb3VuZC4KLSAgICAgICAgICAgIGZ1bGxQ
YXRoID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIGVsc2UgLy8gRXZlcnl0aGluZyBzdGFydGlu
ZyBmcm9tIHRoZSBzbGFzaCB0byB0aGUgZW5kIGlzIHRoZSBwYXRoLgotICAgICAgICAgICAgZnVs
bFBhdGggPSBVUkxDb21wb25lbnQoYXV0aEVuZCwgc3BlY0xlbmd0aCAtIGF1dGhFbmQpOwotCi0g
ICAgICAgIC8vIE5vdyBwYXJzZSB0aG9zZSB0d28gc3ViLXBhcnRzLgotICAgICAgICBwYXJzZUF1
dGhvcml0eShzcGVjLCBhdXRob3JpdHksIHBhcnNlZC51c2VybmFtZSwgcGFyc2VkLnBhc3N3b3Jk
LCBwYXJzZWQuaG9zdCwgcGFyc2VkLnBvcnQpOwotICAgICAgICBwYXJzZVBhdGgoc3BlYywgZnVs
bFBhdGgsIHBhcnNlZC5wYXRoLCBwYXJzZWQucXVlcnksIHBhcnNlZC5mcmFnbWVudCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIG1haW4gcGFyc2luZyBmdW5jdGlvbiBmb3Igc3RhbmRhcmQgVVJMcy4g
U3RhbmRhcmQgVVJMcyBoYXZlIGEgc2NoZW1lLAotICAgIC8vIGhvc3QsIHBhdGgsIGV0Yy4KLSAg
ICBzdGF0aWMgdm9pZCBwYXJzZVN0YW5kYXJkVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IGFkZCBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsKLQotICAgICAgICAvLyBTdHJpcCBs
ZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCi0gICAgICAg
IGludCBiZWdpbiA9IDA7Ci0gICAgICAgIHRyaW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgp
OwotCi0gICAgICAgIGludCBhZnRlclNjaGVtZTsKLSAgICAgICAgaWYgKGV4dHJhY3RTY2hlbWUo
c3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkLnNjaGVtZSkpCi0gICAgICAgICAgICBhZnRlclNjaGVt
ZSA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOyAvLyBTa2lwIHBhc3QgdGhlIGNvbG9uLgotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFNheSB0aGVyZSdzIG5vIHNjaGVtZSB3aGVuIHRo
ZXJlIGlzIGEgY29sb24uIFdlIGNvdWxkIGFsc28gc2F5Ci0gICAgICAgICAgICAvLyB0aGF0IGV2
ZXJ5dGhpbmcgaXMgdGhlIHNjaGVtZS4gQm90aCB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQKLSAg
ICAgICAgICAgIC8vIFVSTCwgYnV0IHRoaXMgd2F5IHNlZW1zIGxlc3Mgd3JvbmcgaW4gbW9yZSBj
YXNlcy4KLSAgICAgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgICAgIGFm
dGVyU2NoZW1lID0gYmVnaW47Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VBZnRlclNjaGVtZShz
cGVjLCBzcGVjTGVuZ3RoLCBhZnRlclNjaGVtZSwgcGFyc2VkKTsKLSAgICB9Ci0KLSAgICAvLyBU
aGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uIGZvciAobWF5IGJlKSByZWxhdGl2ZSBVUkxzLgotICAg
IHN0YXRpYyB2b2lkIHBhcnNlVVJMV2l0aEJhc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywg
aW50IHNwZWNMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBC
YXNlQ2hhcmFjdGVyVHlwZSogYmFzZVN0cmluZ1NwZWMsIGludCBiYXNlU3RyaW5nU3BlY0xlbmd0
aCwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VTdHJpbmdTZWdtZW50cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiZvdXRwdXRCdWZmZXIsIFVSTFNlZ21l
bnRzJiBwYXJzZWQpCi0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0oYmFzZVN0cmluZ1NwZWMp
OwotICAgICAgICBVTlVTRURfUEFSQU0oYmFzZVN0cmluZ1NwZWNMZW5ndGgpOwotICAgICAgICBV
TlVTRURfUEFSQU0oYmFzZVN0cmluZ1NlZ21lbnRzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNw
ZWMpOwotICAgICAgICBVTlVTRURfUEFSQU0oc3BlY0xlbmd0aCk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShvdXRwdXRCdWZmZXIpOwotICAgICAgICBVTlVTRURfUEFSQU0ocGFyc2VkKTsKLSAgICAg
ICAgLy8gRklYTUU6IFRvIGltcGxlbWVudC4KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJz
ZVBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRo
LCBVUkxDb21wb25lbnQmIGZpbGVwYXRoLCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxDb21wb25l
bnQmIGZyYWdtZW50KQotICAgIHsKLSAgICAgICAgLy8gcGF0aCA9IFsvXTxzZWdtZW50MT4vPHNl
Z21lbnQyPi88Li4uPi88c2VnbWVudE4+OzxwYXJhbT4/PHF1ZXJ5PiM8ZnJhZ21lbnQ+Ci0KLSAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gcGF0aC4KLSAgICAgICAgaWYg
KCFwYXRoLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgZmlsZXBhdGgucmVzZXQoKTsKLSAgICAg
ICAgICAgIHF1ZXJ5LnJlc2V0KCk7Ci0gICAgICAgICAgICBmcmFnbWVudC5yZXNldCgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgQVNTRVJU
KHBhdGgubGVuZ3RoKCkgPiAwKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgMCBsZW5ndGggcGF0
aHMuCi0KLSAgICAgICAgLy8gU2VhcmNoIGZvciBmaXJzdCBvY2N1cnJlbmNlIG9mIGVpdGhlciA/
IG9yICMuCi0gICAgICAgIGludCBwYXRoRW5kID0gcGF0aC5iZWdpbigpICsgcGF0aC5sZW5ndGgo
KTsKLQotICAgICAgICBpbnQgcXVlcnlTZXBhcmF0b3IgPSAtMTsgLy8gSW5kZXggb2YgdGhlICc/
JwotICAgICAgICBpbnQgcmVmU2VwYXJhdG9yID0gLTE7IC8vIEluZGV4IG9mIHRoZSAnIycKLSAg
ICAgICAgZm9yIChpbnQgaSA9IHBhdGguYmVnaW4oKTsgaSA8IHBhdGhFbmQ7IGkrKykgewotICAg
ICAgICAgICAgc3dpdGNoIChzcGVjW2ldKSB7Ci0gICAgICAgICAgICBjYXNlICc/JzoKLSAgICAg
ICAgICAgICAgICBpZiAocXVlcnlTZXBhcmF0b3IgPCAwKQotICAgICAgICAgICAgICAgICAgICBx
dWVyeVNlcGFyYXRvciA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlICcjJzoKLSAgICAgICAgICAgICAgICByZWZTZXBhcmF0b3IgPSBpOwotICAgICAgICAgICAg
ICAgIGkgPSBwYXRoRW5kOyAvLyBCcmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFya2VycyBwb2ludGluZyB0
byB0aGUgY2hhcmFjdGVyIGFmdGVyIGVhY2ggb2YgdGhlc2UgY29ycmVzcG9uZGluZwotICAgICAg
ICAvLyBjb21wb25lbnRzLiBUaGUgY29kZSBiZWxvdyB3b3JrcyBmcm9tIHRoZSBlbmQgYmFjayB0
byB0aGUgYmVnaW5uaW5nLAotICAgICAgICAvLyBhbmQgd2lsbCB1cGRhdGUgdGhlc2UgaW5kaWNl
cyBhcyBpdCBmaW5kcyBjb21wb25lbnRzIHRoYXQgZXhpc3QuCi0gICAgICAgIGludCBmaWxlRW5k
LCBxdWVyeUVuZDsKLQotICAgICAgICAvLyBGcmFnbWVudDogZnJvbSB0aGUgIyB0byB0aGUgZW5k
IG9mIHRoZSBwYXRoLgotICAgICAgICBpZiAocmVmU2VwYXJhdG9yID49IDApIHsKLSAgICAgICAg
ICAgIGZpbGVFbmQgPSByZWZTZXBhcmF0b3I7Ci0gICAgICAgICAgICBxdWVyeUVuZCA9IHJlZlNl
cGFyYXRvcjsKLSAgICAgICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
cmVmU2VwYXJhdG9yICsgMSwgcGF0aEVuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmaWxlRW5kID0gcGF0aEVuZDsKLSAgICAgICAgICAgIHF1ZXJ5RW5kID0gcGF0aEVuZDsKLSAg
ICAgICAgICAgIGZyYWdtZW50LnJlc2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBRdWVy
eSBmcmFnbWVudDogZXZlcnl0aGluZyBmcm9tIHRoZSA/IHRvIHRoZSBuZXh0IGJvdW5kYXJ5IChl
aXRoZXIKLSAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgcGF0aCBvciB0aGUgZnJhZ21lbnQgZnJh
Z21lbnQpLgotICAgICAgICBpZiAocXVlcnlTZXBhcmF0b3IgPj0gMCkgewotICAgICAgICAgICAg
ZmlsZUVuZCA9IHF1ZXJ5U2VwYXJhdG9yOwotICAgICAgICAgICAgcXVlcnkgPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShxdWVyeVNlcGFyYXRvciArIDEsIHF1ZXJ5RW5kKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBxdWVyeS5yZXNldCgpOwotCi0gICAgICAgIC8vIEZpbGUgcGF0aDog
dHJlYXQgYW4gZW1wdHkgZmlsZSBwYXRoIGFzIG5vIGZpbGUgcGF0aC4KLSAgICAgICAgaWYgKGZp
bGVFbmQgIT0gcGF0aC5iZWdpbigpKQotICAgICAgICAgICAgZmlsZXBhdGggPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShwYXRoLmJlZ2luKCksIGZpbGVFbmQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmaWxlcGF0aC5yZXNldCgpOwotICAgIH0KLQotICAgIC8vIEluaXRpYWxpemVzIGEg
cGF0aCBVUkwgd2hpY2ggaXMgbWVyZWx5IGEgc2NoZW1lIGZvbGxvd2VkIGJ5IGEgcGF0aC4KLSAg
ICAvLyBFeGFtcGxlcyBpbmNsdWRlICJhYm91dDpmb28iIGFuZCAiamF2YXNjcmlwdDphbGVydCgn
YmFyJyk7IgotICAgIHN0YXRpYyB2b2lkIHBhcnNlUGF0aFVSTChjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMgb2YgdGhlIFVSTCBv
dXQgb2YgdGhlIHdheSwgd2UKLSAgICAgICAgLy8gbmV2ZXIgdXNlIHRoZW0uCi0gICAgICAgIHBh
cnNlZC51c2VybmFtZS5yZXNldCgpOwotICAgICAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsK
LSAgICAgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLnBvcnQucmVzZXQo
KTsKLSAgICAgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5mcmFnbWVu
dC5yZXNldCgpOwotCi0gICAgICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMg
YW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgdGhpcyBp
cyB1bm5lY2Vzc2FyeT8KLSAgICAgICAgaW50IGJlZ2luID0gMDsKLSAgICAgICAgdHJpbVVSTChz
cGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNz
IG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sCi0gICAgICAg
IC8vIGNoYXJzLgotICAgICAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgewotICAgICAgICAg
ICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEV4dHJhY3Qg
dGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVyeXRoaW5nIGZvbGxvd2luZy4gV2Ug
YWxzbwotICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1l
LgotICAgICAgICBpZiAoZXh0cmFjdFNjaGVtZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5ndGggLSBi
ZWdpbiwgcGFyc2VkLnNjaGVtZSkpIHsKLSAgICAgICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0
cyBzaW5jZSB3ZSBnYXZlIGV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCi0gICAgICAgICAgICBw
YXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2luKTsKLQot
ICAgICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJMIHBh
cnNlciwgd2UgdHJlYXQgbm8gcGF0aAotICAgICAgICAgICAgLy8gYXMgLTEsIHJhdGhlciB0aGFu
IGhhdmluZyBhIGxlbmd0aCBvZiAwICh3ZSBub3JtYWxseSB3b3VsZG4ndAotICAgICAgICAgICAg
Ly8gY2FyZSBzbyBtdWNoIGZvciB0aGVzZSBub24tc3RhbmRhcmQgVVJMcykuCi0gICAgICAgICAg
ICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKLSAgICAgICAgICAg
ICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGFyc2VkLnNjaGVtZS5l
bmQoKSArIDEsIHNwZWNMZW5ndGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
Tm8gc2NoZW1lIGZvdW5kLCBqdXN0IHBhdGguCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJl
c2V0KCk7Ci0gICAgICAgICAgICBwYXJzZWQucGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGJlZ2luLCBzcGVjTGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IHBhcnNlTWFpbHRvVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3Ro
LCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCBBU1NF
UlQoc3BlY0xlbmd0aCA+PSAwKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG5vbi1wYXRoIGFuZCBu
b24tc2NoZW1lIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9mIHRoZSB3YXksIHdlCi0gICAgICAgIC8v
IG5ldmVyIHVzZSB0aGVtLgotICAgICAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKLSAgICAg
ICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5ob3N0LnJlc2V0KCk7
Ci0gICAgICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5mcmFnbWVudC5y
ZXNldCgpOwotICAgICAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlzOyBy
ZXNldCBmb3IgY29udmVuaWVuY2UuCi0KLSAgICAgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWls
aW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICBpbnQgYmVnaW4gPSAw
OwotICAgICAgICB0cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoKTsKLQotICAgICAgICAv
LyBIYW5kbGUgZW1wdHkgc3BlY3Mgb3Igb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNl
IG9yIGNvbnRyb2wKLSAgICAgICAgLy8gY2hhcnMuCi0gICAgICAgIGlmIChiZWdpbiA9PSBzcGVj
TGVuZ3RoKSB7Ci0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50IHBhdGhCZWdpbiA9IC0xOwotICAgICAgICBpbnQgcGF0aEVuZCA9IC0xOwot
Ci0gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVy
eXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbwotICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgaXMgbm8gc2NoZW1lLgotICAgICAgICBpZiAoZXh0cmFjdFNjaGVtZSgmc3BlY1ti
ZWdpbl0sIHNwZWNMZW5ndGggLSBiZWdpbiwgcGFyc2VkLnNjaGVtZSkpIHsKLSAgICAgICAgICAg
IC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZlIGV4dHJhY3RTY2hlbWUgYSBzdWJz
dHJpbmcuCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUu
YmVnaW4oKSArIGJlZ2luKTsKLQotICAgICAgICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkg
IT0gc3BlY0xlbmd0aCAtIDEpIHsKLSAgICAgICAgICAgICAgICBwYXRoQmVnaW4gPSBwYXJzZWQu
c2NoZW1lLmVuZCgpICsgMTsKLSAgICAgICAgICAgICAgICBwYXRoRW5kID0gc3BlY0xlbmd0aDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIHNjaGVt
ZSBmb3VuZCwganVzdCBwYXRoLgotICAgICAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwot
ICAgICAgICAgICAgcGF0aEJlZ2luID0gYmVnaW47Ci0gICAgICAgICAgICBwYXRoRW5kID0gc3Bl
Y0xlbmd0aDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNwbGl0IFtwYXRoQmVnaW4sIHBhdGhF
bmQpIGludG8gYSBwYXRoICsgcXVlcnkuCi0gICAgICAgIGZvciAoaW50IGkgPSBwYXRoQmVnaW47
IGkgPCBwYXRoRW5kOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzcGVjW2ldID09ICc/Jykgewot
ICAgICAgICAgICAgICAgIHBhcnNlZC5xdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkg
KyAxLCBwYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBwYXRoRW5kID0gaTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZvciBj
b21wYXRpYmlsaXR5IHdpdGggdGhlIHN0YW5kYXJkIFVSTCBwYXJzZXIsIHRyZWF0IG5vIHBhdGgg
YXMKLSAgICAgICAgLy8gLTEsIHJhdGhlciB0aGFuIGhhdmluZyBhIGxlbmd0aCBvZiAwCi0gICAg
ICAgIGlmIChwYXRoQmVnaW4gPT0gcGF0aEVuZCkKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoLnJl
c2V0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UocGF0aEJlZ2luLCBwYXRoRW5kKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
aW50IHBhcnNlUG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIGNvbXBvbmVudCkKLSAgICB7Ci0gICAgICAgIC8vIEVhc3kgc3VjY2VzcyBjYXNlIHdoZW4g
dGhlcmUgaXMgbm8gcG9ydC4KLSAgICAgICAgY29uc3QgaW50IG1heERpZ2l0cyA9IDU7Ci0gICAg
ICAgIGlmIChjb21wb25lbnQuaXNFbXB0eU9ySW52YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJu
IFVuc3BlY2lmaWVkUG9ydDsKLQotICAgICAgICBVUkxDb21wb25lbnQgbm9uWmVyb0RpZ2l0cyhj
b21wb25lbnQuZW5kKCksIDApOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVu
dC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4o
KSArIGldICE9ICcwJykgewotICAgICAgICAgICAgICAgIG5vblplcm9EaWdpdHMgPSBVUkxDb21w
b25lbnQ6OmZyb21SYW5nZShjb21wb25lbnQuYmVnaW4oKSArIGksIGNvbXBvbmVudC5lbmQoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFub25aZXJvRGlnaXRzLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7IC8v
IEFsbCBkaWdpdHMgd2VyZSAwLgotCi0gICAgICAgIGlmIChub25aZXJvRGlnaXRzLmxlbmd0aCgp
ID4gbWF4RGlnaXRzKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQb3J0OwotCi0gICAgICAg
IGludCBwb3J0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub25aZXJvRGlnaXRz
Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBzcGVjW25v
blplcm9EaWdpdHMuYmVnaW4oKSArIGldOwotICAgICAgICAgICAgaWYgKCFpc1BvcnREaWdpdChj
aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQb3J0OwotICAgICAgICAgICAgcG9y
dCAqPSAxMDsKLSAgICAgICAgICAgIHBvcnQgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpIC0gJzAn
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3J0ID4gNjU1MzUpCi0gICAgICAgICAgICByZXR1
cm4gSW52YWxpZFBvcnQ7Ci0gICAgICAgIHJldHVybiBwb3J0OwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGV4dHJhY3RGaWxlTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCYgZmlsZU5hbWUpCi0gICAgewotICAgICAg
ICAvLyBIYW5kbGUgZW1wdHkgcGF0aHM6IHRoZXkgaGF2ZSBubyBmaWxlIG5hbWVzLgotICAgICAg
ICBpZiAocGF0aC5pc0VtcHR5T3JJbnZhbGlkKCkpIHsKLSAgICAgICAgICAgIGZpbGVOYW1lLnJl
c2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZWFy
Y2ggYmFja3dhcmRzIGZvciBhIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBub3JtYWxseSB1bnVzZWQg
ZmllbGQKLSAgICAgICAgLy8gaW4gYSBVUkwgZGVsaW1pdGVkIGJ5IGEgc2VtaWNvbG9uLiBXZSBw
YXJzZSB0aGUgcGFyYW1ldGVyIGFzIHBhcnQgb2YKLSAgICAgICAgLy8gdGhlIHBhdGgsIGJ1dCBo
ZXJlLCB3ZSBkb24ndCB3YW50IHRvIGNvdW50IGl0LiBUaGUgbGFzdCBzZW1pY29sb24gaXMKLSAg
ICAgICAgLy8gdGhlIHBhcmFtZXRlci4KLSAgICAgICAgaW50IGZpbGVFbmQgPSBwYXRoLmVuZCgp
OwotICAgICAgICBmb3IgKGludCBpID0gcGF0aC5lbmQoKSAtIDE7IGkgPiBwYXRoLmJlZ2luKCk7
IC0taSkgewotICAgICAgICAgICAgaWYgKHNwZWNbaV0gPT0gJzsnKSB7Ci0gICAgICAgICAgICAg
ICAgZmlsZUVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgc2VhcmNoIGJhY2t3YXJkcyBmcm9tIHRoZSBmaWxl
bmFtZSBlbmQgdG8gdGhlIHByZXZpb3VzIHNsYXNoCi0gICAgICAgIC8vIHRvIGZpbmQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgZmlsZW5hbWUuCi0gICAgICAgIGZvciAoaW50IGkgPSBmaWxlRW5kIC0g
MTsgaSA+PSBwYXRoLmJlZ2luKCk7IC0taSkgewotICAgICAgICAgICAgaWYgKGlzVVJMU2xhc2go
c3BlY1tpXSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGaWxlIG5hbWUgaXMgZXZlcnl0aGluZyBm
b2xsb3dpbmcgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIGVuZAotICAgICAgICAgICAgICAgIGZpbGVO
YW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGZpbGVFbmQpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5v
IHNsYXNoIGZvdW5kLCB0aGlzIG1lYW5zIHRoZSBpbnB1dCB3YXMgZGVnZW5lcmF0ZSAoZ2VuZXJh
bGx5IHBhdGhzCi0gICAgICAgIC8vIHdpbGwgc3RhcnQgd2l0aCBhIHNsYXNoKS4gTGV0J3MgY2Fs
bCBldmVyeXRoaW5nIHRoZSBmaWxlIG5hbWUuCi0gICAgICAgIGZpbGVOYW1lID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UocGF0aC5iZWdpbigpLCBmaWxlRW5kKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBleHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBV
UkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxDb21wb25lbnQmIGtleSwgVVJMQ29tcG9uZW50JiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChxdWVyeS5pc0VtcHR5T3JJbnZhbGlkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaW50IHN0YXJ0ID0gcXVlcnkuYmVnaW4oKTsK
LSAgICAgICAgaW50IGN1cnJlbnQgPSBzdGFydDsKLSAgICAgICAgaW50IGVuZCA9IHF1ZXJ5LmVu
ZCgpOwotCi0gICAgICAgIC8vIFdlIGFzc3VtZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBp
cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSAia2V5IgotICAgICAgICAvLyBhbmQgd2Ugc2tpcCB0byB0
aGUgZW5kIG9mIGl0LgotICAgICAgICBrZXkuc2V0QmVnaW4oY3VycmVudCk7Ci0gICAgICAgIHdo
aWxlIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gIT0gJyYnICYmIHNwZWNbY3VycmVu
dF0gIT0gJz0nKQotICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICBrZXkuc2V0TGVuZ3Ro
KGN1cnJlbnQgLSBrZXkuYmVnaW4oKSk7Ci0KLSAgICAgICAgLy8gU2tpcCB0aGUgc2VwYXJhdG9y
IGFmdGVyIHRoZSBrZXkgKGlmIGFueSkuCi0gICAgICAgIGlmIChjdXJyZW50IDwgZW5kICYmIHNw
ZWNbY3VycmVudF0gPT0gJz0nKQotICAgICAgICAgICAgKytjdXJyZW50OwotCi0gICAgICAgIC8v
IEZpbmQgdGhlIHZhbHVlIHBhcnQuCi0gICAgICAgIHZhbHVlLnNldEJlZ2luKGN1cnJlbnQpOwot
ICAgICAgICB3aGlsZSAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcmJykKLSAg
ICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgdmFsdWUuc2V0TGVuZ3RoKGN1cnJlbnQgLSB2
YWx1ZS5iZWdpbigpKTsKLQotICAgICAgICAvLyBGaW5hbGx5IHNraXAgdGhlIG5leHQgc2VwYXJh
dG9yIGlmIGFueQotICAgICAgICBpZiAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdID09
ICcmJykKLSAgICAgICAgICAgICsrY3VycmVudDsKLQotICAgICAgICAvLyBTYXZlIHRoZSBuZXcg
cXVlcnkKLSAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjdXJyZW50LCBl
bmQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLS8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBwcm90ZWN0ZWQgb3IgcHJpdmF0ZS4KLXB1YmxpYzoKLSAgICAvLyBXZSB0cmVhdCBzbGFz
aGVzIGFuZCBiYWNrc2xhc2hlcyB0aGUgc2FtZSBmb3IgSUUgY29tcGF0aWJpbGl0eS4KLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNVUkxTbGFzaChDaGFyYWN0ZXJUeXBlIGNoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNoID09ICcvJyB8fCBjaCA9PSAnXFwnOwotICAgIH0KLQotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJpbSB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBVUkwg
YmVjYXVzZSBpdCBpcwotICAgIC8vIGEgc3BhY2Ugb3IgYSBjb250cm9sIGNoYXJhY3Rlci4KLSAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVHJpbUZyb21VUkwoQ2hhcmFjdGVyVHlwZSBjaCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjaCA8PSAnICc7Ci0gICAgfQotCi0gICAgLy8gR2l2ZW4g
YW4gYWxyZWFkeS1pbml0aWFsaXplZCBiZWdpbiBpbmRleCBhbmQgZW5kIGluZGV4ICh0aGUgaW5k
ZXggYWZ0ZXIKLSAgICAvLyB0aGUgbGFzdCBDaGFyYWN0ZXJUeXBlIGluIHNwZWMpLCB0aGlzIHNo
cmlua3MgdGhlIHJhbmdlIHRvIGVsaW1pbmF0ZQotICAgIC8vICJzaG91bGQtYmUtdHJpbW1lZCIg
Y2hhcmFjdGVycy4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgdHJpbVVSTChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBpbnQmIGJlZ2luLCBpbnQmIGVuZCkKLSAgICB7Ci0gICAgICAgIC8vIFN0
cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICB3
aGlsZSAoYmVnaW4gPCBlbmQgJiYgc2hvdWxkVHJpbUZyb21VUkwoc3BlY1tiZWdpbl0pKQotICAg
ICAgICAgICAgKytiZWdpbjsKLQotICAgICAgICAvLyBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNl
IGFuZCBjb250cm9sIGNoYXJhY3RlcnMuIFdlIG5lZWQgdGhlID5pCi0gICAgICAgIC8vIHRlc3Qg
Zm9yIHdoZW4gdGhlIGlucHV0IHN0cmluZyBpcyBhbGwgYmxhbmtzOyB3ZSBkb24ndCB3YW50IHRv
IGJhY2sKLSAgICAgICAgLy8gcGFzdCB0aGUgaW5wdXQuCi0gICAgICAgIHdoaWxlIChlbmQgPiBi
ZWdpbiAmJiBzaG91bGRUcmltRnJvbVVSTChzcGVjW2VuZCAtIDFdKSkKLSAgICAgICAgICAgIC0t
ZW5kOwotICAgIH0KLQotICAgIC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNs
YXNoZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG9mZnNldAotICAgIC8vIGluIHRoZSBnaXZlbiBz
dHJpbmcgb2YgdGhlIGdpdmVuIGxlbmd0aC4KLSAgICBzdGF0aWMgaW5saW5lIGludCBjb25zZWN1
dGl2ZVNsYXNoZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSAqc3RyaW5nLCBpbnQgYmVnaW5PZmZzZXQs
IGludCBzdHJpbmdMZW5ndGgpCi0gICAgewotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAg
ICB3aGlsZSAoYmVnaW5PZmZzZXQgKyBjb3VudCA8IHN0cmluZ0xlbmd0aCAmJiBpc1VSTFNsYXNo
KHN0cmluZ1tiZWdpbk9mZnNldCArIGNvdW50XSkpCi0gICAgICAgICAgICArK2NvdW50OwotICAg
ICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFVSTFBhcnNlciBj
YW5ub3QgYmUgY29uc3RydWN0ZWQuCi0gICAgVVJMUGFyc2VyKCk7Ci0KLSAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBhIHZhbGlkIGRpZ2l0IHRvIHVzZSBpbiBh
IHBvcnQuCi0gICAgc3RhdGljIGlubGluZSBib29sIGlzUG9ydERpZ2l0KENoYXJhY3RlclR5cGUg
Y2gpCi0gICAgewotICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JzsKLSAgICB9
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIG5leHQgYXV0aG9yaXR5IHRlcm1p
bmF0b3IgaW4gdGhlIGlucHV0IHN0YXJ0aW5nCi0gICAgLy8gZnJvbSBzdGFydE9mZnNldC4gSWYg
bm8gdGVybWluYXRvciBpcyBmb3VuZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVxdWFsCi0g
ICAgLy8gdG8gc3BlY0xlbmd0aC4KLSAgICBzdGF0aWMgaW50IG5leHRBdXRob3JpdHlUZXJtaW5h
dG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9mZnNldCwgaW50IHNwZWNM
ZW5ndGgpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gc3RhcnRPZmZzZXQ7IGkgPCBzcGVj
TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpc1Bvc3NpYmxlQXV0aG9yaXR5VGVybWlu
YXRvcihzcGVjW2ldKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gc3BlY0xlbmd0aDsgLy8gTm90IGZvdW5kLgotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIHBhcnNlVXNlckluZm8oY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiB1c2VyLCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBVUkxDb21wb25lbnQmIHBh
c3N3b3JkKQotICAgIHsKLSAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHVz
ZXIgc2VjdGlvbiwgd2hpY2ggc2VwYXJhdGVzIHRoZQotICAgICAgICAvLyB1c2VybmFtZSBhbmQg
cGFzc3dvcmQuCi0gICAgICAgIGludCBjb2xvbk9mZnNldCA9IDA7Ci0gICAgICAgIHdoaWxlIChj
b2xvbk9mZnNldCA8IHVzZXIubGVuZ3RoKCkgJiYgc3BlY1t1c2VyLmJlZ2luKCkgKyBjb2xvbk9m
ZnNldF0gIT0gJzonKQotICAgICAgICAgICAgKytjb2xvbk9mZnNldDsKLQotICAgICAgICBpZiAo
Y29sb25PZmZzZXQgPCB1c2VyLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBzZXBh
cmF0b3I6IDx1c2VybmFtZT46PHBhc3N3b3JkPgotICAgICAgICAgICAgdXNlcm5hbWUgPSBVUkxD
b21wb25lbnQodXNlci5iZWdpbigpLCBjb2xvbk9mZnNldCk7Ci0gICAgICAgICAgICBwYXNzd29y
ZCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHVzZXIuYmVnaW4oKSArIGNvbG9uT2Zmc2V0ICsg
MSwgdXNlci5iZWdpbigpICsgdXNlci5sZW5ndGgoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBObyBzZXBhcmF0b3IsIHRyZWF0IGV2ZXJ5dGhpbmcgYXMgdGhlIHVzZXJuYW1l
Ci0gICAgICAgICAgICB1c2VybmFtZSA9IHVzZXI7Ci0gICAgICAgICAgICBwYXNzd29yZCA9IFVS
TENvbXBvbmVudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcGFyc2VT
ZXJ2ZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
c2VydmVySW5mbywgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQmIHBvcnQpCi0gICAg
ewotICAgICAgICBpZiAoIXNlcnZlckluZm8ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8vIE5v
IHNlcnZlciBpbmZvLCBob3N0IG5hbWUgaXMgZW1wdHkuCi0gICAgICAgICAgICBob3N0LnJlc2V0
KCk7Ci0gICAgICAgICAgICBwb3J0LnJlc2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgaG9zdCBzdGFydHMgd2l0aCBhIGxlZnQtYnJhY2tl
dCwgYXNzdW1lIHRoZSBlbnRpcmUgaG9zdCBpcyBhbgotICAgICAgICAvLyBJUHY2IGxpdGVyYWwu
IE90aGVyd2lzZSwgYXNzdW1lIG5vbmUgb2YgdGhlIGhvc3QgaXMgYW4gSVB2NiBsaXRlcmFsLgot
ICAgICAgICAvLyBUaGlzIGFzc3VtcHRpb24gd2lsbCBiZSBvdmVycmlkZGVuIGlmIHdlIGZpbmQg
YSByaWdodC1icmFja2V0LgotICAgICAgICAvLwotICAgICAgICAvLyBPdXIgSVB2NiBhZGRyZXNz
IGNhbm9uaWNhbGl6YXRpb24gY29kZSByZXF1aXJlcyBib3RoIGJyYWNrZXRzIHRvCi0gICAgICAg
IC8vIGV4aXN0LCBidXQgdGhlIGFiaWxpdHkgdG8gbG9jYXRlIGFuIGluY29tcGxldGUgYWRkcmVz
cyBjYW4gc3RpbGwgYmUKLSAgICAgICAgLy8gdXNlZnVsLgotICAgICAgICBpbnQgaXB2NlRlcm1p
bmF0b3IgPSBzcGVjW3NlcnZlckluZm8uYmVnaW4oKV0gPT0gJ1snID8gc2VydmVySW5mby5lbmQo
KSA6IC0xOwotICAgICAgICBpbnQgY29sb24gPSAtMTsKLQotICAgICAgICAvLyBGaW5kIHRoZSBs
YXN0IHJpZ2h0LWJyYWNrZXQsIGFuZCB0aGUgbGFzdCBjb2xvbi4KLSAgICAgICAgZm9yIChpbnQg
aSA9IHNlcnZlckluZm8uYmVnaW4oKTsgaSA8IHNlcnZlckluZm8uZW5kKCk7IGkrKykgewotICAg
ICAgICAgICAgc3dpdGNoIChzcGVjW2ldKSB7Ci0gICAgICAgICAgICBjYXNlICddJzoKLSAgICAg
ICAgICAgICAgICBpcHY2VGVybWluYXRvciA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgICAgICBjb2xvbiA9IGk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbG9uID4gaXB2
NlRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIGEgcG9ydCBudW1iZXI6IDxob3N0
bmFtZT46PHBvcnQ+Ci0gICAgICAgICAgICBob3N0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
c2VydmVySW5mby5iZWdpbigpLCBjb2xvbik7Ci0gICAgICAgICAgICBpZiAoIWhvc3QubGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgaG9zdC5yZXNldCgpOwotICAgICAgICAgICAgcG9ydCA9IFVS
TENvbXBvbmVudDo6ZnJvbVJhbmdlKGNvbG9uICsgMSwgc2VydmVySW5mby5lbmQoKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyBwb3J0OiA8aG9zdG5hbWU+Ci0gICAgICAg
ICAgICBob3N0ID0gc2VydmVySW5mbzsKLSAgICAgICAgICAgIHBvcnQucmVzZXQoKTsKLSAgICAg
ICAgfQotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdU
RlVSTCkKLQotI2VuZGlmIC8vIFVSTFBhcnNlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTFF1ZXJ5Q2Fub25pY2FsaXplci5oIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxRdWVyeUNhbm9uaWNhbGl6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDY3YzQ5N2ZkMjRmZjQ0ZGQ0ZTNjNDBmMjM3NjBjOGU0MzJiODZkOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8v
IENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSNpZm5kZWYgVVJMUXVl
cnlDYW5vbmljYWxpemVyX2gKLSNkZWZpbmUgVVJMUXVlcnlDYW5vbmljYWxpemVyX2gKLQotI2lm
IFVTRShXVEZVUkwpCi0KLSNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKLSNpbmNsdWRlICJVUkxC
dWZmZXIuaCIKLSNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5oIgotI2luY2x1ZGUgIlVSTENv
bXBvbmVudC5oIgotI2luY2x1ZGUgIlVSTEVzY2FwZS5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgSW5DaGFyLCB0eXBlbmFtZSBPdXRDaGFyLCB2b2lkIGNvbnZlcnRD
aGFyc2V0KGNvbnN0IEluQ2hhciosIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYpPgotY2xh
c3MgVVJMUXVlcnlDYW5vbmljYWxpemVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBjYW5v
bmljYWxpemUoY29uc3QgSW5DaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBV
UkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlciwgVVJMQ29tcG9uZW50JiByZXN1bHRRdWVyeSkKLSAg
ICB7Ci0gICAgICAgIGlmIChxdWVyeS5sZW5ndGgoKSA8IDApIHsKLSAgICAgICAgICAgIHJlc3Vs
dFF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBidWZmZXItPmFwcGVuZCgnPycpOwotICAgICAgICByZXN1bHRRdWVyeS5zZXRC
ZWdpbihidWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgY29udmVydFRvUXVlcnlFbmNvZGluZyhz
cGVjLCBxdWVyeSwgYnVmZmVyKTsKLSAgICAgICAgcmVzdWx0UXVlcnkuc2V0TGVuZ3RoKGJ1ZmZl
ci0+bGVuZ3RoKCkgLSByZXN1bHRRdWVyeS5iZWdpbigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgaXNBbGxBU0NJSShjb25zdCBJbkNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgcXVlcnkpCi0gICAgewotICAgICAgICBpbnQgZW5kID0gcXVlcnkuZW5kKCk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSBxdWVyeS5iZWdpbigpOyBpIDwgZW5kOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3BlY1tpXSkgPj0gMHg4MCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHN0YXRpYyBib29sIGlzUmF3OEJpdChjb25z
dCBJbkNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSBzb3VyY2U7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSAm
IDB4RkYgIT0gc291cmNlW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZyhjb25zdCBJbkNoYXIqIHNvdXJjZSwgaW50IGxl
bmd0aCwgVVJMQnVmZmVyPE91dENoYXI+KiBidWZmZXIpCi0gICAgewotICAgICAgICBBU1NFUlQo
aXNSYXc4Qml0KHNvdXJjZSwgbGVuZ3RoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzUXVl
cnlDaGFyKHNvdXJjZVtpXSkpCi0gICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJh
Y3RlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pLCBidWZmZXIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci0+YXBwZW5kKHN0YXRpY19jYXN0
PGNoYXI+KHNvdXJjZVtpXSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
Y29udmVydFRvUXVlcnlFbmNvZGluZyhjb25zdCBJbkNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcXVlcnksIFVSTEJ1ZmZlcjxPdXRDaGFyPiYgYnVmZmVyKQotICAgIHsKLSAgICAgICAg
aWYgKGlzQWxsQVNDSUkoc3BlYywgcXVlcnkpKSB7Ci0gICAgICAgICAgICBhcHBlbmRSYXc4Qml0
UXVlcnlTdHJpbmcoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBidWZmZXIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmF3VVJMQnVmZmVy
PGNoYXIsIDEwMjQ+IGNvbnZlcnRlZFF1ZXJ5OwotICAgICAgICBjb252ZXJ0Q2hhcnNldChzcGVj
LCBxdWVyeSwgY29udmVydGVkUXVlcnkpOwotICAgICAgICBhcHBlbmRSYXc4Qml0UXVlcnlTdHJp
bmcoY29udmVydGVkUXVlcnkuZGF0YSgpLCBjb252ZXJ0ZWRRdWVyeS5sZW5ndGgoKSwgYnVmZmVy
KTsKLSAgICB9Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuY3BwIGIvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHAKaW5kZXggMTU4ZTVkOWQ0OGNlY2I2MjU1
MDYzNzgzMDE1NGM5Mjc1ZDk1MGY4Mi4uOGQ5NzNjYzJhNWJiMGYwOTJlYmFkZDQyNmQ0ZjZhOTcz
ODFmZDE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHAKQEAgLTEzLDcg
KzEzLDcgQEAKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdO
VQogICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAq
CiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSBW
ZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1s
CiAgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBM
IG9yIHRoZSBHUEwgYXJlCi0gKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgogICogdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bwog
ICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8gdXNlIHlvdXIKICAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRp
Y2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTFNlZ21lbnRzLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmgKaW5k
ZXggOWYxNzIyOGQ2YzA2YjBkNWNkMjAxMDYzMjliM2FmZDI4YTQwOWFkOS4uMDM4NWY4MWRkOGMy
MGQ5OTI4ZDU5ODAyYzUyYWNmNDBlMjlmMTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxTZWdtZW50cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2Vn
bWVudHMuaApAQCAtMzEsMTEgKzMxLDE1IEBACiAjZGVmaW5lIFVSTFNlZ21lbnRzX2gKIAogI2lu
Y2x1ZGUgIlVSTENvbXBvbmVudC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNFKFdURlVSTCkKIAogbmFtZXNwYWNlIFdURiB7
CiAKK2NsYXNzIFVSTFNlZ21lbnRzOworCiAvLyBBIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBp
ZGVudGlmaWVkIHBhcnRzIG9mIGFuIGlucHV0IFVSTC4gVGhpcyBzdHJ1Y3R1cmUKIC8vIGRvZXMg
Tk9UIHN0b3JlIHRoZSBVUkwgaXRzZWxmLiBUaGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBzdG9yZSB0
aGUgVVJMIHRleHQKIC8vIGFuZCBpdHMgY29ycmVzcG9uZGluZyBQYXJzZWQgc3RydWN0dXJlIHNl
cGFyYXRlbHkuCkBAIC01OSw2ICs2MywyNiBAQCBwdWJsaWM6CiAKICAgICBVUkxTZWdtZW50cygp
IHsgfQogCisgICAgVVJMU2VnbWVudHMoY29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkK
KyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJTZWdtZW50OworICAgIH0KKworICAgIFVSTFNl
Z21lbnRzJiBvcGVyYXRvcj0oY29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkKKyAgICB7
CisgICAgICAgIHNjaGVtZSA9IG90aGVyU2VnbWVudC5zY2hlbWU7CisgICAgICAgIHVzZXJuYW1l
ID0gb3RoZXJTZWdtZW50LnVzZXJuYW1lOworICAgICAgICBwYXNzd29yZCA9IG90aGVyU2VnbWVu
dC5wYXNzd29yZDsKKyAgICAgICAgaG9zdCA9IG90aGVyU2VnbWVudC5ob3N0OworICAgICAgICBw
b3J0ID0gb3RoZXJTZWdtZW50LnBvcnQ7CisgICAgICAgIHBhdGggPSBvdGhlclNlZ21lbnQucGF0
aDsKKyAgICAgICAgcXVlcnkgPSBvdGhlclNlZ21lbnQucXVlcnk7CisgICAgICAgIGZyYWdtZW50
ID0gb3RoZXJTZWdtZW50LmZyYWdtZW50OworICAgICAgICBpZiAob3RoZXJTZWdtZW50Lm1faW5u
ZXJVUkxTZWdtZW50cykKKyAgICAgICAgICAgIG1faW5uZXJVUkxTZWdtZW50cyA9IGFkb3B0UHRy
KG5ldyBVUkxTZWdtZW50cygqb3RoZXJTZWdtZW50Lm1faW5uZXJVUkxTZWdtZW50cykpOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIC8vIFJldHVybnMgdGhlIGxlbmd0
aCBvZiB0aGUgVVJMICh0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbXBvbmVudCkuCiAgICAgLy8KICAg
ICAvLyBOb3RlIHRoYXQgZm9yIHNvbWUgaW52YWxpZCwgbm9uLWNhbm9uaWNhbCBVUkxzLCB0aGlz
IG1heSBub3QgYmUgdGhlIGxlbmd0aApAQCAtMTA1LDYgKzEyOSwxNiBAQCBwdWJsaWM6CiAgICAg
VVJMQ29tcG9uZW50IHBhdGg7CiAgICAgVVJMQ29tcG9uZW50IHF1ZXJ5OwogICAgIFVSTENvbXBv
bmVudCBmcmFnbWVudDsKKworICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgZGFtbiB1Z2x5IEFQSSBh
bmQgaXMgYmFzaWNhbGx5IHVudGVzdGVkLgorICAgIGNvbnN0IFVSTFNlZ21lbnRzKiBpbm5lclVS
TFNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lclVSTFNlZ21lbnRzLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRJbm5lclVSTFNlZ21lbnRzKGNvbnN0IFVSTFNlZ21lbnRzJiB1cmxTZWdtZW50
cykgeyBtX2lubmVyVVJMU2VnbWVudHMgPSBhZG9wdFB0cihuZXcgVVJMU2VnbWVudHModXJsU2Vn
bWVudHMpKTsgfQorICAgIHZvaWQgY2xlYXJJbm5lclVSTFNlZ21lbnRzKCkgeyByZXR1cm4gbV9p
bm5lclVSTFNlZ21lbnRzLmNsZWFyKCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGUgRmlsZXN5
c3RlbSBBUEkgZGVzY3JpYmUgYSBVUkwgZm9ybWF0IHdpdGggYW4gaW50ZXJuYWwgVVJMLiBFLmcu
OiBmaWxlc3lzdGVtOmh0dHA6Ly93d3cuYXBwbGUuY29tLworICAgIC8vIFRoZSBpbm5lciBVUkwg
c2VnbWVudCBjb250YWlucyB0aGUgcGFyc2VkIGlubmVyIFVSTCBvZiBhIGZpbGVzeXN0ZW06IFVS
TC4KKyAgICBPd25QdHI8VVJMU2VnbWVudHM+IG1faW5uZXJVUkxTZWdtZW50czsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxV
dGlsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2QyMzllNjYxZDNhYTgxYjk4ZTQzMTUyYTNiOGU0NDQ0NTJkMjhjYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAKQEAgLTAsMCArMSw1MTIgQEAK
Ky8vIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlVSTFV0aWwuaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxGaWxlLmgiCisjaW5jbHVk
ZSAiVVJMVXRpbEludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RG
IHsKKworbmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7CisKK2NvbnN0IGNoYXIga0ZpbGVTY2hlbWVb
XSA9ICJmaWxlIjsKK2NvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXSA9ICJmaWxlc3lzdGVt
IjsKK2NvbnN0IGNoYXIga01haWx0b1NjaGVtZVtdID0gIm1haWx0byI7CisKK25hbWVzcGFjZSB7
CisKKy8vIEFTQ0lJLXNwZWNpZmljIHRvbG93ZXIuIFRoZSBzdGFuZGFyZCBsaWJyYXJ5J3MgdG9s
b3dlciBpcyBsb2NhbGUgc2Vuc2l0aXZlLAorLy8gc28gd2UgZG9uJ3Qgd2FudCB0byB1c2UgaXQg
aGVyZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgQ2hhcmFjdGVy
VHlwZSBUb0xvd2VyQVNDSUkoQ2hhcmFjdGVyVHlwZSBjKQoreworICAgIHJldHVybiAoYyA+PSAn
QScgJiYgYyA8PSAnWicpID8gKGMgKyAoJ2EnIC0gJ0EnKSkgOiBjOworfQorCisvLyBCYWNrZW5k
IGZvciBMb3dlckNhc2VFcXVhbHNBU0NJSS4KK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXI+Citpbmxp
bmUgYm9vbCBEb0xvd2VyQ2FzZUVxdWFsc0FTQ0lJKEl0ZXIgYUJlZ2luLCBJdGVyIGFFbmQsIGNv
bnN0IGNoYXIqIGIpCit7CisgICAgZm9yIChJdGVyIGl0ID0gYUJlZ2luOyBpdCAhPSBhRW5kOyAr
K2l0LCArK2IpIHsKKyAgICAgICAgaWYgKCEqYiB8fCBUb0xvd2VyQVNDSUkoKml0KSAhPSAqYikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuICEoKmIpOworfQor
Citjb25zdCBpbnQga051bVN0YW5kYXJkVVJMU2NoZW1lcyA9IDg7Citjb25zdCBjaGFyKiBrU3Rh
bmRhcmRVUkxTY2hlbWVzW2tOdW1TdGFuZGFyZFVSTFNjaGVtZXNdID0geworICAgICJodHRwIiwK
KyAgICAiaHR0cHMiLAorICAgIGtGaWxlU2NoZW1lLCAvLyBZZXMsIGZpbGUgdXJscyBjYW4gaGF2
ZSBhIGhvc3RuYW1lIQorICAgICJmdHAiLAorICAgICJnb3BoZXIiLAorICAgICJ3cyIsIC8vIFdl
YlNvY2tldC4KKyAgICAid3NzIiwgLy8gV2ViU29ja2V0IHNlY3VyZS4KKyAgICBrRmlsZVN5c3Rl
bVNjaGVtZQorfTsKKworLy8gR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcmFuZ2UgaW5zaWRlIHRoZSBz
dHJpbmcsIGNvbXBhcmVzIGl0IHRvIHRoZSBnaXZlbgorLy8gbG93ZXItY2FzZSB8Y29tcGFyZVRv
fCBidWZmZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGJvb2wg
RG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgY29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCit7CisgICAg
aWYgKCFjb21wb25lbnQuaXNOb25FbXB0eSgpKQorICAgICAgICByZXR1cm4gIWNvbXBhcmVUb1sw
XTsgLy8gV2hlbiBjb21wb25lbnQgaXMgZW1wdHksIG1hdGNoIGVtcHR5IHNjaGVtZS4KKyAgICBy
ZXR1cm4gTG93ZXJDYXNlRXF1YWxzQVNDSUkoJnNwZWNbY29tcG9uZW50LmJlZ2luKCldLCAmc3Bl
Y1tjb21wb25lbnQuZW5kKCldLCBjb21wYXJlVG8pOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGdpdmVuIHNjaGVtZSBpZGVudGlmaWVkIGJ5IHxzY2hlbWV8IHdpdGhpbiB8c3BlY3wgaXMg
b25lCisvLyBvZiB0aGUgcmVnaXN0ZXJlZCAic3RhbmRhcmQiIHNjaGVtZXMuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBkb0lzU3RhbmRhcmQoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUpCit7CisgICAgaWYgKCFzY2hl
bWUuaXNOb25FbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEVtcHR5IG9yIGludmFs
aWQgc2NoZW1lcyBhcmUgbm9uLXN0YW5kYXJkLgorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrTnVtU3RhbmRhcmRVUkxTY2hlbWVzOyArK2kpIHsKKyAgICAgICAgaWYgKExvd2VyQ2FzZUVx
dWFsc0FTQ0lJKCZzcGVjW3NjaGVtZS5iZWdpbigpXSwgJnNwZWNbc2NoZW1lLmVuZCgpXSwga1N0
YW5kYXJkVVJMU2NoZW1lc1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Ym9vbCBEb0ZpbmRBbmRDb21wYXJlU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0ciwgaW50
IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVt
ZSkKK3sKKyAgICAvLyBCZWZvcmUgZXh0cmFjdGluZyBzY2hlbWUsIGNhbm9uaWNhbGl6ZSB0aGUg
VVJMIHRvIHJlbW92ZSBhbnkgd2hpdGVzcGFjZS4KKyAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGNh
bm9uaWNhbGl6YXRpb24gZG9uZSBpbiBEb0Nhbm9uaWNhbGl6ZSBmdW5jdGlvbi4KKyAgICBSYXdV
UkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gd2hpdGVzcGFjZUJ1ZmZlcjsKKyAgICBpbnQgc3BlY0xl
bmd0aDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjID0gVVJMQ2Fub25pY2FsaXplcjo6
cmVtb3ZlVVJMV2hpdGVzcGFjZShzdHIsIHN0ckxlbmd0aCwgd2hpdGVzcGFjZUJ1ZmZlciwgJnNw
ZWNMZW5ndGgpOworCisgICAgVVJMQ29tcG9uZW50IG91clNjaGVtZTsKKyAgICBpZiAoIVVSTFBh
cnNlcjo6RXh0cmFjdFNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCAmb3VyU2NoZW1lKSkgeworICAg
ICAgICAvLyBObyBzY2hlbWUuCisgICAgICAgIGlmIChmb3VuZFNjaGVtZSkKKyAgICAgICAgICAg
ICpmb3VuZFNjaGVtZSA9IFVSTENvbXBvbmVudCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChmb3VuZFNjaGVtZSkKKyAgICAgICAgKmZvdW5kU2NoZW1lID0gb3VyU2No
ZW1lOworICAgIHJldHVybiBEb0NvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgb3VyU2NoZW1l
LCBjb21wYXJlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wg
RG9DYW5vbmljYWxpemUoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5TcGVjLCBpbnQgaW5TcGVjTGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVy
dGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91cHV0UGFyc2Vk
KQoreworICAgIC8vIFJlbW92ZSBhbnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhl
IHJlbGF0aXZlIFVSTCwgcG9zc2libHkKKyAgICAvLyBjb3B5aW5nIHRvIHRoZSBuZXcgYnVmZmVy
LgorICAgIFJhd1VSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNlQnVmZmVyOworICAg
IGludCBzcGVjTGVuZ3RoOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMgPSBVUkxDYW5v
bmljYWxpemVyOjpyZW1vdmVVUkxXaGl0ZXNwYWNlKGluU3BlYywgaW5TcGVjTGVuZ3RoLCB3aGl0
ZXNwYWNlQnVmZmVyLCAmc3BlY0xlbmd0aCk7CisKKyAgICBVUkxTZWdtZW50cyBwYXJzZWRJbnB1
dDsKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIEZvciBXaW5kb3dzLCB3ZSBhbGxvdyB0aGluZ3Mg
dGhhdCBsb29rIGxpa2UgYWJzb2x1dGUgV2luZG93cyBwYXRocyB0byBiZQorICAgIC8vIGZpeGVk
IHVwIG1hZ2ljYWxseSB0byBmaWxlIFVSTHMuIFRoaXMgaXMgZG9uZSBmb3IgSUUgY29tcGF0YWJp
bGl0eS4gRm9yCisgICAgLy8gZXhhbXBsZSwgdGhpcyB3aWxsIGNoYW5nZSAiYzovZm9vIiBpbnRv
IGEgZmlsZSBVUkwgcmF0aGVyIHRoYW4gdHJlYXRpbmcKKyAgICAvLyBpdCBhcyBhIFVSTCB3aXRo
IHRoZSBwcm90b2NvbCAiYyIuIEl0IGFsc28gd29ya3MgZm9yIFVOQyAoIlxcZm9vXGJhci50eHQi
KS4KKyAgICAvLyBUaGVyZSBpcyBzaW1pbGFyIGxvZ2ljIGluIFVSTENhbm9uaWNhbGl6ZXJfcmVs
YXRpdmUuY2MgZm9yCisgICAgLy8KKyAgICAvLyBGb3IgTWF4ICYgVW5peCwgd2UgZG9uJ3QgZG8g
dGhpcyAodGhlIGVxdWl2YWxlbnQgd291bGQgYmUgIi9mb28vYmFyIiB3aGljaAorICAgIC8vIGhh
cyBubyBtZWFuaW5nIGFzIGFuIGFic29sdXRlIHBhdGggbmFtZS4gVGhpcyBpcyBiZWNhdXNlIGJy
b3dzZXJzIG9uIE1hYworICAgIC8vICYgVW5peCBkb24ndCBnZW5lcmFsbHkgZG8gdGhpcywgc28g
dGhlcmUgaXMgbm8gY29tcGF0aWJpbGl0eSByZWFzb24gZm9yCisgICAgLy8gZG9pbmcgc28uCisg
ICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luVU5DUGF0aChzcGVjLCAwLCBzcGVjTGVuZ3RoLCBm
YWxzZSkKKyAgICAgICAgfHwgVVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNw
ZWMsIDAsIHNwZWNMZW5ndGgpKSB7CisgICAgICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJMKHNw
ZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHJldHVybiBVUkxDYW5vbmlj
YWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZElucHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQsIG91cHV0UGFyc2VkKTsKKyAgICB9CisjZW5kaWYKKworICAg
IFVSTENvbXBvbmVudCBzY2hlbWU7CisgICAgaWYgKCFVUkxQYXJzZXI6OkV4dHJhY3RTY2hlbWUo
c3BlYywgc3BlY0xlbmd0aCwgJnNjaGVtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFRoaXMgaXMgdGhlIHBhcnNlZCB2ZXJzaW9uIG9mIHRoZSBpbnB1dCBVUkwsIHdlIGhhdmUg
dG8gY2Fub25pY2FsaXplIGl0CisgICAgLy8gYmVmb3JlIHN0b3JpbmcgaXQgaW4gb3VyIG9iamVj
dC4KKyAgICBib29sIHN1Y2Nlc3M7CisgICAgaWYgKERvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChz
cGVjLCBzY2hlbWUsIGtGaWxlU2NoZW1lKSkgeworICAgICAgICAvLyBGaWxlIFVSTHMgYXJlIHNw
ZWNpYWwuCisgICAgICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgs
ICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5v
bmljYWxpemVGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZElucHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29u
dmVydGVyLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91cHV0UGFyc2VkKTsKKyAgICB9IGVsc2UgaWYgKERvQ29tcGFyZVNj
aGVtZUNvbXBvbmVudChzcGVjLCBzY2hlbWUsIGtGaWxlU3lzdGVtU2NoZW1lKSkgeworICAgICAg
ICAvLyBGaWxlc3lzdGVtIFVSTHMgYXJlIHNwZWNpYWwuCisgICAgICAgIFVSTFBhcnNlcjo6UGFy
c2VGaWxlU3lzdGVtVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAgICAg
IHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKHNw
ZWMsIHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQsIG91cHV0UGFyc2VkKTsKKworICAgIH0gZWxzZSBpZiAoZG9Jc1N0YW5k
YXJkKHNwZWMsIHNjaGVtZSkpIHsKKyAgICAgICAgLy8gQWxsICJub3JtYWwiIFVSTHMuCisgICAg
ICAgIFVSTFBhcnNlcjo6UGFyc2VTdGFuZGFyZFVSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2Vk
SW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXpl
U3RhbmRhcmRVUkwoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkSW5wdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29u
dmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LCBvdXB1dFBhcnNlZCk7CisKKyAgICB9IGVsc2UgaWYgKERvQ29t
cGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBzY2hlbWUsIGtNYWlsdG9TY2hlbWUpKSB7CisgICAg
ICAgIC8vIE1haWx0byBhcmUgdHJlYXRlZCBsaWtlIGEgc3RhbmRhcmQgdXJsIHdpdGggb25seSBh
IHNjaGVtZSwgcGF0aCwgcXVlcnkKKyAgICAgICAgVVJMUGFyc2VyOjpQYXJzZU1haWx0b1VSTChz
cGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fu
b25pY2FsaXplcjo6Q2Fub25pY2FsaXplTWFpbHRvVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNl
ZElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gIldlaXJkIiBVUkxzIGxpa2UgZGF0YTogYW5kIGphdmFzY3JpcHQ6CisgICAgICAgIFVSTFBh
cnNlcjo6UGFyc2VQYXRoVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAg
ICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVQYXRoVVJMKHNwZWMs
IHBhcnNlZElucHV0LCBvdXRwdXQsICpvdXB1dFBhcnNlZCk7CisgICAgfQorICAgIHJldHVybiBz
dWNjZXNzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBkb1Jl
c29sdmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJh
c2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGlu
UmVsYXRpdmUsIGludCBpblJlbGF0aXZlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBV
UkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMq
IG91cHV0UGFyc2VkKQoreworICAgIC8vIFJlbW92ZSBhbnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBt
aWRkbGUgb2YgdGhlIHJlbGF0aXZlIFVSTCwgcG9zc2libHkKKyAgICAvLyBjb3B5aW5nIHRvIHRo
ZSBuZXcgYnVmZmVyLgorICAgIFJhd1VSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNl
QnVmZmVyOworICAgIGludCByZWxhdGl2ZUxlbmd0aDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiByZWxhdGl2ZSA9IFVSTENhbm9uaWNhbGl6ZXI6OnJlbW92ZVVSTFdoaXRlc3BhY2UoaW5SZWxh
dGl2ZSwgaW5SZWxhdGl2ZUxlbmd0aCwgd2hpdGVzcGFjZUJ1ZmZlciwgJnJlbGF0aXZlTGVuZ3Ro
KTsKKworICAgIC8vIFNlZSBpZiBvdXIgYmFzZSBVUkwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgInN0
YW5kYXJkIi4KKyAgICBib29sIHN0YW5kYXJkQmFzZVNjaGVtZSA9IGJhc2VQYXJzZWQuc2NoZW1l
LmlzTm9uRW1wdHkoKSAmJiBkb0lzU3RhbmRhcmQoYmFzZVNwZWMsIGJhc2VQYXJzZWQuc2NoZW1l
KTsKKworICAgIGJvb2wgaXNSZWxhdGl2ZTsKKyAgICBVUkxDb21wb25lbnQgcmVsYXRpdmVDb21w
b25lbnQ7CisgICAgaWYgKCFVUkxDYW5vbmljYWxpemVyOjppc1JlbGF0aXZlVVJMKGJhc2VTcGVj
LCBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWxhdGl2ZSwgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YW5kYXJkQmFzZVNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmlzUmVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZyZWxhdGl2ZUNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gRXJyb3IgcmVzb2x2aW5nLgorCisgICAgaWYgKGlzUmVsYXRpdmUpIHsKKyAgICAgICAgLy8g
UmVsYXRpdmUsIHJlc29sdmUgYW5kIGNhbm9uaWNhbGl6ZS4KKyAgICAgICAgYm9vbCBmaWxlQmFz
ZVNjaGVtZSA9IGJhc2VQYXJzZWQuc2NoZW1lLmlzTm9uRW1wdHkoKSAmJiBEb0NvbXBhcmVTY2hl
bWVDb21wb25lbnQoYmFzZVNwZWMsIGJhc2VQYXJzZWQuc2NoZW1lLCBrRmlsZVNjaGVtZSk7Cisg
ICAgICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpyZXNvbHZlUmVsYXRpdmVVUkwoYmFzZVNw
ZWMsIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsZUJhc2VTY2hlbWUsIHJlbGF0aXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LCBjaGFy
c2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIE5vdCByZWxh
dGl2ZSwgY2Fub25pY2FsaXplIHRoZSBpbnB1dC4KKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemUo
cmVsYXRpdmUsIHJlbGF0aXZlTGVuZ3RoLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91cHV0
UGFyc2VkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgRG9S
ZXBsYWNlQ29tcG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzcGVjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZW1lbnRzPENoYXJhY3RlclR5cGU+JiByZXBsYWNlbWVudHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciog
Y2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0
UGFyc2VkKQoreworICAgIC8vIElmIHRoZSBzY2hlbWUgaXMgb3ZlcnJpZGRlbiwganVzdCBkbyBh
IHNpbXBsZSBzdHJpbmcgc3Vic3RpdHV0aW9uIGFuZAorICAgIC8vIHJlcGFyc2UgdGhlIHdob2xl
IHRoaW5nLiBUaGVyZSBhcmUgbG90cyBvZiBlZGdlIGNhc2VzIHRoYXQgd2UgcmVhbGx5IGRvbid0
CisgICAgLy8gd2FudCB0byBkZWFsIHdpdGguIExpa2Ugd2hhdCBoYXBwZW5zIGlmIEkgcmVwbGFj
ZSAiaHR0cDovL2U6ODA4MC9mb28iCisgICAgLy8gd2l0aCBhIGZpbGUuIERvZXMgaXQgYmVjb21l
ICJmaWxlOi8vL0U6LzgwODAvZm9vIiB3aGVyZSB0aGUgcG9ydCBudW1iZXIKKyAgICAvLyBiZWNv
bWVzIHBhcnQgb2YgdGhlIHBhdGg/IFBhcnNpbmcgdGhhdCBzdHJpbmcgYXMgYSBmaWxlIFVSTCBz
YXlzICJ5ZXMiCisgICAgLy8gYnV0IGFsbW9zdCBubyBzYW5lIHJ1bGUgZm9yIGRlYWxpbmcgd2l0
aCB0aGUgY29tcG9uZW50cyBpbmRpdmlkdWFsbHkgd291bGQKKyAgICAvLyBjb21lIHVwIHdpdGgg
dGhhdC4KKyAgICAvLworICAgIC8vIFdoeSBhbGxvdyB0aGVzZSBjcmF6eSBjYXNlcyBhdCBhbGw/
IFByb2dyYW1hdGljYWxseSwgdGhlcmUgaXMgYWxtb3N0IG5vCisgICAgLy8gY2FzZSBmb3IgcmVw
bGFjaW5nIHRoZSBzY2hlbWUuIFRoZSBtb3N0IGNvbW1vbiBjYXNlIGZvciBoaXR0aW5nIHRoaXMg
aXMKKyAgICAvLyBpbiBKUyB3aGVuIGJ1aWxkaW5nIHVwIGEgVVJMIHVzaW5nIHRoZSBsb2NhdGlv
biBvYmplY3QuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgLy8gSlMgY29kZSBleHBlY3RzIHRoZSBz
dHJpbmcgc3Vic3RpdHV0aW9uIGJlaGF2aW9yOgorICAgIC8vICAgaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwOC9XRC1odG1sNS0yMDA4MDYxMC9zdHJ1Y3R1cmVkLmh0bWwjY29tbW9uMworICAgIGlm
IChyZXBsYWNlbWVudHMuSXNTY2hlbWVPdmVycmlkZGVuKCkpIHsKKyAgICAgICAgLy8gQ2Fub25p
Y2FsaXplIHRoZSBuZXcgc2NoZW1lIHNvIGl0IGlzIDgtYml0IGFuZCBjYW4gYmUgY29uY2F0ZW5h
dGVkIHdpdGgKKyAgICAgICAgLy8gdGhlIGV4aXN0aW5nIHNwZWMuCisgICAgICAgIFJhd1VSTEJ1
ZmZlcjxjaGFyLCAxMjg+IHNjaGVtZV9yZXBsYWNlZDsKKyAgICAgICAgVVJMQ29tcG9uZW50IHNj
aGVtZVJlcGxhY2VkUGFyc2VkOworICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxp
emVTY2hlbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlbWVudHMuc291cmNlcygpLnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5jb21wb25lbnRzKCkuc2NoZW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lX3JlcGxhY2Vk
LCAmc2NoZW1lUmVwbGFjZWRQYXJzZWQpOworCisgICAgICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhh
dCB0aGUgaW5wdXQgaXMgY2Fub25pY2FsaXplZCwgd2hpY2ggbWVhbnMgaXQgYWx3YXlzIGhhcwor
ICAgICAgICAvLyBhIGNvbG9uIGFmdGVyIHRoZSBzY2hlbWUgKG9yIHdoZXJlIHRoZSBzY2hlbWUg
d291bGQgYmUpLgorICAgICAgICBpbnQgc3BlY0FmdGVyQ29sb24gPSBwYXJzZWQuc2NoZW1lLmlz
VmFsaWQoKSA/IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxCisgICAgICAgIDogMTsKKyAgICAgICAg
aWYgKHNwZWNMZW5ndGggLSBzcGVjQWZ0ZXJDb2xvbiA+IDApIHsKKyAgICAgICAgICAgIHNjaGVt
ZV9yZXBsYWNlZC5hcHBlbmQoJnNwZWNbc3BlY0FmdGVyQ29sb25dLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGVjTGVuZ3RoIC0gc3BlY0FmdGVyQ29sb24pOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gY29tcGxldGVseSByZS1wYXJzZSB0aGUg
cmVzdWx0aW5nIHN0cmluZyBzaW5jZSBpdHMgbWVhbmluZworICAgICAgICAvLyBtYXkgaGF2ZSBj
aGFuZ2VkIHdpdGggdGhlIGRpZmZlcmVudCBzY2hlbWUuCisgICAgICAgIFJhd1VSTEJ1ZmZlcjxj
aGFyLCAxMjg+IHJlY2Fub25pY2FsaXplZDsKKyAgICAgICAgVVJMU2VnbWVudHMgcmVjYW5vbmlj
YWxpemVkUGFyc2VkOworICAgICAgICBEb0Nhbm9uaWNhbGl6ZShzY2hlbWVfcmVwbGFjZWQuZGF0
YSgpLCBzY2hlbWVfcmVwbGFjZWQubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHJlY2Fub25pY2FsaXplZCwg
JnJlY2Fub25pY2FsaXplZFBhcnNlZCk7CisKKyAgICAgICAgLy8gUmVjdXJzZSB1c2luZyB0aGUg
dmVyc2lvbiB3aXRoIHRoZSBzY2hlbWUgYWxyZWFkeSByZXBsYWNlZC4gVGhpcyB3aWxsIG5vdwor
ICAgICAgICAvLyB1c2UgdGhlIHJlcGxhY2VtZW50IHJ1bGVzIGZvciB0aGUgbmV3IHNjaGVtZS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gV2FybmluZzogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBS
ZXBsYWNlQ29tcG9uZW50cyB3aWxsIHJlLWNoZWNrIGFsbAorICAgICAgICAvLyBjb21wb25lbnRz
IGZvciB2YWxpZGl0eS4gVGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0IGZhaWwgaWYgRG9DYW5vbmlj
YWxpemUKKyAgICAgICAgLy8gZmFpbGVkIGFib3ZlIHNpbmNlIHRoZW9yZXRpY2FsbHkgdGhlIHRo
aW5nIG1ha2luZyBpdCBmYWlsIGNvdWxkIGJlCisgICAgICAgIC8vIGdldHRpbmcgcmVwbGFjZWQg
aGVyZS4gSWYgUmVwbGFjZUNvbXBvbmVudHMgZGlkbid0IHJlLWNoZWNrIGV2ZXJ5dGhpbmcsCisg
ICAgICAgIC8vIHdlIHdvdWxkbid0IGtub3cgaWYgc29tZXRoaW5nICpub3QqIGdldHRpbmcgcmVw
bGFjZWQgaXMgYSBwcm9ibGVtLgorICAgICAgICAvLyBJZiB0aGUgc2NoZW1lLXNwZWNpZmljIHJl
cGxhY2VycyBhcmUgbWFkZSBtb3JlIGludGVsbGlnZW50IHNvIHRoZXkgZG9uJ3QKKyAgICAgICAg
Ly8gcmUtY2hlY2sgZXZlcnl0aGluZywgd2Ugc2hvdWxkIGluc3RlYWQgcmVjYW5vbmljYWxpemUg
dGhlIHdob2xlIHRoaW5nCisgICAgICAgIC8vIGFmdGVyIHRoaXMgY2FsbCB0byBjaGVjayB2YWxp
ZGl0eSAodGhpcyBhc3N1bWVzIHJlcGxhY2luZyB0aGUgc2NoZW1lIGlzCisgICAgICAgIC8vIG11
Y2ggbXVjaCBsZXNzIGNvbW1vbiB0aGFuIG90aGVyIHR5cGVzIG9mIHJlcGxhY2VtZW50cywgbGlr
ZSBjbGVhcmluZyB0aGUKKyAgICAgICAgLy8gcmVmKS4KKyAgICAgICAgVVJMQ2Fub25pY2FsaXpl
cjo6UmVwbGFjZW1lbnRzPENoYXJhY3RlclR5cGU+IHJlcGxhY2VtZW50c05vU2NoZW1lID0gcmVw
bGFjZW1lbnRzOworICAgICAgICByZXBsYWNlbWVudHNOb1NjaGVtZS5TZXRTY2hlbWUoMCwgVVJM
Q29tcG9uZW50KCkpOworICAgICAgICByZXR1cm4gRG9SZXBsYWNlQ29tcG9uZW50cyhyZWNhbm9u
aWNhbGl6ZWQuZGF0YSgpLCByZWNhbm9uaWNhbGl6ZWQubGVuZ3RoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY2Fub25pY2FsaXplZFBhcnNlZCwgcmVwbGFjZW1lbnRz
Tm9TY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252
ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgdGhlbiB3ZSBrbm93IHRoZSBzY2hlbWUgZG9lc24ndCBuZWVkIHRvIGJlIHJlcGxhY2Vk
LCBzbyBjYW4KKyAgICAvLyBqdXN0IGtleSBvZmYgdGhlIHNjaGVtZSBpbiB0aGUgc3BlYyB0byBr
bm93IGhvdyB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorICAgIGlmIChEb0NvbXBhcmVTY2hlbWVD
b21wb25lbnQoc3BlYywgcGFyc2VkLnNjaGVtZSwga0ZpbGVTY2hlbWUpKSB7CisgICAgICAgIHJl
dHVybiBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlRmlsZVVSTChzcGVjLCBwYXJzZWQsIHJlcGxh
Y2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYg
KERvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBwYXJzZWQuc2NoZW1lLCBrRmlsZVN5c3Rl
bVNjaGVtZSkpIHsKKyAgICAgICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VGaWxl
U3lzdGVtVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0
cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYgKGRvSXNTdGFuZGFyZChzcGVjLCBwYXJz
ZWQuc2NoZW1lKSkgeworICAgICAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVN0
YW5kYXJkVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1
dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYgKERvQ29tcGFyZVNjaGVtZUNvbXBvbmVu
dChzcGVjLCBwYXJzZWQuc2NoZW1lLCBrTWFpbHRvU2NoZW1lKSkgeworICAgICAgICByZXR1cm4g
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZU1haWx0b1VSTChzcGVjLCBwYXJzZWQsIHJlcGxhY2Vt
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIERlZmF1bHQgaXMgYSBwYXRo
IFVSTC4KKyAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVBhdGhVUkwoc3BlYywg
cGFyc2VkLCByZXBsYWNlbWVudHMsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBu
YW1lc3BhY2UKKworYm9vbCBJc1N0YW5kYXJkKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgc2NoZW1lKQoreworICAgIHJldHVybiBkb0lzU3RhbmRhcmQoc3BlYywgc2NoZW1l
KTsKK30KKworYm9vbCBJc1N0YW5kYXJkKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9Jc1N0YW5kYXJkKHNwZWMsIHNjaGVtZSk7
Cit9CisKK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgY2hhciogc3RyLCBpbnQgc3Ry
TGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKQor
eworICAgIHJldHVybiBEb0ZpbmRBbmRDb21wYXJlU2NoZW1lKHN0ciwgc3RyTGVuZ3RoLCBjb21w
YXJlLCBmb3VuZFNjaGVtZSk7Cit9CisKK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3Qg
VUNoYXIqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ckxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcGFyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSkKK3sKKyAgICByZXR1cm4g
RG9GaW5kQW5kQ29tcGFyZVNjaGVtZShzdHIsIHN0ckxlbmd0aCwgY29tcGFyZSwgZm91bmRTY2hl
bWUpOworfQorCitib29sIENhbm9uaWNhbGl6ZShjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAg
ICAgICAgICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxp
emVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3VwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplKHNwZWMsIHNwZWNM
ZW5ndGgsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQpOworfQorCitib29s
IENhbm9uaWNhbGl6ZShjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgIGludCBz
cGVjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENv
bnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91cHV0UGFyc2Vk
KQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZShzcGVjLCBzcGVjTGVuZ3RoLCBjaGFyc2V0
Q29udmVydGVyLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKworYm9vbCByZXNvbHZlUmVsYXRp
dmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2ZUxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252
ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQoreworICAgIHJldHVybiBk
b1Jlc29sdmVSZWxhdGl2ZShiYXNlU3BlYywgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0aXZlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKwor
Ym9vbCByZXNvbHZlUmVsYXRpdmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21l
bnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0
aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmlj
YWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNl
ZCkKK3sKKyAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmUoYmFzZVNwZWMsIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLCByZWxhdGl2ZUxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBv
dXB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgUmVwbGFjZUNvbXBvbmVudHMoY29uc3QgY2hhciogc3Bl
YywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1l
bnRzLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29u
dmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gRG9SZXBsYWNlQ29tcG9uZW50cyhzcGVjLCBzcGVj
TGVuZ3RoLCBwYXJzZWQsIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wg
UmVwbGFjZUNvbXBvbmVudHMoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6
ZXI6OlJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0
dXJuIERvUmVwbGFjZUNvbXBvbmVudHMoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkLCByZXBsYWNl
bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwg
b3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCisvLyBGcm9udC1lbmRzIGZvciBMb3dlckNhc2VF
cXVhbHNBU0NJSS4KK2Jvb2wgTG93ZXJDYXNlRXF1YWxzQVNDSUkoY29uc3QgY2hhciogYUJlZ2lu
LCBjb25zdCBjaGFyKiBhRW5kLCBjb25zdCBjaGFyKiBiKQoreworICAgIHJldHVybiBEb0xvd2Vy
Q2FzZUVxdWFsc0FTQ0lJKGFCZWdpbiwgYUVuZCwgYik7Cit9CisKK2Jvb2wgTG93ZXJDYXNlRXF1
YWxzQVNDSUkoY29uc3QgY2hhciogYUJlZ2luLCBjb25zdCBjaGFyKiBhRW5kLCBjb25zdCBjaGFy
KiBiQmVnaW4sIGNvbnN0IGNoYXIqIGJFbmQpCit7CisgICAgd2hpbGUgKGFCZWdpbiAhPSBhRW5k
ICYmIGJCZWdpbiAhPSBiRW5kICYmIFRvTG93ZXJBU0NJSSgqYUJlZ2luKSA9PSAqYkJlZ2luKSB7
CisgICAgICAgIGFCZWdpbisrOworICAgICAgICBiQmVnaW4rKzsKKyAgICB9CisgICAgcmV0dXJu
IGFCZWdpbiA9PSBhRW5kICYmIGJCZWdpbiA9PSBiRW5kOworfQorCitib29sIExvd2VyQ2FzZUVx
dWFsc0FTQ0lJKGNvbnN0IFVDaGFyKiBhQmVnaW4sIGNvbnN0IFVDaGFyKiBhRW5kLCBjb25zdCBj
aGFyKiBiKQoreworICAgIHJldHVybiBEb0xvd2VyQ2FzZUVxdWFsc0FTQ0lJKGFCZWdpbiwgYUVu
ZCwgYik7Cit9CisKK3ZvaWQgRGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IGNoYXIqIGlu
cHV0LCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpCit7CisgICAgUmF3VVJM
QnVmZmVyPGNoYXI+IHVuZXNjYXBlZENoYXJzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlucHV0W2ldID09ICclJykgeworICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBjaDsKKyAgICAgICAgICAgIGlmIChVUkxDYW5vbmljYWxpemVyOjpEZWNv
ZGVFc2NhcGVkKGlucHV0LCAmaSwgbGVuZ3RoLCAmY2gpKQorICAgICAgICAgICAgICAgIHVuZXNj
YXBlZENoYXJzLmFwcGVuZChjaCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSwgY29weSB0aGUgcGVyY2VudCBsaXRlcmFsLgor
ICAgICAgICAgICAgICAgIHVuZXNjYXBlZENoYXJzLmFwcGVuZCgnJScpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUmVndWxhciBub24tZXNjYXBlZCA4
LWJpdCBjaGFyYWN0ZXIuCisgICAgICAgICAgICB1bmVzY2FwZWRDaGFycy5hcHBlbmQoaW5wdXRb
aV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29udmVydCB0aGF0IDgtYml0IHRvIFVU
Ri0xNi4gSXQncyBub3QgY2xlYXIgSUUgZG9lcyB0aGlzIGF0IGFsbCB0bworICAgIC8vIEphdmFT
Y3JpcHQgVVJMcywgYnV0IEZpcmVmb3ggYW5kIFNhZmFyaSBkby4KKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IHVuZXNjYXBlZENoYXJzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciB1Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmVzY2FwZWRDaGFycy5hdChp
KSk7CisgICAgICAgIGlmICh1Y2ggPCAweDgwKSB7CisgICAgICAgICAgICAvLyBOb24tVVRGLTgs
IGp1c3QgYXBwZW5kIGRpcmVjdGx5CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVjaCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBuZXh0X2NoIHdpbGwgcG9pbnQgdG8gdGhl
IGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBkZWNvZGVkCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXIu
CisgICAgICAgICAgICBpbnQgbmV4dENoYXJhY3RlciA9IGk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBjb2RlUG9pbnQ7CisgICAgICAgICAgICBpZiAoVVJMQ2Fub25pY2FsaXplcjo6cmVhZFVURkNo
YXIodW5lc2NhcGVkQ2hhcnMuZGF0YSgpLCAmbmV4dENoYXJhY3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWRDaGFycy5sZW5ndGgoKSwg
JmNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgICAgICAvLyBWYWxpZCBVVEYtOCBjaGFyYWN0ZXIs
IGNvbnZlcnQgdG8gVVRGLTE2LgorICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkFw
cGVuZFVURjE2VmFsdWUoY29kZVBvaW50LCBvdXRwdXQpOworICAgICAgICAgICAgICAgIGkgPSBu
ZXh0Q2hhcmFjdGVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IHNlcXVlbmNlcyB0aGF0IGFyZSBub3QgdmFsaWQgVVRGLTgsIHdlIGtl
ZXAKKyAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNvZGUgcG9pbnRzIGFuZCBwcm9tb3RlIHRv
IFVURi0xNi4gV2UgY29weSBhbGwgY2hhcmFjdGVycworICAgICAgICAgICAgICAgIC8vIGZyb20g
dGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgaWRlbnRpZmllZCBzZXF1ZW5j
ZS4KKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG5leHRDaGFyYWN0ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmVz
Y2FwZWRDaGFycy5hdChpKSkpOworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4odW5lc2NhcGVkQ2hhcnMuYXQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBFbmNvZGVVUklDb21wb25lbnQoY29uc3QgY2hhciogaW5wdXQs
IGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oaW5wdXRbaV0pOworICAgICAgICBpZiAoVVJMQ2hhcmFjdGVy
VHlwZXM6OmlzQ29tcG9uZW50Q2hhcihjKSkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoYyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OmFwcGVuZFVSTEVz
Y2FwZWRDaGFyYWN0ZXIoYywgb3V0cHV0KTsKKyAgICB9Cit9CisKK2Jvb2wgQ29tcGFyZVNjaGVt
ZUNvbXBvbmVudChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXBvbmVu
dCwgY29uc3QgY2hhciogY29tcGFyZVRvKQoreworICAgIHJldHVybiBEb0NvbXBhcmVTY2hlbWVD
b21wb25lbnQoc3BlYywgY29tcG9uZW50LCBjb21wYXJlVG8pOworfQorCitib29sIENvbXBhcmVT
Y2hlbWVDb21wb25lbnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29t
cG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCit7CisgICAgcmV0dXJuIERvQ29tcGFyZVNj
aGVtZUNvbXBvbmVudChzcGVjLCBjb21wb25lbnQsIGNvbXBhcmVUbyk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFVSTFV0aWxpdGllcworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVT
RShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuaCBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwMTllNTYxZWVj
MWFiNWQ0YjgxZDNhM2Q3NWVmYWZlNjNkOTRhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuaApAQCAtMCwwICsxLDEzMyBAQAorLy8gQ29weXJpZ2h0
IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIFVSTFV0aWxfaAorI2RlZmluZSBVUkxV
dGlsX2gKKworI2luY2x1ZGUgIlVSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgiCisj
aW5jbHVkZSAiVVJMUGFyc2UuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFV0aWxp
dGllcyB7CisKKy8vIExvY2F0ZXMgdGhlIHNjaGVtZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBw
bGFjZXMgaXQgaW50byB8Zm91bmRTY2hlbWV8LAorLy8gd2hpY2ggbWF5IGJlIDAgdG8gaW5kaWNh
dGUgdGhlIGNhbGxlciBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSByYW5nZS4KKy8vCisvLyBSZXR1
cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHxjb21wYXJlfCBzY2hlbWUgbWF0Y2hlcyB0aGUgc2NoZW1l
IGZvdW5kIGluIHRoZQorLy8gaW5wdXQgKGlmIGFueSkuIFRoZSB8Y29tcGFyZXwgc2NoZW1lIG11
c3QgYmUgYSB2YWxpZCBjYW5vbmljYWwgc2NoZW1lIG9yCisvLyB0aGUgcmVzdWx0IG9mIHRoZSBj
b21wYXJpc29uIGlzIHVuZGVmaW5lZC4KK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3Qg
Y2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25l
bnQqIGZvdW5kU2NoZW1lKTsKK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgVUNoYXIq
IHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBm
b3VuZFNjaGVtZSk7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIHJlcHJl
c2VudHMgYSBzdGFuZGFyZCBVUkwuIFRoaXMgbWVhbnMgdGhhdAorLy8gZWl0aGVyIHRoZSBzY2hl
bWUgaXMgaW4gdGhlIGxpc3Qgb2Yga25vd24gc3RhbmRhcmQgc2NoZW1lcy4KK2Jvb2wgSXNTdGFu
ZGFyZChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSk7Citib29s
IElzU3RhbmRhcmQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1l
KTsKKworLy8gVVJMIGxpYnJhcnkgd3JhcHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBQYXJzZXMgdGhlIGdpdmVuIHNwZWMg
YWNjb3JkaW5nIHRvIHRoZSBleHRyYWN0ZWQgc2NoZW1lIHR5cGUuIE5vcm1hbCB1c2VycworLy8g
c2hvdWxkIHVzZSB0aGUgVVJMIG9iamVjdCwgYWx0aG91Z2ggdGhpcyBtYXkgYmUgdXNlZnVsIGlm
IHBlcmZvcm1hbmNlIGlzCisvLyBjcml0aWNhbCBhbmQgeW91IGRvbid0IHdhbnQgdG8gZG8gdGhl
IGhlYXAgYWxsb2NhdGlvbiBmb3IgdGhlIHN0ZDo6c3RyaW5nLgorLy8KKy8vIEFzIHdpdGggdGhl
IFVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZSogZnVuY3Rpb25zLCB0aGUgY2hhcnNldCBj
b252ZXJ0ZXIgY2FuCisvLyBiZSAwIHRvIHVzZSBVVEYtOCAoaXQgd2lsbCBiZSBmYXN0ZXIgaW4g
dGhpcyBjYXNlKS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgYSB2YWxpZCBVUkwgd2FzIHByb2R1
Y2VkLCBmYWxzZSBpZiBub3QuIE9uIGZhaWx1cmUsIHRoZQorLy8gb3V0cHV0IGFuZCBwYXJzZWQg
c3RydWN0dXJlcyB3aWxsIHN0aWxsIGJlIGZpbGxlZCBhbmQgd2lsbCBiZSBjb25zaXN0ZW50LAor
Ly8gYnV0IHRoZXkgd2lsbCBub3QgcmVwcmVzZW50IGEgbG9hZGFibGUgVVJMLgorYm9vbCBDYW5v
bmljYWxpemUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIFVSTENhbm9uaWNhbGl6
ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKTsKK2Jvb2wgQ2Fub25pY2FsaXplKGNvbnN0IFVD
aGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZl
cnRlciosCisgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyog
b3VwdXRQYXJzZWQpOworCisvLyBSZXNvbHZlcyBhIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCBy
ZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGFyc2VkIGJhc2UgVVJMLgorLy8gVGhlIGJhc2UgTVVTVCBi
ZSB2YWxpZC4gVGhlIHJlc3VsdGluZyBjYW5vbmljYWwgVVJMIGFuZCBwYXJzZWQgaW5mb3JtYXRp
b24KKy8vIHdpbGwgYmUgcGxhY2VkIGluIHRvIHRoZSBnaXZlbiBvdXQgdmFyaWFibGVzLgorLy8K
Ky8vIFRoZSByZWxhdGl2ZSBuZWVkIG5vdCBiZSByZWxhdGl2ZS4gSWYgd2UgZGlzY292ZXIgdGhh
dCBpdCdzIGFic29sdXRlLCB0aGlzCisvLyB3aWxsIHByb2R1Y2UgYSBjYW5vbmljYWwgdmVyc2lv
biBvZiB0aGF0IFVSTC4gU2VlIENhbm9uaWNhbGl6ZSgpIGZvciBtb3JlCisvLyBhYm91dCB0aGUg
Y2hhcnNldENvbnZlcnRlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG91dHB1dCBpcyB2
YWxpZCwgZmFsc2UgaWYgdGhlIGlucHV0IGNvdWxkIG5vdCBwcm9kdWNlCisvLyBhIHZhbGlkIFVS
TC4KK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJl
bGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBVUkxDYW5v
bmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNlZCk7Citib29sIHJlc29sdmVSZWxh
dGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2
ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRD
b252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMqIG91cHV0UGFyc2VkKTsKKworLy8gUmVwbGFjZXMgY29tcG9uZW50cyBpbiB0aGUgZ2l2
ZW4gVkFMSUQgaW5wdXQgdXJsLiBUaGUgbmV3IGNhbm9uaWNhbCBVUkwgaW5mbworLy8gaXMgd3Jp
dHRlbiB0byBvdXRwdXQgYW5kIG91dHB1dFBhcnNlZC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHJlc3VsdGluZyBVUkwgaXMgdmFsaWQuCitib29sIFJlcGxhY2VDb21wb25lbnRzKGNvbnN0
IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVu
dHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFy
c2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+Jiwg
VVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxhY2VDb21wb25lbnRzKGNvbnN0
IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVu
dHM8VUNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hh
cnNldENvbnZlcnRlciosCisgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYs
IFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBTdHJpbmcgaGVscGVyIGZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
Ky8vIENvbXBhcmUgdGhlIGxvd2VyLWNhc2UgZm9ybSBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGFnYWlu
c3QgdGhlIGdpdmVuIEFTQ0lJCisvLyBzdHJpbmcuIFRoaXMgaXMgdXNlZnVsIGZvciBkb2luZyBj
aGVja2luZyBpZiBhbiBpbnB1dCBzdHJpbmcgbWF0Y2hlcyBzb21lCisvLyB0b2tlbiwgYW5kIGl0
IGlzIG9wdGltaXplZCB0byBhdm9pZCBpbnRlcm1lZGlhdGUgc3RyaW5nIGNvcGllcy4KKy8vCisv
LyBUaGUgdmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbiB0aGF0IGRvbid0IHRha2UgYSBiRW5kIGFz
c3VtZSB0aGF0IHRoZSBiCisvLyBzdHJpbmcgaXMgemVybyB0ZXJtaW5hdGVkLgorYm9vbCBMb3dl
ckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNv
bnN0IGNoYXIqIGIpOworYm9vbCBMb3dlckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVn
aW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGJCZWdpbiwgY29uc3QgY2hhciogYkVu
ZCk7Citib29sIExvd2VyQ2FzZUVxdWFsc0FTQ0lJKGNvbnN0IFVDaGFyKiBhQmVnaW4sIGNvbnN0
IFVDaGFyKiBhRW5kLCBjb25zdCBjaGFyKiBiKTsKKworLy8gVW5lc2NhcGVzIHRoZSBnaXZlbiBz
dHJpbmcgdXNpbmcgVVJMIGVzY2FwaW5nIHJ1bGVzLgordm9pZCBEZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXMoY29uc3QgY2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mKTsK
KworLy8gRXNjYXBlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIGRlZmluZWQgYnkgdGhlIEpTIG1ldGhv
ZCBlbmNvZGVVUklDb21wb25lbnQuCisvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v
cmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZW5jb2RlVVJJQ29tcG9u
ZW50Cit2b2lkIEVuY29kZVVSSUNvbXBvbmVudChjb25zdCBjaGFyKiBpbnB1dCwgaW50IGxlbmd0
aCwgVVJMQnVmZmVyPGNoYXI+Jik7CisKKworfSAvLyBuYW1lc3BhY2UgVVJMVXRpbGl0aWVzCisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8v
IFVSTFV0aWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsSW50
ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbEludGVybmFsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDExYjFmMGNlNzZjMzYxNGZjYTVlZjAyNzVhNjMyMzhkYmYwNGU4YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbEludGVybmFsLmgKQEAgLTAs
MCArMSw1NiBAQAorLy8gQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisv
LyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVm
IFVSTFV0aWxJbnRlcm5hbF9oCisjZGVmaW5lIFVSTFV0aWxJbnRlcm5hbF9oCisKKyNpbmNsdWRl
ICJVUkxQYXJzZS5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBVUkxVdGlsaXRpZXMgeworCitleHRlcm4gY29uc3QgY2hhciBrRmlsZVNjaGVtZVtd
OworZXh0ZXJuIGNvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXTsKK2V4dGVybiBjb25zdCBj
aGFyIGtNYWlsdG9TY2hlbWVbXTsKKworLy8gR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcmFuZ2UgaW5z
aWRlIHRoZSBzdHJpbmcsIGNvbXBhcmVzIGl0IHRvIHRoZSBnaXZlbgorLy8gbG93ZXItY2FzZSB8
Y29tcGFyZVRvfCBidWZmZXIuCitib29sIENvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3QgY2hh
ciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiwgY29uc3QgY2hhciogY29tcGFyZVRvKTsKK2Jv
b2wgQ29tcGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiwgY29uc3QgY2hhciogY29tcGFyZVRvKTsKKworfSAvLyBuYW1lc3BhY2UgVVJMVXRp
bGl0aWVzCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKwor
I2VuZGlmIC8vIFVSTFV0aWxJbnRlcm5hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMV1RGVVJMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZV
UkwuY3BwCmluZGV4IGYwMzBiODcxOWNhZDVlODZlYjk0ZDUyYTZjODM1YmJlY2Y1NjQyNTYuLjdm
YjRkNGFhMGVjNjBkZWU5MThmNTVlOTg0ZjZmZDY0NzUwNGVkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkxXVEZVUkwuY3BwCkBAIC03MSw5ICs3MSwxNyBAQCBLVVJMOjpLVVJMKGNvbnN0
IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUpCiAgICAgICAgIG1fdXJsSW1w
bC0+bV9pbnZhbGlkVXJsU3RyaW5nID0gcmVsYXRpdmU7CiB9CiAKLUtVUkw6OktVUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpCitLVVJMOjpLVVJMKGNv
bnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNv
ZGluZyYpCisgICAgOiBtX3VybEltcGwoYWRvcHRSZWYobmV3IEtVUkxXVEZVUkxJbXBsKCkpKQog
ewotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgorICAgIC8vIEZJWE1F
OiBoYW5kbGUgdGhlIGVuY29kaW5nLgorICAgIGlmIChiYXNlVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV91cmxJbXBsLT5tX3BhcnNlZFVSTCA9IFBhcnNlZFVSTChyZWxhdGl2ZSk7CisgICAgZWxz
ZQorICAgICAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKGJhc2VVUkwubV91
cmxJbXBsLT5tX3BhcnNlZFVSTCwgcmVsYXRpdmUpOworCisgICAgaWYgKCFtX3VybEltcGwtPm1f
cGFyc2VkVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgbV91cmxJbXBsLT5tX2ludmFsaWRVcmxTdHJp
bmcgPSByZWxhdGl2ZTsKIH0KIAogS1VSTCBLVVJMOjpjb3B5KCkgY29uc3QKQEAgLTE0MSw3ICsx
NDksMTAgQEAgU3RyaW5nIEtVUkw6Omhvc3QoKSBjb25zdAogCiBib29sIEtVUkw6Omhhc1BvcnQo
KSBjb25zdAogewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIC8vIFRoaXMgc2hvdWxkIGJl
IGFuIEFTU0VSVC4gSFRNTEFuY2hvckVsZW1lbnQ6OnBvcnQoKSBkb2VzIG5vdCBjaGVjayB0aGUg
dmFsaWRpdHkgb2YgdGhlIFVSTC4KKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgcmV0dXJuICFtX3VybEltcGwtPm1fcGFyc2VkVVJMLnBvcnQoKS5pc051
bGwoKTsKIH0KIApAQCAtMTY0LDI1ICsxNzUsMzcgQEAgdW5zaWduZWQgc2hvcnQgS1VSTDo6cG9y
dCgpIGNvbnN0CiAKIFN0cmluZyBLVVJMOjp1c2VyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4gQVNTRVJUKCksIGNhbGwg
c2l0ZSBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2Vk
VVJMLnVzZXJuYW1lKCk7CiB9CiAKIFN0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4gQVNTRVJU
KCksIGNhbGwgc2l0ZSBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVybiBtX3VybEltcGwt
Pm1fcGFyc2VkVVJMLnBhc3N3b3JkKCk7CiB9CiAKIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJl
IGFuIEFTU0VSVElPTiwgY2FsbCBzaXRlIHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KKyAg
ICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuICFw
YXRoKCkuaXNFbXB0eSgpOwogfQogCiBTdHJpbmcgS1VSTDo6cGF0aCgpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFuIEFTU0VS
VElPTiwgSFRNTEFuY2hvckVsZW1lbnQgc2hvdWxkIG5vdCB1c2UgaW52YWxpZCBVUkxzLgorICAg
IGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4g
bV91cmxJbXBsLT5tX3BhcnNlZFVSTC5wYXRoKCk7CiB9CiAKQEAgLTIwMSw3ICsyMjQsMTAgQEAg
U3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKIAogU3RyaW5nIEtVUkw6OnF1
ZXJ5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhp
cyBzaG91bGQgYmUgYW4gQVNTRVJUSU9OLCBIVE1MQW5jaG9yRWxlbWVudCBzaG91bGQgbm90IHVz
ZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKwogICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnF1ZXJ5KCk7CiB9CiAK
QEAgLTIyMSw2ICsyNDcsNyBAQCBTdHJpbmcgS1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKCkgY29u
c3QKICAgICAvLyBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwu
ZnJhZ21lbnQoKTsKIH0KIApAQCAtMjM0LDcgKzI2MSw3IEBAIFN0cmluZyBLVVJMOjpiYXNlQXNT
dHJpbmcoKSBjb25zdAogLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBmdW5jdGlvbiBmcm9tIEtV
UkwuCiBTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nKCk7CiB9CiAKIGJvb2wgS1VSTDo6cHJvdG9jb2xJ
cyhjb25zdCBjaGFyKiB0ZXN0UHJvdG9jb2wpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165282</attachid>
            <date>2012-09-23 00:04:11 -0700</date>
            <delta_ts>2012-09-23 15:44:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97405-20120923000334.patch</filename>
            <type>text/plain</type>
            <size>411232</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkyODdjOTIzNTgwNzIzNmRkMDRkNmJl
MGRiZWFhNmRlOTMzNDM1ZjUuLjcxNTNkNTQ4NDRlNTMxOWE3YjY4NjhmN2I1OWRkZTM3MjhhNDA5
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjE2IEBACisyMDEyLTA5LTIyICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbnRlZ3JhdGUgbW9zdCBvZiBHb29nbGVV
UkwgaW4gV1RGVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzQwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYnJpbmdzIGFsbW9zdCBhbGwgb2YgdGhlIGltcGxlbWVudGF0YXRpb24g
b2YgR29vZ2xlLVVSTCBpbiBXVEZVUkwKKyAgICAgICAgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMu
CisKKyAgICAgICAgVGhlIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgY29kZSBhcmUgbW9zdGx5
OgorICAgICAgICAtQ29kZSBjbGVhbmluZy4KKyAgICAgICAgLVJlcGxhY2UgdXJsX3BhcnNlOjpQ
YXJzZWQgYnkgVVJMU2VnbWVudHMuCisgICAgICAgIC1SZXBsYWNlIHVybF9wYXJzZTo6Q29tcG9u
ZW50IGJ5IFVSTENvbXBvbmVudAorICAgICAgICAtTW9yZSBjb2RlIGNsZWFuaW5nLgorICAgICAg
ICAtQWRvcHQgVVJMQnVmZmVyIGFuZCBSYXdVUkxCdWZmZXIgaW5zdGVhZCBvZiB0aGUgQ2Fub25P
dXRwdXRUIGFuZCBSYXdDYW5vbk91dHB1dFQuCisgICAgICAgIC1Vc2UgVVJMQ2hhcmFjdGVyVHlw
ZXMgaW5zdGVhZCBvZiB0aGUgbGl0YW55IG9mIGNoYXJhY3RlcnMgZnVuY3Rpb25zLgorICAgICAg
ICAtU29tZSBtb3JlIGNvZGUgY2xlYW5pbmcuCisgICAgICAgIC1GaXggdGhlIHN0eWxlIHRvIG1h
dGNoIFdlYktpdCBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAtUmVuYW1lIHRoZSBmaWxl
cyB0byBtYXRjaCBXZWJLaXQgc3R5bGUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwOgorICAgICAg
ICAoV1RGOjpQYXJzZWRVUkw6OlBhcnNlZFVSTCk6CisgICAgICAgIChXVEY6OlBhcnNlZFVSTDo6
c2VnbWVudCk6CisgICAgICAgICogd3RmL3VybC9hcGkvUGFyc2VkVVJMLmg6CisgICAgICAgIChX
VEY6OlBhcnNlZFVSTDo6aXNWYWxpZCk6CisgICAgICAgICogd3RmL3VybC9zcmMvUmF3VVJMQnVm
ZmVyLmg6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub24uaDogQWRkZWQuCisgICAgICAg
IChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKENoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAg
ICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyOjpDaGFyc2V0Q29udmVy
dGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlcjo6
fkNoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAgICAoQ2Fub25Ib3N0SW5mbyk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9zdEluZm86OkNhbm9uSG9zdEluZm8pOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbkhvc3RJbmZvOjpJc0lQQWRkcmVzcyk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9zdEluZm86OkFkZHJlc3NM
ZW5ndGgpOgorICAgICAgICAoVVJMQ29tcG9uZW50U291cmNlKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6VVJMQ29tcG9uZW50U291cmNlOjpVUkxDb21wb25lbnRTb3VyY2UpOgor
ICAgICAgICAoUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
UmVwbGFjZW1lbnRzOjpSZXBsYWNlbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OlNldFNjaGVtZSk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6SXNTY2hlbWVPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRVc2VybmFtZSk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJVc2VybmFtZSk6CisgICAg
ICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNVc2VybmFtZU92ZXJy
aWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNl
dFBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRz
OjpDbGVhclBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFj
ZW1lbnRzOjpJc1Bhc3N3b3JkT3ZlcnJpZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0SG9zdCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJIb3N0KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZW1lbnRzOjpJc0hvc3RPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRQb3J0KToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpDbGVhclBvcnQpOgorICAgICAgICAoV1RG
OjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OklzUG9ydE92ZXJyaWRkZW4pOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNldFBhdGgpOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNsZWFyUGF0aCk6Cisg
ICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNQYXRoT3ZlcnJp
ZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0
UXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNs
ZWFyUXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6
OklzUXVlcnlPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzOjpTZXRSZWYpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBs
YWNlbWVudHM6OkNsZWFyUmVmKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzOjpJc1JlZk92ZXJyaWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OnNvdXJjZXMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OmNvbXBvbmVudHMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpSZXBsYWNlbWVudHM6OlBsYWNlaG9sZGVyKToKKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxDYW5vbkV0Yy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVy
OjpyZW1vdmVVUkxXaGl0ZXNwYWNlKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxTY2hlbWVDaGFyKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplU2NoZW1lKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplVXNlckluZm8pOgorICAgICAgICAo
V1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVQb3J0KToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUmVmKToKKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fu
b25pY2FsaXplcjo6Q2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTCk6CisgICAgICAgIChVUkxDYW5v
bmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZUZpbGVT
eXN0ZW1VUkwpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJM
KToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpGaWxlQ2Fub25pY2FsaXplUGF0aCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VGaWxlVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkhv
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2Fs
aXplSG9zdCk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplSG9zdFZlcmJvc2UpOgorICAgICAgICAqIHd0Zi91
cmwvc3JjL1VSTENhbm9uSUNVLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OklETlRvQVNDSUkpOgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlYWRVVEZDaGFyKToKKyAgICAgICAgKiB3dGYvdXJs
L3NyYy9VUkxDYW5vbklQLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNhbm9uaWNhbGl6ZUlQQWRkcmVzcyk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcDogQWRkZWQuCisgICAg
ICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
QXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OkNvbnZlcnRVVEY4VG9VVEYxNik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlNl
dHVwT3ZlcnJpZGVDb21wb25lbnRzKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
U2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6Ol9pdG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19z
KToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmg6IEFkZGVkLgorICAg
ICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OmhleENoYXJUb1ZhbHVlKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6aXNEb3Qp
OgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjphcHBlbmRVUkxFc2NhcGVkQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6ZG9BcHBlbmRVVEY4KToKKyAg
ICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kQ2hhclRvT3V0cHV0KToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGOFZhbHVlKToKKyAgICAgICAgKFdU
Rjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGOEVzY2FwZWRWYWx1ZSk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OkFwcGVuZFVURjE2VmFsdWUpOgorICAgICAgICAoV1RGOjpV
UkxDYW5vbmljYWxpemVyOjpBcHBlbmRVVEY4RXNjYXBlZENoYXIpOgorICAgICAgICAoV1RGOjpV
UkxDYW5vbmljYWxpemVyOjpJczhCaXRDaGFyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2Fs
aXplcjo6RGVjb2RlRXNjYXBlZCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6Ol9p
dG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19zKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6X3N0cnRvdWk2NCk6CisgICAgICAgICogd3RmL3Vy
bC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6Q2Fub25pY2FsaXplTWFpbHRvVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6
ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlTWFpbHRvVVJMKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUGF0aCk6CisgICAgICAgIChVUkxD
YW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2Fs
aXplUGFydGlhbFBhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5j
cHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVQ
YXRoVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxD
YW5vbmljYWxpemVyOjpSZXBsYWNlUGF0aFVSTCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJM
Q2Fub25RdWVyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpD
YW5vbmljYWxpemVRdWVyeSk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q29udmVydFVURjE2VG9RdWVyeUVuY29kaW5nKToKKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblJlbGF0aXZlLmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OmlzUmVsYXRpdmVVUkwpOgorICAgICAgICAoVVJMQ2Fu
b25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlc29sdmVSZWxh
dGl2ZVVSTCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25TdGRVUkwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6RGVmYXVsdFBvcnRGb3JTY2hlbWUp
OgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OkNhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZVN0YW5kYXJkVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxD
aGFyYWN0ZXJUeXBlcy5jcHA6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlw
ZXMuaDoKKyAgICAgICAgKFdURjo6VVJMQ2hhcmFjdGVyVHlwZXM6OmlzQ29tcG9uZW50Q2hhcik6
CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5cGVzOjppc0hleENoYXIpOgorICAgICAgICAo
V1RGOjpVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENo
YXJhY3RlclR5cGVzOjppc1F1ZXJ5Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5
cGVzOjppc0NoYXJhY3Rlck9mVHlwZSk6CisgICAgICAgIChVUkxDaGFyYWN0ZXJUeXBlcyk6Cisg
ICAgICAgICogd3RmL3VybC9zcmMvVVJMRXNjYXBlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxGaWxlLmg6IEFkZGVkLgorICAgICAgICAoVVJMUGFyc2VyKToKKyAgICAg
ICAgKFdURjo6VVJMUGFyc2VyOjppc1dpbmRvd3NEcml2ZVNlcGFyYXRvcik6CisgICAgICAgIChX
VEY6OlVSTFBhcnNlcjo6aXNXaW5kb3dzRHJpdmVMZXR0ZXIpOgorICAgICAgICAoV1RGOjpVUkxQ
YXJzZXI6OmZpbmROZXh0U2xhc2gpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdp
bldpbmRvd3NEcml2ZVNwZWMpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdpblVO
Q1BhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdFNjaGVtZSk6CisgICAgICAgIChVUkxQYXJzZXIp
OgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OklzQXV0aG9yaXR5VGVybWluYXRvcik6CisgICAg
ICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdEZpbGVOYW1lKToKKyAgICAgICAgKFdURjo6VVJM
UGFyc2VyOjpFeHRyYWN0UXVlcnlLZXlWYWx1ZSk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6
UGFyc2VBdXRob3JpdHkpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OlBhcnNlUG9ydCk6Cisg
ICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VTdGFuZGFyZFVSTCk6CisgICAgICAgIChXVEY6
OlVSTFBhcnNlcjo6UGFyc2VQYXRoVVJMKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpQYXJz
ZUZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OlBhcnNlTWFpbHRvVVJM
KToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpwYXJzZVBhdGhJbnRlcm5hbCk6CisgICAgICAg
IChXVEY6OlVSTFBhcnNlcjo6UGFyc2VBZnRlclNjaGVtZSk6CisgICAgICAgICogd3RmL3VybC9z
cmMvVVJMUGFyc2UuaDogQWRkZWQuCisgICAgICAgIChVUkxQYXJzZXIpOgorICAgICAgICAqIHd0
Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6VVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwpOgorICAgICAgICAoVVJMUGFyc2VyKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxQYXJzZUludGVybmFsLmg6IEFkZGVkLgorICAgICAg
ICAoVVJMUGFyc2VyKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjppc1VSTFNsYXNoKToKKyAg
ICAgICAgKFdURjo6VVJMUGFyc2VyOjpzaG91bGRUcmltRnJvbVVSTCk6CisgICAgICAgIChXVEY6
OlVSTFBhcnNlcjo6dHJpbVVSTCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6Y291bnRDb25z
ZWN1dGl2ZVNsYXNoZXMpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFF1ZXJ5Q2Fub25pY2FsaXplci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcDoKKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6VVJM
U2VnbWVudHMpOgorICAgICAgICAoVVJMU2VnbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdt
ZW50czo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6VVJMU2VnbWVudHM6OmlubmVyVVJMU2Vn
bWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6c2V0SW5uZXJVUkxTZWdtZW50cyk6
CisgICAgICAgIChXVEY6OlVSTFNlZ21lbnRzOjpjbGVhcklubmVyVVJMU2VnbWVudHMpOgorICAg
ICAgICAqIHd0Zi91cmwvc3JjL1VSTFV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFVSTFV0aWxp
dGllcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6SXNTdGFuZGFyZCk6CisgICAgICAg
IChXVEY6OlVSTFV0aWxpdGllczo6RmluZEFuZENvbXBhcmVTY2hlbWUpOgorICAgICAgICAoV1RG
OjpVUkxVdGlsaXRpZXM6OkNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGll
czo6cmVzb2x2ZVJlbGF0aXZlKToKKyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpSZXBsYWNl
Q29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6TG93ZXJDYXNlRXF1YWxz
QVNDSUkpOgorICAgICAgICAoV1RGOjpVUkxVdGlsaXRpZXM6OkRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6RW5jb2RlVVJJQ29tcG9uZW50KToK
KyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpDb21wYXJlU2NoZW1lQ29tcG9uZW50KToKKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsLmg6IEFkZGVkLgorICAgICAgICAoVVJMVXRpbGl0
aWVzKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmguCisgICAgICAgIChVUkxVdGls
aXRpZXMpOgorCiAyMDEyLTA5LTIxICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRp
Z2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVycm9yIG91dCBlYXJseSBpZiB3ZSBkb24ndCBoYXZl
IElDVSBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNTczMjYzY2NkODkzZjNkZDk4ZDljNmRkZmRk
OWM0ODlmMTM0NzcxLi5mZWZhYzg5M2RhOTJjMzJjYjE4MjMzOWU3NmE3ODM0Mzk2MDBmODRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDktMjIgIEJlbmphbWluIFBvdWxhaW4g
IDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIEludGVncmF0ZSBtb3N0IG9mIEdvb2ds
ZVVSTCBpbiBXVEZVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk3NDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTG9vc2VuIEtVUkxXVEZVUkwgdG8gYmUgYWJsZSB0byBydW4gbW9zdCB0ZXN0cyBpbiBE
ZWJ1Zy4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkxXVEZVUkwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S1VSTDo6S1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cGFz
cyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OktVUkw6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cXVlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6S1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OmZpbGVTeXN0ZW1QYXRoKToKKwogMjAxMi0wOS0yMiAgRG9taW5pYyBNYXp6b25pICA8ZG1h
enpvbmlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBWDogTGF5b3V0IHRlc3RzIHdvdWxkIGJlIGVh
c2llciB0byB3cml0ZSBpZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBjb3VsZCBmaW5kIGFuIGVs
ZW1lbnQgYnkgaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDUyYWY3YjljZWNjNWQxYTUyYWUwOGQ5N2I0MjJiM2U1YWFiZDAwNzYuLjgyZjcyMWMyMDgxODlh
YmIxZmE1ODk5YTZlZTRlMmFmM2YwMWVkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTIsNiArMTIsMjkgQEAKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGM0IwRjcxNUU0NUU0NjAw
MjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
MTQ3QjA4MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi87
IH07CisJCTI2RTZDMUVFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkV0Yy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFDRTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwICovOyB9OworCQkyNkU2QzFFRjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbkZpbGVzeXN0ZW11cmwuY3BwICovOyB9OworCQkyNkU2QzFGMDE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25GaWxldXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwu
Y3BwICovOyB9OworCQkyNkU2QzFGMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQx
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovOyB9OworCQkyNkU2QzFGMjE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uSUNVLmNwcCAqLzsgfTsKKwkJMjZFNkMxRjUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SW50ZXJuYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovOyB9
OworCQkyNkU2QzFGNjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDYxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJMjZFNkMxRjcxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAu
Y3BwICovOyB9OworCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMx
RDkxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCAqLzsgfTsKKwkJMjZFNkMx
RkExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25QYXRoLmNwcCAqLzsgfTsKKwkJMjZFNkMxRkIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TENhbm9uUGF0aHVybC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFEQjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAq
LzsgfTsKKwkJMjZFNkMxRkMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxREMxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwICovOyB9OworCQkyNkU2QzFGRDE2MDkw
MzczMDBDQTZBRjQgLyogVVJMQ2Fub25SZWxhdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFERDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25SZWxhdGl2ZS5jcHAgKi87IH07CisJCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vblN0ZFVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICov
OyB9OworCQkyNkU2QzIwMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUUxMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbi5oICovOyB9OworCQkyNkU2QzIwMzE2MDkwMzczMDBDQTZBRjQgLyog
VVJMRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZpbGUuaCAqLzsgfTsKKwkJMjZFNkMyMDQx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
UGFyc2VGaWxlLmNwcCAqLzsgfTsKKwkJMjZFNkMyMDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBh
cnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2RTZDMUU1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi87IH07
CisJCTI2RTZDMjA3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNzE2MDkwMzczMDBDQTZB
RjQgLyogVVJMUGFyc2UuY3BwICovOyB9OworCQkyNkU2QzIwODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUU4MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5oICovOyB9OworCQkyNkU2QzIw
QTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFQTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMVXRpbEludGVybmFsLmggKi87IH07CisJCTI2RTZDMjBDMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxVdGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNwcCAqLzsgfTsKKwkJMjZFNkMy
MEQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGls
LmggKi87IH07CiAJCTJDMDUzODU0MTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGlt
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkMwNTM4
NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmggKi87IH07CiAJCTJDQ0Q4
OTJBMTVDMDM5MDIwMDI4NTA4MyAvKiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0NEODkyOTE1QzAzOTAyMDAyODUw
ODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovOyB9OwogCQk0MzMwRjM4RjE1NzQ1QjA1MDBB
QUZBOEYgLyogVVJMU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzMzBGMzhFMTU3NDVCMDUwMEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICov
OyB9OwpAQCAtMjM3LDEwICsyNjAsNiBAQAogCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThBNDczNjYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVz
LmNwcCAqLzsgfTsKIAkJQThBNDc0NzUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM2NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCAqLzsgfTsKIAkJQThB
NDc0NzYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8q
IFVSTENvbXBvbmVudC5oICovOyB9OwotCQlBOEE0NzQ3NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
RXNjYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwICovOyB9OwotCQlBOEE0
NzQ3ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
RXNjYXBlLmggKi87IH07Ci0JCUE4QTQ3NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzZC
MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCAqLzsgfTsKLQkJQThBNDc0N0ExNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNkMxNTFBODI1QjAwNDEyM0ZGIC8qIFVS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oICovOyB9OwogCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYg
LyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczNkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCAqLzsg
fTsKIAkJQThBNDc0N0MxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2RTE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMU2VnbWVudHMuaCAqLzsgfTsKIAkJQThBNDc0N0QxNTFBODI1QjAwNDEyM0ZG
IC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi87IH07CkBA
IC0yNjAsNiArMjc5LDI5IEBACiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRl
ZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2F0dXJhdGVk
QXJpdGhtZXRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERD
Q0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkV0Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkV0
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNGMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRDAxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVy
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkZpbGV1
cmwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEMTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2RTZDMUQ1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSW50ZXJu
YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFENjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVUkxDYW5vbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
RTZDMUQ3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklQLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSVAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyNkU2QzFEOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25NYWlsdG8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25QYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVSTENhbm9uUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMURC
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGh1cmwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25QYXRodXJsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25RdWVyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uUmVsYXRpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25TdGRVUkwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fu
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMQ2Fub24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFy
c2VGaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNl
RmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUU1MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVSTFBhcnNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMjZFNkMxRTgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFBhcnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTI2RTZDMUVBMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsSW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMVXRpbEludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxV
dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFV0aWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFRDE2MDkwMzczMDBDQTZBRjQg
LyogVVJMVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxVdGlsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDMDUzODUzMTVCQzgxOTAwMEYyMUI5NiAv
KiBHcmVnb3JpYW5EYXRlVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmVnb3JpYW5EYXRlVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQ0NEODky
OTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JlZ29yaWFuRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzMwRjM4RTE1NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFN0cmluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTQsMTAgKzUzNiw2IEBACiAJCUE4QTQ3
MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDaGFyYWN0ZXJUeXBlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzY3MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFy
YWN0ZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxDaGFyYWN0
ZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM2ODE1MUE4MjVC
MDA0MTIzRkYgLyogVVJMQ29tcG9uZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVSTENvbXBvbmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2
OTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVSTEVzY2FwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRXNjYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4QTQ3MzZCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4QTQ3MzZDMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxRdWVyeUNhbm9uaWNhbGl6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUXVlcnlDYW5vbmljYWxp
emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzZEMTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVUkxTZWdtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3
MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVUkxTZWdtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEE0NzM2RjE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04NzMsMTUgKzkxMSwzNCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDczNjQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oICovLAogCQkJCUE4QTQ3MzY1MTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxCdWZmZXIuaCAqLywKKwkJCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub24uaCAqLywKKwkJCQkyNkU2QzFDRTE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25FdGMuY3BwICovLAorCQkJCTI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkZpbGVzeXN0ZW11cmwuY3BwICovLAorCQkJCTI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbkZpbGV1cmwuY3BwICovLAorCQkJCTI2RTZDMUQxMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbkhvc3QuY3BwICovLAorCQkJCTI2RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbklDVS5jcHAgKi8sCisJCQkJMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SW50ZXJuYWwuY3BwICovLAorCQkJCTI2RTZDMUQ2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkludGVybmFsLmggKi8sCisJCQkJMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SVAuY3BwICovLAorCQkJCTI2RTZDMUQ5MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbk1haWx0
by5jcHAgKi8sCisJCQkJMjZFNkMxREExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5j
cHAgKi8sCisJCQkJMjZFNkMxREIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5j
cHAgKi8sCisJCQkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3Bw
ICovLAorCQkJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNw
cCAqLywKKwkJCQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3Bw
ICovLAogCQkJCUE4QTQ3MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5j
cHAgKi8sCiAJCQkJQThBNDczNjcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVz
LmggKi8sCiAJCQkJQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oICov
LAotCQkJCUE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwICovLAotCQkJ
CUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCAqLywKLQkJCQlBOEE0NzM2
QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMUGFyc2VyLmggKi8sCi0JCQkJQThBNDczNkMxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oICovLAorCQkJCTI2RTZDMUUzMTYw
OTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggKi8sCisJCQkJMjZFNkMxRTcxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTFBhcnNlLmNwcCAqLywKKwkJCQkyNkU2QzFFODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCAqLywKKwkJCQkyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VG
aWxlLmNwcCAqLywKKwkJCQkyNkU2QzFFNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRl
cm5hbC5oICovLAogCQkJCUE4QTQ3MzZEMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5j
cHAgKi8sCiAJCQkJQThBNDczNkUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggKi8s
CisJCQkJMjZFNkMxRUMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuY3BwICovLAorCQkJCTI2
RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggKi8sCisJCQkJMjZFNkMxRUExNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRlcm5hbC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBz
cmM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA2Miw5ICsxMTE5LDYgQEAKIAkJ
CQlBOEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ3NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDc2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDb21wb25lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc4MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2Nh
cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDdBMTUxQTgyNUIwMDQxMjNGRiAvKiBV
UkxRdWVyeUNhbm9uaWNhbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdDMTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFVSTFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLApAQCAtMTA3Niw2ICsx
MTMwLDEzIEBACiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1v
cnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZDMUY2MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIw
MTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZD
MjAzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2
QzIwNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMjZFNkMyMDgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyNkU2QzIwQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyNkU2QzIwRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xMjE5LDEwICsxMjgwLDI1IEBACiAJCQkJQThBNDc0NEExNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NTgxNTFBODI1QjAwNDEyM0ZGIC8qIFR5cGVUcmFpdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMjZFNkMxRUUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRXRjLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTI2RTZDMUVGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRjAxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uRmlsZXVybC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGMTE2MDkw
MzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZD
MUYyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyNkU2QzFGNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyNkU2QzFGNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JUC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25N
YWlsdG8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRkExNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGQjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUZD
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTI2RTZDMUZEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblN0ZFVSTC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hh
cmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThBNDc0NzcxNTFBODI1QjAwNDEy
M0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzIwNDE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMjA3
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDMzMEYzOEYxNTc0NUIwNTAwQUFGQThGIC8qIFVSTFN0cmluZy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkyNkU2QzIwQzE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ2OTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9Q
YXJzZWRVUkwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwCmluZGV4
IDBiMTVmY2JjYTJkYzkzMjA0ZGY4YTFhNThhNzBlYWU1MDQ1OGFjYzQuLjM2YWFjNzI1ZTkwMmMx
ZTQ3ZGYwZGM0YTllZGYzZWQ4ZGYyMmQ3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9hcGkvUGFyc2VkVVJMLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVS
TC5jcHAKQEAgLTMzLDIzICszMywzOCBAQAogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmF3VVJMQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL1VS
TENvbXBvbmVudC5oPgotI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMVXRpbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewot
ICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3BlYyA9IFVSTFN0cmlu
ZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHVuc2lnbmVkIHVybFN0cmluZ0xlbmd0
aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAoIXVybFN0cmluZ0xlbmd0aCkKKyAgICAg
ICAgcmV0dXJuOyAvLyBGSVhNRTogd2Ugc2hvdWxkIEFTU0VSVCBvbiB0aGlzLCBidXQgcGVvcGxl
IHVzZSBLVVJMIGluY29ycmVjdGx5IHdpdGggUGFyc2VkVVJMU3RyaW5nVGFnIDooLgorCisgICAg
UmF3VVJMQnVmZmVyPGNoYXI+IG91dHB1dEJ1ZmZlcjsKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBj
b25zdCBDU3RyaW5nJiBiYXNlU3RyID0gYmFzZS51dGY4KCk7CisgICAgYm9vbCBpc1ZhbGlkID0g
ZmFsc2U7CisgICAgVVJMU2VnbWVudHMgYmFzZVNlZ21lbnRzOwogCi0gICAgLy8gRklYTUU6IGhh
bmRsZSBpbnZhbGlkIHVybFN0cmluZy4KLSAgICBtX3NwZWMgPSBVUkxTdHJpbmcodXJsU3RyaW5n
KTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHRha2Ugc2hvcnRjdXRzIGhlcmUhIFdlIGRvIG5v
dCBoYXZlIHRvIHJlc29sdmUgdGhlIHJlbGF0aXZlIHBhcnQuCiAgICAgaWYgKHVybFN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgVVJMUGFyc2VyPExDaGFyPjo6cGFyc2VTdGFuZGFyZFVSTCh1cmxT
dHJpbmcuY2hhcmFjdGVyczgoKSwgdXJsU3RyaW5nLmxlbmd0aCgpLCBtX3NlZ21lbnRzKTsKKyAg
ICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0
YSgpLCBiYXNlU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmxTdHJpbmcuY2hhcmFj
dGVyczgoKSksIHVybFN0cmluZ0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGNoYXJzZXRDb252ZXJ0ZXIgKi8gMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2Vn
bWVudHMpOwogICAgIGVsc2UKLSAgICAgICAgVVJMUGFyc2VyPFVDaGFyPjo6cGFyc2VTdGFuZGFy
ZFVSTCh1cmxTdHJpbmcuY2hhcmFjdGVyczE2KCksIHVybFN0cmluZy5sZW5ndGgoKSwgbV9zZWdt
ZW50cyk7CisgICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShi
YXNlU3RyLmRhdGEoKSwgYmFzZVNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nLmNoYXJhY3RlcnMxNigpLCB1cmxTdHJpbmdM
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKworICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgQVNTRVJUIG9uIGlzVmFsaWQsIGJ1dCBwZW9wbGUgdXNlIEtVUkwgaW5j
b3JyZWN0bHkgd2l0aCBQYXJzZWRVUkxTdHJpbmdUYWcgOiguCisgICAgaWYgKGlzVmFsaWQpCisg
ICAgICAgIG1fc3BlYyA9IFVSTFN0cmluZyhTdHJpbmcob3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0
cHV0QnVmZmVyLmxlbmd0aCgpKSk7CiB9CiAKIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFBh
cnNlZFVSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSkKQEAgLTU3LDM2ICs3MiwyOSBA
QCBQYXJzZWRVUkw6OlBhcnNlZFVSTChjb25zdCBQYXJzZWRVUkwmIGJhc2UsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmUpCiAgICAgaWYgKCFiYXNlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHJlbGF0aXZlLmlzRW1wdHkoKSkgeworICAgIHVuc2lnbmVkIHJlbGF0aXZlTGVu
Z3RoID0gcmVsYXRpdmUubGVuZ3RoKCk7CisgICAgaWYgKCFyZWxhdGl2ZUxlbmd0aCkgewogICAg
ICAgICAqdGhpcyA9IGJhc2Uud2l0aG91dEZyYWdtZW50KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogaGFuZGxlIGludmFsaWQgVVJMcy4KLSAgICBjb25zdCBTdHJp
bmcmIGJhc2VTdHJpbmcgPSBiYXNlLm1fc3BlYy5zdHJpbmcoKTsKLSAgICBSYXdVUkxCdWZmZXI8
Y2hhciwgMTAyND4gb3V0cHV0QnVmZmVyOwotICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkgewot
ICAgICAgICBpZiAoYmFzZVN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2Vy
PExDaGFyLCBMQ2hhcj46OnBhcnNlVVJMV2l0aEJhc2UocmVsYXRpdmUuY2hhcmFjdGVyczgoKSwg
cmVsYXRpdmUubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nLmNoYXJhY3RlcnM4KCksIGJhc2VTdHJpbmcubGVu
Z3RoKCksIGJhc2UubV9zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXI8TENoYXIsIFVDaGFyPjo6cGFyc2VVUkxX
aXRoQmFzZShyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpLCByZWxhdGl2ZS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJp
bmcuY2hhcmFjdGVyczE2KCksIGJhc2VTdHJpbmcubGVuZ3RoKCksIGJhc2UubV9zZWdtZW50cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoYmFzZVN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2VyPFVDaGFy
LCBMQ2hhcj46OnBhcnNlVVJMV2l0aEJhc2UocmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0
aXZlLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBiYXNlU3RyaW5nLmxlbmd0aCgp
LCBiYXNlLm1fc2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsIG1fc2VnbWVudHMpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgVVJMUGFyc2VyPFVDaGFyLCBVQ2hhcj46OnBhcnNlVVJMV2l0aEJh
c2UocmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZlLmxlbmd0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgYmFzZVN0cmluZy5sZW5ndGgoKSwgYmFzZS5tX3NlZ21lbnRzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
QnVmZmVyLCBtX3NlZ21lbnRzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3NwZWMgPSBVUkxT
dHJpbmcoU3RyaW5nKG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5sZW5ndGgoKSkp
OworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiBvdXRwdXRCdWZmZXI7CisgICAgY29uc3QgQ1N0cmlu
ZyYgYmFzZVN0ciA9IGJhc2UubV9zcGVjLm1fc3RyaW5nLnV0ZjgoKTsKKyAgICBib29sIGlzVmFs
aWQgPSBmYWxzZTsKKworICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkKKyAgICAgICAgaXNWYWxp
ZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlLm1f
c2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpKSwg
cmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKyAg
ICBlbHNlCisgICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShi
YXNlU3RyLmRhdGEoKSwgYmFzZS5tX3NlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZl
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogY2hhcnNldENvbnZlcnRlciAqLyAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7CisKKyAgICBpZiAo
aXNWYWxpZCkKKyAgICAgICAgbV9zcGVjID0gVVJMU3RyaW5nKFN0cmluZyhvdXRwdXRCdWZmZXIu
ZGF0YSgpLCBvdXRwdXRCdWZmZXIubGVuZ3RoKCkpKTsKIH0KIAogUGFyc2VkVVJMIFBhcnNlZFVS
TDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKQEAgLTE3MSw3ICsxNzksOSBAQCBTdHJpbmcgUGFyc2Vk
VVJMOjpzZWdtZW50KGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50KSBjb25zdAogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBTdHJpbmcgc2VnbWVudCA9IG1fc3BlYy5zdHJpbmco
KS5zdWJzdHJpbmcoY29tcG9uZW50LmJlZ2luKCksIGNvbXBvbmVudC5sZW5ndGgoKSk7Ci0gICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghc2VnbWVudC5pc0VtcHR5KCksICJBIHZhbGlkIFVSTCBjb21w
b25lbnQgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKTsKKworICAgIC8vIEZJWE1FOiBHb29nbGVVUkwg
Y3JlYXRlIGVtcHR5IHNlZ21lbnRzLiBUaGlzIGhhcHBlbiBmb3IgdGhlIGZyYWdtZW50IGZvciB0
aGUgdGVzdCBmYXN0L3VybC9zZWdtZW50cy5odG1sCisvLyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCFzZWdtZW50LmlzRW1wdHkoKSwgIkEgdmFsaWQgVVJMIGNvbXBvbmVudCBzaG91bGQgbm90IGJl
IGVtcHR5LiIpOwogICAgIHJldHVybiBzZWdtZW50OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5oIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJz
ZWRVUkwuaAppbmRleCAwNjAzY2YxMTY3Y2Y4YjkwNGFhOGM2YWQ3NjIzNzBhNzdhZTUxNGNjLi4w
MTRlMjkzNjdhODAyY2QwODI1Y2JiNmY2ZjdlNzIxMDM5M2VjYjA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9h
cGkvUGFyc2VkVVJMLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIFBhcnNlZFVSTCBpc29sYXRlZENvcHkoKSBjb25zdDsKIAotICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3NwZWMuc3RyaW5nKCkuaXNFbXB0eSgpOyB9CisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fc3BlYy5zdHJpbmcoKS5pc051bGwoKTsg
fQogCiAgICAgLy8gUmV0dXJuIGEgVVJMIGNvbXBvbmVudCBvciBhIG51bGwgU3RyaW5nIGlmIHRo
ZSBjb21wb25lbnQgaXMgdW5kZWZpbmVkIGZvciB0aGUgVVJMLgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgc2NoZW1lKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1Jhd1VSTEJ1ZmZlci5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9SYXdVUkxCdWZm
ZXIuaAppbmRleCA1OWE3ZjE4YWY0NWIyOTNjZGI1MzQyNGQ1MDVlMTRmZDc5OGYyOTI5Li44ZjAw
ZjUwOTZlYjIyZGU4ZjI5ZjM4ZmJhNmNiZGJiYzZhMTdlYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1Jhd1VSTEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvUmF3VVJMQnVmZmVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBVU0UoV1RGVVJMKQogCiAj
aW5jbHVkZSAiVVJMQnVmZmVyLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmggYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIzNGYxMDViNzk3
MmQ3YmJkNDZiMzhhOWE4MTRiMzIyY2ZmYzRkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub24uaApAQCAtMCwwICsxLDY1OSBAQAorLy8gQ29weXJpZ2h0
IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorI2lmbmRlZiBVUkxDYW5vbl9oCisjZGVmaW5lIFVSTENh
bm9uX2gKKworI2luY2x1ZGUgIlVSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTFBhcnNlLmgiCisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCisj
aWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyIHsKKworLy8gQ2hhcmFjdGVyIHNldCBjb252ZXJ0ZXIgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIENvbnZlcnRzIHF1ZXJ5
IHN0cmluZ3MgaW50byBhIGN1c3RvbSBlbmNvZGluZy4gVGhlIGVtYmVkZGVyIGNhbiBzdXBwbHkg
YW4KKy8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgdG8gaW50ZXJmYWNlIHdpdGggdGhl
aXIgb3duIGNoYXJhY3RlciBzZXQKKy8vIGNvbnZlcnNpb24gbGlicmFyaWVzLgorLy8KKy8vIEVt
YmVkZGVycyB3aWxsIHdhbnQgdG8gc2VlIHRoZSB1bml0IHRlc3QgZm9yIHRoZSBJQ1UgdmVyc2lv
bi4KKworY2xhc3MgQ2hhcnNldENvbnZlcnRlciB7CitwdWJsaWM6CisgICAgQ2hhcnNldENvbnZl
cnRlcigpIHsgfQorICAgIHZpcnR1YWwgfkNoYXJzZXRDb252ZXJ0ZXIoKSB7IH0KKworICAgIC8v
IENvbnZlcnRzIHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcgZnJvbSBVVEYtMTYgdG8gd2hhdGV2ZXIg
b3V0cHV0IGZvcm1hdCB0aGUKKyAgICAvLyBjb252ZXJ0ZXIgc3VwcG9ydHMuIFRoaXMgaXMgdXNl
ZCBvbmx5IGZvciB0aGUgcXVlcnkgZW5jb2RpbmcgY29udmVyc2lvbiwKKyAgICAvLyB3aGljaCBk
b2VzIG5vdCBmYWlsLiBJbnN0ZWFkLCB0aGUgY29udmVydGVyIHNob3VsZCBpbnNlcnQgImludmFs
aWQKKyAgICAvLyBjaGFyYWN0ZXIiIGNoYXJhY3RlcnMgaW4gdGhlIG91dHB1dCBmb3IgaW52YWxp
ZCBzZXF1ZW5jZXMsIGFuZCBkbyB0aGUKKyAgICAvLyBiZXN0IGl0IGNhbi4KKyAgICAvLworICAg
IC8vIElmIHRoZSBpbnB1dCBjb250YWlucyBhIGNoYXJhY3RlciBub3QgcmVwcmVzZW50YWJsZSBp
biB0aGUgb3V0cHV0CisgICAgLy8gY2hhcmFjdGVyIHNldCwgdGhlIGNvbnZlcnRlciBzaG91bGQg
YXBwZW5kIHRoZSBIVE1MIGVudGl0eSBzZXF1ZW5jZSBpbgorICAgIC8vIGRlY2ltYWwsIChzdWNo
IGFzICImIzIwMzIwOyIpIHdpdGggZXNjYXBpbmcgb2YgdGhlIGFtcGVyc2FuZCwgbnVtYmVyCisg
ICAgLy8gc2lnbiwgYW5kIHNlbWljb2xvbiAoaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUgaXQgd291
bGQgYmUKKyAgICAvLyAiJTI2JTIzMjAzMjAlM0IiKS4gVGhpcyBydWxlIGlzIGJhc2VkIG9uIHdo
YXQgSUUgZG9lcyBpbiB0aGlzIHNpdHVhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgQ29udmVydEZy
b21VVEYxNihjb25zdCBVQ2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQpID0gMDsKK307CisKKy8vIFdoaXRlc3BhY2UgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gU2Vh
cmNoZXMgZm9yIHdoaXRlc3BhY2UgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtaWRk
bGUgb2YgVVJMcywgYW5kCisvLyByZW1vdmVzIGl0LiBSZW1vdmVkIHdoaXRlc3BhY2UgYXJlIHRh
YnMgYW5kIG5ld2xpbmVzLCBidXQgTk9UIHNwYWNlcy4gU3BhY2VzCisvLyBhcmUgcHJlc2VydmVk
LCB3aGljaCBpcyB3aGF0IG1vc3QgYnJvd3NlcnMgZG8uIEEgcG9pbnRlciB0byB0aGUgb3V0cHV0
IHdpbGwKKy8vIGJlIHJldHVybmVkLCBhbmQgdGhlIGxlbmd0aCBvZiB0aGF0IG91dHB1dCB3aWxs
IGJlIGluIHxvdXRwdXRMZW5ndGh8LgorLy8KKy8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZv
cmUgcGFyc2luZyBpZiB3aGl0ZXNwYWNlIHJlbW92YWwgaXMgZGVzaXJlZCAod2hpY2gKKy8vIGl0
IG5vcm1hbGx5IGlzIHdoZW4geW91IGFyZSBjYW5vbmljYWxpemluZykuCisvLworLy8gSWYgbm8g
d2hpdGVzcGFjZSBpcyByZW1vdmVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHVzZSB0aGUgYnVm
ZmVyIGFuZCB3aWxsCisvLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbnB1dCwgdG8gYXZvaWQg
dGhlIGV4dHJhIGNvcHkuIElmIG1vZGlmaWNhdGlvbiBpcworLy8gcmVxdWlyZWQsIHRoZSBnaXZl
biB8YnVmZmVyfCB3aWxsIGJlIHVzZWQgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwKKy8v
IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4KKy8vCisvLyBUaGVyZWZvcmUs
IGNhbGxlcnMgc2hvdWxkIG5vdCB1c2UgdGhlIGJ1ZmZlciwgc2luY2UgaXQgbWF5IGFjdHVhbGwg
YmUgZW1wdHksCisvLyB1c2UgdGhlIGNvbXB1dGVkIHBvaW50ZXIgYW5kIHxvdXRwdXRMZW5ndGh8
IGluc3RlYWQuCitjb25zdCBjaGFyKiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IGNoYXIqIGlu
cHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIGludCogb3V0cHV0TGVuZ3Ro
KTsKK2NvbnN0IFVDaGFyKiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IFVDaGFyKiBpbnB1dCwg
aW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiwgaW50KiBvdXRwdXRMZW5ndGgpOwor
CisvLyBJRE4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENvbnZlcnRzIHRoZSBVbmljb2RlIGlucHV0
IHJlcHJlc2VudGluZyBhIGhvc3RuYW1lIHRvIEFTQ0lJIHVzaW5nIElETiBydWxlcy4KKy8vIFRo
ZSBvdXRwdXQgbXVzdCBmYWxsIGluIHRoZSBBU0NJSSByYW5nZSwgYnV0IHdpbGwgYmUgZW5jb2Rl
ZCBpbiBVVEYtMTYuCisvLworLy8gT24gc3VjY2VzcywgdGhlIG91dHB1dCB3aWxsIGJlIGZpbGxl
ZCB3aXRoIHRoZSBBU0NJSSBob3N0IG5hbWUgYW5kIGl0IHdpbGwKKy8vIHJldHVybiB0cnVlLiBV
bmxpa2UgbW9zdCBvdGhlciBjYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucywgdGhpcyBhc3N1bWVz
IHRoYXQKKy8vIHRoZSBvdXRwdXQgaXMgZW1wdHkuIFRoZSBiZWdpbm5pbmcgb2YgdGhlIGhvc3Qg
d2lsbCBiZSBhdCBvZmZzZXQgMCwgYW5kCisvLyB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgd2ls
bCBiZSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbmV3IGhvc3QgbmFtZS4KKy8vCisvLyBPbiBl
cnJvciwgcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpbiB0aGlzIGNhc2UgaXMgdW5kZWZpbmVk
LgorYm9vbCBJRE5Ub0FTQ0lJKGNvbnN0IFVDaGFyKiBzcmMsIGludCBzb3VyY2VMZW5ndGgsIFVS
TEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCk7CisKKy8vIFBpZWNlLWJ5LXBpZWNlIGNhbm9uaWNhbGl6
ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisv
LyBUaGVzZSBpbmRpdmlkdWFsIGNhbm9uaWNhbGl6ZXJzIGFwcGVuZCB0aGUgY2Fub25pY2FsaXpl
ZCB2ZXJzaW9ucyBvZiB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgVVJMIGNvbXBvbmVudCB0byB0aGUg
Z2l2ZW4gc3RkOjpzdHJpbmcuIFRoZSBzcGVjIGFuZCB0aGUKKy8vIHByZXZpb3VzbHktaWRlbnRp
ZmllZCByYW5nZSBvZiB0aGF0IGNvbXBvbmVudCBhcmUgdGhlIGlucHV0LiBUaGUgcmFuZ2Ugb2YK
Ky8vIHRoZSBjYW5vbmljYWxpemVkIGNvbXBvbmVudCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIG91
dHB1dCBjb21wb25lbnQuCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIGFsbCBhcHBlbmQgdG8gdGhl
IG91dHB1dCBzbyB0aGV5IGNhbiBiZSBjaGFpbmVkLiBNYWtlIHN1cmUKKy8vIHRoZSBvdXRwdXQg
aXMgZW1wdHkgd2hlbiB5b3Ugc3RhcnQuCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIHJldHVybnMg
Ym9vbGVhbiB2YWx1ZXMgaW5kaWNhdGluZyBzdWNjZXNzLiBPbiBmYWlsdXJlLCB0aGV5CisvLyB3
aWxsIGF0dGVtcHQgdG8gd3JpdGUgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gdGhlIG91dHB1dCBz
byB0aGF0LCBpZgorLy8gZGlzcGxheWVkIHRvIHRoZSB1c2VyLCB0aGV5IHdpbGwgcmVjb2duaXNl
IGl0IGFzIHNvbWV0aGluZyB0aGF0J3MgbWVzc2VkIHVwLgorLy8gTm90aGluZyBtb3JlIHNob3Vs
ZCBldmVyIGJlIGRvbmUgd2l0aCB0aGVzZSBpbnZhbGlkIFVSTHMsIGhvd2V2ZXIuCisKKy8vIFNj
aGVtZTogQXBwZW5kcyB0aGUgc2NoZW1lIGFuZCBjb2xvbiB0byB0aGUgVVJMLiBUaGUgb3V0cHV0
IGNvbXBvbmVudCB3aWxsCisvLyBpbmRpY2F0ZSB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB1cCB0
byBidXQgbm90IGluY2x1ZGluZyB0aGUgY29sb24uCisvLworLy8gQ2Fub25pY2FsIFVSTHMgYWx3
YXlzIGhhdmUgYSBzY2hlbWUuIElmIHRoZSBzY2hlbWUgaXMgbm90IHByZXNlbnQgaW4gdGhlCisv
LyBpbnB1dCwgdGhpcyB3aWxsIGp1c3Qgd3JpdGUgdGhlIGNvbG9uIHRvIGluZGljYXRlIGFuIGVt
cHR5IHNjaGVtZS4gRG9lcyBub3QKKy8vIGFwcGVuZCBzbGFzaGVzIHdoaWNoIHdpbGwgYmUgbmVl
ZGVkIGJlZm9yZSBhbnkgYXV0aG9yaXR5IGNvbXBvbmVudHMgZm9yIG1vc3QKKy8vIFVSTHMuCisv
LworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCitib29sIENh
bm9uaWNhbGl6ZVNjaGVtZShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNj
aGVtZSwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXB1dFNjaGVtZSk7Citib29s
IENhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3VwdXRTY2hlbWUpOwor
CisvLyBVc2VyIGluZm86IHVzZXJuYW1lL3Bhc3N3b3JkLiBJZiBwcmVzZW50LCB0aGlzIHdpbGwg
YWRkIHRoZSBkZWxpbWl0ZXJzIHNvCisvLyB0aGUgb3V0cHV0IHdpbGwgYmUgIjx1c2VybmFtZT46
PHBhc3N3b3JkPkAiIG9yICI8dXNlcm5hbWU+QCIuIEVtcHR5CisvLyB1c2VybmFtZS9wYXNzd29y
ZCBwYWlycywgb3IgZW1wdHkgcGFzc3dvcmRzLCB3aWxsIGdldCBjb252ZXJ0ZWQgdG8KKy8vIG5v
bmV4aXN0YW50IGluIHRoZSBjYW5vbmljYWwgdmVyc2lvbi4KKy8vCisvLyBUaGUgY29tcG9uZW50
cyBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZWZlciB0byByYW5nZXMgaW4gdGhlCisv
LyByZXNwZWN0aXZlIHNvdXJjZSBzdHJpbmdzLiBVc3VhbGx5LCB0aGVzZSB3aWxsIGJlIHRoZSBz
YW1lIHN0cmluZywgd2hpY2gKKy8vIGlzIGxlZ2FsIGFzIGxvbmcgYXMgdGhlIHR3byBjb21wb25l
bnRzIGRvbid0IG92ZXJsYXAuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRG
LTggZW5jb2RpbmcuCitib29sIENhbm9uaWNhbGl6ZVVzZXJJbmZvKGNvbnN0IGNoYXIqIHVzZXJu
YW1lU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBjb25zdCBjaGFyKiBwYXNz
d29yZFNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRVc2VybmFt
ZSwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXNzd29yZCk7Citib29sIENhbm9uaWNhbGl6ZVVzZXJJ
bmZvKGNvbnN0IFVDaGFyKiB1c2VybmFtZVNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiB1c2Vy
bmFtZSwgY29uc3QgVUNoYXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHBh
c3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxD
b21wb25lbnQqIG91dHB1dFVzZXJuYW1lLCBVUkxDb21wb25lbnQqIG91dHB1dFBhc3N3b3JkKTsK
KworCisvLyBUaGlzIHN0cnVjdHVyZSBob2xkcyBkZXRhaWxlZCBzdGF0ZSBleHBvcnRlZCBmcm9t
IHRoZSBJUC9Ib3N0IGNhbm9uaWNhbGl6ZXJzLgorLy8gQWRkaXRpb25hbCBmaWVsZHMgbWF5IGJl
IGFkZGVkIGFzIGNhbGxlcnMgcmVxdWlyZSB0aGVtLgorc3RydWN0IENhbm9uSG9zdEluZm8gewor
CisgICAgQ2Fub25Ib3N0SW5mbygpCisgICAgICAgIDogZmFtaWx5KE5FVVRSQUwpCisgICAgICAg
ICwgaXB2NENvbXBvbmVudHNDb3VudCgwKQorICAgICAgICAsIG91cHV0SG9zdCgpCisgICAgewor
ICAgIH0KKworICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHRlc3QgaWYgZmFtaWx5IGlz
IGFuIElQIGFkZHJlc3MuCisgICAgYm9vbCBJc0lQQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIGZh
bWlseSA9PSBJUFY0IHx8IGZhbWlseSA9PSBJUFY2OyB9CisKKyAgICAvLyBUaGlzIGZpZWxkIHN1
bW1hcml6ZXMgaG93IHRoZSBpbnB1dCB3YXMgY2xhc3NpZmllZCBieSB0aGUgY2Fub25pY2FsaXpl
ci4KKyAgICBlbnVtIEZhbWlseSB7CisgICAgICAgIC8vIC0gRG9lc24ndCByZXNlbWJsZSBhbiBJ
UCBhZGRyZXNzLiBBcyBmYXIgYXMgdGhlIElQCisgICAgICAgIC8vIGNhbm9uaWNhbGl6ZXIgaXMg
Y29uY2VybmVkLCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhCisgICAgICAgIC8vICAgaG9zdG5h
bWUuCisgICAgICAgIE5FVVRSQUwsCisKKyAgICAgICAgLy8gLSBBbG1vc3QgYW4gSVAsIGJ1dCB3
YXMgbm90IGNhbm9uaWNhbGl6ZWQuIFRoaXMgY291bGQgYmUgYW4KKyAgICAgICAgLy8gSVB2NCBh
ZGRyZXNzIHdoZXJlIHRydW5jYXRpb24gb2NjdXJyZWQsIG9yIHNvbWV0aGluZworICAgICAgICAv
LyBjb250YWluaW5nIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgOltdIHdoaWNoIGRpZCBub3QgcGFy
c2UKKyAgICAgICAgLy8gYXMgYW4gSVB2NiBhZGRyZXNzLiBOZXZlciBhdHRlbXB0IHRvIGNvbm5l
Y3QgdG8gdGhpcworICAgICAgICAvLyBhZGRyZXNzLCBiZWNhdXNlIGl0IG1pZ2h0IGFjdHVhbGx5
IHN1Y2NlZWQhCisgICAgICAgIEJST0tFTiwKKworICAgICAgICBJUFY0LCAvLyAtIFN1Y2Nlc3Nm
dWxseSBjYW5vbmljYWxpemVkIGFzIGFuIElQdjQgYWRkcmVzcy4KKyAgICAgICAgSVBWNiwgLy8g
LSBTdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCBhcyBhbiBJUHY2IGFkZHJlc3MuCisgICAgfTsK
KyAgICBGYW1pbHkgZmFtaWx5OworCisgICAgLy8gSWYgfGZhbWlseXwgaXMgSVBWNCwgdGhlbiB0
aGlzIGlzIHRoZSBudW1iZXIgb2Ygbm9uZW1wdHkgZG90LXNlcGFyYXRlZAorICAgIC8vIGNvbXBv
bmVudHMgaW4gdGhlIGlucHV0IHRleHQsIGZyb20gMSB0byA0LiBJZiB8ZmFtaWx5fCBpcyBub3Qg
SVBWNCwKKyAgICAvLyB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICBpbnQgaXB2NENvbXBv
bmVudHNDb3VudDsKKworICAgIC8vIExvY2F0aW9uIG9mIGhvc3Qgd2l0aGluIHRoZSBjYW5vbmlj
YWxpemVkIG91dHB1dC4KKyAgICAvLyBDYW5vbmljYWxpemVJUEFkZHJlc3MoKSBvbmx5IHNldHMg
dGhpcyBmaWVsZCBpZiB8ZmFtaWx5fCBpcyBJUFY0IG9yIElQVjYuCisgICAgLy8gQ2Fub25pY2Fs
aXplSG9zdFZlcmJvc2UoKSBhbHdheXMgc2V0cyBpdC4KKyAgICBVUkxDb21wb25lbnQgb3VwdXRI
b3N0OworCisgICAgLy8gfGFkZHJlc3N8IGNvbnRhaW5zIHRoZSBwYXJzZWQgSVAgQWRkcmVzcyAo
aWYgYW55KSBpbiBpdHMgZmlyc3QKKyAgICAvLyBBZGRyZXNzTGVuZ3RoKCkgYnl0ZXMsIGluIG5l
dHdvcmsgb3JkZXIuIElmIElzSVBBZGRyZXNzKCkgaXMgZmFsc2UKKyAgICAvLyBBZGRyZXNzTGVu
Z3RoKCkgd2lsbCByZXR1cm4gemVybyBhbmQgdGhlIGNvbnRlbnQgb2YgfGFkZHJlc3N8IGlzIHVu
ZGVmaW5lZC4KKyAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdOworCisgICAgLy8gQ29udmVu
aWVuY2UgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYW4gSVAgYWRkcmVzcyBj
b3JyZXNwb25kaW5nCisgICAgLy8gdG8gdGhlIGN1cnJlbnQgSVAgdmVyc2lvbiBpbiB8ZmFtaWx5
fCwgaWYgYW55LiBGb3IgdXNlIHdpdGggfGFkZHJlc3N8LgorICAgIGludCBBZGRyZXNzTGVuZ3Ro
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYW1pbHkgPT0gSVBWNCA/IDQgOiAoZmFt
aWx5ID09IElQVjYgPyAxNiA6IDApOworICAgIH0KK307CisKKworLy8gSG9zdC4KKy8vCisvLyBU
aGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4gVXNlIHRoaXMgdmVyc2lv
biB3aGVuIHlvdSBvbmx5CisvLyBuZWVkIHRvIGtub3cgd2hldGhlciBjYW5vbmljYWxpemF0aW9u
IHN1Y2NlZWRlZC4KK2Jvb2wgQ2Fub25pY2FsaXplSG9zdChjb25zdCBjaGFyKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3Vw
dXRIb3N0KTsKK2Jvb2wgQ2Fub25pY2FsaXplSG9zdChjb25zdCBVQ2hhciogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91cHV0
SG9zdCk7CisKKy8vIEV4dGVuZGVkIHZlcnNpb24gb2YgQ2Fub25pY2FsaXplSG9zdCwgd2hpY2gg
cmV0dXJucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorLy8gVXNlIHRoaXMgd2hlbiB5b3UgbmVl
ZCB0byBrbm93IHdoZXRoZXIgdGhlIGhvc3RuYW1lIHdhcyBhbiBJUCBhZGRyZXNzLgorLy8gQSBz
dWNjZXNzZnVsIHJldHVybiBpcyBpbmRpY2F0ZWQgYnkgaG9zdEluZm8tPmZhbWlseSAhPSBCUk9L
RU4uIFNlZSB0aGUKKy8vIGRlZmluaXRpb24gb2YgQ2Fub25Ib3N0SW5mbyBhYm92ZSBmb3IgZGV0
YWlscy4KK3ZvaWQgQ2Fub25pY2FsaXplSG9zdFZlcmJvc2UoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mLCBDYW5vbkhvc3RJbmZvKik7
Cit2b2lkIENhbm9uaWNhbGl6ZUhvc3RWZXJib3NlKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8qKTsKKwor
CisvLyBJUCBhZGRyZXNzZXMuCisvLworLy8gVHJpZXMgdG8gaW50ZXJwcmV0IHRoZSBnaXZlbiBo
b3N0IG5hbWUgYXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MuIElmIGl0IGlzCisvLyBhbiBJUCBh
ZGRyZXNzLCBpdCB3aWxsIGNhbm9uaWNhbGl6ZSBpdCBhcyBzdWNoLCBhcHBlbmRpbmcgaXQgdG8g
fG91dHB1dHwuCisvLyBBZGRpdGlvbmFsIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCB2
aWEgdGhlIHwqaG9zdEluZm98IHBhcmFtZXRlci4KKy8vIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBD
YW5vbkhvc3RJbmZvIGFib3ZlIGZvciBkZXRhaWxzLgorLy8KKy8vIFRoaXMgaXMgY2FsbGVkIEFV
VE9NQVRJQ0FMTFkgZnJvbSB0aGUgaG9zdCBjYW5vbmljYWxpemVyLCB3aGljaCBlbnN1cmVzIHRo
YXQKKy8vIHRoZSBpbnB1dCBpcyB1bmVzY2FwZWQgYW5kIG5hbWUtcHJlcHBlZCwgZXRjLiBJdCBz
aG91bGQgbm90IG5vcm1hbGx5IGJlCisvLyBuZWNlc3Nhcnkgb3Igd2lzZSB0byBjYWxsIHRoaXMg
ZGlyZWN0bHkuCit2b2lkIENhbm9uaWNhbGl6ZUlQQWRkcmVzcyhjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8q
KTsKK3ZvaWQgQ2Fub25pY2FsaXplSVBBZGRyZXNzKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8qKTsKKwor
Ly8gUG9ydDogdGhpcyBmdW5jdGlvbiB3aWxsIGFkZCB0aGUgY29sb24gZm9yIHRoZSBwb3J0IGlm
IGEgcG9ydCBpcyBwcmVzZW50LgorLy8gVGhlIGNhbGxlciBjYW4gcGFzcyBVUkxQYXJzZXI6OlBP
UlRfVU5TUEVDSUZJRUQgYXMgdGhlCisvLyBkZWZhdWx0UG9ydEZvclNjaGVtZSBhcmd1bWVudCBp
ZiB0aGVyZSBpcyBubyBkZWZhdWx0IHBvcnQuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVx
dWlyZXMgVVRGLTggZW5jb2RpbmcuCitib29sIENhbm9uaWNhbGl6ZVBvcnQoY29uc3QgY2hhciog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUs
CisgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBv
dXB1dFBvcnQpOworYm9vbCBDYW5vbmljYWxpemVQb3J0KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZhdWx0UG9ydEZvclNjaGVtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91cHV0UG9ydCk7
CisKKy8vIFJldHVybnMgdGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbCBz
Y2hlbWUsIG9yIFBPUlRfVU5TUEVDSUZJRUQKKy8vIGlmIHRoZSBzY2hlbWUgaXMgdW5rbm93bi4K
K2ludCBEZWZhdWx0UG9ydEZvclNjaGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIGludCBzY2hlbWVM
ZW5ndGgpOworCisvLyBQYXRoLiBJZiB0aGUgaW5wdXQgZG9lcyBub3QgYmVnaW4gaW4gYSBzbGFz
aCAoaW5jbHVkaW5nIGlmIHRoZSBpbnB1dCBpcworLy8gZW1wdHkpLCB3ZSdsbCBwcmVwZW5kIGEg
c2xhc2ggdG8gdGhlIHBhdGggdG8gbWFrZSBpdCBjYW5vbmljYWwuCisvLworLy8gVGhlIDgtYml0
IHZlcnNpb24gYXNzdW1lcyBVVEYtOCBlbmNvZGluZywgYnV0IGRvZXMgbm90IHZlcmlmeSB0aGUg
dmFsaWRpdHkKKy8vIG9mIHRoZSBVVEYtOCAoaS5lLiwgeW91IGNhbiBoYXZlIGludmFsaWQgVVRG
LTggc2VxdWVuY2VzLCBpbnZhbGlkCisvLyBjaGFyYWN0ZXJzLCBldGMuKS4gTm9ybWFsbHksIFVS
THMgd2lsbCBjb21lIGluIGFzIFVURi0xNiwgc28gdGhpcyBpc24ndAorLy8gYW4gaXNzdWUuIFNv
bWVib2R5IGdpdmluZyB1cyBhbiA4LWJpdCBwYXRoIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0
aW5nCisvLyB0aGUgcGF0aCB0aGF0IHRoZSBzZXJ2ZXIgZXhwZWN0cyAod2UnbGwgZXNjYXBlIGhp
Z2gtYml0IGNoYXJhY3RlcnMpLCBzbworLy8gaWYgc29tZXRoaW5nIGlzIGludmFsaWQsIGl0J3Mg
dGhlaXIgcHJvYmxlbS4KK2Jvb2wgQ2Fub25pY2FsaXplUGF0aChjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCog
b3V0cHV0UGF0aCk7Citib29sIENhbm9uaWNhbGl6ZVBhdGgoY29uc3QgVUNoYXIqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBv
dXRwdXRQYXRoKTsKKworLy8gQ2Fub25pY2FsaXplcyB0aGUgaW5wdXQgYXMgYSBmaWxlIHBhdGgu
IFRoaXMgaXMgbGlrZSBDYW5vbmljYWxpemVQYXRoIGV4Y2VwdAorLy8gdGhhdCBpdCBhbHNvIGhh
bmRsZXMgV2luZG93cyBkcml2ZSBzcGVjcy4gRm9yIGV4YW1wbGUsIHRoZSBwYXRoIGNhbiBiZWdp
bgorLy8gd2l0aCAiY3xcIiBhbmQgaXQgd2lsbCBnZXQgcHJvcGVybHkgY2Fub25pY2FsaXplZCB0
byAiQzovIi4KKy8vIFRoZSBzdHJpbmcgd2lsbCBiZSBhcHBlbmRlZCB0byB8b3V0cHV0fCBhbmQg
fG91dHB1dFBhdGh8IHdpbGwgYmUgdXBkYXRlZC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiBy
ZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4KK2Jvb2wgRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3Qg
Y2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBV
UkxDb21wb25lbnQqIG91dHB1dFBhdGgpOworYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0aChjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4m
LCBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgpOworCisvLyBRdWVyeTogUHJlcGVuZHMgdGhlID8g
aWYgbmVlZGVkLgorLy8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIHRoZSBpbnB1dCB0
byBiZSBVVEYtOCBlbmNvZGluZy4gSW5jb3JyZWN0bHkKKy8vIGVuY29kZWQgY2hhcmFjdGVycyAo
aW4gVVRGLTggb3IgVVRGLTE2KSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIFVuaWNvZGUKKy8v
ICJpbnZhbGlkIGNoYXJhY3Rlci4iIFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBmYWlsLCB3ZSBhbHdh
eXMganVzdCB0cnkgdG8gZG8KKy8vIG91ciBiZXN0IGZvciBjcmF6eSBpbnB1dCBoZXJlIHNpbmNl
IHdlYiBwYWdlcyBjYW4gc2V0IGl0IHRoZW1zZWx2ZXMuCisvLworLy8gVGhpcyB3aWxsIGNvbnZl
cnQgdGhlIGdpdmVuIGlucHV0IGludG8gdGhlIG91dHB1dCBlbmNvZGluZyB0aGF0IHRoZSBnaXZl
bgorLy8gY2hhcmFjdGVyIHNldCBjb252ZXJ0ZXIgb2JqZWN0IHByb3ZpZGVzLiBUaGUgY29udmVy
dGVyIHdpbGwgb25seSBiZSBjYWxsZWQKKy8vIGlmIG5lY2Vzc2FyeSwgZm9yIEFTQ0lJIGlucHV0
LCBubyBjb252ZXJzaW9ucyBhcmUgbmVjZXNzYXJ5LgorLy8KKy8vIFRoZSBjb252ZXJ0ZXIgY2Fu
IGJlIG51bGwuIEluIHRoaXMgY2FzZSwgdGhlIG91dHB1dCBlbmNvZGluZyB3aWxsIGJlIFVURi04
Lgordm9pZCBDYW5vbmljYWxpemVRdWVyeShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29t
cG9uZW50KiBvdXRwdXRRdWVyeSk7Cit2b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IFVDaGFy
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiwgVVJM
QnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeSk7CisKKy8vIFJlZjogUHJl
cGVuZHMgdGhlICMgaWYgbmVlZGVkLiBUaGUgb3V0cHV0IHdpbGwgYmUgVVRGLTggKHRoaXMgaXMg
dGhlIG9ubHkKKy8vIGNhbm9uaWNhbGl6ZXIgdGhhdCBkb2VzIG5vdCBwcm9kdWNlIEFTQ0lJIG91
dHB1dCkuIFRoZSBvdXRwdXQgaXMKKy8vIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgVVRGLTguCisv
LworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBmYWlsLiBJZiB0aGUgaW5wdXQgaXMgaW52YWxp
ZCBVVEYtOC9VVEYtMTYsIHdlJ2xsIHVzZQorLy8gdGhlICJVbmljb2RlIHJlcGxhY2VtZW50IGNo
YXJhY3RlciIgZm9yIHRoZSBjb25mdXNpbmcgYml0cyBhbmQgY29weSB0aGUgcmVzdC4KK3ZvaWQg
Q2Fub25pY2FsaXplUmVmKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0
aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRGcmFnbWVudCk7Cit2b2lk
IENhbm9uaWNhbGl6ZVJlZihjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBw
YXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dEZyYWdtZW50KTsKKwor
Ly8gRnVsbCBjYW5vbmljYWxpemVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoZXNlIGZ1bmN0aW9ucyByZXBsYWNlIGFu
eSBzdHJpbmcgY29udGVudHMsIHJhdGhlciB0aGFuIGFwcGVuZCBhcyBhYm92ZS4KKy8vIFNlZSB0
aGUgYWJvdmUgcGllY2UtYnktcGllY2UgZnVuY3Rpb25zIGZvciBpbmZvcm1hdGlvbiBzcGVjaWZp
YyB0bworLy8gY2Fub25pY2FsaXppbmcgaW5kaXZpZHVhbCBjb21wb25lbnRzLgorLy8KKy8vIFRo
ZSBvdXRwdXQgd2lsbCBiZSBBU0NJSSBleGNlcHQgdGhlIHJlZmVyZW5jZSBmcmFnbWVudCwgd2hp
Y2ggbWF5IGJlIFVURi04LgorLy8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9ucyByZXF1aXJlIFVURi04
IGVuY29kaW5nLgorCisvLyBVc2UgZm9yIHN0YW5kYXJkIFVSTHMgd2l0aCBhdXRob3JpdGllcyBh
bmQgcGF0aHMuCitib29sIENhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIENhbm9uaWNhbGl6
ZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJM
U2VnbWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBv
dXRwdXRQYXJzZWQpOworCisvLyBVc2UgZm9yIGZpbGUgVVJMcy4KK2Jvb2wgQ2Fub25pY2FsaXpl
RmlsZVVSTChjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVu
dHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNl
ZCk7Citib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVj
TGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBV
UkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworLy8gVXNlIGZvciBmaWxlc3lzdGVtIFVSTHMu
Citib29sIENhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogc3BlYywgaW50IHNw
ZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIENoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBDYW5vbmljYWxpemVGaWxl
U3lzdGVtVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2Vn
bWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCk7CisKKy8vIFVzZSBmb3IgcGF0aCBVUkxzIHN1Y2ggYXMgamF2YXNjcmlwdC4g
VGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHBhdGggaW4gYW55CisvLyB3YXksIGZvciBleGFtcGxl
LCBieSBlc2NhcGluZyBpdC4KK2Jvb2wgY2Fub25pY2FsaXplUGF0aFVSTChjb25zdCBjaGFyKiBz
cGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwg
VVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKTsKK2Jvb2wgY2Fub25pY2FsaXplUGF0aFVSTChjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCk7CisKKy8vIFVzZSBmb3IgbWFpbHRv
IFVSTHMuIFRoaXMgImNhbm9uaWNhbGl6ZXMiIHRoZSB1cmwgaW50byBhIHBhdGggYW5kIHF1ZXJ5
CisvLyBjb21wb25lbnQuIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gbWVyZ2UgInRvIiBmaWVsZHMu
IEl0IHVzZXMgVVRGLTggZm9yCisvLyB0aGUgcXVlcnkgZW5jb2RpbmcgaWYgdGhlcmUgaXMgYSBx
dWVyeS4gVGhpcyBpcyBiZWNhdXNlIGEgbWFpbHRvIFVSTCBpcworLy8gcmVhbGx5IGludGVuZGVk
IGZvciBhbiBleHRlcm5hbCBtYWlsIHByb2dyYW0sIGFuZCB0aGUgZW5jb2Rpbmcgb2YgYSBwYWdl
LAorLy8gZXRjLiB3aGljaCB3b3VsZCBpbmZsdWVuY2UgYSBxdWVyeSBlbmNvZGluZyBub3JtYWxs
eSBhcmUgaXJyZWxldmFudC4KK2Jvb2wgQ2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IGNoYXIq
IHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1
dFBhcnNlZCk7Citib29sIENhbm9uaWNhbGl6ZU1haWx0b1VSTChjb25zdCBVQ2hhciogc3BlYywg
aW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2Vk
KTsKKworLy8gUGFydCByZXBsYWNlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBJbnRlcm5hbCBzdHJ1Y3R1cmUgdXNl
ZCBmb3Igc3RvcmluZyBzZXBhcmF0ZSBzdHJpbmdzIGZvciBlYWNoIGNvbXBvbmVudC4KKy8vIFRo
ZSBiYXNpYyBjYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucyB1c2UgdGhpcyBzdHJ1Y3R1cmUgaW50
ZXJuYWxseSBzbyB0aGF0CisvLyBjb21wb25lbnQgcmVwbGFjZW1lbnQgKGRpZmZlcmVudCBzdHJp
bmdzIGZvciBkaWZmZXJlbnQgY29tcG9uZW50cykgY2FuIGJlCisvLyB0cmVhdGVkIG9uIHRoZSBz
YW1lIGNvZGUgcGF0aCBhcyByZWd1bGFyIGNhbm9uaWNhbGl6YXRpb24gKHRoZSBzYW1lIHN0cmlu
ZworLy8gZm9yIGVhY2ggY29tcG9uZW50KS4KKy8vCisvLyBBIFVSTFNlZ21lbnRzIHN0cnVjdHVy
ZSB1c3VhbGx5IGdvZXMgYWxvbmcgd2l0aCB0aGlzLiBUaG9zZQorLy8gY29tcG9uZW50cyBpZGVu
dGlmeSBvZmZzZXRzIHdpdGhpbiB0aGVzZSBzdHJpbmdzLCBzbyB0aGF0IHRoZXkgY2FuIGFsbCBi
ZQorLy8gaW4gdGhlIHNhbWUgc3RyaW5nLCBvciBzcHJlYWQgYXJiaXRyYXJpbHkgYWNyb3NzIGRp
ZmZlcmVudCBvbmVzLgorLy8KKy8vIFRoaXMgc3RydWN0dXJlcyBkb2VzIG5vdCBvd24gYW55IGRh
dGEuIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0bworLy8gZW5zdXJlIHRoYXQg
dGhlIGRhdGEgdGhlIHBvaW50ZXJzIHBvaW50IHRvIHN0YXlzIGluIHNjb3BlIGFuZCBpcyBub3QK
Ky8vIG1vZGlmaWVkLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0cnVjdCBV
UkxDb21wb25lbnRTb3VyY2UgeworICAgIC8vIENvbnN0cnVjdG9yIG5vcm1hbGx5IHVzZWQgYnkg
Y2FsbGVycyB3aXNoaW5nIHRvIHJlcGxhY2UgY29tcG9uZW50cy4gVGhpcworICAgIC8vIHdpbGwg
bWFrZSB0aGVtIGFsbCBudWxsLCB3aGljaCBpcyBubyByZXBsYWNlbWVudC4gVGhlIGNhbGxlciB3
b3VsZCB0aGVuCisgICAgLy8gb3ZlcnJpZGUgdGhlIGNvbXBvbmVudHMgdGhleSB3YW50IHRvIHJl
cGxhY2UuCisgICAgVVJMQ29tcG9uZW50U291cmNlKCkKKyAgICAgICAgOiBzY2hlbWUoMCkKKyAg
ICAgICAgLCB1c2VybmFtZSgwKQorICAgICAgICAsIHBhc3N3b3JkKDApCisgICAgICAgICwgaG9z
dCgwKQorICAgICAgICAsIHBvcnQoMCkKKyAgICAgICAgLCBwYXRoKDApCisgICAgICAgICwgcXVl
cnkoMCkKKyAgICAgICAgLCByZWYoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0
b3Igbm9ybWFsbHkgdXNlZCBpbnRlcm5hbGx5IHRvIGluaXRpYWxpemUgYWxsIHRoZSBjb21wb25l
bnRzIHRvCisgICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgc3BlYy4KKyAgICBleHBsaWNpdCBVUkxD
b21wb25lbnRTb3VyY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogZGVmYXVsdFZhbHVlKQorICAgICAg
ICA6IHNjaGVtZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgdXNlcm5hbWUoZGVmYXVsdFZhbHVl
KQorICAgICAgICAsIHBhc3N3b3JkKGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgLCBob3N0KGRlZmF1
bHRWYWx1ZSkKKyAgICAgICAgLCBwb3J0KGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgLCBwYXRoKGRl
ZmF1bHRWYWx1ZSkKKyAgICAgICAgLCBxdWVyeShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgcmVm
KGRlZmF1bHRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSog
c2NoZW1lOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHVzZXJuYW1lOworICAgIGNvbnN0IENo
YXJhY3RlclR5cGUqIHBhc3N3b3JkOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGhvc3Q7Cisg
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9ydDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBw
YXRoOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHF1ZXJ5OworICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIHJlZjsKK307CisKKy8vIFRoaXMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBpbmZvcm1h
dGlvbiBvbiBtb2RpZnlpbmcgYSBVUkwuIEVhY2ggY29tcG9uZW50CisvLyBtYXkgZWl0aGVyIGJl
IGxlZnQgdW5jaGFuZ2VkLCByZXBsYWNlZCwgb3IgZGVsZXRlZC4KKy8vCisvLyBCeSBkZWZhdWx0
LCBlYWNoIGNvbXBvbmVudCBpcyB1bmNoYW5nZWQuIEZvciB0aG9zZSBjb21wb25lbnRzIHRoYXQg
c2hvdWxkIGJlCisvLyBtb2RpZmllZCwgY2FsbCBlaXRoZXIgU2V0KiBvciBDbGVhciogdG8gbW9k
aWZ5IGl0LgorLy8KKy8vIFRoZSBzdHJpbmcgcGFzc2VkIHRvIFNldCogZnVuY3Rpb25zIERPRVMg
Tk9UIEdFVCBDT1BJRUQgQU5EIE1VU1QgQkUgS0VQVAorLy8gSU4gU0NPUEUgQlkgVEhFIENBTExF
UiBmb3IgYXMgbG9uZyBhcyB0aGlzIG9iamVjdCBleGlzdHMhCisvLworLy8gUHJlZmVyIHRoZSA4
LWJpdCByZXBsYWNlbWVudCB2ZXJzaW9uIGlmIHBvc3NpYmxlIHNpbmNlIGl0IGlzIG1vcmUgZWZm
aWNpZW50LgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2NsYXNzIFJlcGxhY2Vt
ZW50cyB7CitwdWJsaWM6CisgICAgUmVwbGFjZW1lbnRzKCkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gU2NoZW1lCisgICAgdm9pZCBTZXRTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29u
c3QgVVJMQ29tcG9uZW50JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnNjaGVtZSA9
IHM7CisgICAgICAgIG1fc2VnbWVudHMuc2NoZW1lID0gY29tcDsKKyAgICB9CisgICAgLy8gTm90
ZTogd2UgZG9uJ3QgaGF2ZSBhIENsZWFyU2NoZW1lIHNpbmNlIHRoaXMgZG9lc24ndCBtYWtlIGFu
eSBzZW5zZS4KKyAgICBib29sIElzU2NoZW1lT3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICEh
bV9zb3VyY2VzLnNjaGVtZTsgfQorCisgICAgLy8gVXNlcm5hbWUKKyAgICB2b2lkIFNldFVzZXJu
YW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKKyAg
ICB7CisgICAgICAgIG1fc291cmNlcy51c2VybmFtZSA9IHM7CisgICAgICAgIG1fc2VnbWVudHMu
dXNlcm5hbWUgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFyVXNlcm5hbWUoKQorICAgIHsK
KyAgICAgICAgbV9zb3VyY2VzLnVzZXJuYW1lID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9z
ZWdtZW50cy51c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzVXNl
cm5hbWVPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMudXNlcm5hbWU7IH0K
KworICAgIC8vIFBhc3N3b3JkCisgICAgdm9pZCBTZXRQYXNzd29yZChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJj
ZXMucGFzc3dvcmQgPSBzOworICAgICAgICBtX3NlZ21lbnRzLnBhc3N3b3JkID0gY29tcDsKKyAg
ICB9CisgICAgdm9pZCBDbGVhclBhc3N3b3JkKCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5w
YXNzd29yZCA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1fc2VnbWVudHMucGFzc3dvcmQgPSBV
UkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc1Bhc3N3b3JkT3ZlcnJpZGRlbigpIGNv
bnN0IHsgcmV0dXJuICEhbV9zb3VyY2VzLnBhc3N3b3JkOyB9CisKKyAgICAvLyBIb3N0CisgICAg
dm9pZCBTZXRIb3N0KGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYg
Y29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5ob3N0ID0gczsKKyAgICAgICAgbV9zZWdt
ZW50cy5ob3N0ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhckhvc3QoKQorICAgIHsKKyAg
ICAgICAgbV9zb3VyY2VzLmhvc3QgPSBQbGFjZWhvbGRlcigpOworICAgICAgICBtX3NlZ21lbnRz
Lmhvc3QgPSBVUkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc0hvc3RPdmVycmlkZGVu
KCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMuaG9zdDsgfQorCisgICAgLy8gUG9ydAorICAg
IHZvaWQgU2V0UG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQm
IGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMucG9ydCA9IHM7CisgICAgICAgIG1fc2Vn
bWVudHMucG9ydCA9IGNvbXA7CisgICAgfQorICAgIHZvaWQgQ2xlYXJQb3J0KCkKKyAgICB7Cisg
ICAgICAgIG1fc291cmNlcy5wb3J0ID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9zZWdtZW50
cy5wb3J0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorICAgIGJvb2wgSXNQb3J0T3ZlcnJpZGRl
bigpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2VzLnBvcnQ7IH0KKworICAgIC8vIFBhdGgKKyAg
ICB2b2lkIFNldFBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50
JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnBhdGggPSBzOworICAgICAgICBtX3Nl
Z21lbnRzLnBhdGggPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFyUGF0aCgpCisgICAgewor
ICAgICAgICBtX3NvdXJjZXMucGF0aCA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1fc2VnbWVu
dHMucGF0aCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzUGF0aE92ZXJyaWRk
ZW4oKSBjb25zdCB7IHJldHVybiAhbV9zb3VyY2VzLnBhdGg7IH0KKworICAgIC8vIFF1ZXJ5Cisg
ICAgdm9pZCBTZXRRdWVyeShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25l
bnQmIGNvbXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMucXVlcnkgPSBzOworICAgICAgICBt
X3NlZ21lbnRzLnF1ZXJ5ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhclF1ZXJ5KCkKKyAg
ICB7CisgICAgICAgIG1fc291cmNlcy5xdWVyeSA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1f
c2VnbWVudHMucXVlcnkgPSBVUkxDb21wb25lbnQoKTsKKyAgICB9CisgICAgYm9vbCBJc1F1ZXJ5
T3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICFtX3NvdXJjZXMucXVlcnk7IH0KKworICAgIC8v
IFJlZgorICAgIHZvaWQgU2V0UmVmKGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENv
bXBvbmVudCYgY29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5yZWYgPSBzOworICAgICAg
ICBtX3NlZ21lbnRzLmZyYWdtZW50ID0gY29tcDsKKyAgICB9CisgICAgdm9pZCBDbGVhclJlZigp
CisgICAgeworICAgICAgICBtX3NvdXJjZXMucmVmID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAg
bV9zZWdtZW50cy5mcmFnbWVudCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElz
UmVmT3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICFtX3NvdXJjZXMucmVmOyB9CisKKyAgICAv
LyBHZXR0ZXJzIGZvciB0aGUgaXRuZXJuYWwgZGF0YS4gU2VlIHRoZSB2YXJpYWJsZXMgYmVsb3cg
Zm9yIGhvdyB0aGUKKyAgICAvLyBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkLgorICAgIGNvbnN0IFVS
TENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291cmNlcygpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlczsgfQorICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBjb21wb25lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWdtZW50czsgfQorCitwcml2YXRlOgorICAgIC8vIFJldHVybnMgYSBwb2lu
dGVyIHRvIGEgc3RhdGljIGVtcHR5IHN0cmluZyB0aGF0IGlzIHVzZWQgYXMgYSBwbGFjZWhvbGRl
cgorICAgIC8vIHRvIGluZGljYXRlIGEgY29tcG9uZW50IHNob3VsZCBiZSBkZWxldGVkIChzZWUg
YmVsb3cpLgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIFBsYWNlaG9sZGVyKCkKKyAgICB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBDaGFyYWN0ZXJUeXBlIGVtcHR5U3RyaW5nID0gMDsKKyAgICAg
ICAgcmV0dXJuICZlbXB0eVN0cmluZzsKKyAgICB9CisKKyAgICAvLyBXZSBzdXBwb3J0IHRocmVl
IHN0YXRlczoKKyAgICAvLworICAgIC8vIEFjdGlvbiAgICAgICAgICAgICAgICAgfCBTb3VyY2Ug
ICAgICAgICAgICAgICAgQ29tcG9uZW50CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBEb24ndCBjaGFuZ2UgY29tcG9uZW50IHwgbnVsbCAgICAgICAgICAgICAgICAgICh1bnVzZWQp
CisgICAgLy8gUmVwbGFjZSBjb21wb25lbnQgICAgICB8IChyZXBsYWNlbWVudCBzdHJpbmcpICAo
cmVwbGFjZW1lbnQgY29tcG9uZW50KQorICAgIC8vIERlbGV0ZSBjb21wb25lbnQgICAgICAgfCAo
bm9uLW51bGwpICAgICAgICAgICAgKGludmFsaWQgY29tcG9uZW50OiAoMCwtMSkpCisgICAgLy8K
KyAgICAvLyBXZSB1c2UgYSBwb2ludGVyIHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRoZSBzb3Vy
Y2Ugd2hlbiB0aGUgY29tcG9uZW50CisgICAgLy8gc2hvdWxkIGJlIGRlbGV0ZWQuCisgICAgVVJM
Q29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+IG1fc291cmNlczsKKyAgICBVUkxTZWdtZW50
cyBtX3NlZ21lbnRzOworfTsKKworLy8gVGhlIGJhc2UgbXVzdCBiZSBhbiA4LWJpdCBjYW5vbmlj
YWwgVVJMLgorYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2Vk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNo
YXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIq
IHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRz
KiBvdXRwdXRQYXJzZWQpOworYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBi
YXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFj
ZW1lbnRzPFVDaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworLy8gRmlsZXN5c3RlbSBVUkxzIGNhbiBvbmx5
IGhhdmUgdGhlIHBhdGgsIHF1ZXJ5LCBvciByZWYgcmVwbGFjZWQuCisvLyBBbGwgb3RoZXIgY29t
cG9uZW50cyB3aWxsIGJlIGlnbm9yZWQuCitib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0
IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxh
Y2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252
ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFy
PiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpOworCisvLyBSZXBsYWNpbmcgc29tZSBwYXJ0cyBvZiBhIGZpbGUgVVJMIGlzIG5v
dCBwZXJtaXR0ZWQuIEV2ZXJ5dGhpbmcgZXhjZXB0CisvLyB0aGUgaG9zdCwgcGF0aCwgcXVlcnks
IGFuZCByZWYgd2lsbCBiZSBpZ25vcmVkLgorYm9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFy
KiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYg
YmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1l
bnRzPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRl
ciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZl
cjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpOworYm9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVy
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKwor
Ly8gUGF0aCBVUkxzIGNhbiBvbmx5IGhhdmUgdGhlIHNjaGVtZSBhbmQgcGF0aCByZXBsYWNlZC4g
QWxsIG90aGVyIGNvbXBvbmVudHMKKy8vIHdpbGwgYmUgaWdub3JlZC4KK2Jvb2wgUmVwbGFjZVBh
dGhVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBSZXBsYWNlUGF0aFVSTChjb25zdCBjaGFyKiBiYXNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBh
cnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVD
aGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwor
CisvLyBNYWlsdG8gVVJMcyBjYW4gb25seSBoYXZlIHRoZSBzY2hlbWUsIHBhdGgsIGFuZCBxdWVy
eSByZXBsYWNlZC4KKy8vIEFsbCBvdGhlciBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZC4KK2Jv
b2wgUmVwbGFjZU1haWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgUmVwbGFjZU1h
aWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIFJlbGF0aXZlIFVSTCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworLy8gR2l2ZW4gYW4gaW5wdXQgVVJMIG9yIFVSTCBmcmFnbWVudCB8ZnJhZ21lbnR8LCBkZXRl
cm1pbmVzIGlmIGl0IGlzIGEKKy8vIHJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBhbmQgcGxhY2Vz
IHRoZSByZXN1bHQgaW50byB8KmlzUmVsYXRpdmV8LiBJZiBpdCBpcworLy8gcmVsYXRpdmUsIHRo
ZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBVUkwgd2lsbCBiZSBwbGFjZWQgaW50bworLy8gfCpy
ZWxhdGl2ZUNvbXBvbmVudHwgKHRoZXJlIG1heSBoYXZlIGJlZW4gdHJpbW1lZCB3aGl0ZXNwYWNl
LCBmb3IgZXhhbXBsZSkuCisvLyBUaGlzIHZhbHVlIGlzIHBhc3NlZCB0byByZXNvbHZlUmVsYXRp
dmVVUkwuIElmIHRoZSBpbnB1dCBpcyBub3QgcmVsYXRpdmUsCisvLyB0aGlzIHZhbHVlIGlzIFVO
REVGSU5FRCAoaXQgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIGZ1bmN0aW9uKS4KKy8vCisvLyBSZXR1
cm5zIHRydWUgb24gc3VjY2VzcyAod2Ugc3VjY2Vzc2Z1bGx5IGRldGVybWluZWQgdGhlIFVSTCBp
cyByZWxhdGl2ZSBvcgorLy8gbm90KS4gRmFpbHVyZSBtZWFucyB0aGF0IHRoZSBjb21iaW5hdGlv
biBvZiBVUkxzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuCisvLworLy8gVGhlIGJhc2UgVVJMIHNo
b3VsZCBhbHdheXMgYmUgY2Fub25pY2FsLCB0aGVyZWZvcmUgaXMgQVNDSUkuCitib29sIGlzUmVs
YXRpdmVVUkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnJhZ21lbnQsIGludCBmcmFnbWVudExl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICBib29sIGlzQmFzZUhpZXJhcmNoaWNhbCwKKyAgICAg
ICAgICAgICAgICAgICBib29sKiBpc1JlbGF0aXZlLCBVUkxDb21wb25lbnQqIHJlbGF0aXZlQ29t
cG9uZW50KTsKK2Jvb2wgaXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZnJh
Z21lbnQsIGludCBmcmFnbWVudExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICBib29sIGlzQmFz
ZUhpZXJhcmNoaWNhbCwKKyAgICAgICAgICAgICAgICAgICBib29sKiBpc1JlbGF0aXZlLCBVUkxD
b21wb25lbnQqIHJlbGF0aXZlQ29tcG9uZW50KTsKKworLy8gR2l2ZW4gYSBjYW5vbmljYWwgcGFy
c2VkIHNvdXJjZSBVUkwsIGEgVVJMIGZyYWdtZW50IGtub3duIHRvIGJlIHJlbGF0aXZlLAorLy8g
YW5kIHRoZSBpZGVudGlmaWVkIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIHJlbGF0aXZlIFVSTCAo
Y29tcHV0ZWQgYnkKKy8vIGlzUmVsYXRpdmVVUkwpLCB0aGlzIHByb2R1Y2VzIGEgbmV3IHBhcnNl
ZCBjYW5vbmljYWwgVVJMIGluIHxvdXRwdXR8IGFuZAorLy8gfG91dHB1dFBhcnNlZHwuCisvLwor
Ly8gSXQgYWxzbyByZXF1aXJlcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBiYXNlIFVS
TCBpcyBhIGZpbGU6IFVSTAorLy8gd2hpY2ggdHJpZ2dlcnMgYWRkaXRpb25hbCBsb2dpYy4KKy8v
CisvLyBUaGUgYmFzZSBVUkwgc2hvdWxkIGJlIGNhbm9uaWNhbCBhbmQgaGF2ZSBhIGhvc3QgKG1h
eSBiZSBlbXB0eSBmb3IgZmlsZQorLy8gVVJMcykgYW5kIGEgcGF0aC4gSWYgaXQgZG9lc24ndCBo
YXZlIHRoZXNlLCB3ZSBjYW4ndCByZXNvbHZlIHJlbGF0aXZlCisvLyBVUkxzIG9mZiBvZiBpdCBh
bmQgd2lsbCByZXR1cm4gdGhlIGJhc2UgYXMgdGhlIG91dHB1dCB3aXRoIGFuIGVycm9yIGZsYWcu
CisvLyBCZWNhdXNlZSBpdCBpcyBjYW5vbmljYWwgaXMgc2hvdWxkIGFsc28gYmUgQVNDSUkuCisv
LworLy8gVGhlIHF1ZXJ5IGNoYXJzZXQgY29udmVydGVyIGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMg
YXMgQ2Fub25pY2FsaXplUXVlcnkuCisvLworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9u
IGZhaWx1cmUsIHRoZSBvdXRwdXQgd2lsbCBiZSAic29tZXRoaW5nCisvLyByZWFzb25hYmxlIiB0
aGF0IHdpbGwgYmUgY29uc2lzdGVudCBhbmQgdmFsaWQsIGp1c3QgcHJvYmFibHkgbm90IHdoYXQK
Ky8vIHdhcyBpbnRlbmRlZCBieSB0aGUgd2ViIHBhZ2UgYXV0aG9yIG9yIGNhbGxlci4KK2Jvb2wg
cmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0IFVSTFNlZ21lbnRz
JiBiYXNlUGFyc2VkLCBib29sIGJhc2VJc0ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiByZWxhdGl2ZVVSTCwgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29u
dmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIHJlc29sdmVSZWxhdGl2ZVVSTChjb25zdCBjaGFy
KiBiYXNlVVJMLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgYm9vbCBiYXNlSXNGaWxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0aXZlVVJMLCBjb25z
dCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKKworfSAv
LyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxDYW5vbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRXRjLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMQ2Fub25FdGMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkNDNhZDAwMTM4ZWRmMjFmYjJmZTZm
OTRjZWViYjk4MTdlMjJjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTENhbm9uRXRjLmNwcApAQCAtMCwwICsxLDM4MiBAQAorLy8gQ29weXJpZ2h0IDIwMDcs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisv
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisvLyBDYW5vbmljYWxpemVycyBmb3IgcmFuZG9tIGJpdHMgdGhh
dCBhcmVuJ3QgYmlnIGVub3VnaCBmb3IgdGhlaXIgb3duIGZpbGVzLgorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJu
YWwuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCisjaWYgVVNFKFdURlVSTCkKKwor
bmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNw
YWNlIHsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc2hvdWxkIGJl
IHJlbW92ZWQgZnJvbSB0aGUgbWlkZGxlIG9mIGEKKy8vIFVSTC4KK2lubGluZSBib29sIGlzUmVt
b3ZhYmxlVVJMV2hpdGVzcGFjZShpbnQgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0
ZXIgPT0gJ1xyJyB8fCBjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JzsKK30K
KworLy8gQmFja2VuZCBmb3IgcmVtb3ZlVVJMV2hpdGVzcGFjZSAoc2VlIGRlY2xhcmF0aW9uIGlu
IFVSTENhbm9uLmgpLgorLy8gSXQgc3Vja3MgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMsIHNpbmNl
IHRoaXMgdGFrZXMgYWJvdXQgMTMlIG9mIHRoZSB0b3RhbCBVUkwKKy8vIGNhbm9uaWNhbGl6YXRp
b24gdGltZS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citjb25zdCBDaGFyYWN0
ZXJUeXBlKiBkb1JlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5wdXQs
IGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGludCYg
b3V0cHV0TGVuZ3RoKQoreworICAgIC8vIEZhc3QgdmVyaWZpY2F0aW9uIHRoYXQgdGhlcmUncyBu
b3RoaW5nIHRoYXQgbmVlZHMgcmVtb3ZhbC4gVGhpcyBpcyB0aGUgOTklCisgICAgLy8gY2FzZSwg
c28gd2Ugd2FudCBpdCB0byBiZSBmYXN0IGFuZCBkb24ndCBjYXJlIGFib3V0IGltcGFjdGluZyB0
aGUgc3BlZWQKKyAgICAvLyB3aGVuIHdlIGRvIGZpbmQgd2hpdGVzcGFjZS4KKyAgICBib29sIGZv
dW5kV2hpdGVzcGFjZSA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRMZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAoIWlzUmVtb3ZhYmxlVVJMV2hpdGVzcGFjZShpbnB1dFtp
XSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm91bmRXaGl0ZXNwYWNlID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFmb3VuZFdoaXRlc3BhY2UpIHsK
KyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55IHdoaXRlc3BhY2UsIHdlIGRvbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcuIFdlIGNhbiBqdXN0CisgICAgICAgIC8vIHJldHVybiB0aGUgaW5wdXQgYXMg
dGhlIG91dHB1dC4KKyAgICAgICAgb3V0cHV0TGVuZ3RoID0gaW5wdXRMZW5ndGg7CisgICAgICAg
IHJldHVybiBpbnB1dDsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIHdoaXRlc3BhY2UgaW50
byB0aGUgbmV3IGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5wdXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIWlzUmVtb3ZhYmxlVVJMV2hpdGVzcGFj
ZShpbnB1dFtpXSkpCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGlucHV0W2ldKTsKKyAgICB9
CisgICAgb3V0cHV0TGVuZ3RoID0gYnVmZmVyLmxlbmd0aCgpOworICAgIHJldHVybiBidWZmZXIu
ZGF0YSgpOworfQorCisvLyBDb250YWlucyB0aGUgY2Fub25pY2FsIHZlcnNpb24gb2YgZWFjaCBw
b3NzaWJsZSBpbnB1dCBsZXR0ZXIgaW4gdGhlIHNjaGVtZQorLy8gKGJhc2ljYWxseSwgbG93ZXIt
Y2FzZWQpLiBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSB3aWxsIGJlIDAgaWYgdGhlIGxldHRlcgor
Ly8gaXMgbm90IGFsbG93ZWQgaW4gYSBzY2hlbWUuCitjb25zdCBjaGFyIGtTY2hlbWVDYW5vbmlj
YWxbMHg4MF0gPSB7CisvLyAwMC0xZjogYWxsIGFyZSBpbnZhbGlkCisgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsCisgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisvLyAgJyAnICAgISAgICAiICAg
ICMgICAgJCAgICAlICAgICYgICAgJyAgICAoICAgICkgICAgKiAgICArICAgICwgICAgLSAgICAu
ICAgIC8KKyAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgJysnLCAgMCwgICctJywgJy4nLCAgMCwKKy8vICAgMCAgICAxICAgIDIgICAgMyAg
ICA0ICAgIDUgICAgNiAgICA3ICAgIDggICAgOSAgICA6ICAgIDsgICAgPCAgICA9ICAgID4gICAg
PworICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jywg
IDAgLCAgMCAsICAwICwgIDAgLCAgMCAsICAwICwKKy8vICAgQCAgICBBICAgIEIgICAgQyAgICBE
ICAgIEUgICAgRiAgICBHICAgIEggICAgSSAgICBKICAgIEsgICAgTCAgICBNICAgIE4gICAgTwor
ICAgICAwICwgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2on
LCAnaycsICdsJywgJ20nLCAnbicsICdvJywKKy8vICAgUCAgICBRICAgIFIgICAgUyAgICBUICAg
IFUgICAgViAgICBXICAgIFggICAgWSAgICBaICAgIFsgICAgXCAgICBdICAgIF4gICAgXworICAg
ICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAg
MCwgICAwICwgIDAsICAgMCAsICAwLAorLy8gICBgICAgIGEgICAgYiAgICBjICAgIGQgICAgZSAg
ICBmICAgIGcgICAgaCAgICBpICAgIGogICAgayAgICBsICAgIG0gICAgbiAgICBvCisgICAgIDAg
LCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywg
J2wnLCAnbScsICduJywgJ28nLAorLy8gICBwICAgIHEgICAgciAgICBzICAgIHQgICAgdSAgICB2
ICAgIHcgICAgeCAgICB5ICAgIHogICAgeyAgICB8ICAgIH0gICAgfgorICAgICdwJywgJ3EnLCAn
cicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAgMCAsICAwICwgIDAg
LCAgMCAsICAwIH07CisKKy8vIFRoaXMgY291bGQgYmUgYSB0YWJsZSBsb29rdXAgYXMgd2VsbCBi
eSBzZXR0aW5nIHRoZSBoaWdoIGJpdCBmb3IgZWFjaAorLy8gdmFsaWQgY2hhcmFjdGVyLCBidXQg
aXQncyBvbmx5IGNhbGxlZCBvbmNlIHBlciBVUkwsIGFuZCBpdCBtYWtlcyB0aGUgbG9va3VwCisv
LyB0YWJsZSBlYXNpZXIgdG8gcmVhZCBub3QgaGF2aW5nIGV4dHJhIHN0dWZmIGluIGl0LgoraW5s
aW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCit7Cisg
ICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9TY2hlbWUoY29uc3QgQ2hh
cmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFNjaGVtZSkKK3sKKyAgICBpZiAoc2No
ZW1lLmxlbmd0aCgpIDw9IDApIHsKKyAgICAgICAgLy8gU2NoZW1lIGlzIHVuc3BlY2lmaWVkIG9y
IGVtcHR5LCBjb252ZXJ0IHRvIGVtcHR5IGJ5IGFwcGVuZGluZyBhIGNvbG9uLgorICAgICAgICBv
dXRwdXRTY2hlbWUgPSBVUkxDb21wb25lbnQob3V0cHV0Lmxlbmd0aCgpLCAwKTsKKyAgICAgICAg
b3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBUaGUgb3V0cHV0IHNjaGVtZSBzdGFydHMgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAg
ICBvdXRwdXRTY2hlbWUuc2V0QmVnaW4ob3V0cHV0U2NoZW1lLmJlZ2luKCkgKyBvdXRwdXQubGVu
Z3RoKCkpOworCisgICAgLy8gRGFuZ2VyOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgY29kZSBk
b2VzIG5vdCBzdHJpcCBhbnkgY2hhcmFjdGVyczogaXQKKyAgICAvLyBvbmx5IGVtaXRzIHRoZSBj
YW5vbmljYWwgdmVyc2lvbiAoYmUgaXQgdmFsaWQgb3IgZXNjYXBlZCkgb2YgZWFjaCBvZgorICAg
IC8vIHRoZSBpbnB1dCBjaGFyYWN0ZXJzLiBTdHJpcHBpbmcgd291bGQgcHV0IGl0IG91dCBvZiBz
eW5jIHdpdGgKKyAgICAvLyBVUkxVdGlsaXRpZXM6OkZpbmRBbmRDb21wYXJlU2NoZW1lLCB3aGlj
aCBjb3VsZCBjYXVzZSBzb21lIHNlY3VyaXR5IGNoZWNrcyBvbgorICAgIC8vIHNjaGVtZXMgdG8g
YmUgaW5jb3JyZWN0LgorICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgaW50IGVuZCA9IHNj
aGVtZS5lbmQoKTsKKyAgICBmb3IgKGludCBpID0gc2NoZW1lLmJlZ2luKCk7IGkgPCBlbmQ7ICsr
aSkgeworICAgICAgICBVQ0hBUiBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tp
XSk7CisgICAgICAgIGNoYXIgcmVwbGFjZW1lbnQgPSAwOworICAgICAgICBpZiAoY2hhcmFjdGVy
IDwgMHg4MCkgeworICAgICAgICAgICAgaWYgKGkgPT0gc2NoZW1lLmJlZ2luKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGEgc3BlY2lhbCBjaGVjayBmb3IgdGhlIGZpcnN0IGxl
dHRlciBvZiB0aGUgc2NoZW1lLgorICAgICAgICAgICAgICAgIGlmIChpc1NjaGVtZUZpcnN0Q2hh
cihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaGFyYWN0ZXIpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZW1lbnQgPSBrU2NoZW1lQ2Fub25pY2FsW2NoYXJhY3Rlcl07CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IGtTY2hlbWVDYW5vbmlj
YWxbY2hhcmFjdGVyXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXBsYWNlbWVudCkKKyAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQocmVwbGFjZW1lbnQpOworICAgICAgICBlbHNlIGlmIChj
aGFyYWN0ZXIgPT0gJyUnKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemluZyB0aGUgc2No
ZW1lIG11bHRpcGxlIHRpbWVzIHNob3VsZCBsZWFkIHRvIHRoZSBzYW1lCisgICAgICAgICAgICAv
LyByZXN1bHQuIFNpbmNlIGludmFsaWQgY2hhcmFjdGVycyB3aWxsIGJlIGVzY2FwZWQsIHdlIG5l
ZWQgdG8gcHJlc2VydmUKKyAgICAgICAgICAgIC8vIHRoZSBwZXJjZW50IHRvIGF2b2lkIG11bHRp
cGxlIGVzY2FwaW5nLiBUaGUgc2NoZW1lIHdpbGwgYmUgaW52YWxpZC4KKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyUnKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyLCBzdG9yZSBpdCBidXQg
bWFyayB0aGlzIHNjaGVtZSBhcyBpbnZhbGlkLgorICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgZXNjYXBlIHRoZSBvdXRwdXQgYW5kIGFsc28g
aGFuZGxlIGVuY29kaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgcmV0dXJu
IHZhbHVlIHNpbmNlIHdlIGFscmVhZHkgZmFpbGVkLgorICAgICAgICAgICAgQXBwZW5kVVRGOEVz
Y2FwZWRDaGFyKHNwZWMsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBUaGUgb3V0cHV0IHNjaGVtZSBlbmRzIHdpdGggdGhlIHRoZSBjdXJyZW50IHBvc2l0aW9u
LCBiZWZvcmUgYXBwZW5kaW5nCisgICAgLy8gdGhlIGNvbG9uLgorICAgIG91dHB1dFNjaGVtZS5z
ZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0U2NoZW1lLmJlZ2luKCkpOworICAgIG91
dHB1dC5hcHBlbmQoJzonKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworLy8gVGhlIHVzZXJu
YW1lIGFuZCBwYXNzd29yZCBjb21wb25lbnRzIHJlZmVyZW5jZSByYW5nZXMgaW4gdGhlIGNvcnJl
c3BvbmRpbmcKKy8vICpfc3BlYyBzdHJpbmdzLiBUeXBpY2FsbHksIHRoZXNlIHNwZWNzIHdpbGwg
YmUgdGhlIHNhbWUgKHdlJ3JlCisvLyBjYW5vbmljYWxpemluZyBhIHNpbmdsZSBzb3VyY2Ugc3Ry
aW5nKSwgYnV0IG1heSBiZSBkaWZmZXJlbnQgd2hlbgorLy8gcmVwbGFjaW5nIGNvbXBvbmVudHMu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wg
ZG9Vc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiB1c2VybmFtZVNwZWMsCisgICAgICAgICAg
ICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwKKyAgICAgICAgICAgICAgICBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBwYXNzd29yZFNwZWMsCisgICAgICAgICAgICAgICAgY29uc3QgVVJM
Q29tcG9uZW50JiBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwKKyAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1lLAorICAg
ICAgICAgICAgICAgIFVSTENvbXBvbmVudCYgb3V0cHV0UGFzc3dvcmQpCit7CisgICAgaWYgKHVz
ZXJuYW1lLmxlbmd0aCgpIDw9IDAgJiYgcGFzc3dvcmQubGVuZ3RoKCkgPD0gMCkgeworICAgICAg
ICAvLyBDb21tb24gY2FzZTogbm8gdXNlciBpbmZvLiBXZSBzdHJpcCBlbXB0eSB1c2VybmFtZS9w
YXNzd29yZHMuCisgICAgICAgIG91dHB1dFVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAg
ICAgIG91dHB1dFBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSB1c2VybmFtZS4KKyAgICBvdXRwdXRVc2VybmFt
ZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGlmICh1c2VybmFtZS5sZW5ndGgoKSA+
IDApIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGVzY2FwZSBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBm
b3IgdGhlIHVzZXJuYW1lLgorICAgICAgICBhcHBlbmRTdHJpbmdPZlR5cGUoJnVzZXJuYW1lU3Bl
Y1t1c2VybmFtZS5iZWdpbigpXSwgdXNlcm5hbWUubGVuZ3RoKCksIFVSTENoYXJhY3RlclR5cGVz
OjpVc2VySW5mb0NoYXJhY3Rlciwgb3V0cHV0KTsKKyAgICB9CisgICAgb3V0cHV0VXNlcm5hbWUu
c2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFVzZXJuYW1lLmJlZ2luKCkpOworCisg
ICAgLy8gV2hlbiB0aGVyZSBpcyBhIHBhc3N3b3JkLCB3ZSBuZWVkIHRoZSBzZXBhcmF0b3IuIE5v
dGUgdGhhdCB3ZSBzdHJpcAorICAgIC8vIGVtcHR5IGJ1dCBzcGVjaWZpZWQgcGFzc3dvcmRzLgor
ICAgIGlmIChwYXNzd29yZC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgn
OicpOworICAgICAgICBvdXRwdXRQYXNzd29yZC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwor
ICAgICAgICBhcHBlbmRTdHJpbmdPZlR5cGUoJnBhc3N3b3JkU3BlY1twYXNzd29yZC5iZWdpbigp
XSwgcGFzc3dvcmQubGVuZ3RoKCksIFVSTENoYXJhY3RlclR5cGVzOjpVc2VySW5mb0NoYXJhY3Rl
ciwgb3V0cHV0KTsKKyAgICAgICAgb3V0cHV0UGFzc3dvcmQuc2V0TGVuZ3RoKG91dHB1dC5sZW5n
dGgoKSAtIG91dHB1dFBhc3N3b3JkLmJlZ2luKCkpOworICAgIH0gZWxzZQorICAgICAgICBvdXRw
dXRQYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworCisgICAgb3V0cHV0LmFwcGVuZCgnQCcpOwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5n
IHBvcnQgaW50ZWdlcnMgdG8gc3RyaW5ncy4KK2lubGluZSB2b2lkIHdyaXRlUG9ydEludChjaGFy
KiBvdXRwdXQsIGludCBvdXRwdXRMZW5ndGgsIGludCBwb3J0KQoreworICAgIF9pdG9hX3MocG9y
dCwgb3V0cHV0LCBvdXRwdXRMZW5ndGgsIDEwKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB3aWxs
IHByZXBlbmQgdGhlIGNvbG9uIGlmIHRoZXJlIHdpbGwgYmUgYSBwb3J0LgordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Citib29sIGRvUG9ydChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcGVjLAorICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0
LAorICAgICAgICAgICAgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFBv
cnRDb21wb25lbnQpCit7CisgICAgaW50IHBvcnROdW1iZXIgPSBVUkxQYXJzZXI6OlBhcnNlUG9y
dChzcGVjLCBwb3J0KTsKKyAgICBpZiAocG9ydE51bWJlciA9PSBVUkxQYXJzZXI6OlBPUlRfVU5T
UEVDSUZJRUQgfHwgcG9ydE51bWJlciA9PSBkZWZhdWx0UG9ydEZvclNjaGVtZSkgeworICAgICAg
ICBvdXRwdXRQb3J0Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybiB0
cnVlOyAvLyBMZWF2ZSBwb3J0IGVtcHR5LgorICAgIH0KKworICAgIGlmIChwb3J0TnVtYmVyID09
IFVSTFBhcnNlcjo6UE9SVF9JTlZBTElEKSB7CisgICAgICAgIC8vIEludmFsaWQgcG9ydDogV2Un
bGwgY29weSB0aGUgdGV4dCBmcm9tIHRoZSBpbnB1dCBzbyB0aGUgdXNlciBjYW4gc2VlCisgICAg
ICAgIC8vIHdoYXQgdGhlIGVycm9yIHdhcywgYW5kIG1hcmsgdGhlIFVSTCBhcyBpbnZhbGlkIGJ5
IHJldHVybmluZyBmYWxzZS4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICBv
dXRwdXRQb3J0Q29tcG9uZW50LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgICAgIEFw
cGVuZEludmFsaWROYXJyb3dTdHJpbmcoc3BlYywgcG9ydC5iZWdpbigpLCBwb3J0LmVuZCgpLCBv
dXRwdXQpOworICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50LnNldExlbmd0aChvdXRwdXQubGVu
Z3RoKCkgLSBvdXRwdXRQb3J0Q29tcG9uZW50LmJlZ2luKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gQ29udmVydCBwb3J0IG51bWJlciBiYWNrIHRvIGFuIGludGVn
ZXIuIE1heCBwb3J0IHZhbHVlIGlzIDUgZGlnaXRzLCBhbmQKKyAgICAvLyB0aGUgUGFyc2VkOjpF
eHRyYWN0UG9ydCB3aWxsIGhhdmUgbWFkZSBzdXJlIHRoZSBpbnRlZ2VyIGlzIGluIHJhbmdlLgor
ICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gNjsKKyAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXpl
XTsKKyAgICB3cml0ZVBvcnRJbnQoYnVmZmVyLCBidWZmZXJTaXplLCBwb3J0TnVtYmVyKTsKKwor
ICAgIC8vIEFwcGVuZCB0aGUgcG9ydCBudW1iZXIgdG8gdGhlIG91dHB1dCwgcHJlY2VlZGVkIGJ5
IGEgY29sb24uCisgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgIG91dHB1dFBvcnRDb21wb25l
bnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1
ZmZlclNpemUgJiYgYnVmZmVyW2ldOyArK2kpCisgICAgICAgIG91dHB1dC5hcHBlbmQoYnVmZmVy
W2ldKTsKKworICAgIG91dHB1dFBvcnRDb21wb25lbnQuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgo
KSAtIG91dHB1dFBvcnRDb21wb25lbnQuYmVnaW4oKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgordm9pZCBk
b0Nhbm9uaWNhbGl6ZUZyYWdtZW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgZnJhZ21lbnQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25l
bnQmIG91dHB1dEZyYWdtZW50KQoreworICAgIGlmIChmcmFnbWVudC5sZW5ndGgoKSA8IDApIHsK
KyAgICAgICAgLy8gQ29tbW9uIGNhc2Ugb2Ygbm8gZnJhZ21lbnQuCisgICAgICAgIG91dHB1dEZy
YWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBBcHBlbmQgdGhlIGZyYWdtZW50IHNlcGFyYXRvci4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZG8g
dGhpcyBldmVuIHdoZW4gdGhlIGZyYWdtZW50CisgICAgLy8gaXMgZW1wdHkgYnV0IHByZXNlbnQu
CisgICAgb3V0cHV0LmFwcGVuZCgnIycpOworICAgIG91dHB1dEZyYWdtZW50LnNldEJlZ2luKG91
dHB1dC5sZW5ndGgoKSk7CisKKyAgICAvLyBOb3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgY2hh
cmFjdGVycywgY29udmVydGluZyB0byBVVEYtOCBhbmQgdmFsaWRhdGluZy4KKyAgICBpbnQgZW5k
ID0gZnJhZ21lbnQuZW5kKCk7CisgICAgZm9yIChpbnQgaSA9IGZyYWdtZW50LmJlZ2luKCk7IGkg
PCBlbmQ7ICsraSkgeworICAgICAgICBpZiAoIXNwZWNbaV0pIHsKKyAgICAgICAgICAgIC8vIElF
IGp1c3Qgc3RyaXBzIE5VTExzLCBzbyB3ZSBkbyB0b28uCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pIDwgMHgy
MCkgeworICAgICAgICAgICAgLy8gVW5saW5lIElFIHNlZW1zIHRvLCB3ZSBlc2NhcGUgY29udHJv
bCBjaGFyYWN0ZXJzLiBUaGlzIHdpbGwgcHJvYmFibHkKKyAgICAgICAgICAgIC8vIG1ha2UgdGhl
IHJlZmVyZW5jZSBmcmFnbWVudCB1bnVzYWJsZSBvbiBhIHdlYiBwYWdlLCBidXQgcGVvcGxlCisg
ICAgICAgICAgICAvLyBzaG91bGRuJ3QgYmUgdXNpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGluIHRo
ZWlyIGFuY2hvciBuYW1lcy4KKyAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSksIG91dHB1dCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pIDwgMHg4MCkgeworICAgICAgICAg
ICAgLy8gTm9ybWFsIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGp1c3QgYXBwZW5kZWQuCisgICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaV0pKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRl
ZCB1bmVzY2FwZWQsIGJ1dCBvbmx5IHdoZW4gdGhleSBhcmUKKyAgICAgICAgICAgIC8vIHZhbGlk
LiBJbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgImludmFs
aWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciIgYXMgSUUgc2VlbXMgdG8gKHJlYWRVVEZDaGFy
IHB1dHMgdGhlIHVuaWNvZGUgcmVwbGFjZW1lbnQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciBp
biB0aGUgb3V0cHV0IG9uIGZhaWx1cmUgZm9yIHVzKS4KKyAgICAgICAgICAgIHVuc2lnbmVkIGNv
ZGVQb2ludDsKKyAgICAgICAgICAgIHJlYWRVVEZDaGFyKHNwZWMsICZpLCBlbmQsICZjb2RlUG9p
bnQpOworICAgICAgICAgICAgQXBwZW5kVVRGOFZhbHVlKGNvZGVQb2ludCwgb3V0cHV0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG91dHB1dEZyYWdtZW50LnNldExlbmd0aChvdXRwdXQubGVu
Z3RoKCkgLSBvdXRwdXRGcmFnbWVudC5iZWdpbigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
Y29uc3QgY2hhciogcmVtb3ZlVVJMV2hpdGVzcGFjZShjb25zdCBjaGFyKiBpbnB1dCwgaW50IGlu
cHV0TGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIGJ1ZmZlciwgaW50KiBvdXRwdXRMZW5ndGgpCit7
CisgICAgcmV0dXJuIGRvUmVtb3ZlVVJMV2hpdGVzcGFjZShpbnB1dCwgaW5wdXRMZW5ndGgsIGJ1
ZmZlciwgKm91dHB1dExlbmd0aCk7Cit9CisKK2NvbnN0IFVDaGFyKiByZW1vdmVVUkxXaGl0ZXNw
YWNlKGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+
JiBidWZmZXIsIGludCogb3V0cHV0TGVuZ3RoKQoreworICAgIHJldHVybiBkb1JlbW92ZVVSTFdo
aXRlc3BhY2UoaW5wdXQsIGlucHV0TGVuZ3RoLCBidWZmZXIsICpvdXRwdXRMZW5ndGgpOworfQor
CitjaGFyIGNhbm9uaWNhbFNjaGVtZUNoYXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmIChj
aGFyYWN0ZXIgPj0gMHg4MCkKKyAgICAgICAgcmV0dXJuIDA7IC8vIE5vbi1BU0NJSSBpcyBub3Qg
c3VwcG9ydGVkIGJ5IHNjaGVtZXMuCisgICAgcmV0dXJuIGtTY2hlbWVDYW5vbmljYWxbY2hhcmFj
dGVyXTsKK30KKworYm9vbCBDYW5vbmljYWxpemVTY2hlbWUoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21w
b25lbnQqIG91dHB1dFNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9TY2hlbWU8Y2hhciwgdW5zaWdu
ZWQgY2hhcj4oc3BlYywgc2NoZW1lLCBvdXRwdXQsICpvdXRwdXRTY2hlbWUpOworfQorCitib29s
IENhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFNj
aGVtZSkKK3sKKyAgICByZXR1cm4gZG9TY2hlbWU8VUNoYXIsIFVDaGFyPihzcGVjLCBzY2hlbWUs
IG91dHB1dCwgKm91dHB1dFNjaGVtZSk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplVXNlckluZm8o
Y29uc3QgY2hhciogdXNlcm5hbWVTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTENvbXBvbmVudCYgdXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHBhc3N3b3JkU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50KiBvdXRwdXRVc2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50KiBvdXRwdXRQYXNzd29yZCkKK3sKKyAgICByZXR1cm4gZG9Vc2VySW5mbzxjaGFyLCB1bnNp
Z25lZCBjaGFyPih1c2VybmFtZVNvdXJjZSwgdXNlcm5hbWUsIHBhc3N3b3JkU291cmNlLCBwYXNz
d29yZCwgb3V0cHV0LCAqb3V0cHV0VXNlcm5hbWUsICpvdXRwdXRQYXNzd29yZCk7Cit9CisKK2Jv
b2wgQ2Fub25pY2FsaXplVXNlckluZm8oY29uc3QgVUNoYXIqIHVzZXJuYW1lU291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcGFzc3dvcmRTb3VyY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGFzc3dvcmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFVzZXJuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFBhc3N3b3JkKQoreworICAgIHJl
dHVybiBkb1VzZXJJbmZvPFVDaGFyLCBVQ2hhcj4odXNlcm5hbWVTb3VyY2UsIHVzZXJuYW1lLCBw
YXNzd29yZFNvdXJjZSwgcGFzc3dvcmQsIG91dHB1dCwgKm91dHB1dFVzZXJuYW1lLCAqb3V0cHV0
UGFzc3dvcmQpOworfQorCitib29sIENhbm9uaWNhbGl6ZVBvcnQoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBwb3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCog
b3V0cHV0UG9ydENvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gZG9Qb3J0PGNoYXIsIHVuc2lnbmVk
IGNoYXI+KHNwZWMsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0UG9ydEZvclNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dCwgKm91dHB1dFBvcnRDb21wb25lbnQpOworfQorCitib29sIENhbm9uaWNh
bGl6ZVBvcnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCwgaW50
IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFBvcnRDb21wb25lbnQpCit7CisgICAg
cmV0dXJuIGRvUG9ydDxVQ2hhciwgVUNoYXI+KHNwZWMsIHBvcnQsIGRlZmF1bHRQb3J0Rm9yU2No
ZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICpvdXRwdXRQb3J0
Q29tcG9uZW50KTsKK30KKwordm9pZCBDYW5vbmljYWxpemVSZWYoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiByZWYsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21w
b25lbnQqIG91dHB1dEZyYWdtZW50KQoreworICAgIGRvQ2Fub25pY2FsaXplRnJhZ21lbnQ8Y2hh
ciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcmVmLCBvdXRwdXQsICpvdXRwdXRGcmFnbWVudCk7Cit9
CisKK3ZvaWQgQ2Fub25pY2FsaXplUmVmKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHJlZiwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCogb3V0cHV0
RnJhZ21lbnQpCit7CisgICAgZG9DYW5vbmljYWxpemVGcmFnbWVudDxVQ2hhciwgVUNoYXI+KHNw
ZWMsIHJlZiwgb3V0cHV0LCAqb3V0cHV0RnJhZ21lbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBV
UkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdU
RlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxlc3lz
dGVtdXJsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxlc3lzdGVtdXJs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYjQ2ZWExZDhjYTQ2MGU4N2Q5NGJkMGU0NDk1OGY5ZmJmOTJkNDNj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvLyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEyLCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKy8vIEZ1bmN0aW9ucyBmb3IgY2Fub25pY2FsaXppbmcgImZpbGVzeXN0ZW06
ZmlsZToiIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxDYW5vbi5o
IgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgi
CisjaW5jbHVkZSAiVVJMVXRpbC5oIgorI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5oIgorCisj
aWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyIHsKKworbmFtZXNwYWNlIHsKKworLy8gV2UgdXNlIHRoZSBVUkxDb21wb25lbnRTb3Vy
Y2UgZm9yIHRoZSBvdXRlciBVUkwsIGFzIGl0IGNhbiBoYXZlIHJlcGxhY2VtZW50cywKKy8vIHdo
ZXJlYXMgdGhlIGlubmVyX3VybCBjYW4ndCwgc28gaXQgdXNlcyBzcGVjLgordGVtcGxhdGU8dHlw
ZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Citib29sIERvQ2Fub25pY2FsaXplRmlsZVN5c3Rl
bVVSTChjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMQ29tcG9uZW50U291cmNlPENIQVI+JiBzb3VyY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBmaWxlc3lzdGVtIG9ubHkgdXNlcyB7c2NoZW1lLCBwYXRoLCBxdWVy
eSwgcmVmfSAtLSBjbGVhciB0aGUgcmVzdC4KKyAgICBvdXRwdXRQYXJzZWQtPnVzZXJuYW1lID0g
VVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5wYXNzd29yZCA9IFVSTENvbXBvbmVu
dCgpOworICAgIG91dHB1dFBhcnNlZC0+aG9zdCA9IFVSTENvbXBvbmVudCgpOworICAgIG91dHB1
dFBhcnNlZC0+cG9ydCA9IFVSTENvbXBvbmVudCgpOworCisgICAgY29uc3QgVVJMU2VnbWVudHMq
IGlubmVyUGFyc2VkID0gcGFyc2VkLmlubmVyVVJMU2VnbWVudHMoKTsKKyAgICBVUkxTZWdtZW50
cyBuZXdJbm5lclBhcnNlZDsKKworICAgIC8vIFNjaGVtZSAoa25vd24sIHNvIHdlIGRvbid0IGJv
dGhlciBydW5uaW5nIGl0IHRocm91Z2ggdGhlIG1vcmUKKyAgICAvLyBjb21wbGljYXRlZCBzY2hl
bWUgY2Fub25pY2FsaXplcikuCisgICAgb3V0cHV0UGFyc2VkLT5zY2hlbWUuc2V0QmVnaW4ob3V0
cHV0Lmxlbmd0aCgpKTsKKyAgICBvdXRwdXQuYXBwZW5kKCJmaWxlc3lzdGVtOiIsIDExKTsKKyAg
ICBvdXRwdXRQYXJzZWQtPnNjaGVtZS5zZXRMZW5ndGgoMTApOworCisgICAgaWYgKCFwYXJzZWQu
aW5uZXJVUkxTZWdtZW50cygpIHx8ICFwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpLT5zY2hlbWUu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgIGlmIChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywg
aW5uZXJQYXJzZWQtPnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFV0aWxpdGllczo6a0ZpbGVTY2hlbWUpKSB7CisgICAgICAgIG5ld0lubmVy
UGFyc2VkLnNjaGVtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgICAgICBvdXRwdXQu
YXBwZW5kKCJmaWxlOi8vIiwgNyk7CisgICAgICAgIG5ld0lubmVyUGFyc2VkLnNjaGVtZS5zZXRM
ZW5ndGgoNCk7CisgICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGF0aChzcGVjLCBpbm5l
clBhcnNlZC0+cGF0aCwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm5ld0lubmVyUGFyc2VkLnBhdGgpOworICAgIH0gZWxzZSBpZiAoVVJMVXRpbGl0aWVzOjpJ
c1N0YW5kYXJkKHNwZWMsIGlubmVyUGFyc2VkLT5zY2hlbWUpKSB7CisgICAgICAgIHN1Y2Nlc3Mg
PQorICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVTdGFuZGFyZFVSTChzcGVj
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJz
ZWQuaW5uZXJVUkxTZWdtZW50cygpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRD
b252ZXJ0ZXIsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm5ld0lubmVyUGFyc2VkKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBU
T0RPKGVyaWN1KTogVGhlIFVSTCBpcyB3cm9uZywgYnV0IHNob3VsZCB3ZSB0cnkgdG8gb3V0cHV0
IG1vcmUgb2Ygd2hhdAorICAgICAgICAvLyB3ZSB3ZXJlIGdpdmVuPyBFY2hvaW5nIGJhY2sgZmls
ZXN5c3RlbTptYWlsdG8gZXRjLiBkb2Vzbid0IHNlZW0gYWxsIHRoYXQgdXNlZnVsLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRoZSBmaWxlc3lzdGVtIHR5cGUgbXVzdCBi
ZSBtb3JlIHRoYW4ganVzdCBhIGxlYWRpbmcgc2xhc2ggZm9yIHZhbGlkaXR5LgorICAgIHN1Y2Nl
c3MgJj0gcGFyc2VkLmlubmVyVVJMU2VnbWVudHMoKS0+cGF0aC5sZW5ndGgoKSA+IDE7CisKKyAg
ICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgoc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLCBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXRQYXJzZWQtPnBh
dGgpOworCisgICAgLy8gSWdub3JlIGZhaWx1cmVzIGZvciBxdWVyeS9yZWYgc2luY2UgdGhlIFVS
TCBjYW4gcHJvYmFibHkgc3RpbGwgYmUgbG9hZGVkLgorICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHNv
dXJjZS5xdWVyeSwgcGFyc2VkLnF1ZXJ5LCBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkpOworICAgIENhbm9uaWNhbGl6
ZVJlZihzb3VyY2UucmVmLCBwYXJzZWQuZnJhZ21lbnQsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
ZnJhZ21lbnQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBvdXRwdXRQYXJzZWQtPnNldElu
bmVyVVJMU2VnbWVudHMobmV3SW5uZXJQYXJzZWQpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgQ2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTChjb25z
dCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVj
TGVuZ3RoICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZl
cnRlciogY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZp
bGVTeXN0ZW1VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgVVJMQ29tcG9uZW50U291cmNl
PGNoYXI+KHNwZWMpLCBwYXJzZWQsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFy
c2VkKTsKK30KKworYm9vbCBDYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKGNvbnN0IFVDaGFyKiBz
cGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJz
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hh
cnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1V
Ukw8VUNoYXIsIFVDaGFyPihzcGVjLCBVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBw
YXJzZWQsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9v
bCBSZXBsYWNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVudHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAg
IFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMg
cGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJl
cGxhY2VtZW50cywgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXpl
RmlsZVN5c3RlbVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihiYXNlLCBzb3VyY2UsIHBhcnNlZCwg
Y2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIFJlcGxh
Y2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIFJhd1VS
TEJ1ZmZlcjxjaGFyPiB1dGY4OworICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2Uo
YmFzZSk7CisgICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRG
MTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAm
cGFyc2VkKTsKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMPGNoYXIsIHVu
c2lnbmVkIGNoYXI+KGJhc2UsIHNvdXJjZSwgcGFyc2VkLCBjaGFyc2V0Q29udmVydGVyLCBvdXRw
dXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGV1cmwuY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGV1cmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxNTFhMzYzYjM2
YjgyM2U1ZjM1Y2MxNDRkY2ZiOWYzMjYwMDcxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8v
IENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gRnVuY3Rpb25zIGZvciBjYW5v
bmljYWxpemluZyAiZmlsZToiIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJM
Q2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJz
ZUludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisjaWYgT1MoV0lORE9X
UykKKworLy8gR2l2ZW4gYSBwb2ludGVyIGludG8gdGhlIHNwZWMsIHRoaXMgY29waWVzIGFuZCBj
YW5vbmljYWxpemVzIHRoZSBkcml2ZQorLy8gbGV0dGVyIGFuZCBjb2xvbiB0byB0aGUgb3V0cHV0
LCBpZiBvbmUgaXMgZm91bmQuIElmIHRoZXJlIGlzIG5vdCBhIGRyaXZlCisvLyBzcGVjLCBpdCB3
b24ndCBkbyBhbnl0aGluZy4gVGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUg
aW5wdXQKKy8vIHNwZWMgaXMgcmV0dXJuZWQgKGFmdGVyIHRoZSBjb2xvbiB3aGVuIGEgZHJpdmUg
c3BlYyBpcyBmb3VuZCwgdGhlIGJlZ2luCisvLyBvZmZzZXQgaWYgb25lIGlzIG5vdCkuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDSEFSPgoraW50IEZpbGVEb0RyaXZlU3BlYyhjb25zdCBDSEFSKiBzcGVj
LCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8v
IFRoZSBwYXRoIGNvdWxkIGJlIG9uZSBvZiBzZXZlcmFsIHRoaW5nczogL2Zvby9iYXIsIGM6L2Zv
by9iYXIsIC9jOi9mb28sCisgICAgLy8gKHdpdGggYmFja3NsYXNoZXMgaW5zdGVhZCBvZiBzbGFz
aGVzIGFzIHdlbGwpLgorICAgIGludCBudW1TbGFzaGVzID0gVVJMUGFyc2VyOjpjb3VudENvbnNl
Y3V0aXZlU2xhc2hlcyhzcGVjLCBiZWdpbiwgZW5kKTsKKyAgICBpbnQgYWZ0ZXJTbGFzaGVzID0g
YmVnaW4gKyBudW1TbGFzaGVzOworCisgICAgaWYgKCFVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRv
d3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBlbmQpKQorICAgICAgICByZXR1cm4gYmVn
aW47IC8vIEhhdmVuJ3QgY29uc3VtZWQgYW55IGNoYXJhY3RlcnMKKworICAgIC8vIEEgZHJpdmUg
c3BlYyBpcyB0aGUgc3RhcnQgb2YgYSBwYXRoLCBzbyB3ZSBuZWVkIHRvIGFkZCBhIHNsYXNoIGZv
ciB0aGUKKyAgICAvLyBhdXRob3JpdHkgdGVybWluYXRvciAodHlwaWNhbGx5IHRoZSB0aGlyZCBz
bGFzaCkuCisgICAgb3V0cHV0LmFwcGVuZCgnLycpOworCisgICAgLy8gZG9lc0JlZ2luV2luZG93
c0RyaXZlU3BlYyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgaXMgdmFsaWQKKyAg
ICAvLyBhbmQgdGhhdCBpdCBpcyBmb2xsb3dlZCBieSBhIGNvbG9uL3BpcGUuCisKKyAgICAvLyBO
b3JtYWxpemUgV2luZG93cyBkcml2ZSBsZXR0ZXJzIHRvIHVwcGVyY2FzZQorICAgIGlmIChzcGVj
W2FmdGVyU2xhc2hlc10gPj0gJ2EnICYmIHNwZWNbYWZ0ZXJTbGFzaGVzXSA8PSAneicpCisgICAg
ICAgIG91dHB1dC5hcHBlbmQoc3BlY1thZnRlclNsYXNoZXNdIC0gJ2EnICsgJ0EnKTsKKyAgICBl
bHNlCisgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1thZnRlclNs
YXNoZXNdKSk7CisKKyAgICAvLyBOb3JtYWxpemUgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgaXQg
dG8gYSBjb2xvbiByYXRoZXIgdGhhbiBwaXBlLgorICAgIG91dHB1dC5hcHBlbmQoJzonKTsKKyAg
ICByZXR1cm4gYWZ0ZXJTbGFzaGVzICsgMjsKK30KKworI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisK
K3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0ZpbGVDYW5v
bmljYWxpemVQYXRoKGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TENvbXBvbmVudCogb3V0cHV0UGF0aCkKK3sKKyAgICAvLyBDb3BpZXMgYW5kIG5vcm1hbGl6ZXMg
dGhlICJjOiIgYXQgdGhlIGJlZ2lubmluZywgaWYgcHJlc2VudC4KKyAgICBvdXRwdXRQYXRoLT5z
ZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGludCBhZnRlckRyaXZlOworI2lmIE9TKFdJ
TkRPV1MpCisgICAgYWZ0ZXJEcml2ZSA9IEZpbGVEb0RyaXZlU3BlYyhzcGVjLCBwYXRoLmJlZ2lu
LCBwYXRoLmVuZCgpLCBvdXRwdXQpOworI2Vsc2UKKyAgICBhZnRlckRyaXZlID0gcGF0aC5iZWdp
bigpOworI2VuZGlmCisKKyAgICAvLyBDb3BpZXMgdGhlIHJlc3Qgb2YgdGhlIHBhdGgsIHN0YXJ0
aW5nIGZyb20gdGhlIHNsYXNoIGZvbGxvd2luZyB0aGUKKyAgICAvLyBkcml2ZSBjb2xvbiAoaWYg
YW55LCBXaW5kb3dzIG9ubHkpLCBvciB0aGUgZmlyc3Qgc2xhc2ggb2YgdGhlIHBhdGguCisgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAoYWZ0ZXJEcml2ZSA8IHBhdGguZW5kKCkpIHsK
KyAgICAgICAgLy8gVXNlIHRoZSByZWd1bGFyIHBhdGggY2Fub25pY2FsaXplciB0byBjYW5vbmlj
YWxpemUgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIC8vIHBhdGguIEdpdmUgaXQgYSBmYWtlIG91
dHB1dCBjb21wb25lbnQgdG8gd3JpdGUgaW50by4gRG9DYW5vbmljYWxpemVGaWxlCisgICAgICAg
IC8vIHdpbGwgY29tcHV0ZSB0aGUgZnVsbCBwYXRoIGNvbXBvbmVudC4KKyAgICAgICAgVVJMQ29t
cG9uZW50IHN1YlBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShhZnRlckRyaXZlLCBwYXRo
LmVuZCgpKTsKKyAgICAgICAgVVJMQ29tcG9uZW50IGZha2VPdXRwdXRQYXRoOworICAgICAgICBz
dWNjZXNzID0gQ2Fub25pY2FsaXplUGF0aChzcGVjLCBzdWJQYXRoLCBvdXRwdXQsICZmYWtlT3V0
cHV0UGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gaW5wdXQgcGF0aCwgY2Fub25p
Y2FsaXplIHRvIGEgc2xhc2guCisgICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKyAgICB9CisK
KyAgICBvdXRwdXRQYXRoLT5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGF0aC0+
YmVnaW4oKSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENI
QVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgVVJM
Q29tcG9uZW50U291cmNlPENIQVI+JiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgLy8gVGhpbmdzIHdlIGRvbid0IHNl
dCBpbiBmaWxlOiBVUkxzLgorICAgIG91dHB1dFBhcnNlZC0+dXNlcm5hbWUgPSBVUkxDb21wb25l
bnQoKTsKKyAgICBvdXRwdXRQYXJzZWQtPnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAg
b3V0cHV0UGFyc2VkLT5wb3J0ID0gVVJMQ29tcG9uZW50KCk7CisKKyAgICAvLyBTY2hlbWUgKGtu
b3duLCBzbyB3ZSBkb24ndCBib3RoZXIgcnVubmluZyBpdCB0aHJvdWdoIHRoZSBtb3JlCisgICAg
Ly8gY29tcGxpY2F0ZWQgc2NoZW1lIGNhbm9uaWNhbGl6ZXIpLgorICAgIG91dHB1dFBhcnNlZC0+
c2NoZW1lLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgb3V0cHV0LmFwcGVuZCgiZmls
ZTovLyIsIDcpOworICAgIG91dHB1dFBhcnNlZC0+c2NoZW1lLnNldExlbmd0aCg0KTsKKworICAg
IC8vIEFwcGVuZCB0aGUgaG9zdC4gRm9yIG1hbnkgZmlsZSBVUkxzLCB0aGlzIHdpbGwgYmUgZW1w
dHkuIEZvciBVTkMsIHRoaXMKKyAgICAvLyB3aWxsIGJlIHByZXNlbnQuCisgICAgLy8gVE9ETyhi
cmV0dHcpIFRoaXMgZG9lc24ndCBkbyBhbnkgY2hlY2tpbmcgZm9yIGhvc3QgbmFtZSB2YWxpZGl0
eS4gV2UKKyAgICAvLyBzaG91bGQgcHJvYmFibHkgaGFuZGxlIHZhbGlkaXR5IGNoZWNraW5nIG9m
IFVOQyBob3N0cyBkaWZmZXJlbnRseSB0aGFuCisgICAgLy8gZm9yIHJlZ3VsYXIgSVAgaG9zdHMu
CisgICAgYm9vbCBzdWNjZXNzID0gQ2Fub25pY2FsaXplSG9zdChzb3VyY2UuaG9zdCwgcGFyc2Vk
Lmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRw
dXRQYXJzZWQtPmhvc3QpOworICAgIHN1Y2Nlc3MgJj0gRG9GaWxlQ2Fub25pY2FsaXplUGF0aDxD
SEFSLCBVQ0hBUj4oc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5w
YXRoKTsKKyAgICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnksIHBhcnNlZC5xdWVyeSwg
cXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFy
c2VkLT5xdWVyeSk7CisKKyAgICAvLyBJZ25vcmUgZmFpbHVyZSBmb3IgcmVmcyBzaW5jZSB0aGUg
VVJMIGNhbiBwcm9iYWJseSBzdGlsbCBiZSBsb2FkZWQuCisgICAgQ2Fub25pY2FsaXplUmVmKHNv
dXJjZS5yZWYsIHBhcnNlZC5mcmFnbWVudCwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5mcmFnbWVu
dCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBD
YW5vbmljYWxpemVGaWxlVVJMKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8Y2hh
ciwgdW5zaWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQs
IHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIENhbm9uaWNh
bGl6ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJM
U2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0
cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8VUNoYXIsIFVD
aGFyPihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29udmVy
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3Qg
Y2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQor
eworICAgIHJldHVybiBEb0ZpbGVDYW5vbmljYWxpemVQYXRoPGNoYXIsIHVuc2lnbmVkIGNoYXI+
KHNwZWMsIHBhdGgsIG91dHB1dCwgb3V0cHV0UGF0aCk7Cit9CisKK2Jvb2wgRmlsZUNhbm9uaWNh
bGl6ZVBhdGgoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVu
dCogb3V0cHV0UGF0aCkKK3sKKyAgICByZXR1cm4gRG9GaWxlQ2Fub25pY2FsaXplUGF0aDxVQ2hh
ciwgVUNoYXI+KHNwZWMsIHBhdGgsIG91dHB1dCwgb3V0cHV0UGF0aCk7Cit9CisKK2Jvb2wgUmVw
bGFjZUZpbGVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxh
Y2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQ
YXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAg
ICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNvbXBv
bmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4g
RG9DYW5vbmljYWxpemVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2Vk
LCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIFJlcGxh
Y2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNl
bWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgIENoYXJzZXRD
b252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKKyAgICBVUkxDb21wb25lbnRT
b3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFy
c2VkKTsKKyAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50
cywgdXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplRmls
ZVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIs
IG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2Fs
aXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSG9zdC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDAyYWNlNmQ5NTI0
MzdiZmYxYTkzMTgxNzU5YjI3MmJkYzkyNDM0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25Ib3N0LmNwcApAQCAtMCwwICsxLDQxNSBAQAorLy8gQ29w
eXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUg
IlVSTENhbm9uSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYg
eworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKKy8vIEZv
ciByZWZlcmVuY2UsIGhlcmUncyB3aGF0IElFIHN1cHBvcnRzOgorLy8gS2V5OiAwIChkaXNhbGxv
d2VkOiBmYWlsdXJlIGlmIHByZXNlbnQgaW4gdGhlIGlucHV0KQorLy8gICAgICArIChhbGxvd2Vk
IGVpdGhlciBlc2NhcGVkIG9yIHVuZXNjYXBlZCwgYW5kIHVubW9kaWZpZWQpCisvLyAgICAgIFUg
KGFsbG93ZWQgZXNjYXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyB1bmVzY2FwZWQgaWYgcHJl
c2VudCBpbgorLy8gICAgICAgICBlc2NhcGVkIGZvcm0pCisvLyAgICAgIEUgKGFsbG93ZWQgZXNj
YXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyBlc2NhcGVkIGlmIHByZXNlbnQgaW4KKy8vICAg
ICAgICAgdW5lc2NhcGVkIGZvcm0pCisvLyAgICAgICUgKG9ubHkgYWxsb3dlZCBlc2NhcGVkIGlu
IHRoZSBpbnB1dCwgd2lsbCBiZSB1bm1vZGlmaWVkKS4KKy8vICAgICAgSSBsZWZ0IGJsYW5rIGFs
cGhhIG51bWVyaWMgY2hhcmFjdGVycy4KKy8vCisvLyAgICAwMCAwMSAwMiAwMyAwNCAwNSAwNiAw
NyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZgorLy8gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIDAgICAwICBFICBFICBFICBFICBFICBFICBFICBF
ICBFICBFICBFICBFICBFICBFICBFCisvLyAxICAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAg
RSAgRSAgRSAgRSAgRSAgRSAgRQorLy8gMiAgIEUgICsgIEUgIEUgICsgIEUgICsgICsgICsgICsg
ICsgICsgICsgIFUgIFUgIDAKKy8vIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl
ICAlICBFICArICBFICAwICA8LS0gVGhvc2UgYXJlICA6IDsgPCA9ID4gPworLy8gNCAgICUKKy8v
IDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVICAwICBVICBVICBVICA8LS0g
VGhvc2UgYXJlICBbIFwgXSBeIF8KKy8vIDYgICBFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8LS0gVGhhdCdzICBgCisvLyA3ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRSAgRSAgRSAgVSAgRSAgPC0tIFRob3NlIGFyZSB7IHwgfSB+IChV
TlBSSU5UQUJMRSkKKy8vCisvLyBOT1RFOiBJIGRpZG4ndCBhY3R1YWxseSB0ZXN0IGFsbCB0aGUg
Y29udHJvbCBjaGFyYWN0ZXJzLiBTb21lIG1heSBiZQorLy8gZGlzYWxsb3dlZCBpbiB0aGUgaW5w
dXQsIGJ1dCB0aGV5IGFyZSBhbGwgYWNjZXB0ZWQgZXNjYXBlZCBleGNlcHQgZm9yIDAuCisvLyBJ
IGFsc28gZGlkbid0IHRlc3QgaWYgY2hhcmFjdGVycyBhZmZlY3RpbmcgSFRNTCBwYXJzaW5nIGFy
ZSBhbGxvd2VkCisvLyB1bmVzY2FwZWQsIGVnLiAoIikgb3IgKCMpLCB3aGljaCB3b3VsZCBpbmRp
Y2F0ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorLy8gU3VycHJpc2luZ2x5LCBzcGFjZSBp
cyBhY2NlcHRlZCBpbiB0aGUgaW5wdXQgYW5kIGFsd2F5cyBlc2NhcGVkLgorCisvLyBUaGlzIHRh
YmxlIGxpc3RzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB3ZSBhbGxv
dyBpbiB0aGUKKy8vIGlucHV0LCB3aXRoIDAgaW5kaWNhdGluZyBpdCBpcyBkaXNhbGxvd2VkLiBX
ZSB1c2UgdGhlIG1hZ2ljIGtFc2NhcGVkSG9zdENoYXIKKy8vIHZhbHVlIHRvIGluZGljYXRlIHRo
YXQgdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGVzY2FwZWQuIFdlIGFyZSBhIGxpdHRsZSBtb3Jl
CisvLyByZXN0cmljdGl2ZSB0aGFuIElFLCBidXQgbGVzcyByZXN0cmljdGl2ZSB0aGFuIEZpcmVm
b3guCisvLworLy8gTm90ZSB0aGF0IHdlIGRpc2FsbG93IHRoZSAlIGNoYXJhY3Rlci4gV2Ugd2ls
bCBhbGxvdyBpdCB3aGVuIHBhcnQgb2YgYW4KKy8vIGVzY2FwZSBzZXF1ZW5jZSwgb2YgY291cnNl
LCBidXQgdGhpcyBkaXNhbGxvd3MgIiUyNSIuIEV2ZW4gdGhvdWdoIElFIGFsbG93cworLy8gaXQs
IGFsbG93aW5nIGl0IHdvdWxkIHB1dCB1cyBpbiBhIGZ1bm55IHN0YXRlLiBJZiB0aGVyZSB3YXMg
YW4gaW52YWxpZAorLy8gZXNjYXBlIHNlcXVlbmNlIGxpa2UgIiV6eiIsIHdlJ2xsIGFkZCAiJTI1
enoiIHRvIHRoZSBvdXRwdXQgYW5kIGZhaWwuCisvLyBBbGxvd2luZyBwZXJjZW50cyBtZWFucyB3
ZSdsbCBzdWNjZWVkIGEgc2Vjb25kIHRpbWUsIHNvIHZhbGlkaXR5IHdvdWxkIGNoYW5nZQorLy8g
YmFzZWQgb24gaG93IG1hbnkgdGltZXMgeW91IHJ1biB0aGUgY2Fub25pY2FsaXplci4gV2UgcHJl
ZmVyIHRvIGFsd2F5cyByZXBvcnQKKy8vIHRoZSBzYW1lIHZhaWxpZGl0eSwgc28gcmVqZWN0IHRo
aXMuCitjb25zdCB1bnNpZ25lZCBjaGFyIGtFc2MgPSAweGZmOworY29uc3QgdW5zaWduZWQgY2hh
ciBrSG9zdENoYXJMb29rdXBbMHg4MF0gPSB7CisgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwKKyAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorLy8g
ICcgJyAgICEgICAgICIgICAgICMgICAgICQgICAgICUgICAgICYgICAgICcgICAgICggICAgICkg
ICAgICogICAgICsgICAgICwgICAgIC0gICAgIC4gICAgIC8KKyAgICBrRXNjLCBrRXNjLCBrRXNj
LCBrRXNjLCBrRXNjLCAgIDAsICBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCAgJysnLCBr
RXNjLCAgJy0nLCAgJy4nLCAgIDAsCisvLyAgIDAgICAgMSAgICAyICAgIDMgICAgNCAgICA1ICAg
IDYgICAgNyAgICA4ICAgIDkgICAgOiAgICA7ICAgIDwgICAgPSAgICA+ICAgID8KKyAgICAnMCcs
ICAnMScsICAnMicsICAnMycsICAnNCcsICAnNScsICAnNicsICAnNycsICAnOCcsICAnOScsICAn
OicsICAgMCAsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCAsCisvLyAgIEAgICAgICBBICAgICBCICAg
ICBDICAgICBEICAgICBFICAgICBGICAgICBHICAgICBIICAgICBJICAgICBKICAgICBLICAgICBM
ICAgICBNICAgICBOICAgICBPCisgICAga0VzYywgICdhJywgICdiJywgICdjJywgICdkJywgICdl
JywgICdmJywgICdnJywgICdoJywgICdpJywgICdqJywgICdrJywgICdsJywgICdtJywgICduJywg
ICdvJywKKy8vICAgUCAgICAgUSAgICAgUiAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAg
ICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAgXSAgICAgXiAgICAgXworICAgICdwJywg
ICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2JywgICd3JywgICd4JywgICd5JywgICd6
JywgICdbJywgICAwICwgICddJywgICAwICwgICdfJywKKy8vICAgYCAgICAgIGEgICAgIGIgICAg
IGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgICAgIGggICAgIGkgICAgIGogICAgIGsgICAgIGwg
ICAgIG0gICAgIG4gICAgIG8KKyAgICBrRXNjLCAgJ2EnLCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2Un
LCAgJ2YnLCAgJ2cnLCAgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAg
J28nLAorLy8gICBwICAgICBxICAgICByICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAg
ICB4ICAgICB5ICAgICB6ICAgICB7ICAgICB8ICAgICB9ICAgICB+CisgICAgJ3AnLCAgJ3EnLCAg
J3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cnLCAgJ3gnLCAgJ3knLCAgJ3onLCBrRXNj
LCBrRXNjLCBrRXNjLCAgIDAgLCAgIDAgfTsKKwordHlwZWRlZiBSYXdVUkxCdWZmZXI8Y2hhcj4g
U3RhY2tCdWZmZXI7Cit0eXBlZGVmIFJhd1VSTEJ1ZmZlcjxVQ2hhcj4gU3RhY2tCdWZmZXJXOwor
CisvLyBTY2FucyBhIGhvc3QgbmFtZSBhbmQgZmlsbHMgaW4gdGhlIG91dHB1dCBmbGFncyBhY2Nv
cmRpbmcgdG8gd2hhdCB3ZSBmaW5kLgorLy8gfGhhc05vbkFTQ0lJfCB3aWxsIGJlIHRydWUgaWYg
dGhlcmUgYXJlIGFueSBub24tNy1iaXQgY2hhcmFjdGVycywgYW5kCisvLyB8aGFzRXNjYXBlZHwg
d2lsbCBiZSB0cnVlIGlmIHRoZXJlIGlzIGEgcGVyY2VudCBzaWduLgordGVtcGxhdGU8dHlwZW5h
bWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Cit2b2lkIFNjYW5Ib3N0bmFtZShjb25zdCBDSEFSKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIGJvb2wqIGhhc05vbkFTQ0lJLCBib29sKiBo
YXNFc2NhcGVkKQoreworICAgIGludCBlbmQgPSBob3N0LmVuZCgpOworICAgICpoYXNOb25BU0NJ
SSA9IGZhbHNlOworICAgICpoYXNFc2NhcGVkID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IGhv
c3QuYmVnaW4oKTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hB
Uj4oc3BlY1tpXSkgPj0gMHg4MCkKKyAgICAgICAgICAgICpoYXNOb25BU0NJSSA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHNwZWNbaV0gPT0gJyUnKQorICAgICAgICAgICAgKmhhc0VzY2FwZWQg
PSB0cnVlOworICAgIH0KK30KKworLy8gQ2Fub25pY2FsaXplcyBhIGhvc3QgbmFtZSB0aGF0IGlz
IGVudGlyZWx5IDgtYml0IGNoYXJhY3RlcnMgKGV2ZW4gdGhvdWdoCisvLyB0aGUgdHlwZSBob2xk
aW5nIHRoZW0gbWF5IGJlIDE2IGJpdHMuIEVzY2FwZWQgY2hhcmFjdGVycyB3aWxsIGJlIHVuZXNj
YXBlZC4KKy8vIE5vbi03LWJpdCBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgVVRGLTgpIHdpbGwg
YmUgcGFzc2VkIHVuY2hhbmdlZC4KKy8vCisvLyBUaGUgfCpoYXNOb25BU0NJSXwgZmxhZyB3aWxs
IGJlIHRydWUgaWYgdGhlcmUgYXJlIG5vbi03LWJpdCBjaGFyYWN0ZXJzIGluCisvLyB0aGUgb3V0
cHV0LgorLy8KKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiB0d28gc2l0dWF0aW9uczoKKy8v
CisvLyAgKiBXaGVuIHRoZSBjYWxsZXIga25vd3MgdGhlcmUgaXMgbm8gbm9uLUFTQ0lJIG9yIHBl
cmNlbnQgZXNjYXBlZAorLy8gICAgY2hhcmFjdGVycy4gVGhpcyBpcyB3aGF0IERvSG9zdCBkb2Vz
LiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBjb21wbGV0ZWx5CisvLyAgICBjYW5vbmljYWxpemVkIGhv
c3Qgc2luY2Ugd2Uga25vdyBub3RoaW5nIHdlaXJkIGNhbiBoYXBwZW4gKGVzY2FwZWQKKy8vICAg
IGNoYXJhY3RlcnMgY291bGQgYmUgdW5lc2NhcGVkIHRvIG5vbi03LWJpdCwgc28gdGhleSBoYXZl
IHRvIGJlIHRyZWF0ZWQKKy8vICAgIHdpdGggc3VzcGljaW9uIGF0IHRoaXMgcG9pbnQpLiBJdCBk
b2VzIG5vdCB1c2UgdGhlIHxoYXNOb25BU0NJSXwgZmxhZy4KKy8vCisvLyAgKiBXaGVuIHRoZSBj
YWxsZXIgaGFzIGFuIDgtYml0IHN0cmluZyB0aGF0IG1heSBuZWVkIHVuZXNjYXBpbmcuCisvLyAg
ICBEb0NvbXBsZXhIb3N0IGNhbGxzIHVzIHRoaXMgc2l0dWF0aW9uIHRvIGRvIHVuZXNjYXBpbmcg
YW5kIHZhbGlkYXRpb24uCisvLyAgICBBZnRlciB0aGlzLCBpdCBtYXkgZG8gb3RoZXIgSUROIG9w
ZXJhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUKKy8vICAgIHwqaGFzTm9uQVND
SUl8IGZsYWcuCisvLworLy8gVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgaWYgdGhlIG91dHB1
dCBpcyBhIHBvdGVudGlhbGx5IHZhbGlkIGhvc3QgbmFtZS4KK3RlbXBsYXRlPHR5cGVuYW1lIElO
Q0hBUiwgdHlwZW5hbWUgT1VUQ0hBUj4KK2Jvb2wgRG9TaW1wbGVIb3N0KGNvbnN0IElOQ0hBUiog
aG9zdCwKKyAgICAgICAgICAgICAgICAgIGludCBob3N0TGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPE9VVENIQVI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICBib29sKiBo
YXNOb25BU0NJSSkKK3sKKyAgICAqaGFzTm9uQVNDSUkgPSBmYWxzZTsKKworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBob3N0TGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgdW5zaWduZWQgc291cmNlID0gaG9zdFtpXTsKKyAgICAgICAgaWYgKHNvdXJjZSA9
PSAnJScpIHsKKyAgICAgICAgICAgIC8vIFVuZXNjYXBlIGZpcnN0LCBpZiBwb3NzaWJsZS4KKyAg
ICAgICAgICAgIC8vIFNvdXJjZSB3aWxsIGJlIHVzZWQgb25seSBpZiBkZWNvZGUgb3BlcmF0aW9u
IHdhcyBzdWNjZXNzZnVsLgorICAgICAgICAgICAgaWYgKCFEZWNvZGVFc2NhcGVkKGhvc3QsICZp
LCBob3N0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KCZzb3VyY2UpKSkgeworICAgICAgICAgICAgICAgIC8vIElu
dmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIuIFRoZXJlIGlzIG5vdGhpbmcgdGhhdCBjYW4gbWFrZSB0
aGlzCisgICAgICAgICAgICAgICAgLy8gaG9zdCB2YWxpZC4gV2UgYXBwZW5kIGFuIGVzY2FwZWQg
cGVyY2VudCBzbyB0aGUgVVJMIGxvb2tzIHJlYXNvbmFibGUKKyAgICAgICAgICAgICAgICAvLyBh
bmQgbWFyayBhcyBmYWlsZWQuCisgICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJh
Y3RlcignJScsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNvdXJjZSA8IDB4ODApIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgQVNDSUkgaW5w
dXQsIHdlIGNhbiB1c2Ugb3VyIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcmVwbGFjZW1lbnQgPSBrSG9zdENoYXJMb29rdXBbc291cmNlXTsKKyAgICAgICAgICAgIGlm
ICghcmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3Rlciwg
YWRkIGl0IGFzIHBlcmNlbnQtZXNjYXBlZCBhbmQgbWFyayBhcyBmYWlsZWQuCisgICAgICAgICAg
ICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rlcihzb3VyY2UsIG91dHB1dCk7CisgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBsYWNl
bWVudCA9PSBrRXNjKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGFyYWN0ZXIgaXMgdmFs
aWQgYnV0IHNob3VsZCBiZSBlc2NhcGVkLgorICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2Fw
ZWRDaGFyYWN0ZXIoc291cmNlLCBvdXRwdXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBDb21tb24gY2FzZSwgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyB2YWxpZCBp
biBhIGhvc3RuYW1lLCB0aGUgbG9va3VwCisgICAgICAgICAgICAgICAgLy8gdGFibGUgdGVsbHMg
dXMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGF0IGNoYXJhY3RlciAobG93ZXIK
KyAgICAgICAgICAgICAgICAvLyBjYXNlZCkuCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBJdCdzIGEgbm9uLWFzY2lpIGNoYXIuIEp1c3QgcHVzaCBpdCB0byB0aGUgb3V0cHV0
LgorICAgICAgICAgICAgLy8gSW4gY2FzZSB3aGVyZSB3ZSBoYXZlIFVDaGFyIGlucHV0LCBhbmQg
Y2hhciBvdXRwdXQgaXQncyBzYWZlIHRvCisgICAgICAgICAgICAvLyBjYXN0IFVDaGFyLT5jaGFy
IG9ubHkgaWYgaW5wdXQgc3RyaW5nIHdhcyBjb252ZXJ0ZWQgdG8gQVNDSUkuCisgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PE9VVENIQVI+KHNvdXJjZSkpOworICAgICAgICAg
ICAgKmhhc05vbkFTQ0lJID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBz
dWNjZXNzOworfQorCisvLyBDYW5vbmljYWxpemVzIGEgaG9zdCB0aGF0IHJlcXVpcmVzIElETiBj
b252ZXJzaW9uLiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcworYm9vbCBEb0lETkhvc3QoY29uc3Qg
VUNoYXIqIHNyYywgaW50IHNvdXJjZUxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7
CisgICAgLy8gV2UgbmVlZCB0byBlc2NhcGUgVVJMIGJlZm9yZSBkb2luZyBJRE4gY29udmVyc2lv
biwgc2luY2UgcHVuaWNvZGUgc3RyaW5ncworICAgIC8vIGNhbm5vdCBiZSBlc2NhcGVkIGFmdGVy
IHRoZXkgYXJlIGNyZWF0ZWQuCisgICAgUmF3VVJMQnVmZmVyPFVDaGFyPiB1cmxFc2NhcGVkSG9z
dDsKKyAgICBib29sIGhhc05vbkFTQ0lJOworICAgIERvU2ltcGxlSG9zdChzcmMsIHNvdXJjZUxl
bmd0aCwgdXJsRXNjYXBlZEhvc3QsICZoYXNOb25BU0NJSSk7CisKKyAgICBTdGFja0J1ZmZlclcg
d2lkZU91dHB1dDsKKyAgICBpZiAoIUlETlRvQVNDSUkodXJsRXNjYXBlZEhvc3QuZGF0YSgpLAor
ICAgICAgICAgICAgICAgICAgICB1cmxFc2NhcGVkSG9zdC5sZW5ndGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgd2lkZU91dHB1dCkpIHsKKyAgICAgICAgLy8gU29tZSBlcnJvciwgZ2l2ZSB1cC4g
VGhpcyB3aWxsIHdyaXRlIHNvbWUgcmVhc29uYWJsZSBsb29raW5nCisgICAgICAgIC8vIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBzdHJpbmcgdG8gdGhlIG91dHB1dC4KKyAgICAgICAgQXBwZW5kSW52
YWxpZE5hcnJvd1N0cmluZyhzcmMsIDAsIHNvdXJjZUxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBjaGVjayB0aGUgQVNDSUkgb3V0
cHV0IGxpa2UgYSBub3JtYWwgaG9zdC4gSXQgd2lsbCBhbHNvIGhhbmRsZQorICAgIC8vIHVuZXNj
YXBpbmcuIEFsdGhvdWdoIHdlIHVuZXNjYXBlZCBldmVyeXRoaW5nIGJlZm9yZSB0aGlzIGZ1bmN0
aW9uIGNhbGwsIGlmCisgICAgLy8gc29tZWJvZHkgZG9lcyAlMDAgYXMgZnVsbHdpZHRoLCBJQ1Ug
d2lsbCBjb252ZXJ0IHRoaXMgdG8gQVNDSUkuCisgICAgYm9vbCBzdWNjZXNzID0gRG9TaW1wbGVI
b3N0KHdpZGVPdXRwdXQuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWRlT3V0cHV0Lmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsICZoYXNOb25BU0NJSSk7CisgICAgQVNTRVJUKCFoYXNOb25BU0NJSSk7CisgICAgcmV0dXJu
IHN1Y2Nlc3M7Cit9CisKKy8vIDgtYml0IGNvbnZlcnQgaG9zdCB0byBpdHMgQVNDSUkgdmVyc2lv
bjogdGhpcyBjb252ZXJ0cyB0aGUgVVRGLTggaW5wdXQgdG8KKy8vIFVURi0xNi4gVGhlIGhhc0Vz
Y2FwZWQgZmxhZyBzaG91bGQgYmUgc2V0IGlmIHRoZSBpbnB1dCBzdHJpbmcgcmVxdWlyZXMKKy8v
IHVuZXNjYXBpbmcuCitib29sIERvQ29tcGxleEhvc3QoY29uc3QgY2hhciogaG9zdCwgaW50IGhv
c3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNOb25BU0NJSSwgYm9vbCBoYXNF
c2NhcGVkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICAvLyBTYXZlIHRoZSBjdXJy
ZW50IHBvc2l0aW9uIGluIHRoZSBvdXRwdXQuIFdlIG1heSB3cml0ZSBzdHVmZiBhbmQgcmV3aW5k
IGl0CisgICAgLy8gYmVsb3csIHNvIHdlIG5lZWQgdG8ga25vdyB3aGVyZSB0byByZXdpbmQgdG8u
CisgICAgaW50IGJlZ2luTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCgpOworCisgICAgLy8gUG9pbnRz
IHRvIHRoZSBVVEYtOCBkYXRhIHdlIHdhbnQgdG8gY29udmVydC4gVGhpcyB3aWxsIGVpdGhlciBi
ZSB0aGUKKyAgICAvLyBpbnB1dCBvciB0aGUgdW5lc2NhcGVkIHZlcnNpb24gd3JpdHRlbiB0byB8
b3V0cHV0fCBpZiBuZWNlc3NhcnkuCisgICAgY29uc3QgY2hhciogdXRmOFNvdXJjZTsKKyAgICBp
bnQgdXRmOFNvdXJjZUxlbmd0aDsKKyAgICBpZiAoaGFzRXNjYXBlZCkgeworICAgICAgICAvLyBV
bmVzY2FwZSBiZWZvcmUgY29udmVydGluZyB0byBVVEYtMTYgZm9yIElETi4gV2Ugd3JpdGUgdGhp
cyBpbnRvIHRoZQorICAgICAgICAvLyBvdXRwdXQgYmVjYXVzZSBpdCBtb3N0IGxpa2VseSBkb2Vz
IG5vdCByZXF1aXJlIElETml6YXRpb24sIGFuZCB3ZSBjYW4KKyAgICAgICAgLy8gc2F2ZSBhbm90
aGVyIGh1Z2Ugc3RhY2sgYnVmZmVyLiBJdCB3aWxsIGJlIHJlcGxhY2VkIGJlbG93IGlmIGl0IHJl
cXVpcmVzCisgICAgICAgIC8vIElETi4gVGhpcyB3aWxsIGFsc28gdXBkYXRlIG91ciBub24tQVND
SUkgZmxhZyBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgIC8vIHVuZXNjYXBlZCBpbnB1
dCByZXF1aXJlcyBJRE4uCisgICAgICAgIGlmICghRG9TaW1wbGVIb3N0KGhvc3QsIGhvc3RMZW5n
dGgsIG91dHB1dCwgJmhhc05vbkFTQ0lJKSkgeworICAgICAgICAgICAgLy8gRXJyb3Igd2l0aCBz
b21lIGVzY2FwZSBzZXF1ZW5jZS4gV2UnbGwgY2FsbCB0aGUgY3VycmVudCBvdXRwdXQKKyAgICAg
ICAgICAgIC8vIGNvbXBsZXRlLiBEb1NpbXBsZUhvc3Qgd2lsbCBoYXZlIHdyaXR0ZW4gc29tZSAi
cmVhc29uYWJsZSIgb3V0cHV0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVW5lc2NhcGluZyBtYXkgaGF2ZSBsZWZ0IHVzIHdpdGggQVNDSUkgaW5w
dXQsIGluIHdoaWNoIGNhc2UgdGhlCisgICAgICAgIC8vIHVuZXNjYXBlZCB2ZXJzaW9uIHdlIHdy
b3RlIHRvIG91dHB1dCBpcyBjb21wbGV0ZS4KKyAgICAgICAgaWYgKCFoYXNOb25BU0NJSSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIFNhdmUgdGhlIHBvaW50ZXIgaW50
byB0aGUgZGF0YSB3YXMganVzdCBjb252ZXJ0ZWQgKGl0IG1heSBiZSBhcHBlbmRlZCB0bworICAg
ICAgICAvLyBvdGhlciBkYXRhIGluIHRoZSBvdXRwdXQgYnVmZmVyKS4KKyAgICAgICAgdXRmOFNv
dXJjZSA9ICZvdXRwdXQuZGF0YSgpW2JlZ2luTGVuZ3RoXTsKKyAgICAgICAgdXRmOFNvdXJjZUxl
bmd0aCA9IG91dHB1dC5sZW5ndGgoKSAtIGJlZ2luTGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdW5lc2NhcGUsIHVzZSBpbnB1dCBmb3IgSUROaXphdGlv
biBsYXRlci4gKFdlIGtub3cgdGhlCisgICAgICAgIC8vIGlucHV0IGhhcyBub24tQVNDSUksIG9y
IHRoZSBzaW1wbGUgdmVyc2lvbiB3b3VsZCBoYXZlIGJlZW4gY2FsbGVkCisgICAgICAgIC8vIGlu
c3RlYWQgb2YgdXMuKQorICAgICAgICB1dGY4U291cmNlID0gaG9zdDsKKyAgICAgICAgdXRmOFNv
dXJjZUxlbmd0aCA9IGhvc3RMZW5ndGg7CisgICAgfQorCisgICAgLy8gTm9uLUFTQ0lJIGlucHV0
IHJlcXVpcmVzIElETiwgY29udmVydCB0byBVVEYtMTYgYW5kIGRvIHRoZSBJRE4gY29udmVyc2lv
bi4KKyAgICAvLyBBYm92ZSwgd2UgbWF5IGhhdmUgdXNlZCB0aGUgb3V0cHV0IHRvIHdyaXRlIHRo
ZSB1bmVzY2FwZWQgdmFsdWVzIHRvLCBzbworICAgIC8vIHdlIGhhdmUgdG8gcmV3aW5kIGl0IHRv
IHdoZXJlIHdlIHN0YXJ0ZWQgYWZ0ZXIgd2UgY29udmVydCBpdCB0byBVVEYtMTYuCisgICAgU3Rh
Y2tCdWZmZXJXIHV0ZjE2OworICAgIGlmICghQ29udmVydFVURjhUb1VURjE2KHV0ZjhTb3VyY2Us
IHV0ZjhTb3VyY2VMZW5ndGgsIHV0ZjE2KSkgeworICAgICAgICAvLyBJbiB0aGlzIGVycm9yIGNh
c2UsIHRoZSBpbnB1dCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgb3V0cHV0LgorICAgICAgICBTdGFj
a0J1ZmZlciB1dGY4OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHV0ZjhTb3VyY2VMZW5n
dGg7IGkrKykKKyAgICAgICAgICAgIHV0ZjguYXBwZW5kKHV0ZjhTb3VyY2VbaV0pOworICAgICAg
ICBvdXRwdXQuc2V0TGVuZ3RoKGJlZ2luTGVuZ3RoKTsKKyAgICAgICAgQXBwZW5kSW52YWxpZE5h
cnJvd1N0cmluZyh1dGY4LmRhdGEoKSwgMCwgdXRmOC5sZW5ndGgoKSwgb3V0cHV0KTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBvdXRwdXQuc2V0TGVuZ3RoKGJlZ2luTGVuZ3Ro
KTsKKworICAgIC8vIFRoaXMgd2lsbCBjYWxsIERvU2ltcGxlSG9zdCB3aGljaCB3aWxsIGRvIG5v
cm1hbCBBU0NJSSBjYW5vbmljYWxpemF0aW9uCisgICAgLy8gYW5kIGFsc28gY2hlY2sgZm9yIElQ
IGFkZHJlc3NlcyBpbiB0aGUgb3V0cHQuCisgICAgcmV0dXJuIERvSUROSG9zdCh1dGYxNi5kYXRh
KCksIHV0ZjE2Lmxlbmd0aCgpLCBvdXRwdXQpOworfQorCisvLyBVVEYtMTYgY29udmVydCBob3N0
IHRvIGl0cyBBU0NJSSB2ZXJzaW9uLiBUaGUgc2V0IHVwIGlzIGFscmVhZHkgcmVhZHkgZm9yCisv
LyB0aGUgYmFja2VuZCwgc28gd2UganVzdCBwYXNzIHRocm91Z2guIFRoZSBoYXNFc2NhcGVkIGZs
YWcgc2hvdWxkIGJlIHNldCBpZgorLy8gdGhlIGlucHV0IHN0cmluZyByZXF1aXJlcyB1bmVzY2Fw
aW5nLgorYm9vbCBEb0NvbXBsZXhIb3N0KGNvbnN0IFVDaGFyKiBob3N0LCBpbnQgaG9zdExlbmd0
aCwgYm9vbCBoYXNOb25BU0NJSSwgYm9vbCBoYXNFc2NhcGVkLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCkKK3sKKyAgICBpZiAoaGFzRXNjYXBlZCkgeworICAgICAgICAvLyBZaWtlcywgd2UgaGF2
ZSBlc2NhcGVkIGNoYXJhY3RlcnMgd2l0aCB3aWRlIGlucHV0LiBUaGUgZXNjYXBlZAorICAgICAg
ICAvLyBjaGFyYWN0ZXJzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBVVEYtOC4gVG8gc29sdmUg
dGhpcyBwcm9ibGVtLAorICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIFVURi04LCB1bmVzY2FwZSwg
dGhlbiBjb252ZXJ0IGJhY2sgdG8gVVRGLTE2IGZvciBJRE4uCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdlIGRvbid0IGJvdGhlciB0byBvcHRpbWl6ZSB0aGUgY29udmVyc2lvbiBpbiB0aGUgQVND
SUkgY2FzZSAod2hpY2gKKyAgICAgICAgLy8gKmNvdWxkKiBqdXN0IGJlIGEgY29weSkgYW5kIHVz
ZSB0aGUgVVRGLTggcGF0aCwgYmVjYXVzZSBpdCBzaG91bGQgYmUKKyAgICAgICAgLy8gdmVyeSBy
YXJlIHRoYXQgaG9zdCBuYW1lcyBoYXZlIGVzY2FwZWQgY2hhcmFjdGVycywgYW5kIGl0IGlzIHJl
bGF0aXZlbHkKKyAgICAgICAgLy8gZmFzdCB0byBkbyB0aGUgY29udmVyc2lvbiBhbnl3YXkuCisg
ICAgICAgIFN0YWNrQnVmZmVyIHV0Zjg7CisgICAgICAgIGlmICghQ29udmVydFVURjE2VG9VVEY4
KGhvc3QsIGhvc3RMZW5ndGgsIHV0ZjgpKSB7CisgICAgICAgICAgICBBcHBlbmRJbnZhbGlkTmFy
cm93U3RyaW5nKGhvc3QsIDAsIGhvc3RMZW5ndGgsIG91dHB1dCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmNlIHdlIGNvbnZlcnQgdG8gVVRG
LTgsIHdlIGNhbiB1c2UgdGhlIDgtYml0IHZlcnNpb24gb2YgdGhlIGNvbXBsZXgKKyAgICAgICAg
Ly8gaG9zdCBoYW5kbGluZyBjb2RlIGFib3ZlLgorICAgICAgICByZXR1cm4gRG9Db21wbGV4SG9z
dCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSwgaGFzTm9uQVNDSUksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc0VzY2FwZWQsIG91dHB1dCk7CisgICAgfQorCisgICAgLy8gTm8g
dW5lc2NhcGluZyBuZWNlc3NhcnksIHdlIGNhbiBzYWZlbHkgcGFzcyB0aGUgaW5wdXQgdG8gSUNV
LiBUaGlzCisgICAgLy8gZnVuY3Rpb24gd2lsbCBvbmx5IGdldCBjYWxsZWQgaWYgd2UgZWl0aGVy
IGhhdmUgZXNjYXBlZCBvciBub24tYXNjaWkKKyAgICAvLyBpbnB1dCwgc28gaXQncyBzYWZlIHRv
IGp1c3QgdXNlIElDVSBub3cuIEV2ZW4gaWYgdGhlIGlucHV0IGlzIEFTQ0lJLAorICAgIC8vIHRo
aXMgZnVuY3Rpb24gd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgKGp1c3Qgc2xvd2VyIHRoYW4gd2Ug
Y291bGQpLgorICAgIHJldHVybiBEb0lETkhvc3QoaG9zdCwgaG9zdExlbmd0aCwgb3V0cHV0KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+Cit2b2lkIERvSG9z
dChjb25zdCBDSEFSKiBzcGVjLAorICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0
LAorICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICBDYW5v
bkhvc3RJbmZvKiBob3N0SW5mbykKK3sKKyAgICBpZiAoaG9zdC5sZW5ndGgoKSA8PSAwKSB7Cisg
ICAgICAgIC8vIEVtcHR5IGhvc3RzIGRvbid0IG5lZWQgYW55dGhpbmcuCisgICAgICAgIGhvc3RJ
bmZvLT5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpORVVUUkFMOworICAgICAgICBob3N0SW5mby0+
b3VwdXRIb3N0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBib29sIGhhc05vbkFTQ0lJOworICAgIGJvb2wgaGFzRXNjYXBlZDsKKyAgICBTY2FuSG9zdG5h
bWU8Q0hBUiwgVUNIQVI+KHNwZWMsIGhvc3QsICZoYXNOb25BU0NJSSwgJmhhc0VzY2FwZWQpOwor
CisgICAgLy8gS2VlcCB0cmFjayBvZiBvdXRwdXQncyBpbml0aWFsIGxlbmd0aCwgc28gd2UgY2Fu
IHJld2luZCBsYXRlci4KKyAgICBjb25zdCBpbnQgb3V0cHV0QmVnaW4gPSBvdXRwdXQubGVuZ3Ro
KCk7CisKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgaWYgKCFoYXNOb25BU0NJSSAmJiAhaGFzRXNj
YXBlZCkgeworICAgICAgICBzdWNjZXNzID0gRG9TaW1wbGVIb3N0KCZzcGVjW2hvc3QuYmVnaW4o
KV0sIGhvc3QubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LCAmaGFzTm9uQVNDSUkpOworICAgICAgICBBU1NFUlQoIWhhc05vbkFTQ0lJKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBzdWNjZXNzID0gRG9Db21wbGV4SG9zdCgmc3BlY1tob3N0LmJlZ2luKCld
LCBob3N0Lmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOb25B
U0NJSSwgaGFzRXNjYXBlZCwgb3V0cHV0KTsKKyAgICB9CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgLy8gQ2Fub25pY2FsaXphdGlvbiBmYWlsZWQuIFNldCBCUk9LRU4gdG8gbm90aWZ5
IHRoZSBjYWxsZXIuCisgICAgICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpC
Uk9LRU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQWZ0ZXIgYWxsIHRoZSBvdGhlciBjYW5v
bmljYWxpemF0aW9uLCBjaGVjayBpZiB3ZSBlbmRlZCB1cCB3aXRoIGFuIElQCisgICAgICAgIC8v
IGFkZHJlc3MuIElQIGFkZHJlc3NlcyBhcmUgc21hbGwsIHNvIHdyaXRpbmcgaW50byB0aGlzIHRl
bXBvcmFyeSBidWZmZXIKKyAgICAgICAgLy8gc2hvdWxkIG5vdCBjYXVzZSBhbiBhbGxvY2F0aW9u
LgorICAgICAgICBSYXdVUkxCdWZmZXI8Y2hhciwgNjQ+IGNhbm9uX2lwOworICAgICAgICBDYW5v
bmljYWxpemVJUEFkZHJlc3Mob3V0cHV0LmRhdGEoKSwgVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
b3V0cHV0QmVnaW4sIG91dHB1dC5sZW5ndGgoKSksIGNhbm9uX2lwLCBob3N0SW5mbyk7CisKKyAg
ICAgICAgLy8gSWYgd2UgZ290IGFuIElQdjQvSVB2NiBhZGRyZXNzLCBjb3B5IHRoZSBjYW5vbmlj
YWwgZm9ybSBiYWNrIHRvIHRoZQorICAgICAgICAvLyByZWFsIGJ1ZmZlci4gT3RoZXJ3aXNlLCBp
dCdzIGEgaG9zdG5hbWUgb3IgYnJva2VuIElQLCBpbiB3aGljaCBjYXNlCisgICAgICAgIC8vIHdl
IGp1c3QgbGVhdmUgaXQgaW4gcGxhY2UuCisgICAgICAgIGlmIChob3N0SW5mby0+SXNJUEFkZHJl
c3MoKSkgeworICAgICAgICAgICAgb3V0cHV0LnNldExlbmd0aChvdXRwdXRCZWdpbik7CisgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKGNhbm9uX2lwLmRhdGEoKSwgY2Fub25faXAubGVuZ3RoKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgaG9zdEluZm8tPm91cHV0SG9zdCA9IFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKG91dHB1dEJlZ2luLCBvdXRwdXQubGVuZ3RoKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQorCitib29sIENhbm9uaWNhbGl6ZUhvc3QoY29uc3QgY2hhciogc3BlYywKKyAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgVVJMQ29tcG9uZW50KiBvdXB1dEhvc3QpCit7CisgICAgQ2Fub25Ib3N0SW5mbyBob3N0SW5m
bzsKKyAgICBEb0hvc3Q8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCAm
aG9zdEluZm8pOworICAgICpvdXB1dEhvc3QgPSBob3N0SW5mby5vdXB1dEhvc3Q7CisgICAgcmV0
dXJuIChob3N0SW5mby5mYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOKTsKK30KKworYm9v
bCBDYW5vbmljYWxpemVIb3N0KGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQq
IG91cHV0SG9zdCkKK3sKKyAgICBDYW5vbkhvc3RJbmZvIGhvc3RJbmZvOworICAgIERvSG9zdDxV
Q2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgJmhvc3RJbmZvKTsKKyAgICAqb3VwdXRI
b3N0ID0gaG9zdEluZm8ub3VwdXRIb3N0OworICAgIHJldHVybiAoaG9zdEluZm8uZmFtaWx5ICE9
IENhbm9uSG9zdEluZm86OkJST0tFTik7Cit9CisKK3ZvaWQgQ2Fub25pY2FsaXplSG9zdFZlcmJv
c2UoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fub25Ib3N0
SW5mbyogaG9zdEluZm8pCit7CisgICAgRG9Ib3N0PGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMs
IGhvc3QsIG91dHB1dCwgaG9zdEluZm8pOworfQorCit2b2lkIENhbm9uaWNhbGl6ZUhvc3RWZXJi
b3NlKGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5vbkhv
c3RJbmZvKiBob3N0SW5mbykKK3sKKyAgICBEb0hvc3Q8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0
LCBvdXRwdXQsIGhvc3RJbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
cgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzNGI1ODA4YTVjZDVhNDZi
MjZmMDdjN2M1ZWY1N2Y0MzVhYTMyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLy8gQ29weXJpZ2h0
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBJQ1UgaW50ZWdyYXRpb24gZnVuY3Rpb25zLgor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCisjaW5jbHVkZSAiVVJM
Q2Fub25JbnRlcm5hbC5oIiAvLyBmb3IgX2l0b2FfcworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5oPgorI2luY2x1ZGUgPHVu
aWNvZGUvdWNudl9jYi5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWlkbmEuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsKKwor
Ly8gQ2FsbGVkIHdoZW4gY29udmVydGluZyBhIGNoYXJhY3RlciB0aGF0IGNhbiBub3QgYmUgcmVw
cmVzZW50ZWQsIHRoaXMgd2lsbAorLy8gYXBwZW5kIGFuIGVzY2FwZWQgdmVyc2lvbiBvZiB0aGUg
bnVtZXJpY2FsIGNoYXJhY3RlciByZWZlcmVuY2UgZm9yIHRoYXQgY29kZQorLy8gcG9pbnQuIEl0
IGlzIG9mIHRoZSBmb3JtICImIzEyMzQ7IiBhbmQgd2Ugd2lsbCBlc2NhcGUgdGhlIG5vbi1kaWdp
dHMgdG8KKy8vICIlMjYlMjMxMjM0JTNCIi4gV2h5PyBUaGlzIGlzIHdoYXQgTmV0c2NhcGUgZGlk
IGJhY2sgaW4gdGhlIG9sZGVuIGRheXMuCit2b2lkIGFwcGVuZFVSTEVzY2FwZWRDaGFyKGNvbnN0
IHZvaWQqIC8qIGNvbnRleHQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0
ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21BcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVQ2hhciogLyogY29kZV91bml0cyAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAvKiBsZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIg
Y29kZVBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tS
ZWFzb24gcmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlcnIp
Cit7CisgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQpIHsKKyAgICAgICAgKmVyciA9
IFVfWkVST19FUlJPUjsKKworICAgICAgICBjb25zdCBzdGF0aWMgaW50IHByZWZpeExlbmd0aCA9
IDY7CisgICAgICAgIGNvbnN0IHN0YXRpYyBjaGFyIHByZWZpeFtwcmVmaXhMZW5ndGggKyAxXSA9
ICIlMjYlMjMiOyAvLyAiJiMiIHBlcmNlbnQtZXNjYXBlZAorICAgICAgICB1Y252X2NiRnJvbVVX
cml0ZUJ5dGVzKGZyb21BcmdzLCBwcmVmaXgsIHByZWZpeExlbmd0aCwgMCwgZXJyKTsKKworICAg
ICAgICBBU1NFUlQoY29kZVBvaW50IDwgMHgxMTAwMDApOworICAgICAgICBjaGFyIG51bWJlcls4
XTsgLy8gTWF4IFVuaWNvZGUgY29kZSBwb2ludCBpcyA3IGRpZ2l0cy4KKyAgICAgICAgX2l0b2Ff
cyhjb2RlUG9pbnQsIG51bWJlciwgMTApOworICAgICAgICBpbnQgbnVtYmVyTGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8aW50PihzdHJsZW4obnVtYmVyKSk7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRl
Qnl0ZXMoZnJvbUFyZ3MsIG51bWJlciwgbnVtYmVyTGVuZ3RoLCAwLCBlcnIpOworCisgICAgICAg
IGNvbnN0IHN0YXRpYyBpbnQgcG9zdGZpeExlbmd0aCA9IDM7CisgICAgICAgIGNvbnN0IHN0YXRp
YyBjaGFyIHBvc3RmaXhbcG9zdGZpeExlbmd0aCArIDFdID0gIiUzQiI7IC8vICI7IiBwZXJjZW50
LWVzY2FwZWQKKyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVCeXRlcyhmcm9tQXJncywgcG9zdGZp
eCwgcG9zdGZpeExlbmd0aCwgMCwgZXJyKTsKKyAgICB9Cit9CisKKy8vIEEgY2xhc3MgZm9yIHNj
b3BpbmcgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgaW52YWxpZCBjaGFyYWN0ZXIgY2FsbGJhY2su
CitjbGFzcyBBcHBlbmRIYW5kbGVySW5zdGFsbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgb3du
ZXIgb2YgdGhpcyBvYmplY3QgbXVzdCBlbnN1cmUgdGhhdCB0aGUgY29udmVydGVyIGlzIGFsaXZl
IGZvciB0aGUKKyAgICAvLyBkdXJhdGlvbiBvZiB0aGlzIG9iamVjdCdzIGxpZmV0aW1lLgorICAg
IEFwcGVuZEhhbmRsZXJJbnN0YWxsZXIoVUNvbnZlcnRlciogY29udmVydGVyKQorICAgICAgICA6
IG1fY29udmVydGVyKGNvbnZlcnRlcikKKyAgICB7CisgICAgICAgIFVFcnJvckNvZGUgZXJyID0g
VV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXIs
IGFwcGVuZFVSTEVzY2FwZWRDaGFyLCAwLCAmbV9vbGRDYWxsYmFjaywgJm1fb2xkQ29udGV4dCwg
JmVycik7CisgICAgfQorCisgICAgfkFwcGVuZEhhbmRsZXJJbnN0YWxsZXIoKQorICAgIHsKKyAg
ICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJv
bVVDYWxsQmFjayhtX2NvbnZlcnRlciwgbV9vbGRDYWxsYmFjaywgbV9vbGRDb250ZXh0LCAwLCAw
LCAmZXJyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7
CisKKyAgICBVQ29udmVydGVyRnJvbVVDYWxsYmFjayBtX29sZENhbGxiYWNrOworICAgIGNvbnN0
IHZvaWQqIG1fb2xkQ29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKy8vIENvbnZlcnRz
IHRoZSBVbmljb2RlIGlucHV0IHJlcHJlc2VudGluZyBhIGhvc3RuYW1lIHRvIEFTQ0lJIHVzaW5n
IElETiBydWxlcy4KKy8vIFRoZSBvdXRwdXQgbXVzdCBiZSBBU0NJSSwgYnV0IGlzIHJlcHJlc2Vu
dGVkIGFzIHdpZGUgY2hhcmFjdGVycy4KKy8vCisvLyBPbiBzdWNjZXNzLCB0aGUgb3V0cHV0IHdp
bGwgYmUgZmlsbGVkIHdpdGggdGhlIEFTQ0lJIGhvc3QgbmFtZSBhbmQgaXQgd2lsbAorLy8gcmV0
dXJuIHRydWUuIFVubGlrZSBtb3N0IG90aGVyIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zLCB0
aGlzIGFzc3VtZXMgdGhhdAorLy8gdGhlIG91dHB1dCBpcyBlbXB0eS4gVGhlIGJlZ2lubmluZyBv
ZiB0aGUgaG9zdCB3aWxsIGJlIGF0IG9mZnNldCAwLCBhbmQKKy8vIHRoZSBsZW5ndGggb2YgdGhl
IG91dHB1dCB3aWxsIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgaG9zdCBuYW1lLgor
Ly8KKy8vIE9uIGVycm9yLCB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlLiBUaGUgb3V0cHV0IGluIHRo
aXMgY2FzZSBpcyB1bmRlZmluZWQuCitib29sIElETlRvQVNDSUkoY29uc3QgVUNoYXIqIHNyYywg
aW50IHNvdXJjZUxlbmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KQoreworICAgIEFTU0VS
VCghb3V0cHV0Lmxlbmd0aCgpKTsgLy8gT3V0cHV0IGJ1ZmZlciBpcyBhc3N1bWVkIGVtcHR5Lgor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFVzZSBBTExPV19VTkFTU0lHTkVEIHRvIGJl
IG1vcmUgdG9sZXJhbnQgb2YgaG9zdG5hbWVzIHRoYXQgdmlvbGF0ZQorICAgICAgICAvLyB0aGUg
c3BlYyAod2hpY2ggZG8gZXhpc3QpLiBUaGlzIGRvZXMgbm90IHByZXNlbnQgYW55IHJpc2sgYW5k
IGlzIGEKKyAgICAgICAgLy8gbGl0dGxlIG1vcmUgZnV0dXJlIHByb29mLgorICAgICAgICBVRXJy
b3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgaW50IG51bUNvbnZlcnRlZCA9IHVp
ZG5hX0lETlRvQVNDSUkoc3JjLCBzb3VyY2VMZW5ndGgsIG91dHB1dC5kYXRhKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuY2FwYWNpdHkoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJRE5BX0FMTE9X
X1VOQVNTSUdORUQsIDAsICZlcnIpOworICAgICAgICBpZiAoZXJyID09IFVfWkVST19FUlJPUikg
eworICAgICAgICAgICAgb3V0cHV0LnNldExlbmd0aChudW1Db252ZXJ0ZWQpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVyciAhPSBVX0JVRkZFUl9P
VkVSRkxPV19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVW5rbm93biBlcnJv
ciwgZ2l2ZSB1cC4KKworICAgICAgICAvLyBOb3QgZW5vdWdoIHJvb20gaW4gb3VyIGJ1ZmZlciwg
ZXhwYW5kLgorICAgICAgICBvdXRwdXQucmVzaXplKG91dHB1dC5jYXBhY2l0eSgpICogMik7Cisg
ICAgfQorfQorCitib29sIHJlYWRVVEZDaGFyKGNvbnN0IGNoYXIqIHN0ciwgaW50KiBiZWdpbiwg
aW50IGxlbmd0aCwgdW5zaWduZWQqIGNvZGVQb2ludE91dCkKK3sKKyAgICBpbnQgY29kZVBvaW50
OyAvLyBBdm9pZHMgd2FybmluZyB3aGVuIFU4X05FWFQgd3JpdGVzIC0xIHRvIGl0LgorICAgIFU4
X05FWFQoc3RyLCAqYmVnaW4sIGxlbmd0aCwgY29kZVBvaW50KTsKKyAgICAqY29kZVBvaW50T3V0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVQb2ludCk7CisKKyAgICAvLyBUaGUgSUNVIG1h
Y3JvIGFib3ZlIG1vdmVzIHRvIHRoZSBuZXh0IGNoYXIsIHdlIHdhbnQgdG8gcG9pbnQgdG8gdGhl
IGxhc3QKKyAgICAvLyBjaGFyIGNvbnN1bWVkLgorICAgICgqYmVnaW4pLS07CisKKyAgICAvLyBW
YWxpZGF0ZSB0aGUgZGVjb2RlZCB2YWx1ZS4KKyAgICBpZiAoVV9JU19VTklDT0RFX0NIQVIoY29k
ZVBvaW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgKmNvZGVQb2ludE91dCA9IGtVbmlj
b2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIHJl
YWRVVEZDaGFyKGNvbnN0IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGludCBsZW5ndGgsIHVuc2ln
bmVkKiBjb2RlUG9pbnQpCit7CisgICAgaWYgKFUxNl9JU19TVVJST0dBVEUoc3RyWypiZWdpbl0p
KSB7CisgICAgICAgIGlmICghVTE2X0lTX1NVUlJPR0FURV9MRUFEKHN0clsqYmVnaW5dKSB8fCAq
YmVnaW4gKyAxID49IGxlbmd0aCB8fCAhVTE2X0lTX1RSQUlMKHN0clsqYmVnaW4gKyAxXSkpIHsK
KyAgICAgICAgICAgIC8vIEludmFsaWQgc3Vycm9nYXRlIHBhaXIuCisgICAgICAgICAgICAqY29k
ZVBvaW50ID0ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFZhbGlkIHN1cnJvZ2F0ZSBwYWlyLgor
ICAgICAgICAqY29kZVBvaW50ID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKHN0clsqYmVnaW5dLCBz
dHJbKmJlZ2luICsgMV0pOworICAgICAgICAoKmJlZ2luKSsrOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCBhIHN1cnJvZ2F0ZSwganVzdCBvbmUgMTYtYml0IHdvcmQuCisgICAgICAgICpj
b2RlUG9pbnQgPSBzdHJbKmJlZ2luXTsKKyAgICB9CisKKyAgICBpZiAoVV9JU19VTklDT0RFX0NI
QVIoKmNvZGVQb2ludCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSW52YWxpZCBj
b2RlIHBvaW50LgorICAgICpjb2RlUG9pbnQgPSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVy
OworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
cgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSVAuY3BwIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjMyZDliZGIwMzRkZDkwZTU2
YTNkM2I5MzhkMTliZDRmMGEyYTczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbklQLmNwcApAQCAtMCwwICsxLDcwMSBAQAorLy8gQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJV
UkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMQ2hhcmFjdGVyVHlwZXMuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9u
aWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisvLyBDb252ZXJ0cyBvbmUgb2YgdGhlIGNoYXJh
Y3RlciB0eXBlcyB0aGF0IHJlcHJlc2VudCBhIG51bWVyaWNhbCBiYXNlIHRvIHRoZQorLy8gY29y
cmVzcG9uZGluZyBiYXNlLgorc3RhdGljIGlubGluZSBpbnQgYmFzZUZvclR5cGUoVVJMQ2hhcmFj
dGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBVUkxDaGFyYWN0ZXJUeXBlczo6SGV4YWRlY2ltYWxDaGFyYWN0ZXI6CisgICAgICAg
IHJldHVybiAxNjsKKyAgICBjYXNlIFVSTENoYXJhY3RlclR5cGVzOjpEZWNpbWFsQ2hhcmFjdGVy
OgorICAgICAgICByZXR1cm4gMTA7CisgICAgY2FzZSBVUkxDaGFyYWN0ZXJUeXBlczo6T2N0YWxD
aGFyYWN0ZXI6CisgICAgICAgIHJldHVybiA4OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKworLy8gQ29udmVydHMgYW4gSVB2NCBjb21wb25lbnQgdG8gYSAzMi1i
aXQgbnVtYmVyLCB3aGlsZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cuCisvLworLy8gUG9zc2libGUg
cmV0dXJuIHZhbHVlczoKKy8vIC0gSVBWNCAgICAtIFRoZSBudW1iZXIgd2FzIHZhbGlkLCBhbmQg
ZGlkIG5vdCBvdmVyZmxvdy4KKy8vIC0gQlJPS0VOICAtIFRoZSBpbnB1dCB3YXMgbnVtZXJpYywg
YnV0IHRvbyBsYXJnZSBmb3IgYSAzMi1iaXQgZmllbGQuCisvLyAtIE5FVVRSQUwgLSBJbnB1dCB3
YXMgbm90IG51bWVyaWMuCisvLworLy8gVGhlIGlucHV0IGlzIGFzc3VtZWQgdG8gYmUgQVNDSUku
IEZpbmRJUHY0Q29tcG9uZW50cyBzaG91bGQgaGF2ZSBzdHJpcHBlZAorLy8gb3V0IGFueSBpbnB1
dCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiA3IGJpdHMuIFRoZSBjb21wb25lbnRzIGFyZSBhc3N1bWVk
CisvLyB0byBiZSBub24tZW1wdHkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Q2Fub25Ib3N0SW5mbzo6RmFtaWx5IElQdjRDb21wb25lbnRUb051bWJlcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXBvbmVudCwgdWludDMyX3QqIG51
bWJlcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IHRoZSBiYXNlCisgICAgVVJMQ2hhcmFjdGVyVHlw
ZXM6OkNoYXJhY3RlclR5cGVzIGJhc2U7CisgICAgaW50IGJhc2VQcmVmaXhMZW5ndGggPSAwOyAv
LyBTaXplIG9mIHRoZSBwcmVmaXggZm9yIHRoaXMgYmFzZS4KKyAgICBpZiAoc3BlY1tjb21wb25l
bnQuYmVnaW4oKV0gPT0gJzAnKSB7CisgICAgICAgIC8vIEVpdGhlciBoZXggb3IgZGVjLCBvciBh
IHN0YW5kYWxvbmUgemVyby4KKyAgICAgICAgaWYgKGNvbXBvbmVudC5sZW5ndGgoKSA9PSAxKSB7
CisgICAgICAgICAgICBiYXNlID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkRlY2ltYWxDaGFyYWN0ZXI7
CisgICAgICAgIH0gZWxzZSBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4oKSArIDFdID09ICdYJyB8
fCBzcGVjW2NvbXBvbmVudC5iZWdpbigpICsgMV0gPT0gJ3gnKSB7CisgICAgICAgICAgICBiYXNl
ID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkhleGFkZWNpbWFsQ2hhcmFjdGVyOworICAgICAgICAgICAg
YmFzZVByZWZpeExlbmd0aCA9IDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNl
ID0gVVJMQ2hhcmFjdGVyVHlwZXM6Ok9jdGFsQ2hhcmFjdGVyOworICAgICAgICAgICAgYmFzZVBy
ZWZpeExlbmd0aCA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9IFVS
TENoYXJhY3RlclR5cGVzOjpEZWNpbWFsQ2hhcmFjdGVyOworCisgICAgLy8gRXh0ZW5kIHRoZSBw
cmVmaXggdG8gY29uc3VtZSBhbGwgbGVhZGluZyB6ZXJvcy4KKyAgICB3aGlsZSAoYmFzZVByZWZp
eExlbmd0aCA8IGNvbXBvbmVudC5sZW5ndGgoKSAmJiBzcGVjW2NvbXBvbmVudC5iZWdpbigpICsg
YmFzZVByZWZpeExlbmd0aF0gPT0gJzAnKQorICAgICAgICArK2Jhc2VQcmVmaXhMZW5ndGg7CisK
KyAgICAvLyBQdXQgdGhlIGNvbXBvbmVudCwgbWludXMgYW55IGJhc2UgcHJlZml4LCBpbnRvIGEg
emVyby10ZXJtaW5hdGVkIGJ1ZmZlciBzbworICAgIC8vIHdlIGNhbiBjYWxsIHRoZSBzdGFuZGFy
ZCBsaWJyYXJ5LiBCZWNhdXNlIGxlYWRpbmcgemVyb3MgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAv
LyBkaXNjYXJkZWQsIGZpbGxpbmcgdGhlIGVudGlyZSBidWZmZXIgaXMgZ3VhcmFudGVlZCB0byB0
cmlnZ2VyIHRoZSAzMi1iaXQKKyAgICAvLyBvdmVyZmxvdyBjaGVjay4KKyAgICBjb25zdCBpbnQg
a01heENvbXBvbmVudExlbiA9IDE2OworICAgIGNoYXIgYnVmW2tNYXhDb21wb25lbnRMZW4gKyAx
XTsgLy8gZGlnaXRzICsgJ1wwJworICAgIGludCBkZXN0SSA9IDA7CisgICAgZm9yIChpbnQgaSA9
IGNvbXBvbmVudC5iZWdpbigpICsgYmFzZVByZWZpeExlbmd0aDsgaSA8IGNvbXBvbmVudC5lbmQo
KTsgaSsrKSB7CisgICAgICAgIC8vIFdlIGtub3cgdGhlIGlucHV0IGlzIDctYml0LCBzbyBjb252
ZXJ0IHRvIG5hcnJvdyAoaWYgdGhpcyBpcyB0aGUgd2lkZQorICAgICAgICAvLyB2ZXJzaW9uIG9m
IHRoZSB0ZW1wbGF0ZSkgYnkgY2FzdGluZy4KKyAgICAgICAgY2hhciBpbnB1dCA9IHN0YXRpY19j
YXN0PGNoYXI+KHNwZWNbaV0pOworCisgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhpcyBjaGFy
YWN0ZXIgaXMgT0sgZm9yIHRoZSBnaXZlbiBiYXNlLgorICAgICAgICBpZiAoIVVSTENoYXJhY3Rl
clR5cGVzOjppc0NoYXJhY3Rlck9mVHlwZShpbnB1dCwgYmFzZSkpCisgICAgICAgICAgICByZXR1
cm4gQ2Fub25Ib3N0SW5mbzo6TkVVVFJBTDsKKworICAgICAgICAvLyBGaWxsIHRoZSBidWZmZXIs
IGlmIHRoZXJlJ3Mgc3BhY2UgcmVtYWluaW5nLiBUaGlzIGNoZWNrIGFsbG93cyB1cyB0bworICAg
ICAgICAvLyB2ZXJpZnkgdGhhdCBhbGwgY2hhcmFjdGVycyBhcmUgbnVtZXJpYywgZXZlbiB0aG9z
ZSB0aGF0IGRvbid0IGZpdC4KKyAgICAgICAgaWYgKGRlc3RJIDwga01heENvbXBvbmVudExlbikK
KyAgICAgICAgICAgIGJ1ZltkZXN0SSsrXSA9IGlucHV0OworICAgIH0KKworICAgIGJ1ZltkZXN0
SV0gPSAnXDAnOworCisgICAgLy8gVXNlIHRoZSA2NC1iaXQgc3RydG9pIHNvIHdlIGdldCBhIGJp
ZyBudW1iZXIgKG5vIGhleCwgZGVjaW1hbCwgb3Igb2N0YWwKKyAgICAvLyBudW1iZXIgY2FuIG92
ZXJmbG93IGEgNjQtYml0IG51bWJlciBpbiA8PSAxNiBjaGFyYWN0ZXJzKS4KKyAgICB1aW50NjRf
dCBudW0gPSBfc3RydG91aTY0KGJ1ZiwgMCwgYmFzZUZvclR5cGUoYmFzZSkpOworCisgICAgLy8g
Q2hlY2sgZm9yIDMyLWJpdCBvdmVyZmxvdy4KKyAgICBpZiAobnVtID4gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJP
S0VOOworCisgICAgLy8gTm8gb3ZlcmZsb3cuIFN1Y2Nlc3MhCisgICAgKm51bWJlciA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihudW0pOworICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpJUFY0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jv
b2wgRG9GaW5kSVB2NENvbXBvbmVudHMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQgY29tcG9uZW50c1s0XSkKK3sKKyAgICBp
ZiAoIWhvc3QuaXNOb25FbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQg
Y3VycmVudENvbXBvbmVudCA9IDA7IC8vIEluZGV4IG9mIHRoZSBjb21wb25lbnQgd2UncmUgd29y
a2luZyBvbi4KKyAgICBpbnQgY3VycmVudENvbXBvbmVudEJlZ2luID0gaG9zdC5iZWdpbigpOyAv
LyBTdGFydCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCisgICAgaW50IGVuZCA9IGhvc3QuZW5k
KCk7CisgICAgZm9yIChpbnQgaSA9IGhvc3QuYmVnaW4oKTsgLyogbm90aGluZyAqLzsgKytpKSB7
CisgICAgICAgIGlmIChpID49IGVuZCB8fCBzcGVjW2ldID09ICcuJykgeworICAgICAgICAgICAg
Ly8gRm91bmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCisgICAgICAgICAgICBp
bnQgY29tcG9uZW50TGVuZ3RoID0gaSAtIGN1cnJlbnRDb21wb25lbnRCZWdpbjsKKyAgICAgICAg
ICAgIGNvbXBvbmVudHNbY3VycmVudENvbXBvbmVudF0gPSBVUkxDb21wb25lbnQoY3VycmVudENv
bXBvbmVudEJlZ2luLCBjb21wb25lbnRMZW5ndGgpOworCisgICAgICAgICAgICAvLyBUaGUgbmV4
dCBjb21wb25lbnQgc3RhcnRzIGFmdGVyIHRoZSBkb3QuCisgICAgICAgICAgICBjdXJyZW50Q29t
cG9uZW50QmVnaW4gPSBpICsgMTsKKyAgICAgICAgICAgIGN1cnJlbnRDb21wb25lbnQrKzsKKwor
ICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZW1wdHkgY29tcG9uZW50cyAodHdvIGRvdHMgaW4g
YSByb3cpLCBleGNlcHQgd2UgbWF5CisgICAgICAgICAgICAvLyBhbGxvdyBhbiBlbXB0eSBjb21w
b25lbnQgYXQgdGhlIGVuZCAodGhpcyB3b3VsZCBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAgICAg
ICAgLy8gaW5wdXQgZW5kcyBpbiBhIGRvdCkuIFdlIGFsc28gd2FudCB0byBlcnJvciBpZiB0aGUg
Y29tcG9uZW50IGlzCisgICAgICAgICAgICAvLyBlbXB0eSBhbmQgaXQncyB0aGUgb25seSBjb21w
b25lbnQgKGN1cnJlbnRDb21wb25lbnQgPT0gMSkuCisgICAgICAgICAgICBpZiAoIWNvbXBvbmVu
dExlbmd0aCAmJiAoaSA8IGVuZCB8fCBjdXJyZW50Q29tcG9uZW50ID09IDEpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGkgPj0gZW5kKQorICAgICAg
ICAgICAgICAgIGJyZWFrOyAvLyBFbmQgb2YgdGhlIGlucHV0LgorCisgICAgICAgICAgICBpZiAo
Y3VycmVudENvbXBvbmVudCA9PSA0KSB7CisgICAgICAgICAgICAgICAgLy8gQW55dGhpbmcgZWxz
ZSBhZnRlciB0aGUgNHRoIGNvbXBvbmVudCBpcyBhbiBlcnJvciB1bmxlc3MgaXQgaXMgYQorICAg
ICAgICAgICAgICAgIC8vIGRvdCB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSB0cmVhdGVkIGFzIHRo
ZSBlbmQgb2YgaW5wdXQuCisgICAgICAgICAgICAgICAgaWYgKHNwZWNbaV0gPT0gJy4nICYmIGkg
KyAxID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRpY19j
YXN0PFVDSEFSPihzcGVjW2ldKSA+PSAweDgwIHx8ICFVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0
Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKKyAgICAgICAgICAg
IC8vIEludmFsaWQgY2hhcmFjdGVyIGZvciBhbiBJUHY0IGFkZHJlc3MuCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaWxsIGluIGFueSB1bnVz
ZWQgY29tcG9uZW50cy4KKyAgICB3aGlsZSAoY3VycmVudENvbXBvbmVudCA8IDQpCisgICAgICAg
IGNvbXBvbmVudHNbY3VycmVudENvbXBvbmVudCsrXSA9IFVSTENvbXBvbmVudCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBGaW5kSVB2NENvbXBvbmVudHMoY29uc3QgY2hh
ciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQgY29tcG9uZW50
c1s0XSkKK3sKKyAgICByZXR1cm4gRG9GaW5kSVB2NENvbXBvbmVudHM8Y2hhciwgdW5zaWduZWQg
Y2hhcj4oc3BlYywgaG9zdCwgY29tcG9uZW50cyk7Cit9CisKK3N0YXRpYyBib29sIEZpbmRJUHY0
Q29tcG9uZW50cyhjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBV
UkxDb21wb25lbnQgY29tcG9uZW50c1s0XSkKK3sKKyAgICByZXR1cm4gRG9GaW5kSVB2NENvbXBv
bmVudHM8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0LCBjb21wb25lbnRzKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQ0hBUj4KK0Nhbm9uSG9zdEluZm86OkZhbWlseSBEb0lQdjRBZGRyZXNzVG9O
dW1iZXIoY29uc3QgQ0hBUiogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogaXB2NENvbXBvbmVu
dHNDb3VudCkKK3sKKyAgICAvLyBUaGUgaWRlbnRpZmllZCBjb21wb25lbnRzLiBOb3QgYWxsIG1h
eSBleGlzdC4KKyAgICBVUkxDb21wb25lbnQgY29tcG9uZW50c1s0XTsKKyAgICBpZiAoIUZpbmRJ
UHY0Q29tcG9uZW50cyhzcGVjLCBob3N0LCBjb21wb25lbnRzKSkKKyAgICAgICAgcmV0dXJuIENh
bm9uSG9zdEluZm86Ok5FVVRSQUw7CisKKyAgICAvLyBDb252ZXJ0IGV4aXN0aW5nIGNvbXBvbmVu
dHMgdG8gZGlnaXRzLiBWYWx1ZXMgdXAgdG8KKyAgICAvLyB8ZXhpc3RpbmdDb21wb25lbnRzfCB3
aWxsIGJlIHZhbGlkLgorICAgIHVpbnQzMl90IGNvbXBvbmVudFZhbHVlc1s0XTsKKyAgICBpbnQg
ZXhpc3RpbmdDb21wb25lbnRzID0gMDsKKworICAgIC8vIFNldCB0byB0cnVlIGlmIG9uZSBvciBt
b3JlIGNvbXBvbmVudHMgYXJlIEJST0tFTi4gQlJPS0VOIGlzIG9ubHkKKyAgICAvLyByZXR1cm5l
ZCBpZiBhbGwgY29tcG9uZW50cyBhcmUgSVBWNCBvciBCUk9LRU4sIHNvLCBmb3IgZXhhbXBsZSwK
KyAgICAvLyAxMjM0NTY3ODkxMjM0NS5kZSByZXR1cm5zIE5FVVRSQUwgcmF0aGVyIHRoYW4gYnJv
a2VuLgorICAgIGJvb2wgYnJva2VuID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0
OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0ubGVuZ3RoKCkgPD0gMCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBDYW5vbkhvc3RJbmZvOjpGYW1pbHkgZmFtaWx5ID0g
SVB2NENvbXBvbmVudFRvTnVtYmVyKHNwZWMsIGNvbXBvbmVudHNbaV0sICZjb21wb25lbnRWYWx1
ZXNbZXhpc3RpbmdDb21wb25lbnRzXSk7CisKKyAgICAgICAgaWYgKGZhbWlseSA9PSBDYW5vbkhv
c3RJbmZvOjpCUk9LRU4pCisgICAgICAgICAgICBicm9rZW4gPSB0cnVlOworICAgICAgICBlbHNl
IGlmIChmYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6SVBWNCkgeworICAgICAgICAgICAgLy8gU3Rv
cCBpZiB3ZSBoaXQgYSBub24tQlJPS0VOIGludmFsaWQgbm9uLWVtcHR5IGNvbXBvbmVudC4KKyAg
ICAgICAgICAgIHJldHVybiBmYW1pbHk7CisgICAgICAgIH0KKworICAgICAgICBleGlzdGluZ0Nv
bXBvbmVudHMrKzsKKyAgICB9CisKKyAgICBpZiAoYnJva2VuKQorICAgICAgICByZXR1cm4gQ2Fu
b25Ib3N0SW5mbzo6QlJPS0VOOworCisgICAgLy8gVXNlIHRoYXQgc2VxdWVuY2Ugb2YgbnVtYmVy
cyB0byBmaWxsIG91dCB0aGUgNC1jb21wb25lbnQgSVAgYWRkcmVzcy4KKworICAgIC8vIEZpcnN0
LCBwcm9jZXNzIGFsbCBjb21wb25lbnRzIGJ1dCB0aGUgbGFzdCwgd2hpbGUgbWFraW5nIHN1cmUg
ZWFjaCBmaXRzCisgICAgLy8gd2l0aGluIGFuIDgtYml0IGZpZWxkLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZXhpc3RpbmdDb21wb25lbnRzIC0gMTsgaSsrKSB7CisgICAgICAgIGlmIChjb21w
b25lbnRWYWx1ZXNbaV0gPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSkKKyAg
ICAgICAgICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpCUk9LRU47CisgICAgICAgIGFkZHJlc3Nb
aV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjb21wb25lbnRWYWx1ZXNbaV0pOworICAg
IH0KKworICAgIC8vIE5leHQsIGNvbnN1bWUgdGhlIGxhc3QgY29tcG9uZW50IHRvIGZpbGwgaW4g
dGhlIHJlbWFpbmluZyBieXRlcy4KKyAgICB1aW50MzJfdCBsYXN0VmFsdWUgPSBjb21wb25lbnRW
YWx1ZXNbZXhpc3RpbmdDb21wb25lbnRzIC0gMV07CisgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0g
ZXhpc3RpbmdDb21wb25lbnRzIC0gMTsgaS0tKSB7CisgICAgICAgIGFkZHJlc3NbaV0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsYXN0VmFsdWUpOworICAgICAgICBsYXN0VmFsdWUgPj49
IDg7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGxhc3QgY29tcG9uZW50IGhhcyByZXNpZHVhbCBi
aXRzLCByZXBvcnQgb3ZlcmZsb3cuCisgICAgaWYgKGxhc3RWYWx1ZSkKKyAgICAgICAgcmV0dXJu
IENhbm9uSG9zdEluZm86OkJST0tFTjsKKworICAgIC8vIFRlbGwgdGhlIGNhbGxlciBob3cgbWFu
eSBjb21wb25lbnRzIHdlIHNhdy4KKyAgICAqaXB2NENvbXBvbmVudHNDb3VudCA9IGV4aXN0aW5n
Q29tcG9uZW50czsKKworICAgIC8vIFN1Y2Nlc3MhCisgICAgcmV0dXJuIENhbm9uSG9zdEluZm86
OklQVjQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRJUHY0QWRkcmVzcyhjb25zdCB1
bnNpZ25lZCBjaGFyIGFkZHJlc3NbNF0sIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIGNoYXIgYnVmZmVyWzE2XTsK
KyAgICAgICAgX2l0b2FfcyhhZGRyZXNzW2ldLCBidWZmZXIsIDEwKTsKKworICAgICAgICBmb3Ig
KGludCBjaCA9IDA7IGJ1ZmZlcltjaF07IGNoKyspCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KGJ1ZmZlcltjaF0pOworCisgICAgICAgIGlmIChpICE9IDMpCisgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCcuJyk7CisgICAgfQorfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBtYWRlIGEg
ZmluYWwgSVBWNC9CUk9LRU4gZGVjaXNpb24sIGZhbHNlIGlmIHRoZSByZXN1bHQKKy8vIGlzIE5F
VVRSQUwsIGFuZCB3ZSBjb3VsZCB1c2UgYSBzZWNvbmQgb3Bpbmlvbi4KK3RlbXBsYXRlPHR5cGVu
YW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZUlQdjRBZGRyZXNz
KGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbm9u
SG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBEb0lQdjRBZGRy
ZXNzVG9OdW1iZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGVjLCBob3N0LCBob3N0SW5mby0+YWRkcmVzcywgJmhvc3RJbmZvLT5pcHY0Q29tcG9uZW50
c0NvdW50KTsKKworICAgIHN3aXRjaCAoaG9zdEluZm8tPmZhbWlseSkgeworICAgIGNhc2UgQ2Fu
b25Ib3N0SW5mbzo6SVBWNDoKKyAgICAgICAgLy8gRGVmaW5pdGVseSBhbiBJUHY0IGFkZHJlc3Mu
CisgICAgICAgIGhvc3RJbmZvLT5vdXB1dEhvc3Quc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsK
KyAgICAgICAgYXBwZW5kSVB2NEFkZHJlc3MoaG9zdEluZm8tPmFkZHJlc3MsIG91dHB1dCk7Cisg
ICAgICAgIGhvc3RJbmZvLT5vdXB1dEhvc3Quc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIGhv
c3RJbmZvLT5vdXB1dEhvc3QuYmVnaW4oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOgorICAgICAgICAvLyBEZWZpbml0ZWx5IGJyb2tlbi4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gQ291bGQgYmUg
SVB2NiBvciBhIGhvc3RuYW1lLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisv
LyBIZWxwZXIgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIG1haW4gY29tcG9uZW50cyBvZiBhbiBJ
UHY2IGlucHV0IHN0cmluZy4KKy8vIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIHRvIHVuZGVy
c3RhbmQgaG93IGl0IGJyZWFrcyB1cCBhbiBpbnB1dCBzdHJpbmc6CisvLworLy8gW0V4YW1wbGUg
MV06IGlucHV0ID0gIls6OmFhOmJiXSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9IDIKKy8v
ICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgzLDIpICJhYSIKKy8vICA9PT4gaGV4
Q29tcG9uZW50c1sxXSA9IENvbXBvbmVudCg2LDIpICJiYiIKKy8vICA9PT4gaW5kZXhPZkNvbnRy
YWN0aW9uID0gMAorLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQorLy8K
Ky8vIFtFeGFtcGxlIDJdOiBpbnB1dCA9ICJbMToyOjozOjQ6NV0iCisvLyAgPT0+IG51bUhleENv
bXBvbmVudHMgPSA1CisvLyAgPT0+IGhleENvbXBvbmVudHNbMF0gPSBDb21wb25lbnQoMSwxKSAi
MSIKKy8vICA9PT4gaGV4Q29tcG9uZW50c1sxXSA9IENvbXBvbmVudCgzLDEpICIyIgorLy8gID09
PiBoZXhDb21wb25lbnRzWzJdID0gQ29tcG9uZW50KDYsMSkgIjMiCisvLyAgPT0+IGhleENvbXBv
bmVudHNbM10gPSBDb21wb25lbnQoOCwxKSAiNCIKKy8vICA9PT4gaGV4Q29tcG9uZW50c1s0XSA9
IENvbXBvbmVudCgxMCwxKSAiNSIKKy8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9uID0gMgorLy8g
ID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQorLy8KKy8vIFtFeGFtcGxlIDNd
OiBpbnB1dCA9ICJbOjpmZmZmOjE5Mi4xNjguMC4xXSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50
cyA9IDEKKy8vICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgzLDQpICJmZmZmIgor
Ly8gID09PiBpbmRleE9mQ29udHJhY3Rpb24gPSAwCisvLyAgPT0+IGlwdjRDb21wb25lbnQgPSBD
b21wb25lbnQoOCwgMTEpICIxOTIuMTY4LjAuMSIKKy8vCisvLyBbRXhhbXBsZSA0XTogaW5wdXQg
PSAiWzE6Ol0iCisvLyAgPT0+IG51bUhleENvbXBvbmVudHMgPSAxCisvLyAgPT0+IGhleENvbXBv
bmVudHNbMF0gPSBDb21wb25lbnQoMSwxKSAiMSIKKy8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9u
ID0gMQorLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQorLy8KKy8vIFtF
eGFtcGxlIDVdOiBpbnB1dCA9ICJbOjoxOTIuMTY4LjAuMV0iCisvLyAgPT0+IG51bUhleENvbXBv
bmVudHMgPSAwCisvLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDAKKy8vICA9PT4gaXB2NENv
bXBvbmVudCA9IENvbXBvbmVudCg4LCAxMSkgIjE5Mi4xNjguMC4xIgorLy8KK3N0cnVjdCBJUHY2
UGFyc2VkIHsKKyAgICAvLyBaZXJvLW91dCB0aGUgcGFyc2UgaW5mb3JtYXRpb24uCisgICAgdm9p
ZCByZXNldCgpCisgICAgeworICAgICAgICBudW1IZXhDb21wb25lbnRzID0gMDsKKyAgICAgICAg
aW5kZXhPZkNvbnRyYWN0aW9uID0gLTE7CisgICAgICAgIGlwdjRDb21wb25lbnQucmVzZXQoKTsK
KyAgICB9CisKKyAgICAvLyBUaGVyZSBjYW4gYmUgdXAgdG8gOCBoZXggY29tcG9uZW50cyAoY29s
b24gc2VwYXJhdGVkKSBpbiB0aGUgbGl0ZXJhbC4KKyAgICBVUkxDb21wb25lbnQgaGV4Q29tcG9u
ZW50c1s4XTsKKworICAgIC8vIFRoZSBjb3VudCBvZiBoZXggY29tcG9uZW50cyBwcmVzZW50LiBS
YW5nZXMgZnJvbSBbMCw4XS4KKyAgICBpbnQgbnVtSGV4Q29tcG9uZW50czsKKworICAgIC8vIFRo
ZSBpbmRleCBvZiB0aGUgaGV4IGNvbXBvbmVudCB0aGF0IHRoZSAiOjoiIGNvbnRyYWN0aW9uIHBy
ZWNlZGVzLCBvcgorICAgIC8vIC0xIGlmIHRoZXJlIGlzIG5vIGNvbnRyYWN0aW9uLgorICAgIGlu
dCBpbmRleE9mQ29udHJhY3Rpb247CisKKyAgICAvLyBUaGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3
aGljaCBhcmUgYW4gSVB2NCBsaXRlcmFsLgorICAgIFVSTENvbXBvbmVudCBpcHY0Q29tcG9uZW50
OworfTsKKworLy8gUGFyc2UgdGhlIElQdjYgaW5wdXQgc3RyaW5nLiBJZiBwYXJzaW5nIHN1Y2Nl
ZWRlZCByZXR1cm5zIHRydWUgYW5kIGZpbGxzCisvLyB8cGFyc2VkfCB3aXRoIHRoZSBpbmZvcm1h
dGlvbi4gSWYgcGFyc2luZyBmYWlsZWQgKGJlY2F1c2UgdGhlIGlucHV0IGlzCisvLyBpbnZhbGlk
KSByZXR1cm5zIGZhbHNlLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+
Citib29sIERvUGFyc2VJUHY2KGNvbnN0IENIQVIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
aG9zdCwgSVB2NlBhcnNlZCogcGFyc2VkKQoreworICAgIC8vIFplcm8tb3V0IHRoZSBpbmZvLgor
ICAgIHBhcnNlZC0+cmVzZXQoKTsKKworICAgIGlmICghaG9zdC5pc05vbkVtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBpbmRleCBmb3Igc3RhcnQgYW5kIGVuZCBv
ZiBhZGRyZXNzIHJhbmdlIChubyBicmFja2V0cykuCisgICAgaW50IGJlZ2luID0gaG9zdC5iZWdp
bigpOworICAgIGludCBlbmQgPSBob3N0LmVuZCgpOworCisgICAgaW50IGN1cnJlbnRDb21wb25l
bnRCZWdpbiA9IGJlZ2luOyAvLyBTdGFydCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCisKKyAg
ICAvLyBTY2FuIHRocm91Z2ggdGhlIGlucHV0LCBzZWFyY2hpbmcgZm9yIGhleCBjb21wb25lbnRz
LCAiOjoiIGNvbnRyYWN0aW9ucywKKyAgICAvLyBhbmQgSVB2NCBjb21wb25lbnRzLgorICAgIGZv
ciAoaW50IGkgPSBiZWdpbjsgLyogaSA8PSBlbmQgKi87IGkrKykgeworICAgICAgICBib29sIGlz
Q29sb24gPSBzcGVjW2ldID09ICc6JzsKKyAgICAgICAgYm9vbCBpc0NvbnRyYWN0aW9uID0gaXND
b2xvbiAmJiBpIDwgZW5kIC0gMSAmJiBzcGVjW2kgKyAxXSA9PSAnOic7CisKKyAgICAgICAgLy8g
V2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpZiB3ZSBlbmNvdW50
ZXIgYSBjb2xvbgorICAgICAgICAvLyAoc2VwYXJhdG9yIGJldHdlZW4gaGV4IGNvbXBvbmVudHMs
IG9yIHN0YXJ0IG9mIGEgY29udHJhY3Rpb24pLCBvciBlbmQgb2YKKyAgICAgICAgLy8gaW5wdXQu
CisgICAgICAgIGlmIChpc0NvbG9uIHx8IGkgPT0gZW5kKSB7CisgICAgICAgICAgICBpbnQgY29t
cG9uZW50TGVuZ3RoID0gaSAtIGN1cnJlbnRDb21wb25lbnRCZWdpbjsKKworICAgICAgICAgICAg
Ly8gQSBjb21wb25lbnQgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiA0IGhleCBkaWdpdHMuCisg
ICAgICAgICAgICBpZiAoY29tcG9uZW50TGVuZ3RoID4gNCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGVtcHR5IGNvbXBvbmVudHMu
CisgICAgICAgICAgICBpZiAoIWNvbXBvbmVudExlbmd0aCkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBleGNlcHRpb24gaXMgd2hlbiBjb250cmFjdGlvbnMgYXBwZWFyIGF0IGJlZ2lubmluZyBv
ZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBpbnB1dCBvciBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1
dC4KKyAgICAgICAgICAgICAgICBpZiAoISgoaXNDb250cmFjdGlvbiAmJiBpID09IGJlZ2luKSB8
fCAoaSA9PSBlbmQgJiYgcGFyc2VkLT5pbmRleE9mQ29udHJhY3Rpb24gPT0gcGFyc2VkLT5udW1I
ZXhDb21wb25lbnRzKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRoZSBoZXggY29tcG9uZW50IHdlIGp1c3Qg
Zm91bmQgdG8gcnVubmluZyBsaXN0LgorICAgICAgICAgICAgaWYgKGNvbXBvbmVudExlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCBoYXZlIG1vcmUgdGhhbiA4IGNvbXBvbmVu
dHMhCisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZC0+bnVtSGV4Q29tcG9uZW50cyA+PSA4KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBwYXJz
ZWQtPmhleENvbXBvbmVudHNbcGFyc2VkLT5udW1IZXhDb21wb25lbnRzKytdID0KKyAgICAgICAg
ICAgICAgICBVUkxDb21wb25lbnQoY3VycmVudENvbXBvbmVudEJlZ2luLCBjb21wb25lbnRMZW5n
dGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPT0gZW5kKQor
ICAgICAgICAgICAgYnJlYWs7IC8vIFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIERPTkUu
CisKKyAgICAgICAgLy8gV2UgZm91bmQgYSAiOjoiIGNvbnRyYWN0aW9uLgorICAgICAgICBpZiAo
aXNDb250cmFjdGlvbikgeworICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGF0IG1vc3Qgb25l
IGNvbnRyYWN0aW9uIGluIHRoZSBsaXRlcmFsLgorICAgICAgICAgICAgaWYgKHBhcnNlZC0+aW5k
ZXhPZkNvbnRyYWN0aW9uICE9IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHBhcnNlZC0+aW5kZXhPZkNvbnRyYWN0aW9uID0gcGFyc2VkLT5udW1IZXhDb21w
b25lbnRzOworICAgICAgICAgICAgKytpOyAvLyBDb25zdW1lIHRoZSBjb2xvbiB3ZSBwZWVrZWQu
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNDb2xvbikgeworICAgICAgICAgICAgLy8gQ29s
b25zIGFyZSBzZXBhcmF0b3JzIGJldHdlZW4gY29tcG9uZW50cywga2VlcCB0cmFjayBvZiB3aGVy
ZSB0aGUKKyAgICAgICAgICAgIC8vIGN1cnJlbnQgY29tcG9uZW50IHN0YXJ0ZWQgKGFmdGVyIHRo
aXMgY29sb24pLgorICAgICAgICAgICAgY3VycmVudENvbXBvbmVudEJlZ2luID0gaSArIDE7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNb
aV0pID49IDB4ODApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgQVNDSUku
CisKKyAgICAgICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzSGV4Q2hhcihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBSZWd1
bGFyIGNvbXBvbmVudHMgYXJlIGhleCBudW1iZXJzLiBJdCBpcyBhbHNvIHBvc3NpYmxlIGZvcgor
ICAgICAgICAgICAgICAgIC8vIGEgY29tcG9uZW50IHRvIGJlIGFuIElQdjQgYWRkcmVzcyBpbiBk
b3R0ZWQgZm9ybS4KKyAgICAgICAgICAgICAgICBpZiAoVVJMQ2hhcmFjdGVyVHlwZXM6OmlzSVB2
NENoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFNpbmNlIElQdjQgYWRkcmVzcyBjYW4gb25seSBhcHBlYXIgYXQgdGhlIGVu
ZCwgYXNzdW1lIHRoZSByZXN0CisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzdHJpbmcg
aXMgYW4gSVB2NCBhZGRyZXNzLiAoV2Ugd2lsbCBwYXJzZSB0aGlzIHNlcGFyYXRlbHkKKyAgICAg
ICAgICAgICAgICAgICAgLy8gbGF0ZXIpLgorICAgICAgICAgICAgICAgICAgICBwYXJzZWQtPmlw
djRDb21wb25lbnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjdXJyZW50Q29tcG9uZW50QmVn
aW4sIGVuZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIHdhcyBuZWl0aGVyIGEgaGV4IGRpZ2l0
LCBub3IgYW4gSVB2NCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIFZlcmlmaWVzIHRoZSBwYXJzZWQgSVB2NiBpbmZvcm1hdGlvbiwgY2hlY2tpbmcgdGhhdCB0
aGUgdmFyaW91cyBjb21wb25lbnRzCisvLyBhZGQgdXAgdG8gdGhlIHJpZ2h0IG51bWJlciBvZiBi
aXRzIChoZXggY29tcG9uZW50cyBhcmUgMTYgYml0cywgd2hpbGUKKy8vIGVtYmVkZGVkIElQdjQg
Zm9ybWF0cyBhcmUgMzIgYml0cywgYW5kIGNvbnRyYWN0aW9ucyBhcmUgcGxhY2Vob2xkZXMgZm9y
CisvLyAxNiBvciBtb3JlIGJpdHMpLiBSZXR1cm5zIHRydWUgaWYgc2l6ZXMgbWF0Y2ggdXAsIGZh
bHNlIG90aGVyd2lzZS4gT24KKy8vIHN1Y2Nlc3Mgd3JpdGVzIHRoZSBsZW5ndGggb2YgdGhlIGNv
bnRyYWN0aW9uIChpZiBhbnkpIHRvCisvLyB8b3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9ufC4KK2Jv
b2wgQ2hlY2tJUHY2Q29tcG9uZW50c1NpemUoY29uc3QgSVB2NlBhcnNlZCYgcGFyc2VkLCBpbnQq
IG91dE51bUJ5dGVzT2ZDb250cmFjdGlvbikKK3sKKyAgICAvLyBFYWNoIGdyb3VwIG9mIGZvdXIg
aGV4IGRpZ2l0cyBjb250cmlidXRlcyAxNiBiaXRzLgorICAgIGludCBudW1CeXRlc1dpdGhvdXRD
b250cmFjdGlvbiA9IHBhcnNlZC5udW1IZXhDb21wb25lbnRzICogMjsKKworICAgIC8vIElmIGFu
IElQdjQgYWRkcmVzcyB3YXMgZW1iZWRkZWQgYXQgdGhlIGVuZCwgaXQgY29udHJpYnV0ZXMgMzIg
Yml0cy4KKyAgICBpZiAocGFyc2VkLmlwdjRDb21wb25lbnQuaXNWYWxpZCgpKQorICAgICAgICBu
dW1CeXRlc1dpdGhvdXRDb250cmFjdGlvbiArPSA0OworCisgICAgLy8gSWYgdGhlcmUgd2FzIGEg
Ijo6IiBjb250cmFjdGlvbiwgaXRzIHNpemUgaXMgZ29pbmcgdG8gYmU6CisgICAgLy8gTUFYKFsx
NmJpdHNdLCBbMTI4Yml0c10gLSBudW1CeXRlc1dpdGhvdXRDb250cmFjdGlvbikuCisgICAgaW50
IG51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IDA7CisgICAgaWYgKHBhcnNlZC5pbmRleE9mQ29udHJh
Y3Rpb24gIT0gLTEpIHsKKyAgICAgICAgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0gMTYgLSBudW1C
eXRlc1dpdGhvdXRDb250cmFjdGlvbjsKKyAgICAgICAgaWYgKG51bUJ5dGVzT2ZDb250cmFjdGlv
biA8IDIpCisgICAgICAgICAgICBudW1CeXRlc09mQ29udHJhY3Rpb24gPSAyOworICAgIH0KKwor
ICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlcnMgYWRkIHVwLgorICAgIGlmIChudW1CeXRlc1dp
dGhvdXRDb250cmFjdGlvbiArIG51bUJ5dGVzT2ZDb250cmFjdGlvbiAhPSAxNikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgKm91dE51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IG51bUJ5dGVz
T2ZDb250cmFjdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ29udmVydHMgYSBoZXgg
Y29tb25lbnQgaW50byBhIG51bWJlci4gVGhpcyBjYW5ub3QgZmFpbCBzaW5jZSB0aGUgY2FsbGVy
IGhhcworLy8gYWxyZWFkeSB2ZXJpZmllZCB0aGF0IGVhY2ggY2hhcmFjdGVyIGluIHRoZSBzdHJp
bmcgd2FzIGEgaGV4IGRpZ2l0LCBhbmQKKy8vIHRoYXQgdGhlcmUgd2VyZSBubyBtb3JlIHRoYW4g
NCBjaGFyYWN0ZXJzLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3VpbnQxNl90
IElQdjZIZXhDb21wb25lbnRUb051bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIGNvbXBvbmVudCkKK3sKKyAgICBBU1NFUlQoY29tcG9uZW50Lmxlbmd0
aCgpIDw9IDQpOworCisgICAgLy8gQ29weSB0aGUgaGV4IHN0cmluZyBpbnRvIGEgQy1zdHJpbmcu
CisgICAgY2hhciBidWZbNV07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgYnVmW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tjb21w
b25lbnQuYmVnaW4oKSArIGldKTsKKyAgICBidWZbY29tcG9uZW50Lmxlbmd0aCgpXSA9ICdcMCc7
CisKKyAgICAvLyBDb252ZXJ0IGl0IHRvIGEgbnVtYmVyIChvdmVyZmxvdyBpcyBub3QgcG9zc2li
bGUsIHNpbmNlIHdpdGggNCBoZXgKKyAgICAvLyBjaGFyYWN0ZXJzIHdlIGNhbiBhdCBtb3N0IGhh
dmUgYSAxNiBiaXQgbnVtYmVyKS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KF9z
dHJ0b3VpNjQoYnVmLCAwLCAxNikpOworfQorCisvLyBDb252ZXJ0cyBhbiBJUHY2IGFkZHJlc3Mg
dG8gYSAxMjgtYml0IG51bWJlciAobmV0d29yayBieXRlIG9yZGVyKSwgcmV0dXJuaW5nCisvLyB0
cnVlIG9uIHN1Y2Nlc3MuIEZhbHNlIG1lYW5zIHRoYXQgdGhlIGlucHV0IHdhcyBub3QgYSB2YWxp
ZCBJUHY2IGFkZHJlc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4K
K2Jvb2wgRG9JUHY2QWRkcmVzc1RvTnVtYmVyKGNvbnN0IENIQVIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdKQoreworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgY29tcG9uZW50IGlzIGJvdW5kZWQgYnkgJ1snIGFuZCAnXScuCisgICAgaW50IGVu
ZCA9IGhvc3QuZW5kKCk7CisgICAgaWYgKCFob3N0LmlzTm9uRW1wdHkoKSB8fCBzcGVjW2hvc3Qu
YmVnaW4oKV0gIT0gJ1snIHx8IHNwZWNbZW5kIC0gMV0gIT0gJ10nKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBFeGNsdWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCisgICAgVVJMQ29t
cG9uZW50IGlwdjZDb21wb25lbnQoaG9zdC5iZWdpbigpICsgMSwgaG9zdC5sZW5ndGgoKSAtIDIp
OworCisgICAgLy8gUGFyc2UgdGhlIElQdjYgYWRkcmVzcyAtLSBpZGVudGlmeSB3aGVyZSBhbGwg
dGhlIGNvbG9uIHNlcGFyYXRlZCBoZXgKKyAgICAvLyBjb21wb25lbnRzIGFyZSwgdGhlICI6OiIg
Y29udHJhY3Rpb24sIGFuZCB0aGUgZW1iZWRkZWQgSVB2NCBhZGRyZXNzLgorICAgIElQdjZQYXJz
ZWQgaXB2NlBhcnNlZDsKKyAgICBpZiAoIURvUGFyc2VJUHY2PENIQVIsIFVDSEFSPihzcGVjLCBp
cHY2Q29tcG9uZW50LCAmaXB2NlBhcnNlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIERvIHNvbWUgYmFzaWMgc2l6ZSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJl
c3MgZG9lc24ndAorICAgIC8vIHNwZWNpZnkgbW9yZSB0aGFuIDEyOCBiaXRzIG9yIGZld2VyIHRo
YW4gMTI4IGJpdHMuIFRoaXMgYWxzbyByZXNvbHZlcworICAgIC8vIGhvdyBtYXkgemVybyBieXRl
cyB0aGUgIjo6IiBjb250cmFjdGlvbiByZXByZXNlbnRzLgorICAgIGludCBudW1CeXRlc09mQ29u
dHJhY3Rpb247CisgICAgaWYgKCFDaGVja0lQdjZDb21wb25lbnRzU2l6ZShpcHY2UGFyc2VkLCAm
bnVtQnl0ZXNPZkNvbnRyYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50
IGN1cnJlbnRJbmRleEluQWRkcmVzcyA9IDA7CisKKyAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBo
ZXggY29tcG9uZW50cywgYW5kIGNvbnRyYWN0aW9uIGluIG9yZGVyLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IGlwdjZQYXJzZWQubnVtSGV4Q29tcG9uZW50czsgKytpKSB7CisgICAgICAgIC8v
IEFwcGVuZCB0aGUgY29udHJhY3Rpb24gaWYgaXQgYXBwZWFycyBiZWZvcmUgdGhpcyBjb21wb25l
bnQuCisgICAgICAgIGlmIChpID09IGlwdjZQYXJzZWQuaW5kZXhPZkNvbnRyYWN0aW9uKSB7Cisg
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bUJ5dGVzT2ZDb250cmFjdGlvbjsgKytq
KQorICAgICAgICAgICAgICAgIGFkZHJlc3NbY3VycmVudEluZGV4SW5BZGRyZXNzKytdID0gMDsK
KyAgICAgICAgfQorICAgICAgICAvLyBBcHBlbmQgdGhlIGhleCBjb21wb25lbnQncyB2YWx1ZS4K
KyAgICAgICAgaWYgKGkgIT0gaXB2NlBhcnNlZC5udW1IZXhDb21wb25lbnRzKSB7CisgICAgICAg
ICAgICAvLyBHZXQgdGhlIDE2LWJpdCB2YWx1ZSBmb3IgdGhpcyBoZXggY29tcG9uZW50LgorICAg
ICAgICAgICAgdWludDE2X3QgbnVtYmVyID0gSVB2NkhleENvbXBvbmVudFRvTnVtYmVyPENIQVI+
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwZWMsIGlwdjZQYXJzZWQuaGV4Q29tcG9uZW50c1tpXSk7CisgICAgICAgICAgICAv
LyBBcHBlbmQgdG8gfGFkZHJlc3N8LCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgICAgICAgICAg
ICBhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzcysrXSA9IChudW1iZXIgJiAweEZGMDApID4+
IDg7CisgICAgICAgICAgICBhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzcysrXSA9IChudW1i
ZXIgJiAweDAwRkYpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgd2FzIGFu
IElQdjQgc2VjdGlvbiwgY29udmVydCBpdCBpbnRvIGEgMzItYml0IG51bWJlciBhbmQgYXBwZW5k
CisgICAgLy8gaXQgdG8gfGFkZHJlc3N8LgorICAgIGlmIChpcHY2UGFyc2VkLmlwdjRDb21wb25l
bnQuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEFwcGVuZCB0aGUgMzItYml0IG51bWJlciB0byB8
YWRkcmVzc3wuCisgICAgICAgIGludCBpZ25vcmVkSVB2NENvbXBvbmVudHNDb3VudDsKKyAgICAg
ICAgaWYgKENhbm9uSG9zdEluZm86OklQVjQgIT0KKyAgICAgICAgICAgIERvSVB2NEFkZHJlc3NU
b051bWJlcihzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZQYXJz
ZWQuaXB2NENvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRk
cmVzc1tjdXJyZW50SW5kZXhJbkFkZHJlc3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZpZ25vcmVkSVB2NENvbXBvbmVudHNDb3VudCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFNlYXJjaGVzIGZvciB0
aGUgbG9uZ2VzdCBzZXF1ZW5jZSBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wsIGFuZCB3cml0ZXMgdGhl
CisvLyByYW5nZSBpbnRvIHxjb250cmFjdGlvblJhbmdlfC4gVGhlIHJ1biBvZiB6ZXJvcyBtdXN0
IGJlIGF0IGxlYXN0IDE2IGJpdHMsCisvLyBhbmQgaWYgdGhlcmUgaXMgYSB0aWUgdGhlIGZpcnN0
IGlzIGNob3Nlbi4KK3ZvaWQgQ2hvb3NlSVB2NkNvbnRyYWN0aW9uUmFuZ2UoY29uc3QgdW5zaWdu
ZWQgY2hhciBhZGRyZXNzWzE2XSwgVVJMQ29tcG9uZW50KiBjb250cmFjdGlvblJhbmdlKQorewor
ICAgIC8vIFRoZSBsb25nZXN0IHJ1biBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wgc2VlbiBzbyBmYXIu
CisgICAgVVJMQ29tcG9uZW50IG1heFJhbmdlOworCisgICAgLy8gVGhlIGN1cnJlbnQgcnVuIG9m
IHplcm9zIGluIHxhZGRyZXNzfCBiZWluZyBpdGVyYXRlZCBvdmVyLgorICAgIFVSTENvbXBvbmVu
dCBjdXJyZW50UmFuZ2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICs9IDIpIHsK
KyAgICAgICAgLy8gVGVzdCBmb3IgMTYgYml0cyB3b3J0aCBvZiB6ZXJvLgorICAgICAgICBib29s
IGlzWmVybyA9ICghYWRkcmVzc1tpXSAmJiAhYWRkcmVzc1tpICsgMV0pOworCisgICAgICAgIGlm
IChpc1plcm8pIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgemVybyB0byB0aGUgY3VycmVudCBy
YW5nZSAob3Igc3RhcnQgYSBuZXcgb25lKS4KKyAgICAgICAgICAgIGlmICghY3VycmVudFJhbmdl
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSBVUkxDb21wb25lbnQo
aSwgMCk7CisgICAgICAgICAgICBjdXJyZW50UmFuZ2Uuc2V0TGVuZ3RoKGN1cnJlbnRSYW5nZS5s
ZW5ndGgoKSArIDIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc1plcm8gfHwgaSA9PSAx
NCkgeworICAgICAgICAgICAgLy8gSnVzdCBjb21wbGV0ZWQgYSBydW4gb2YgemVyb3MuIElmIHRo
ZSBydW4gaXMgZ3JlYXRlciB0aGFuIDE2IGJpdHMsCisgICAgICAgICAgICAvLyBpdCBpcyBhIGNh
bmRpZGF0ZSBmb3IgdGhlIGNvbnRyYWN0aW9uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRSYW5n
ZS5sZW5ndGgoKSA+IDIgJiYgY3VycmVudFJhbmdlLmxlbmd0aCgpID4gbWF4UmFuZ2UubGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgbWF4UmFuZ2UgPSBjdXJyZW50UmFuZ2U7CisKKyAgICAgICAg
ICAgIGN1cnJlbnRSYW5nZS5yZXNldCgpOworICAgICAgICB9CisgICAgfQorICAgICpjb250cmFj
dGlvblJhbmdlID0gbWF4UmFuZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRJUHY2
QWRkcmVzcyhjb25zdCB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCkKK3sKKyAgICAvLyBXZSB3aWxsIG91dHB1dCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcg
dG8gdGhlIHJ1bGVzIGluOgorICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0
LWthd2FtdXJhLWlwdjYtdGV4dC1yZXByZXNlbnRhdGlvbi0wMSNzZWN0aW9uLTQKKworICAgIC8v
IFN0YXJ0IGJ5IGZpbmRpbmcgd2hlcmUgdG8gcGxhY2UgdGhlICI6OiIgY29udHJhY3Rpb24gKGlm
IGFueSkuCisgICAgVVJMQ29tcG9uZW50IGNvbnRyYWN0aW9uUmFuZ2U7CisgICAgQ2hvb3NlSVB2
NkNvbnRyYWN0aW9uUmFuZ2UoYWRkcmVzcywgJmNvbnRyYWN0aW9uUmFuZ2UpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gMTQ7KSB7CisgICAgICAgIC8vIFdlIGNoZWNrIDIgYnl0ZXMgYXQg
YSB0aW1lLCBmcm9tIGJ5dGVzICgwLCAxKSB0byAoMTQsIDE1KSwgaW5jbHVzaXZlLgorICAgICAg
ICBBU1NFUlQoIShpICUgMikpOworICAgICAgICBpZiAoaSA9PSBjb250cmFjdGlvblJhbmdlLmJl
Z2luKCkgJiYgY29udHJhY3Rpb25SYW5nZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIC8v
IEp1bXAgb3ZlciB0aGUgY29udHJhY3Rpb24uCisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgn
OicpOworICAgICAgICAgICAgaSA9IGNvbnRyYWN0aW9uUmFuZ2UuZW5kKCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBDb25zdW1lIHRoZSBuZXh0IDE2IGJpdHMgZnJvbSB8YWRk
cmVzc3wuCisgICAgICAgICAgICBpbnQgeCA9IGFkZHJlc3NbaV0gPDwgOCB8IGFkZHJlc3NbaSAr
IDFdOworCisgICAgICAgICAgICBpICs9IDI7CisKKyAgICAgICAgICAgIC8vIFN0cmluZ2lmeSB0
aGUgMTYgYml0IG51bWJlciAoYXQgbW9zdCByZXF1aXJlcyA0IGhleCBkaWdpdHMpLgorICAgICAg
ICAgICAgY2hhciBzdHJbNV07CisgICAgICAgICAgICBfaXRvYV9zKHgsIHN0ciwgMTYpOworICAg
ICAgICAgICAgZm9yIChpbnQgY2ggPSAwOyBzdHJbY2hdOyArK2NoKQorICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoc3RyW2NoXSk7CisKKyAgICAgICAgICAgIC8vIFB1dCBhIGNvbG9uIGFm
dGVyIGVhY2ggbnVtYmVyLCBleGNlcHQgdGhlIGxhc3QuCisgICAgICAgICAgICBpZiAoaSA8IDE2
KQorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJzonKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgbWFkZSBhIGZpbmFsIElQVjYvQlJPS0VOIGRl
Y2lzaW9uLCBmYWxzZSBpZiB0aGUgcmVzdWx0CisvLyBpcyBORVVUUkFMLCBhbmQgd2UgY291bGQg
dXNlIGEgc2Vjb25kIG9waW5pb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBV
Q0hBUj4KK2Jvb2wgRG9DYW5vbmljYWxpemVJUHY2QWRkcmVzcyhjb25zdCBDSEFSKiBzcGVjLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5vbkhvc3RJbmZvKiBob3N0SW5mbykK
K3sKKyAgICAvLyBUdXJuIHRoZSBJUCBhZGRyZXNzIGludG8gYSAxMjggYml0IG51bWJlci4KKyAg
ICBpZiAoIURvSVB2NkFkZHJlc3NUb051bWJlcjxDSEFSLCBVQ0hBUj4oc3BlYywgaG9zdCwgaG9z
dEluZm8tPmFkZHJlc3MpKSB7CisgICAgICAgIC8vIElmIGl0J3Mgbm90IGFuIElQdjYgYWRkcmVz
cywgc2NhbiBmb3IgY2hhcmFjdGVycyB0aGF0IHNob3VsZCAqb25seSoKKyAgICAgICAgLy8gZXhp
c3QgaW4gYW4gSVB2NiBhZGRyZXNzLgorICAgICAgICBmb3IgKGludCBpID0gaG9zdC5iZWdpbigp
OyBpIDwgaG9zdC5lbmQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsK
KyAgICAgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAg
ICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBob3N0SW5mby0+ZmFtaWx5ID0gQ2Fub25Ib3N0
SW5mbzo6QlJPS0VOOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gaW52YWxpZCBjaGFyYWN0ZXJzLiBDb3VsZCBz
dGlsbCBiZSBJUHY0IG9yIGEgaG9zdG5hbWUuCisgICAgICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBD
YW5vbkhvc3RJbmZvOjpORVVUUkFMOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaG9zdEluZm8tPm91cHV0SG9zdC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIG91
dHB1dC5hcHBlbmQoJ1snKTsKKyAgICBhcHBlbmRJUHY2QWRkcmVzcyhob3N0SW5mby0+YWRkcmVz
cywgb3V0cHV0KTsKKyAgICBvdXRwdXQuYXBwZW5kKCddJyk7CisgICAgaG9zdEluZm8tPm91cHV0
SG9zdC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gaG9zdEluZm8tPm91cHV0SG9zdC5iZWdp
bigpKTsKKworICAgIGhvc3RJbmZvLT5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpJUFY2OworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIENhbm9uaWNhbGl6ZUlQ
QWRkcmVzcyhjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMQ29tcG9uZW50JiBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5vbkhvc3RJ
bmZvKiBob3N0SW5mbykKK3sKKyAgICBpZiAoRG9DYW5vbmljYWxpemVJUHY0QWRkcmVzczxjaGFy
LCB1bnNpZ25lZCBjaGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChEb0Nhbm9uaWNhbGl6ZUlQdjZBZGRyZXNzPGNoYXIsIHVuc2lnbmVk
IGNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQorICAgIHJldHVybjsKK30KKwor
dm9pZCBDYW5vbmljYWxpemVJUEFkZHJlc3MoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENhbm9uSG9zdEluZm8qIGhvc3RJbmZvKQoreworICAgIGlmIChEb0Nhbm9uaWNh
bGl6ZUlQdjRBZGRyZXNzPFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0SW5m
bykpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoRG9DYW5vbmljYWxpemVJUHY2QWRkcmVzczxV
Q2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQorICAgICAgICByZXR1
cm47Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMv
VVJMQ2Fub25JbnRlcm5hbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDc5ZDkzNTQ1YTBiYmE5MGEzODlhYTFk
YmQxNTk5NTJmYTFiYjE5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvVVJMQ2Fub25JbnRlcm5hbC5jcHAKQEAgLTAsMCArMSwzMjggQEAKKy8vIENvcHlyaWdodCAy
MDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIs
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVS
TENhbm9uSW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2lmIFVTRShXVEZV
UkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisK
K25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgor
dm9pZCBEb2FwcGVuZFN0cmluZ09mVHlwZShjb25zdCBDSEFSKiBzb3VyY2UsIGludCBsZW5ndGgs
IFVSTENoYXJhY3RlclR5cGVzOjpDaGFyYWN0ZXJUeXBlcyB0eXBlLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hBUj4oc291cmNlW2ldKSA+PSAweDgwKSB7CisgICAgICAg
ICAgICAvLyBSZWFkQ2hhciB3aWxsIGZpbGwgdGhlIGNvZGUgcG9pbnQgd2l0aCBrVW5pY29kZVJl
cGxhY2VtZW50Q2hhcmFjdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoZSBpbnB1dCBpcyBpbnZh
bGlkLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICB1bnNpZ25lZCBjb2RlUG9p
bnQ7CisgICAgICAgICAgICByZWFkVVRGQ2hhcihzb3VyY2UsICZpLCBsZW5ndGgsICZjb2RlUG9p
bnQpOworICAgICAgICAgICAgQXBwZW5kVVRGOEVzY2FwZWRWYWx1ZShjb2RlUG9pbnQsIG91dHB1
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBKdXN0IGFwcGVuZCB0aGUgNy1i
aXQgY2hhcmFjdGVyLCBwb3NzaWJseSBlc2NhcGluZyBpdC4KKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgdWNoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc291cmNlW2ldKTsKKyAgICAg
ICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzQ2hhcmFjdGVyT2ZUeXBlKHVjaCwgdHlw
ZSkpCisgICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rlcih1Y2gsIG91dHB1
dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh1Y2gp
OworICAgICAgICB9CisgICAgfQorfQorCisvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGlu
cHV0IHZhbHVlcyBhcmUgYWxsIGNvbnRhaW5lZCBpbiA4LWJpdCwKKy8vIGFsdGhvdWdoIGl0IGFs
bG93cyBhbnkgdHlwZS4gUmV0dXJucyB0cnVlIGlmIGlucHV0IGlzIHZhbGlkLCBmYWxzZSBpZiBu
b3QuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4KK3ZvaWQgRG9BcHBl
bmRJbnZhbGlkTmFycm93U3RyaW5nKGNvbnN0IENIQVIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVu
ZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZm9yIChpbnQgaSA9IGJlZ2luOyBp
IDwgZW5kOyBpKyspIHsKKyAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNw
ZWNbaV0pOworICAgICAgICBpZiAodWNoID49IDB4ODApIHsKKyAgICAgICAgICAgIC8vIEhhbmRs
ZSBVVEYtOC8xNiBlbmNvZGluZ3MuIFRoaXMgY2FsbCB3aWxsIGNvcnJlY3RseSBoYW5kbGUgdGhl
IGVycm9yCisgICAgICAgICAgICAvLyBjYXNlIGJ5IGFwcGVuZGluZyB0aGUgaW52YWxpZCBjaGFy
YWN0ZXIuCisgICAgICAgICAgICBBcHBlbmRVVEY4RXNjYXBlZENoYXIoc3BlYywgJmksIGVuZCwg
b3V0cHV0KTsKKyAgICAgICAgfSBlbHNlIGlmICh1Y2ggPD0gJyAnIHx8IHVjaCA9PSAweDdmKSB7
CisgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvciBlcnJvciBoYW5kbGluZywgc28g
d2UgZXNjYXBlIGFsbCBjb250cm9sCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGFuZCBzcGFj
ZXMsIGJ1dCBub3QgYW55dGhpbmcgZWxzZSBzaW5jZSB3ZSBsYWNrCisgICAgICAgICAgICAvLyBj
b250ZXh0IHRvIGRvIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgorICAgICAgICAgICAgYXBwZW5k
VVJMRXNjYXBlZENoYXJhY3RlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1Y2gpLCBvdXRw
dXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nh
c3Q8Y2hhcj4odWNoKSk7CisgICAgfQorfQorCisvLyBPdmVycmlkZXMgb25lIGNvbXBvbmVudCwg
c2VlIHRoZSBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHMgc3RydWN0dXJlIGZvcgorLy8g
d2hhdCB0aGUgdmFyaW91cyBjb21iaW9uYXRpb25zIG9mIHNvdXJjZSBwb2ludGVyIGFuZCBjb21w
b25lbnQgbWVhbi4KK3ZvaWQgRG9PdmVycmlkZUNvbXBvbmVudChjb25zdCBjaGFyKiBvdmVycmlk
ZVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIG92
ZXJyaWRlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBk
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZGVzdGluYXRpb25D
b21wb25lbnQpCit7CisgICAgaWYgKG92ZXJyaWRlU291cmNlKSB7CisgICAgICAgICpkZXN0ID0g
b3ZlcnJpZGVTb3VyY2U7CisgICAgICAgICpkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG92ZXJyaWRl
Q29tcG9uZW50OworICAgIH0KK30KKworLy8gU2ltaWxhciB0byBEb092ZXJyaWRlQ29tcG9uZW50
IGV4Y2VwdCB0aGF0IGl0IHRha2VzIGEgVVRGLTE2IGlucHV0IGFuZCBkb2VzCisvLyBub3QgYWN0
dWFsbHkgc2V0IHRoZSBvdXRwdXQgY2hhcmFjdGVyIHBvaW50ZXIuCisvLworLy8gVGhlIGlucHV0
IGlzIGNvbnZlcnRlZCB0byBVVEYtOCBhdCB0aGUgZW5kIG9mIHRoZSBnaXZlbiBidWZmZXIgYXMg
YSB0ZW1wb3JhcnkKKy8vIGhvbGRpbmcgcGxhY2UuIFRoZSBjb21wb25lbnQgaW5kZW50aWZ5aW5n
IHRoZSBwb3J0aW9uIG9mIHRoZSBidWZmZXIgdXNlZCBpbgorLy8gdGhlIHx1dGY4QnVmZmVyfCB3
aWxsIGJlIHNwZWNpZmllZCBpbiB8KmRlc3RpbmF0aW9uQ29tcG9uZW50fC4KKy8vCisvLyBUaGlz
IHdpbGwgbm90IGFjdHVhbGx5IHNldCBhbnkgfGRlc3R8IHBvaW50ZXIgbGlrZSBEb092ZXJyaWRl
Q29tcG9uZW50CisvLyBkb2VzIGJlY2F1c2UgYWxsIG9mIHRoZSBwb2ludGVycyB3aWxsIHBvaW50
IGludG8gdGhlIHx1dGY4QnVmZmVyfCwgd2hpY2gKKy8vIG1heSBnZXQgcmVzaXplZCB3aGlsZSB3
ZSdyZSBvdmVycmlkaW5nIGEgc3Vic2VxdWVudCBjb21wb25lbnQuIEluc3RlYWQsIHRoZQorLy8g
Y2FsbGVyIHNob3VsZCB1c2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgfHV0ZjhCdWZmZXJ8IGFzIHRo
ZSBzdHJpbmcgcG9pbnRlcgorLy8gZm9yIGFsbCBjb21wb25lbnRzIG9uY2UgYWxsIG92ZXJyaWRl
cyBoYXZlIGJlZW4gcHJlcGFyZWQuCitib29sIFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50
KAorICAgIGNvbnN0IFVDaGFyKiBvdmVycmlkZVNvdXJjZSwKKyAgICBjb25zdCBVUkxDb21wb25l
bnQmIG92ZXJyaWRlQ29tcG9uZW50LAorICAgIFVSTEJ1ZmZlcjxjaGFyPiYgdXRmOEJ1ZmZlciwK
KyAgICBVUkxDb21wb25lbnQqIGRlc3RpbmF0aW9uQ29tcG9uZW50KQoreworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CisgICAgaWYgKG92ZXJyaWRlU291cmNlKSB7CisgICAgICAgIGlmICghb3Zl
cnJpZGVDb21wb25lbnQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAvLyBOb24tInZhbGlkIiBj
b21wb25lbnQgKG1lYW5zIGRlbGV0ZSksIHNvIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhhdC4KKyAg
ICAgICAgICAgICpkZXN0aW5hdGlvbkNvbXBvbmVudCA9IFVSTENvbXBvbmVudCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ29udmVydCB0byBVVEYtOC4KKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50LT5zZXRCZWdpbih1dGY4QnVmZmVyLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBDb252ZXJ0VVRGMTZUb1VURjgoJm92ZXJyaWRlU291cmNlW292
ZXJyaWRlQ29tcG9uZW50LmJlZ2luKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdmVycmlkZUNvbXBvbmVudC5sZW5ndGgoKSwgdXRmOEJ1ZmZlcik7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudC0+c2V0TGVuZ3RoKHV0ZjhCdWZmZXIubGVuZ3Ro
KCkgLSBkZXN0aW5hdGlvbkNvbXBvbmVudC0+YmVnaW4oKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK2NvbnN0IGNoYXIga0No
YXJUb0hleExvb2t1cFs4XSA9IHsKKyAgICAwLCAvLyAweDAwIC0gMHgxZgorICAgICcwJywgLy8g
MHgyMCAtIDB4M2Y6IGRpZ2l0cyAwIC0gOSBhcmUgMHgzMCAtIDB4MzkKKyAgICAnQScgLSAxMCwg
Ly8gMHg0MCAtIDB4NWY6IGxldHRlcnMgQSAtIEYgYXJlIDB4NDEgLSAweDQ2CisgICAgJ2EnIC0g
MTAsIC8vIDB4NjAgLSAweDdmOiBsZXR0ZXJzIGEgLSBmIGFyZSAweDYxIC0gMHg2NgorICAgIDAs
IC8vIDB4ODAgLSAweDlGCisgICAgMCwgLy8gMHhBMCAtIDB4QkYKKyAgICAwLCAvLyAweEMwIC0g
MHhERgorICAgIDAsIC8vIDB4RTAgLSAweEZGCit9OworCitjb25zdCBVQ2hhciBrVW5pY29kZVJl
cGxhY2VtZW50Q2hhcmFjdGVyID0gMHhmZmZkOworCit2b2lkIGFwcGVuZFN0cmluZ09mVHlwZShj
b25zdCBjaGFyKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTENoYXJhY3RlclR5cGVzOjpDaGFyYWN0
ZXJUeXBlcyB1cmxDb21wb25lbnRUeXBlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAg
ICBEb2FwcGVuZFN0cmluZ09mVHlwZTxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIGxlbmd0
aCwgdXJsQ29tcG9uZW50VHlwZSwgb3V0cHV0KTsKK30KKwordm9pZCBhcHBlbmRTdHJpbmdPZlR5
cGUoY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFjdGVyVHlwZXM6OkNo
YXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIERvYXBwZW5kU3RyaW5nT2ZUeXBlPFVDaGFyLCBVQ2hhcj4oc291cmNlLCBsZW5ndGgs
IHVybENvbXBvbmVudFR5cGUsIG91dHB1dCk7Cit9CisKK3ZvaWQgQXBwZW5kSW52YWxpZE5hcnJv
d1N0cmluZyhjb25zdCBjaGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0KQoreworICAgIERvQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZzxjaGFyLCB1
bnNpZ25lZCBjaGFyPihzcGVjLCBiZWdpbiwgZW5kLCBvdXRwdXQpOworfQorCit2b2lkIEFwcGVu
ZEludmFsaWROYXJyb3dTdHJpbmcoY29uc3QgVUNoYXIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVu
ZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgRG9BcHBlbmRJbnZhbGlkTmFycm93
U3RyaW5nPFVDaGFyLCBVQ2hhcj4oc3BlYywgYmVnaW4sIGVuZCwgb3V0cHV0KTsKK30KKworYm9v
bCBDb252ZXJ0VVRGMTZUb1VURjgoY29uc3QgVUNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgs
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CisgICAgICAgIHVuc2ln
bmVkIGNvZGVQb2ludDsKKyAgICAgICAgc3VjY2VzcyAmPSByZWFkVVRGQ2hhcihpbnB1dCwgJmks
IGlucHV0TGVuZ3RoLCAmY29kZVBvaW50KTsKKyAgICAgICAgQXBwZW5kVVRGOFZhbHVlKGNvZGVQ
b2ludCwgb3V0cHV0KTsKKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgQ29u
dmVydFVURjhUb1VURjE2KGNvbnN0IGNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1
ZmZlcjxVQ2hhcj4mIG91dHB1dCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBj
b2RlUG9pbnQ7CisgICAgICAgIHN1Y2Nlc3MgJj0gcmVhZFVURkNoYXIoaW5wdXQsICZpLCBpbnB1
dExlbmd0aCwgJmNvZGVQb2ludCk7CisgICAgICAgIEFwcGVuZFVURjE2VmFsdWUoY29kZVBvaW50
LCBvdXRwdXQpOworICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBTZXR1cE92
ZXJyaWRlQ29tcG9uZW50cyhjb25zdCBjaGFyKiAvKiBiYXNlICovLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiogc291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIC8v
IEdldCB0aGUgc291cmNlIGFuZCBwYXJzZWQgc3RydWN0dXJlcyBvZiB0aGUgdGhpbmdzIHdlIGFy
ZSByZXBsYWNpbmcuCisgICAgY29uc3QgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+JiByZXBsU291
cmNlID0gcmVwbC5zb3VyY2VzKCk7CisgICAgY29uc3QgVVJMU2VnbWVudHMmIHJlcGxQYXJzZWQg
PSByZXBsLmNvbXBvbmVudHMoKTsKKworICAgIERvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJj
ZS5zY2hlbWUsIHJlcGxQYXJzZWQuc2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgJnNv
dXJjZS0+c2NoZW1lLCAmcGFyc2VkLT5zY2hlbWUpOworICAgIERvT3ZlcnJpZGVDb21wb25lbnQo
cmVwbFNvdXJjZS51c2VybmFtZSwgcmVwbFBhcnNlZC51c2VybmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICZzb3VyY2UtPnVzZXJuYW1lLCAmcGFyc2VkLT51c2VybmFtZSk7CisgICAgRG9P
dmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnBhc3N3b3JkLCByZXBsUGFyc2VkLnBhc3N3b3Jk
LAorICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cGFzc3dvcmQsICZwYXJzZWQtPnBh
c3N3b3JkKTsKKworICAgIC8vIE91ciBob3N0IHNob3VsZCBiZSBlbXB0eSBpZiBub3QgcHJlc2Vu
dCwgc28gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2V0dXAuCisgICAgRG9PdmVycmlkZUNvbXBvbmVu
dChyZXBsU291cmNlLmhvc3QsIHJlcGxQYXJzZWQuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICZzb3VyY2UtPmhvc3QsICZwYXJzZWQtPmhvc3QpOworICAgIGlmIChwYXJzZWQtPmhvc3Qu
bGVuZ3RoKCkgPT0gLTEpCisgICAgICAgIHBhcnNlZC0+aG9zdC5zZXRMZW5ndGgoMCk7CisKKyAg
ICBEb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucG9ydCwgcmVwbFBhcnNlZC5wb3J0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgJnNvdXJjZS0+cG9ydCwgJnBhcnNlZC0+cG9ydCk7Cisg
ICAgRG9PdmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnBhdGgsIHJlcGxQYXJzZWQucGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2UtPnBhdGgsICZwYXJzZWQtPnBhdGgpOwor
ICAgIERvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5xdWVyeSwgcmVwbFBhcnNlZC5xdWVy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2UtPnF1ZXJ5LCAmcGFyc2VkLT5xdWVy
eSk7CisgICAgRG9PdmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnJlZiwgcmVwbFBhcnNlZC5m
cmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2UtPnJlZiwgJnBhcnNlZC0+
ZnJhZ21lbnQpOworfQorCitib29sIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoY29uc3Qg
Y2hhciogLyogYmFzZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgdXRmOEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4qIHNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogcGFyc2VkKQorICAgIHsKKyAg
ICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAvLyBHZXQgdGhlIHNvdXJjZSBh
bmQgcGFyc2VkIHN0cnVjdHVyZXMgb2YgdGhlIHRoaW5ncyB3ZSBhcmUgcmVwbGFjaW5nLgorICAg
ICAgICBjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+JiByZXBsU291cmNlID0gcmVwbC5z
b3VyY2VzKCk7CisgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiByZXBsUGFyc2VkID0gcmVwbC5j
b21wb25lbnRzKCk7CisKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNv
bXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBsU291cmNlLnNjaGVtZSwgcmVwbFBhcnNlZC5zY2hlbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+c2No
ZW1lKTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291
cmNlLnVzZXJuYW1lLCByZXBsUGFyc2VkLnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnVzZXJuYW1l
KTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNl
LnBhc3N3b3JkLCByZXBsUGFyc2VkLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBhc3N3b3JkKTsK
KyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNlLmhv
c3QsIHJlcGxQYXJzZWQuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5ob3N0KTsKKyAgICAgICAgc3VjY2Vz
cyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNlLnBvcnQsIHJlcGxQYXJzZWQu
cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
dGY4QnVmZmVyLCAmcGFyc2VkLT5wb3J0KTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRG
MTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBsU291cmNlLnBhdGgsIHJlcGxQYXJzZWQucGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFy
c2VkLT5wYXRoKTsKKyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBv
bmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsU291cmNlLnF1ZXJ5LCByZXBsUGFyc2VkLnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnF1ZXJ5KTsK
KyAgICAgICAgc3VjY2VzcyAmPSBQcmVwYXJlVVRGMTZPdmVycmlkZUNvbXBvbmVudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsU291cmNlLnJl
ZiwgcmVwbFBhcnNlZC5mcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5mcmFnbWVudCk7CisKKyAgICAg
ICAgLy8gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQgd2lsbCBub3QgaGF2ZSBzZXQgdGhl
IGRhdGEgcG9pbnRlciBzaW5jZSB0aGUKKyAgICAgICAgLy8gYnVmZmVyIGNvdWxkIGJlIHJlc2l6
ZWQsIGludmFsaWRhdGluZyB0aGUgcG9pbnRlcnMuIFdlIHNldCB0aGUgZGF0YQorICAgICAgICAv
LyBwb2ludGVycyBmb3IgYWZmZWN0ZWQgY29tcG9uZW50cyBub3cgdGhhdCB0aGUgYnVmZmVyIGlz
IGZpbmFsaXplZC4KKyAgICAgICAgaWYgKHJlcGxTb3VyY2Uuc2NoZW1lKQorICAgICAgICAgICAg
c291cmNlLT5zY2hlbWUgPSB1dGY4QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3Vy
Y2UudXNlcm5hbWUpCisgICAgICAgICAgICBzb3VyY2UtPnVzZXJuYW1lID0gdXRmOEJ1ZmZlci5k
YXRhKCk7CisgICAgICAgIGlmIChyZXBsU291cmNlLnBhc3N3b3JkKQorICAgICAgICAgICAgc291
cmNlLT5wYXNzd29yZCA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNvdXJj
ZS5ob3N0KQorICAgICAgICAgICAgc291cmNlLT5ob3N0ID0gdXRmOEJ1ZmZlci5kYXRhKCk7Cisg
ICAgICAgIGlmIChyZXBsU291cmNlLnBvcnQpCisgICAgICAgICAgICBzb3VyY2UtPnBvcnQgPSB1
dGY4QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucGF0aCkKKyAgICAgICAg
ICAgIHNvdXJjZS0+cGF0aCA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNv
dXJjZS5xdWVyeSkKKyAgICAgICAgICAgIHNvdXJjZS0+cXVlcnkgPSB1dGY4QnVmZmVyLmRhdGEo
KTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucmVmKQorICAgICAgICAgICAgc291cmNlLT5yZWYg
PSB1dGY4QnVmZmVyLmRhdGEoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzczsKK30KKworI2lm
ICFPUyhXSU5ET1dTKQoraW50IF9pdG9hX3MoaW50IHZhbHVlLCBjaGFyKiBidWZmZXIsIHNpemVf
dCBzaXplSW5DaGFycywgaW50IHJhZGl4KQoreworICAgIGludCB3cml0dGVuOworICAgIGlmIChy
YWRpeCA9PSAxMCkKKyAgICAgICAgd3JpdHRlbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZUluQ2hh
cnMsICIlZCIsIHZhbHVlKTsKKyAgICBlbHNlIGlmIChyYWRpeCA9PSAxNikKKyAgICAgICAgd3Jp
dHRlbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZUluQ2hhcnMsICIleCIsIHZhbHVlKTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiBFSU5WQUw7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90
Pih3cml0dGVuKSA+PSBzaXplSW5DaGFycykgeworICAgICAgICAvLyBPdXRwdXQgd2FzIHRydW5j
YXRlZCwgb3Igd3JpdHRlbiB3YXMgbmVnYXRpdmUuCisgICAgICAgIHJldHVybiBFSU5WQUw7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFyKiBi
dWZmZXIsIHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KQoreworICAgIGlmIChyYWRpeCAh
PSAxMCkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIC8vIE5vIG1vcmUgdGhhbiAxMiBj
aGFyYWN0ZXJzIHdpbGwgYmUgcmVxdWlyZWQgZm9yIGEgMzItYml0IGludGVnZXIuCisgICAgLy8g
QWRkIGFuIGV4dHJhIGJ5dGUgZm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsLgorICAgIGNoYXIgdGVt
cFsxM107CisgICAgaW50IHdyaXR0ZW4gPSBzbnByaW50Zih0ZW1wLCBzaXplb2YodGVtcCksICIl
ZCIsIHZhbHVlKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3cml0dGVuKSA+PSBzaXpl
SW5DaGFycykgeworICAgICAgICAvLyBPdXRwdXQgd2FzIHRydW5jYXRlZCwgb3Igd3JpdHRlbiB3
YXMgbmVnYXRpdmUuCisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB3cml0dGVuOyArK2kpCisgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRpY19j
YXN0PFVDaGFyPih0ZW1wW2ldKTsKKyAgICBidWZmZXJbd3JpdHRlbl0gPSAnXDAnOworICAgIHJl
dHVybiAwOworfQorCisjZW5kaWYgLy8gIU9TKFdJTkRPV1MpCisKK30gLy8gbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFs
LmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMGYzYmMzMmExZThmY2I3ZjUzZjU4ZjU5OWYzOGQ2MDMzMjIzYzQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmgKQEAgLTAsMCAr
MSwzOTIgQEAKKy8vIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8g
ZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhpcyBm
aWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGluIGFub3RoZXIgQysrIGZpbGUgd2hlcmUg
dGhlIGNoYXJhY3RlcgorLy8gdHlwZXMgYXJlIGRlZmluZWQuIFRoaXMgYWxsb3dzIHVzIHRvIHdy
aXRlIG1vc3RseSBnZW5lcmljIGNvZGUsIGJ1dCBub3QgaGF2ZQorLy8gdGVtcGxhY2UgYmxvYXQg
YmVjYXVzZSBldmVyeXRoaW5nIGlzIGlubGluZWQgd2hlbiBhbnlib2R5IGNhbGxzIGFueSBvZiBv
dXIKKy8vIGZ1bmN0aW9ucy4KKworI2lmbmRlZiBVUkxDYW5vbkludGVybmFsX2gKKyNkZWZpbmUg
VVJMQ2Fub25JbnRlcm5hbF9oCisKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorI2luY2x1ZGUgIlVS
TENoYXJhY3RlclR5cGVzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL0hl
eE51bWJlci5oPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVz
cGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRv
IHRoZSBvdXRwdXQsIGVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QKKy8vIG1hdGNoIHRo
ZSBnaXZlbiB8dHlwZXwgaW4gU2hhcmVkQ2hhclR5cGVzLgordm9pZCBhcHBlbmRTdHJpbmdPZlR5
cGUoY29uc3QgY2hhciogc291cmNlLCBpbnQgbGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hh
cmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlwZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwor
dm9pZCBhcHBlbmRTdHJpbmdPZlR5cGUoY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwg
VVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0KTsKKworLy8gVGhpcyBsb29rdXAgdGFibGUgYWxsb3dzIGZhc3Qg
Y29udmVyc2lvbiBiZXR3ZWVuIEFTQ0lJIGhleCBsZXR0ZXJzIGFuZCB0aGVpcgorLy8gY29ycmVz
cG9uZGluZyBudW1lcmljYWwgdmFsdWUuIFRoZSA4LWJpdCByYW5nZSBpcyBkaXZpZGVkIHVwIGlu
dG8gOAorLy8gcmVnaW9ucyBvZiAweDIwIGNoYXJhY3RlcnMgZWFjaC4gRWFjaCBvZiB0aGUgdGhy
ZWUgY2hhcmFjdGVyIHR5cGVzIChudW1iZXJzLAorLy8gdXBwZXJjYXNlLCBsb3dlcmNhc2UpIGZh
bGxzIGludG8gZGlmZmVyZW50IHJlZ2lvbnMgb2YgdGhpcyByYW5nZS4gVGhlIHRhYmxlCisvLyBj
b250YWlucyB0aGUgYW1vdW50IHRvIHN1YnRyYWN0IGZyb20gY2hhcmFjdGVycyBpbiB0aGF0IHJh
bmdlIHRvIGdldCBhdAorLy8gdGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpY2FsIHZhbHVlLgorLy8K
Ky8vIFNlZSBIZXhEaWdpdFRvVmFsdWUgZm9yIHRoZSBsb29rdXAuCitleHRlcm4gY29uc3QgY2hh
ciBrQ2hhclRvSGV4TG9va3VwWzhdOworCisvLyBBc3N1bWVzIHRoZSBpbnB1dCBpcyBhIHZhbGlk
IGhleCBkaWdpdCEgQ2FsbCBpc0hleENoYXIgYmVmb3JlIHVzaW5nIHRoaXMuCitpbmxpbmUgdW5z
aWduZWQgY2hhciBoZXhDaGFyVG9WYWx1ZSh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKK3sKKyAg
ICByZXR1cm4gY2hhcmFjdGVyIC0ga0NoYXJUb0hleExvb2t1cFtjaGFyYWN0ZXIgLyAweDIwXTsK
K30KKworLy8gSW5kaWNhdGVzIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSBkb3Qgb3IgZG90
IGVxdWl2YWxlbnQsIHJldHVybmluZyB0aGUKKy8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRha2Vu
IGJ5IGl0LiBUaGlzIHdpbGwgYmUgb25lIGZvciBhIGxpdGVyYWwgZG90LCAzIGZvcgorLy8gYW4g
ZXNjYXBlZCBkb3QuIElmIHRoZSBjaGFyYWN0ZXIgaXMgbm90IGEgZG90LCB0aGlzIHdpbGwgcmV0
dXJuIDAuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGludCBpc0Rv
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgb2Zmc2V0LCBpbnQgZW5kKQoreworICAg
IGlmIChzcGVjW29mZnNldF0gPT0gJy4nKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChz
cGVjW29mZnNldF0gPT0gJyUnICYmIG9mZnNldCArIDMgPD0gZW5kICYmIHNwZWNbb2Zmc2V0ICsg
MV0gPT0gJzInICYmIChzcGVjW29mZnNldCArIDJdID09ICdlJyB8fCBzcGVjW29mZnNldCArIDJd
ID09ICdFJykpIHsKKyAgICAgICAgLy8gRm91bmQgIiUyZSIKKyAgICAgICAgcmV0dXJuIDM7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCisvLyBSZXR1cm5zIHRoZSBjYW5vbmljYWxpemVkIHZl
cnNpb24gb2YgdGhlIGlucHV0IGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gc2NoZW1lCisvLyBydWxl
cy4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhbG9uZ3NpZGUgdGhlIHNjaGVtZSBjYW5vbmljYWxpemVy
LCBhbmQgaXMKKy8vIHJlcXVpcmVkIGZvciByZWxhdGl2ZSBVUkwgcmVzb2x2aW5nIHRvIHRlc3Qg
Zm9yIHNjaGVtZSBlcXVhbGl0eS4KKy8vCisvLyBSZXR1cm5zIDAgaWYgdGhlIGlucHV0IGNoYXJh
Y3RlciBpcyBub3QgYSB2YWxpZCBzY2hlbWUgY2hhcmFjdGVyLgorY2hhciBjYW5vbmljYWxTY2hl
bWVDaGFyKFVDaGFyKTsKKworLy8gV3JpdGUgYSBzaW5nbGUgY2hhcmFjdGVyLCBlc2NhcGVkLCB0
byB0aGUgb3V0cHV0LiBUaGlzIGFsd2F5cyBlc2NhcGVzOiBpdAorLy8gZG9lcyBubyBjaGVja2lu
ZyB0aGF0IHRoZWUgY2hhcmFjdGVyIHJlcXVpcmVzIGVzY2FwaW5nLgorLy8gRXNjYXBpbmcgbWFr
ZXMgc2Vuc2Ugb25seSA4IGJpdCBjaGFycywgc28gY29kZSB3b3JrcyBpbiBhbGwgY2FzZXMgb2YK
Ky8vIGlucHV0IHBhcmFtZXRlcnMgKDgvMTZiaXQpLgordGVtcGxhdGU8dHlwZW5hbWUgSW5DaGFy
LCB0eXBlbmFtZSBPdXRDaGFyPgoraW5saW5lIHZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rl
cihJbkNoYXIgY2hhcmFjdGVyLCBVUkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBi
dWZmZXIuYXBwZW5kKCclJyk7CisgICAgYnVmZmVyLmFwcGVuZChXVEY6OkludGVybmFsOjp1cHBl
ckhleERpZ2l0c1tjaGFyYWN0ZXIgPj4gNF0pOworICAgIGJ1ZmZlci5hcHBlbmQoV1RGOjpJbnRl
cm5hbDo6dXBwZXJIZXhEaWdpdHNbY2hhcmFjdGVyICYgMHhmXSk7Cit9CisKKy8vIFRoZSBjaGFy
YWN0ZXIgd2UnbGwgc3Vic3RpdHV0ZSBmb3IgdW5kZWNvZGFibGUgb3IgaW52YWxpZCBjaGFyYWN0
ZXJzLgorZXh0ZXJuIGNvbnN0IFVDaGFyIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisK
Ky8vIFVURi04IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUmVhZHMgb25lIGNoYXJhY3RlciBpbiBVVEYt
OCBzdGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2VzCisvLyB0aGUgZGVjb2Rl
ZCB2YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgd2Ug
d2lsbAorLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJldHVybiBmYWxzZSBhbmQg
cHV0IHRoZQorLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBpbnRvIHwqY29kZVBvaW50
fC4KKy8vCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhc3Qg
Y2hhcmFjdGVyIGNvbnN1bWVkIHNvIGl0CisvLyBjYW4gYmUgaW5jcmVtZW50ZWQgaW4gYSBsb29w
IGFuZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisvLyAoZm9yIGEgc2lu
Z2xlLWJ5dGUgQVNDSUkgY2hhcmFjdGVyLCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkKS4KKy8vCisv
LyBJbXBsZW1lbnRhdGlvbiBpcyBpbiBVUkxDYW5vbmljYWxpemVyX2ljdS5jYy4KK2Jvb2wgcmVh
ZFVURkNoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3RoLCB1bnNpZ25l
ZCogY29kZVBvaW50T3V0KTsKKworLy8gR2VuZXJpYyBUby1VVEYtOCBjb252ZXJ0ZXIuIFRoaXMg
d2lsbCBjYWxsIHRoZSBnaXZlbiBhcHBlbmQgbWV0aG9kIGZvciBlYWNoCisvLyBjaGFyYWN0ZXIg
dGhhdCBzaG91bGQgYmUgYXBwZW5kZWQsIHdpdGggdGhlIGdpdmVuIG91dHB1dCBtZXRob2QuIFdy
YXBwZXJzCisvLyBhcmUgcHJvdmlkZWQgYmVsb3cgZm9yIGVzY2FwZWQgYW5kIG5vbi1lc2NhcGVk
IHZlcnNpb25zIG9mIHRoaXMuCisvLworLy8gVGhlIGNoYXJhY3RlcnZhbHVlIG11c3QgaGF2ZSBh
bHJlYWR5IGJlZW4gY2hlY2tlZCB0aGF0IGl0J3MgYSB2YWxpZCBVbmljb2RlCisvLyBjaGFyYWN0
ZXIuCit0ZW1wbGF0ZTxjbGFzcyBPdXRwdXQsIHZvaWQgYXBwZW5kRnVuY3Rpb24odW5zaWduZWQg
Y2hhciwgT3V0cHV0Jik+CitpbmxpbmUgdm9pZCBkb0FwcGVuZFVURjgodW5zaWduZWQgY2hhcmFj
dGVydmFsdWUsIE91dHB1dCYgb3V0cHV0KQoreworICAgIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAw
eDdmKSB7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGNoYXJhY3RlcnZhbHVlKSwgb3V0cHV0KTsKKyAgICB9IGVsc2UgaWYgKGNoYXJhY3RlcnZhbHVl
IDw9IDB4N2ZmKSB7CisgICAgICAgIC8vIDExMHh4eHh4IDEweHh4eHh4CisgICAgICAgIGFwcGVu
ZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4QzAgfCAoY2hhcmFjdGVydmFs
dWUgPj4gNikpLCBvdXRwdXQpOworICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigweDgwIHwgKGNoYXJhY3RlcnZhbHVlICYgMHgzZikpLCBvdXRwdXQpOwor
ICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVydmFsdWUgPD0gMHhmZmZmKSB7CisgICAgICAgIC8vIDEx
MTB4eHh4IDEweHh4eHh4IDEweHh4eHh4CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDB4ZTAgfCAoY2hhcmFjdGVydmFsdWUgPj4gMTIpKSwgb3V0cHV0
KTsKKyAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4
MCB8ICgoY2hhcmFjdGVydmFsdWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7CisgICAgICAgIGFw
cGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVy
dmFsdWUgJiAweDNmKSksIG91dHB1dCk7CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8
PSAweDEwRkZGRikgeyAvLyBNYXggdW5pY29kZSBjb2RlIHBvaW50LgorICAgICAgICAvLyAxMTEx
MHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAorICAgICAgICBhcHBlbmRGdW5jdGlvbihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGYwIHwgKGNoYXJhY3RlcnZhbHVlID4+IDE4KSks
IG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDB4ODAgfCAoKGNoYXJhY3RlcnZhbHVlID4+IDEyKSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAg
ICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8ICgo
Y2hhcmFjdGVydmFsdWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1
bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVydmFsdWUg
JiAweDNmKSksIG91dHB1dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW52YWxpZCBVVEYt
OCBjaGFyYWN0ZXIgKD4yMCBiaXRzKS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCisvLyBIZWxwZXIgdXNlZCBieSBBcHBlbmRVVEY4VmFsdWUgYmVsb3cuIFdlIHVz
ZSBhbiB1bnNpZ25lZCBwYXJhbWV0ZXIgc28gdGhlcmUKKy8vIGFyZSBubyBmdW5ueSBzaWduIHBy
b2JsZW1zIHdpdGggdGhlIGlucHV0LCBidXQgdGhlbiBoYXZlIHRvIGNvbnZlcnQgaXQgdG8KKy8v
IGEgcmVndWxhciBjaGFyIGZvciBhcHBlbmRpbmcuCitpbmxpbmUgdm9pZCBBcHBlbmRDaGFyVG9P
dXRwdXQodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVyKSk7Cit9CisK
Ky8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTguIFRo
aXMgZG9lcyBOTyBjaGVja2luZworLy8gb2YgdGhlIHZhbGlkaXR5IG9mIHRoZSB1bmljb2RlIGNo
YXJhY3RlcnM7IHRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0CisvLyB0aGUgdmFsdWUgaXQg
aXMgYXBwZW5kaW5nIGlzIHZhbGlkIHRvIGFwcGVuZC4KK2lubGluZSB2b2lkIEFwcGVuZFVURjhW
YWx1ZSh1bnNpZ25lZCBjaGFyYWN0ZXJ2YWx1ZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7
CisgICAgZG9BcHBlbmRVVEY4PFVSTEJ1ZmZlcjxjaGFyPiwgQXBwZW5kQ2hhclRvT3V0cHV0Pihj
aGFyYWN0ZXJ2YWx1ZSwgb3V0cHV0KTsKK30KKworLy8gV3JpdGVzIHRoZSBnaXZlbiBjaGFyYWN0
ZXIgdG8gdGhlIG91dHB1dCBhcyBVVEYtOCwgZXNjYXBpbmcgQUxMCisvLyBjaGFyYWN0ZXJzIChl
dmVuIHdoZW4gdGhleSBhcmUgQVNDSUkpLiBUaGlzIGRvZXMgTk8gY2hlY2tpbmcgb2YgdGhlCisv
LyB2YWxpZGl0eSBvZiB0aGUgdW5pY29kZSBjaGFyYWN0ZXJzOyB0aGUgY2FsbGVyIHNob3VsZCBl
bnN1cmUgdGhhdCB0aGUgdmFsdWUKKy8vIGl0IGlzIGFwcGVuZGluZyBpcyB2YWxpZCB0byBhcHBl
bmQuCitpbmxpbmUgdm9pZCBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKHVuc2lnbmVkIGNoYXJhY3Rl
cnZhbHVlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBkb0FwcGVuZFVURjg8VVJM
QnVmZmVyPGNoYXI+LCBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyPihjaGFyYWN0ZXJ2YWx1ZSwg
b3V0cHV0KTsKK30KKworLy8gVVRGLTE2IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWFkcyBvbmUgY2hh
cmFjdGVyIGluIFVURi0xNiBzdGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2Vz
CisvLyB0aGUgZGVjb2RlZCB2YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3Rl
ciBpcyB2YWxpZCwgd2Ugd2lsbAorLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJl
dHVybiBmYWxzZSBhbmQgcHV0IHRoZQorLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBp
bnRvIHwqY29kZVBvaW50fC4KKy8vCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9p
bnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGNvbnN1bWVkIHNvIGl0CisvLyBjYW4gYmUgaW5jcmVt
ZW50ZWQgaW4gYSBsb29wIGFuZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIu
CisvLyAoZm9yIGEgc2luZ2xlLTE2LWJpdC13b3JkIGNoYXJhY3RlciwgaXQgd2lsbCBub3QgYmUg
Y2hhbmdlZCkuCisvLworLy8gSW1wbGVtZW50YXRpb24gaXMgaW4gVVJMQ2Fub25pY2FsaXplcl9p
Y3UuY2MuCitib29sIHJlYWRVVEZDaGFyKGNvbnN0IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGlu
dCBsZW5ndGgsIHVuc2lnbmVkKiBjb2RlUG9pbnQpOworCisvLyBFcXVpdmFsZW50IHRvIFUxNl9B
UFBFTkRfVU5TQUZFIGluIElDVSBidXQgdXNlcyBvdXIgb3V0cHV0IG1ldGhvZC4KK2lubGluZSB2
b2lkIEFwcGVuZFVURjE2VmFsdWUodW5zaWduZWQgY29kZVBvaW50LCBVUkxCdWZmZXI8VUNoYXI+
JiBvdXRwdXQpCit7CisgICAgaWYgKGNvZGVQb2ludCA+IDB4ZmZmZikgeworICAgICAgICBvdXRw
dXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ID4+IDEwKSArIDB4ZDdjMCkp
OworICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ICYg
MHgzZmYpIHwgMHhkYzAwKSk7CisgICAgfSBlbHNlCisgICAgICAgIG91dHB1dC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCkpOworfQorCisvLyBFc2NhcGluZyBmdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKy8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTgs
IGVzY2FwZWQuIENhbGwgdGhpcworLy8gZnVuY3Rpb24gb25seSB3aGVuIHRoZSBpbnB1dCBpcyB3
aWRlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gRmFpbHVyZQorLy8gbWVhbnMgdGhlcmUgd2Fz
IHNvbWUgcHJvYmxlbSB3aXRoIHRoZSBlbmNvZGluZywgd2UnbGwgc3RpbGwgdHJ5IHRvCisvLyB1
cGRhdGUgdGhlIHwqYmVnaW58IHBvaW50ZXIgYW5kIGFkZCBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rl
ciB0byB0aGUKKy8vIG91dHB1dCBzbyBwcm9jZXNzaW5nIGNhbiBjb250aW51ZS4KKy8vCisvLyBX
ZSB3aWxsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIHN0YXJ0aW5nIGF0IGNoW2JlZ2luXSB3aXRoIHRo
ZSBidWZmZXIgY2gKKy8vIGJlaW5nIHxsZW5ndGh8LiB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQg
dG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyCisvLyBjb25zdW1lZCAod2UgbWF5IGNvbnN1
bWUgbW9yZSB0aGFuIG9uZSBmb3IgVVRGLTE2KSBzbyB0aGF0IGlmIGNhbGxlZCBpbgorLy8gYSBs
b29wLCBpbmNyZW1lbnRpbmcgdGhlIHBvaW50ZXIgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYXJh
Y3Rlci4KKy8vCisvLyBFdmVyeSBzaW5nbGUgb3V0cHV0IGNoYXJhY3RlciB3aWxsIGJlIGVzY2Fw
ZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UKKy8vIGdpdmUgaXQgYW4gQVNDSUkgY2hhcmFjdGVy
IGFzIGlucHV0LCBpdCB3aWxsIGJlIGVzY2FwZWQuIFNvbWUgY29kZSB1c2VzCisvLyB0aGlzIHdo
ZW4gaXQga25vd3MgdGhhdCBhIGNoYXJhY3RlciBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBpdHMg
cnVsZXMKKy8vIGZvciB2YWxpZGl0eS4gSWYgeW91IGRvbid0IHdhbnQgZXNjYXBpbmcgZm9yIEFT
Q0lJIGNoYXJhY3RlcnMsIHlvdSB3aWxsCisvLyBoYXZlIHRvIGZpbHRlciB0aGVtIG91dCBwcmlv
ciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLworLy8gQXNzdW1lcyB0aGF0IGNoW2JlZ2lu
XSBpcyB3aXRoaW4gcmFuZ2UgaW4gdGhlIGFycmF5LCBidXQgZG9lcyBub3QgYXNzdW1lCisvLyB0
aGF0IGFueSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmUuCitpbmxpbmUgYm9vbCBBcHBlbmRVVEY4
RXNjYXBlZENoYXIoY29uc3QgVUNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgLy8gVVRGLTE2IGlucHV0LiBSZWFkVUNoYXIg
d2lsbCBoYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZQorICAgIC8vIHVz
IHRoZSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRv
IHNwZWNpYWwKKyAgICAvLyBjaGVja2luZyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3Vn
aCB0aGUgZmFpbHVyZSB0byB0aGUgY2FsbGVyLgorICAgIHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVl
OworICAgIGJvb2wgc3VjY2VzcyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNo
YXJhY3RlcnZhbHVlKTsKKyAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNoYXJhY3RlcnZhbHVl
LCBvdXRwdXQpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBIYW5kbGVzIFVURi04IGlu
cHV0LiBTZWUgdGhlIHdpZGUgdmVyc2lvbiBhYm92ZSBmb3IgdXNhZ2UuCitpbmxpbmUgYm9vbCBB
cHBlbmRVVEY4RXNjYXBlZENoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVu
Z3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICAvLyBSZWFkVVRGOENoYXIgd2ls
bCBoYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZSB1cyB0aGUKKyAgICAv
LyBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHNw
ZWNpYWwgY2hlY2tpbmcKKyAgICAvLyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3VnaCB0
aGUgZmFpbHVyZSB0byB0aGUgY2FsbGVyLgorICAgIHVuc2lnbmVkIGNoOworICAgIGJvb2wgc3Vj
Y2VzcyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNoKTsKKyAgICBBcHBlbmRV
VEY4RXNjYXBlZFZhbHVlKGNoLCBvdXRwdXQpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisv
LyBHaXZlbiBhICclJyBjaGFyYWN0ZXIgYXQgfCpiZWdpbnwgaW4gdGhlIHN0cmluZyB8c3BlY3ws
IHRoaXMgd2lsbCBkZWNvZGUKKy8vIHRoZSBlc2NhcGVkIHZhbHVlIGFuZCBwdXQgaXQgaW50byB8
KnVuZXNjYXBlZFZhbHVlfCBvbiBzdWNjZXNzIChyZXR1cm5zCisvLyB0cnVlKS4gT24gZmFpbHVy
ZSwgdGhpcyB3aWxsIHJldHVybiBmYWxzZSwgYW5kIHdpbGwgbm90IHdyaXRlIGludG8KKy8vIHwq
dW5lc2NhcGVkVmFsdWV8LgorLy8KKy8vIHwqYmVnaW58IHdpbGwgYmUgdXBkYXRlZCB0byBwb2lu
dCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGVzY2FwZQorLy8gc2VxdWVuY2Ugc28gdGhh
dCB3aGVuIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBvZiBhIGZvciBsb29wLCB0aGUgbmV4dCB0aW1l
CisvLyB0aHJvdWdoIGl0IHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNv
bnNpZGVyZWQuIE9uIGZhaWx1cmUsCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVuY2hhbmdlZC4KK2lu
bGluZSBib29sIElzOEJpdENoYXIoY2hhcikKK3sKKyAgICByZXR1cm4gdHJ1ZTsgLy8gdGhpcyBj
YXNlIGlzIHNwZWNpYWxpemVkIHRvIGF2b2lkIGEgd2FybmluZworfQoraW5saW5lIGJvb2wgSXM4
Qml0Q2hhcihVQ2hhciBjKQoreworICAgIHJldHVybiBjIDw9IDI1NTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ0hBUj4KK2lubGluZSBib29sIERlY29kZUVzY2FwZWQoY29uc3QgQ0hBUiogc3Bl
YywgaW50KiBiZWdpbiwgaW50IGVuZCwgdW5zaWduZWQgY2hhciogdW5lc2NhcGVkVmFsdWUpCit7
CisgICAgaWYgKCpiZWdpbiArIDMgPiBlbmQgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAx
XSkgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAyXSkpIHsKKyAgICAgICAgLy8gSW52YWxp
ZCBlc2NhcGUgc2VxdWVuY2UgYmVjYXVzZSB0aGVyZSdzIG5vdCBlbm91Z2ggcm9vbSwgb3IgdGhl
CisgICAgICAgIC8vIGRpZ2l0cyBhcmUgbm90IEFTQ0lJLgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBmaXJzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHNwZWNbKmJlZ2luICsgMV0pOworICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1sqYmVnaW4gKyAyXSk7CisgICAgaWYgKCFVUkxD
aGFyYWN0ZXJUeXBlczo6aXNIZXhDaGFyKGZpcnN0KSB8fCAhVVJMQ2hhcmFjdGVyVHlwZXM6Omlz
SGV4Q2hhcihzZWNvbmQpKSB7CisgICAgICAgIC8vIEludmFsaWQgaGV4IGRpZ2l0cywgZmFpbC4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZhbGlkIGVzY2FwZSBzZXF1
ZW5jZS4KKyAgICAqdW5lc2NhcGVkVmFsdWUgPSAoaGV4Q2hhclRvVmFsdWUoZmlyc3QpIDw8IDQp
ICsgaGV4Q2hhclRvVmFsdWUoc2Vjb25kKTsKKyAgICAqYmVnaW4gKz0gMjsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIHRvIHRoZSBvdXRwdXQs
IGVzY2FwaW5nICJzb21lIiBjaGFyYWN0ZXJzIHRoYXQKKy8vIGl0IGZlZWxzIG1heSBub3QgYmUg
c2FmZS4gSXQgYXNzdW1lcyB0aGUgaW5wdXQgdmFsdWVzIGFyZSBhbGwgY29udGFpbmVkIGluCisv
LyA4LWJpdCBhbHRob3VnaCBpdCBhbGxvd3MgYW55IHR5cGUuCisvLworLy8gVGhpcyBpcyB1c2Vk
IGluIGVycm9yIGNhc2VzIHRvIGFwcGVuZCBpbnZhbGlkIG91dHB1dCBzbyB0aGF0IGl0IGxvb2tz
CisvLyBhcHByb3hpbWF0ZWx5IGNvcnJlY3QuIE5vbi1lcnJvciBjYXNlcyBzaG91bGQgbm90IGNh
bGwgdGhpcyBmdW5jdGlvbiBzaW5jZQorLy8gdGhlIGVzY2FwaW5nIHJ1bGVzIGFyZSBub3QgZ3Vh
cmFudGVlZCEKK3ZvaWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBjaGFyKiBzcGVj
LCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKK3ZvaWQgQXBw
ZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBVQ2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQg
ZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7CisKKy8vIE1pc2MgY2Fub25pY2FsaXphdGlv
biBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworLy8gQ29udmVydHMgYmV0d2VlbiBVVEYtOCBhbmQgVVRGLTE2LCByZXR1cm5pbmcgdHJ1ZSBv
biBzdWNjZXNzZnVsIGNvbnZlcnNpb24uCisvLyBUaGUgb3V0cHV0IHdpbGwgYmUgYXBwZW5kZWQg
dG8gdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZXIgb3V0cHV0IChzbyBtYWtlIHN1cmUKKy8vIGl0J3Mg
ZW1wdHkgaWYgeW91IHdhbnQgdG8gcmVwbGFjZSkuCisvLworLy8gT24gaW52YWxpZCBpbnB1dCwg
dGhpcyB3aWxsIHN0aWxsIHdyaXRlIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLAorLy8gcmVw
bGFjaW5nIHRoZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCB0aGUgImludmFsaWQgY2hhcmFjdGVy
Ii4gSXQgd2lsbAorLy8gcmV0dXJuIGZhbHNlIGluIHRoZSBmYWlsdXJlIGNhc2UsIGFuZCB0aGUg
Y2FsbGVyIHNob3VsZCBub3QgY29udGludWUgYXMKKy8vIG5vcm1hbC4KK2Jvb2wgQ29udmVydFVU
RjE2VG9VVEY4KGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCk7Citib29sIENvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBjaGFyKiBpbnB1
dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpOworCisvLyBDb252
ZXJ0cyBmcm9tIFVURi0xNiB0byA4LWJpdCB1c2luZyB0aGUgY2hhcmFjdGVyIHNldCBjb252ZXJ0
ZXIuIElmIHRoZQorLy8gY29udmVydGVyIGlzIG51bGwsIHRoaXMgd2lsbCB1c2UgVVRGLTguCit2
b2lkIENvbnZlcnRVVEYxNlRvUXVlcnlFbmNvZGluZyhjb25zdCBVQ2hhciogaW5wdXQsIGNvbnN0
IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCk7CisKKy8vIEFwcGxpZXMgdGhlIHJlcGxhY2VtZW50cyB0byB0aGUgZ2l2ZW4gY29t
cG9uZW50IHNvdXJjZS4gVGhlIGNvbXBvbmVudCBzb3VyY2UKKy8vIHNob3VsZCBiZSBwcmUtaW5p
dGlhbGl6ZWQgdG8gdGhlICJvbGQiIGJhc2UuIFRoYXQgaXMsIGFsbCBwb2ludGVycyB3aWxsCisv
LyBwb2ludCB0byB0aGUgc3BlYyBvZiB0aGUgb2xkIFVSTCwgYW5kIGFsbCBvZiB0aGUgUGFyc2Vk
IGNvbXBvbmVudHMgd2lsbAorLy8gYmUgaW5kaWNlcyBpbnRvIHRoYXQgc3RyaW5nLgorLy8KKy8v
IFRoZSBwb2ludGVycyBhbmQgY29tcG9uZW50cyBpbiB0aGUgfHNvdXJjZXwgZm9yIGFsbCBub24t
bnVsbCBzdHJpbmdzIGluIHRoZQorLy8gfHJlcGx8IChyZXBsYWNlbWVudHMpIHdpbGwgYmUgdXBk
YXRlZCB0byByZWZlcmVuY2UgdGhvc2Ugc3RyaW5ncy4KKy8vIENhbm9uaWNhbGl6aW5nIHdpdGgg
dGhlIG5ldyB8c291cmNlfCBhbmQgfHBhcnNlZHwgY2FuIHRoZW4gY29tYmluZSBVUkwKKy8vIGNv
bXBvbmVudHMgZnJvbSBtYW55IGRpZmZlcmVudCBzdHJpbmdzLgordm9pZCBTZXR1cE92ZXJyaWRl
Q29tcG9uZW50cyhjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxTZWdtZW50cyogcGFyc2VkKTsKKworLy8gTGlrZSB0aGUgYWJvdmUgOC1iaXQgdmVyc2lv
biwgZXhjZXB0IHRoYXQgaXQgYWRkaXRpb25hbGx5IGNvbnZlcnRzIHRoZQorLy8gVVRGLTE2IGlu
cHV0IHRvIFVURi04IGJlZm9yZSBkb2luZyB0aGUgb3ZlcnJpZGVzLgorLy8KKy8vIFRoZSBnaXZl
biB1dGY4QnVmZmVyIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbnZlcnRlZCBjb21wb25lbnRzLiBU
aGV5IHdpbGwKKy8vIGJlIGFwcGVuZGVkIG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIHRoZSBwYXJz
ZWQgc3RydWN0dXJlIGlkZW50aWZ5aW5nIHRoZQorLy8gYXBwcm9wcmlhdGUgc3Vic3RyaW5ncy4g
VGhpcyBidWZmZXIgaXMgYSBwYXJhbWV0ZXIgYmVjYXVzZSB0aGUgc291cmNlIGhhcworLy8gbm8g
c3RvcmFnZSwgc28gdGhlIGJ1ZmZlciBtdXN0IGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUgYXMgdGhl
IHNvdXJjZQorLy8gcGFyYW1ldGVyIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisvLworLy8gVEhFIENB
TExFUiBNVVNUIE5PVCBBREQgVE8gVEhFIHx1dGY4QnVmZmVyfCBBRlRFUiBUSElTIENBTEwuIE1l
bWJlcnMgb2YKKy8vIHxzb3VyY2V8IHdpbGwgcG9pbnQgaW50byB0aGlzIGJ1ZmZlciwgd2hpY2gg
Y291bGQgYmUgaW52YWxpZGF0ZWQgaWYKKy8vIGFkZGl0aW9uYWwgZGF0YSBpcyBhZGRlZCBhbmQg
dGhlIENhbm9uT3V0cHV0IHJlc2l6ZXMgaXRzIGJ1ZmZlci4KKy8vCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzcy4gRmFsZXMgbWVhbnMgdGhhdCB0aGUgaW5wdXQgd2FzIG5vdCB2YWxpZCBVVEYt
MTYsCisvLyBhbHRob3VnaCB3ZSB3aWxsIGhhdmUgc3RpbGwgZG9uZSB0aGUgb3ZlcnJpZGUgd2l0
aCAiaW52YWxpZCBjaGFyYWN0ZXJzIiBpbgorLy8gcGxhY2Ugb2YgZXJyb3JzLgorYm9vbCBTZXR1
cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiB1dGY4QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFy
PiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIHBhcnNl
ZCk7CisKKy8vIEltcGxlbWVudGVkIGluIFVSTENhbm9uaWNhbGl6ZXJfcGF0aC5jYywgdGhlc2Ug
YXJlIHJlcXVpcmVkIGJ5IHRoZSByZWxhdGl2ZSBVUkwKKy8vIHJlc29sdmVyIGFzIHdlbGwsIHNv
IHdlIGRlY2xhcmUgdGhlbSBoZXJlLgorYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25z
dCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21w
b25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5J
bk91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpOworYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBVQ2hhciogc3BlYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKKworI2lm
ICFPUyhXSU5ET1dTKQorLy8gSW1wbGVtZW50YXRpb25zIG9mIFdpbmRvd3MnIGludC10by1zdHJp
bmcgY29udmVyc2lvbnMKK2ludCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciogYnVmZmVyLCBzaXpl
X3Qgc2l6ZUluQ2hhcnMsIGludCByYWRpeCk7CitpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFy
KiBidWZmZXIsIHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KTsKKworLy8gU2VjdXJlIHRl
bXBsYXRlIG92ZXJsb2FkcyBmb3IgdGhlc2UgZnVuY3Rpb25zCit0ZW1wbGF0ZTxzaXplX3QgTj4K
K2lubGluZSBpbnQgX2l0b2FfcyhpbnQgdmFsdWUsIGNoYXIgKCZidWZmZXIpW05dLCBpbnQgcmFk
aXgpCit7CisgICAgcmV0dXJuIF9pdG9hX3ModmFsdWUsIGJ1ZmZlciwgTiwgcmFkaXgpOworfQor
Cit0ZW1wbGF0ZTxzaXplX3QgTj4KK2lubGluZSBpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFy
ICgmYnVmZmVyKVtOXSwgaW50IHJhZGl4KQoreworICAgIHJldHVybiBfaXRvd19zKHZhbHVlLCBi
dWZmZXIsIE4sIHJhZGl4KTsKK30KKworLy8gX3N0cnRvdWk2NCBhbmQgc3RydG91bGwgYmVoYXZl
IHRoZSBzYW1lCitpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9zdHJ0b3VpNjQoY29uc3QgY2hh
ciogbnB0ciwgY2hhcioqIGVuZHB0ciwgaW50IGJhc2UpCit7CisgICAgcmV0dXJuIHN0cnRvdWxs
KG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworfSAvLyBu
YW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxDYW5vbkludGVybmFsX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbk1haWx0by5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDliYWYxZGIxMzBj
MjdmNGZiOWFkZjFhNTdhMzIxZjA5NTM5NWRjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvLyBD
b3B5cmlnaHQgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIEZ1bmN0aW9ucyBmb3IgY2Fub25p
Y2FsaXppbmcgIm1haWx0bzoiIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJM
Q2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJz
ZUludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisKK3RlbXBsYXRlPHR5
cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZU1haWx0b1VS
TChjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q0hBUj4mIHNvdXJjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgLy8gbWFpbHRv
OiBvbmx5IHVzZXMge3NjaGVtZSwgcGF0aCwgcXVlcnl9IC0tIGNsZWFyIHRoZSByZXN0LgorICAg
IG91dHB1dFBhcnNlZC0+dXNlcm5hbWUgPSBVUkxDb21wb25lbnQoKTsKKyAgICBvdXRwdXRQYXJz
ZWQtPnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5ob3N0ID0g
VVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLT5wb3J0ID0gVVJMQ29tcG9uZW50KCk7
CisgICAgb3V0cHV0UGFyc2VkLT5mcmFnbWVudCA9IFVSTENvbXBvbmVudCgpOworCisgICAgLy8g
U2NoZW1lIChrbm93biwgc28gd2UgZG9uJ3QgYm90aGVyIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUg
bW9yZQorICAgIC8vIGNvbXBsaWNhdGVkIHNjaGVtZSBjYW5vbmljYWxpemVyKS4KKyAgICBvdXRw
dXRQYXJzZWQtPnNjaGVtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIG91dHB1dC5h
cHBlbmQoIm1haWx0bzoiLCA3KTsKKyAgICBvdXRwdXRQYXJzZWQtPnNjaGVtZS5zZXRMZW5ndGgo
Nik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgLy8gUGF0aAorICAgIGlmIChw
YXJzZWQucGF0aC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0cHV0UGFyc2VkLT5wYXRoLnNldEJl
Z2luKG91dHB1dC5sZW5ndGgoKSk7CisKKyAgICAgICAgLy8gQ29weSB0aGUgcGF0aCB1c2luZyBw
YXRoIFVSTCdzIG1vcmUgbGF4IGVzY2FwaW5nIHJ1bGVzLgorICAgICAgICAvLyBXZSBjb252ZXJ0
IHRvIFVURi04IGFuZCBlc2NhcGUgbm9uLUFTQ0lJLCBidXQgbGVhdmUgYWxsCisgICAgICAgIC8v
IEFTQ0lJIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgIGludCBlbmQgPSBwYXJzZWQucGF0aC5l
bmQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHBhcnNlZC5wYXRoLmJlZ2luKCk7IGkgPCBlbmQ7
ICsraSkgeworICAgICAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNvdXJj
ZS5wYXRoW2ldKTsKKyAgICAgICAgICAgIGlmICh1Y2ggPCAweDIwIHx8IHVjaCA+PSAweDgwKQor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRDaGFyKHNvdXJjZS5w
YXRoLCAmaSwgZW5kLCBvdXRwdXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odWNoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBvdXRwdXRQYXJzZWQtPnBhdGguc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1
dFBhcnNlZC0+cGF0aC5iZWdpbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBwYXRo
IGF0IGFsbAorICAgICAgICBvdXRwdXRQYXJzZWQtPnBhdGgucmVzZXQoKTsKKyAgICB9CisKKyAg
ICAvLyBRdWVyeSAtLSBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IHV0ZjggY2hhcnNldCBjb252ZXJ0
ZXIuCisgICAgQ2Fub25pY2FsaXplUXVlcnkoc291cmNlLnF1ZXJ5LCBwYXJzZWQucXVlcnksIDAs
IG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK30gLy8gbmFtZXNwYWNlCisKK2Jvb2wgQ2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IGNo
YXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICBy
ZXR1cm4gRG9DYW5vbmljYWxpemVNYWlsdG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJMQ29t
cG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsK
K30KKworYm9vbCBDYW5vbmljYWxpemVNYWlsdG9VUkwoY29uc3QgVUNoYXIqIHNwZWMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fu
b25pY2FsaXplTWFpbHRvVVJMPFVDaGFyLCBVQ2hhcj4oVVJMQ29tcG9uZW50U291cmNlPFVDaGFy
PihzcGVjKSwgcGFyc2VkLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgUmVwbGFj
ZU1haWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
cGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRz
KiBvdXRwdXRQYXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShi
YXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVy
cmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAg
ICByZXR1cm4gRG9DYW5vbmljYWxpemVNYWlsdG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291
cmNlLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9vbCBSZXBsYWNlTWFp
bHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJM
U2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFj
ZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBv
dXRwdXRQYXJzZWQpCit7CisgICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7CisgICAgVVJMQ29t
cG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJzZWQo
YmFzZVBhcnNlZCk7CisgICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBs
YWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBEb0Nhbm9uaWNh
bGl6ZU1haWx0b1VSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgb3V0cHV0
LCBvdXRwdXRQYXJzZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRoLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2Fub25QYXRoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTNmYzE3NWJhMWM5MjI2OGRm
OTA3OTRlZjc0NDk1M2NiYzE5YTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vblBhdGguY3BwCkBAIC0wLDAgKzEsMzkwIEBACisvLyBDb3B5cmlnaHQg
MjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDEy
LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisvLyBDYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucyBmb3Ig
dGhlIHBhdGhzIG9mIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxD
YW5vbi5oIgorCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTFBh
cnNlSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKK2VudW0gQ2hhcmFj
dGVyRmxhZ3MgeworICAgIC8vIFBhc3MgdGhyb3VnaCB1bmNoYW5nZWQsIHdoZXRoZXIgZXNjYXBl
ZCBvciB1bmVzY2FwZWQuIFRoaXMgZG9lc24ndAorICAgIC8vIGFjdHVhbGx5IHNldCBhbnl0aGlu
ZyBzbyB5b3UgY2FuJ3QgT1IgaXQgdG8gY2hlY2ssIGl0J3MganVzdCB0byBtYWtlIHRoZQorICAg
IC8vIHRhYmxlIGJlbG93IG1vcmUgY2xlYXIgd2hlbiBuZWl0aGVyIEVTQ0FQRSBvciBVTkVTQ0FQ
RSBpcyBzZXQuCisgICAgUEFTUyA9IDAsCisKKyAgICAvLyBUaGlzIGNoYXJhY3RlciByZXF1aXJl
cyBzcGVjaWFsIGhhbmRsaW5nIGluIERvUGFydGlhbFBhdGguIERvaW5nIHRoaXMgdGVzdAorICAg
IC8vIGZpcnN0IGFsbG93cyB1cyB0byBmaWx0ZXIgb3V0IHRoZSBjb21tb24gY2FzZXMgb2YgcmVn
dWxhciBjaGFyYWN0ZXJzIHRoYXQKKyAgICAvLyBjYW4gYmUgZGlyZWN0bHkgY29waWVkLgorICAg
IFNQRUNJQUwgPSAxLAorCisgICAgLy8gVGhpcyBjaGFyYWN0ZXIgbXVzdCBiZSBlc2NhcGVkIGlu
IHRoZSBjYW5vbmljYWwgb3V0cHV0LiBOb3RlIHRoYXQgYWxsCisgICAgLy8gZXNjYXBlZCBjaGFy
cyBhbHNvIGhhdmUgdGhlICJzcGVjaWFsIiBiaXQgc2V0IHNvIHRoYXQgdGhlIGNvZGUgdGhhdCBs
b29rcworICAgIC8vIGZvciB0aGlzIGlzIHRyaWdnZXJlZC4gTm90IHZhbGlkIHdpdGggUEFTUyBv
ciBFU0NBUEUKKyAgICBFU0NBUEVfQklUID0gMiwKKyAgICBFU0NBUEUgPSBFU0NBUEVfQklUIHwg
U1BFQ0lBTCwKKworICAgIC8vIFRoaXMgY2hhcmFjdGVyIG11c3QgYmUgdW5lc2NhcGVkIGluIGNh
bm9uaWNhbCBvdXRwdXQuIE5vdCB2YWxpZCB3aXRoCisgICAgLy8gRVNDQVBFIG9yIFBBU1MuIFdl
IERPTidUIHNldCB0aGUgU1BFQ0lBTCBmbGFnIHNpbmNlIGlmIHdlIGVuY291bnRlciB0aGVzZQor
ICAgIC8vIGNoYXJhY3RlcnMgdW5lc2NhcGVkLCB0aGV5IHNob3VsZCBqdXN0IGJlIGNvcGllZC4K
KyAgICBVTkVTQ0FQRSA9IDQsCisKKyAgICAvLyBUaGlzIGNoYXJhY3RlciBpcyBkaXNhbGxvd2Vk
IGluIFVSTHMuIE5vdGUgdGhhdCB0aGUgInNwZWNpYWwiIGJpdCBpcyBhbHNvCisgICAgLy8gc2V0
IHRvIHRyaWdnZXIgaGFuZGxpbmcuCisgICAgSU5WQUxJRF9CSVQgPSA4LAorICAgIElOVkFMSUQg
PSBJTlZBTElEX0JJVCB8IFNQRUNJQUwsCit9OworCisvLyBUaGlzIHRhYmxlIGNvbnRhaW5zIG9u
ZSBvZiB0aGUgYWJvdmUgZmxhZyB2YWx1ZXMuIE5vdGUgc29tZSBmbGFncyBhcmUgbW9yZQorLy8g
dGhhbiBvbmUgYml0cyBiZWNhdXNlIHRoZXkgYWxzbyB0dXJuIG9uIHRoZSAic3BlY2lhbCIgZmxh
Zy4gU3BlY2lhbCBpcyB0aGUKKy8vIG9ubHkgZmxhZyB0aGF0IG1heSBiZSBjb21iaW5lZCB3aXRo
IG90aGVycy4KKy8vCisvLyBUaGlzIHRhYmxlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIGV4YWN0bHkg
d2hhdCBJRSBkb2VzIHdpdGggdGhlIGNoYXJhY3RlcnMuCisvLworLy8gRG90IGlzIGV2ZW4gbW9y
ZSBzcGVjaWFsLCBhbmQgdGhlIGVzY2FwZWQgdmVyc2lvbiBpcyBoYW5kbGVkIHNwZWNpYWxseSBi
eQorLy8gaXNEb3QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0aGUgImVzY2FwZSIgZmxhZywg
YW5kIGV2ZW4gdGhlICJ1bmVzY2FwZSIKKy8vIGJpdCBpcyBuZXZlciBoYW5kbGVkICh3ZSBqdXN0
IG5lZWQgdGhlICJzcGVjaWFsIikgYml0LgorY29uc3QgdW5zaWduZWQgY2hhciBrUGF0aENoYXJM
b29rdXBbMHgxMDBdID0geworLy8gICBudWxsICAgICBjb250cm9sIGNoYXJzLi4uCisgICAgIElO
VkFMSUQsICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKy8vICAgY29udHJvbCBj
aGFycy4uLgorICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
CisvLyAgICcgJyAgICAgICAhICAgICAgICAgIiAgICAgICAgICMgICAgICAgICAkICAgICAgICAg
JSAgICAgICAgICYgICAgICAgICAnICAgICAgICAgKCAgICAgICAgICkgICAgICAgICAqICAgICAg
ICAgKyAgICAgICAgICwgICAgICAgICAtICAgICAgICAgLiAgICAgICAgIC8KKyAgICAgRVNDQVBF
LCAgIFBBU1MsICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIFBBU1MsICAgICBFU0NBUEUsICAgUEFT
UywgICAgIFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywgICAgIFBBU1MsICAgICBQQVNTLCAgICAg
UEFTUywgICAgIFVORVNDQVBFLCBTUEVDSUFMLCAgUEFTUywKKy8vICAgMCAgICAgICAgIDEgICAg
ICAgICAyICAgICAgICAgMyAgICAgICAgIDQgICAgICAgICA1ICAgICAgICAgNiAgICAgICAgIDcg
ICAgICAgICA4ICAgICAgICAgOSAgICAgICAgIDogICAgICAgICA7ICAgICAgICAgPCAgICAgICAg
ID0gICAgICAgICAgPiAgICAgICAgPworICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVND
QVBFLCBVTkVTQ0FQRSwgUEFTUywgICAgIFBBU1MsICAgICBFU0NBUEUsICAgUEFTUywgICAgIEVT
Q0FQRSwgICBFU0NBUEUsCisvLyAgIEAgICAgICAgICBBICAgICAgICAgQiAgICAgICAgIEMgICAg
ICAgICBEICAgICAgICAgRSAgICAgICAgIEYgICAgICAgICBHICAgICAgICAgSCAgICAgICAgIEkg
ICAgICAgICBKICAgICAgICAgSyAgICAgICAgIEwgICAgICAgICBNICAgICAgICAgTiAgICAgICAg
IE8KKyAgICAgUEFTUywgICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVND
QVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsCisv
LyAgIFAgICAgICAgICBRICAgICAgICAgUiAgICAgICAgIFMgICAgICAgICBUICAgICAgICAgVSAg
ICAgICAgIFYgICAgICAgICBXICAgICAgICAgWCAgICAgICAgIFkgICAgICAgICBaICAgICAgICAg
WyAgICAgICAgIFwgICAgICAgICBdICAgICAgICAgXiAgICAgICAgIF8KKyAgICAgVU5FU0NBUEUs
IFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBQQVNTLCAgICAgRVND
QVBFLCAgIFBBU1MsICAgICBFU0NBUEUsICAgVU5FU0NBUEUsCisvLyAgIGAgICAgICAgICBhICAg
ICAgICAgYiAgICAgICAgIGMgICAgICAgICBkICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBn
ICAgICAgICAgaCAgICAgICAgIGkgICAgICAgICBqICAgICAgICAgayAgICAgICAgIGwgICAgICAg
ICBtICAgICAgICAgbiAgICAgICAgIG8KKyAgICAgRVNDQVBFLCAgIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBV
TkVTQ0FQRSwgVU5FU0NBUEUsCisvLyAgIHAgICAgICAgICBxICAgICAgICAgciAgICAgICAgIHMg
ICAgICAgICB0ICAgICAgICAgdSAgICAgICAgIHYgICAgICAgICB3ICAgICAgICAgeCAgICAgICAg
IHkgICAgICAgICB6ICAgICAgICAgeyAgICAgICAgIHwgICAgICAgICB9ICAgICAgICAgfiAgICAg
ICAgIDxOQlNQPgorICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIFVORVNDQVBFLCBFU0NB
UEUsCisvLyAgIC4uLmFsbCB0aGUgaGlnaC1iaXQgY2hhcmFjdGVycyBhcmUgZXNjYXBlZAorICAg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorICAgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLAorICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRX07CisK
K2VudW0gRG90RGlzcG9zaXRpb24geworICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMganVzdCBwYXJ0
IG9mIGEgZmlsZW5hbWUgYW5kIGlzIG5vdCBzcGVjaWFsLgorICAgIE5PVF9BX0RJUkVDVE9SWSwK
KworICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgIERJ
UkVDVE9SWV9DVVIsCisKKyAgICAvLyBUaGUgZ2l2ZW4gZG90IGlzIHRoZSBmaXJzdCBvZiBhIGRv
dWJsZSBkb3QgdGhhdCBzaG91bGQgdGFrZSB1cyB1cCBvbmUuCisgICAgRElSRUNUT1JZX1VQCit9
OworCisvLyBXaGVuIHRoZSBwYXRoIHJlc29sdmVyIGZpbmRzIGEgZG90LCB0aGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aXRoIHRoZQorLy8gY2hhcmFjdGVyIGZvbGxvd2luZyB0aGF0IGRvdCB0byBz
ZWUgd2hhdCBpdCBpcy4gVGhlIHJldHVybiB2YWx1ZQorLy8gaW5kaWNhdGVzIHdoYXQgdHlwZSB0
aGlzIGRvdCBpcyAoc2VlIGFib3ZlKS4gVGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNhc2UKKy8vIHdo
ZXJlIHRoZSBkb3QgaXMgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCisvLworLy8gfCpjb25zdW1l
ZExlbmd0aHwgd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgaW5w
dXQgdGhhdAorLy8gZXhwcmVzcyB3aGF0IHdlIGZvdW5kLgorLy8KKy8vIElmIHRoZSBpbnB1dCBp
cyAiLi4vZm9vIiwgfGFmdGVyRG90fCA9IDEsIHxlbmR8ID0gNiwgYW5kCisvLyBhdCB0aGUgZW5k
LCB8KmNvbnN1bWVkTGVuZ3RofCA9IDIgZm9yIHRoZSAiLi8iIHRoaXMgZnVuY3Rpb24gY29uc3Vt
ZWQuIFRoZQorLy8gb3JpZ2luYWwgZG90IGxlbmd0aCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUg
Y2FsbGVyLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK0RvdERpc3Bvc2l0aW9uIENsYXNzaWZ5
QWZ0ZXJEb3QoY29uc3QgQ0hBUiogc3BlYywgaW50IGFmdGVyRG90LCBpbnQgZW5kLCBpbnQqIGNv
bnN1bWVkTGVuZ3RoKQoreworICAgIGlmIChhZnRlckRvdCA9PSBlbmQpIHsKKyAgICAgICAgLy8g
U2luZ2xlIGRvdCBhdCB0aGUgZW5kLgorICAgICAgICAqY29uc3VtZWRMZW5ndGggPSAwOworICAg
ICAgICByZXR1cm4gRElSRUNUT1JZX0NVUjsKKyAgICB9CisgICAgaWYgKFVSTFBhcnNlcjo6aXNV
UkxTbGFzaChzcGVjW2FmdGVyRG90XSkpIHsKKyAgICAgICAgLy8gU2luZ2xlIGRvdCBmb2xsb3dl
ZCBieSBhIHNsYXNoLgorICAgICAgICAqY29uc3VtZWRMZW5ndGggPSAxOyAvLyBDb25zdW1lIHRo
ZSBzbGFzaAorICAgICAgICByZXR1cm4gRElSRUNUT1JZX0NVUjsKKyAgICB9CisKKyAgICBpbnQg
c2Vjb25kRG90TGVuZ3RoID0gaXNEb3Qoc3BlYywgYWZ0ZXJEb3QsIGVuZCk7CisgICAgaWYgKHNl
Y29uZERvdExlbmd0aCkgeworICAgICAgICBpbnQgYWZ0ZXJTZWNvbmREb3QgPSBhZnRlckRvdCAr
IHNlY29uZERvdExlbmd0aDsKKyAgICAgICAgaWYgKGFmdGVyU2Vjb25kRG90ID09IGVuZCkgewor
ICAgICAgICAgICAgLy8gRG91YmxlIGRvdCBhdCB0aGUgZW5kLgorICAgICAgICAgICAgKmNvbnN1
bWVkTGVuZ3RoID0gc2Vjb25kRG90TGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIERJUkVDVE9S
WV9VUDsKKyAgICAgICAgfQorICAgICAgICBpZiAoVVJMUGFyc2VyOjppc1VSTFNsYXNoKHNwZWNb
YWZ0ZXJTZWNvbmREb3RdKSkgeworICAgICAgICAgICAgLy8gRG91YmxlIGRvdCBmb2xsb3dlZCBi
eSBhIHNsYXNoLgorICAgICAgICAgICAgKmNvbnN1bWVkTGVuZ3RoID0gc2Vjb25kRG90TGVuZ3Ro
ICsgMTsKKyAgICAgICAgICAgIHJldHVybiBESVJFQ1RPUllfVVA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBUaGUgZG90cyBhcmUgZm9sbG93ZWQgYnkgc29tZXRoaW5nIGVsc2UsIG5vdCBh
IGRpcmVjdG9yeS4KKyAgICAqY29uc3VtZWRMZW5ndGggPSAwOworICAgIHJldHVybiBOT1RfQV9E
SVJFQ1RPUlk7Cit9CisKKy8vIFJld2luZHMgdGhlIG91dHB1dCB0byB0aGUgcHJldmlvdXMgc2xh
c2guIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgb3V0cHV0CisvLyBlbmRzIHdpdGggYSBzbGFzaCBh
bmQgdGhpcyBkb2Vzbid0IGNvdW50ICh3ZSBjYWxsIHRoaXMgd2hlbiB3ZSBhcmUKKy8vIGFwcGVu
ZGluZyBkaXJlY3RvcnkgcGF0aHMsIHNvIHRoZSBwcmV2aW91cyBwYXRoIGNvbXBvbmVudCBoYXMg
YW5kIGVuZGluZworLy8gc2xhc2gpLgorLy8KKy8vIFRoaXMgd2lsbCBzdG9wIGF0IHRoZSBmaXJz
dCBzbGFzaCAoYXNzdW1lZCB0byBiZSBhdCBwb3NpdGlvbgorLy8gfHBhdGhCZWdpbkluT3V0cHV0
fCBhbmQgbm90IGdvIGFueSBoaWdoZXIgdGhhbiB0aGF0LiBTb21lIHdlYiBwYWdlcworLy8gZG8g
Ii4uIiB0b28gbWFueSB0aW1lcywgc28gd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBicm9rZW5uZXNz
LgorLy8KKy8vIEl0IHNlYXJjaGVzIGZvciBhIGxpdGVyYWwgc2xhc2ggcmF0aGVyIHRoYW4gaW5j
bHVkaW5nIGEgYmFja3NsYXNoIGFzIHdlbGwKKy8vIGJlY2F1c2UgaXQgaXMgcnVuIG9ubHkgb24g
dGhlIGNhbm9uaWNhbCBvdXRwdXQuCisvLworLy8gVGhlIG91dHB1dCBpcyBndWFyYW50ZWVkIHRv
IGVuZCBpbiBhIHNsYXNoIHdoZW4gdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMuCit2b2lkIEJhY2tV
cFRvUHJldmlvdXNTbGFzaChpbnQgcGF0aEJlZ2luSW5PdXRwdXQsIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0KQoreworICAgIEFTU0VSVChvdXRwdXQubGVuZ3RoKCkgPiAwKTsKKworICAgIGludCBp
ID0gb3V0cHV0Lmxlbmd0aCgpIC0gMTsKKyAgICBBU1NFUlQob3V0cHV0LmF0KGkpID09ICcvJyk7
CisgICAgaWYgKGkgPT0gcGF0aEJlZ2luSW5PdXRwdXQpCisgICAgICAgIHJldHVybjsgLy8gV2Un
cmUgYXQgdGhlIGZpcnN0IHNsYXNoLCBub3RoaW5nIHRvIGRvLgorCisgICAgLy8gTm93IGJhY2sg
dXAgKHNraXBwaW5nIHRoZSB0cmFpbGluZyBzbGFzaCkgdW50aWwgd2UgZmluZCBhbm90aGVyIHNs
YXNoLgorICAgIGktLTsKKyAgICB3aGlsZSAob3V0cHV0LmF0KGkpICE9ICcvJyAmJiBpID4gcGF0
aEJlZ2luSW5PdXRwdXQpCisgICAgICAgIGktLTsKKworICAgIC8vIE5vdyBzaHJpbmsgdGhlIG91
dHB1dCB0byBqdXN0IGluY2x1ZGUgdGhhdCBsYXN0IHNsYXNoIHdlIGZvdW5kLgorICAgIG91dHB1
dC5zZXRMZW5ndGgoaSArIDEpOworfQorCisvLyBBcHBlbmRzIHRoZSBnaXZlbiBwYXRoIHRvIHRo
ZSBvdXRwdXQuIEl0IGFzc3VtZXMgdGhhdCBpZiB0aGUgaW5wdXQgcGF0aAorLy8gc3RhcnRzIHdp
dGggYSBzbGFzaCwgaXQgc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0LiBJZiBubyBwYXRo
IGhhcworLy8gYWxyZWFkeSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgKHRoZSBjYXNlIHdo
ZW4gbm90IHJlc29sdmluZworLy8gcmVsYXRpdmUgVVJMcyksIHRoZSBwYXRoIHNob3VsZCBiZWdp
biB3aXRoIGEgc2xhc2guCisvLworLy8gSWYgdGhlcmUgYXJlIGFscmVhZHkgcGF0aCBjb21wb25l
bnRzICh0aGlzIG1vZGUgaXMgdXNlZCB3aGVuIGFwcGVuZGluZworLy8gcmVsYXRpdmUgcGF0aHMg
Zm9yIHJlc29sdmluZyksIGl0IGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGFscmVhZHkgaGFzCisv
LyBhIHRyYWlsaW5nIHNsYXNoIGFuZCB0aGF0IGlmIHRoZSBpbnB1dCBiZWdpbnMgd2l0aCBhIHNs
YXNoLCBpdCBzaG91bGQgYmUKKy8vIGNvcGllZCB0byB0aGUgb3V0cHV0LgorLy8KKy8vIFdlIGRv
IG5vdCBjb2xsYXBzZSBtdWx0aXBsZSBzbGFzaGVzIGluIGEgcm93IHRvIGEgc2luZ2xlIHNsYXNo
LiBJdCBzZWVtcworLy8gbm8gd2ViIGJyb3dzZXJzIGRvIHRoaXMsIGFuZCB3ZSBkb24ndCB3YW50
IGluY29tcGFiYWJpbGl0aWVzLCBldmVuIHRob3VnaAorLy8gaXQgd291bGQgYmUgY29ycmVjdCBm
b3IgbW9zdCBzeXN0ZW1zLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNIQVI+
Citib29sIERvUGFydGlhbFBhdGgoY29uc3QgQ0hBUiogc3BlYywKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgaW50IHBhdGhC
ZWdpbkluT3V0cHV0LAorICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
KQoreworICAgIGludCBlbmQgPSBwYXRoLmVuZCgpOworCisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKyAgICBmb3IgKGludCBpID0gcGF0aC5iZWdpbigpOyBpIDwgZW5kOyBpKyspIHsKKyAgICAg
ICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pOworICAgICAgICBpZiAo
c2l6ZW9mKENIQVIpID4gc2l6ZW9mKGNoYXIpICYmIHVjaCA+PSAweDgwKSB7CisgICAgICAgICAg
ICAvLyBXZSBvbmx5IG5lZWQgdG8gdGVzdCB3aWRlIGlucHV0IGZvciBoYXZpbmcgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuIEZvcgorICAgICAgICAgICAgLy8gbmFycm93IGlucHV0LCB3ZSdsbCBhbHdh
eXMganVzdCB1c2UgdGhlIGxvb2t1cCB0YWJsZS4gV2UgZG9uJ3QgdHJ5IHRvCisgICAgICAgICAg
ICAvLyBkbyBhbnl0aGluZyB0cmlja3kgd2l0aCBkZWNvZGluZy92YWxpZGF0aW5nIFVURi04LiBU
aGlzIGZ1bmN0aW9uIHdpbGwKKyAgICAgICAgICAgIC8vIHJlYWQgb25lIG9yIHR3byBVVEYtMTYg
Y2hhcmFjdGVycyBhbmQgYXBwZW5kIHRoZSBvdXRwdXQgYXMgVVRGLTguIFRoaXMKKyAgICAgICAg
ICAgIC8vIGNhbGwgd2lsbCBiZSByZW1vdmVkIGluIDgtYml0IG1vZGUuCisgICAgICAgICAgICBz
dWNjZXNzICY9IEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAmaSwgZW5kLCBvdXRwdXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm9ybWFsIEFTQ0lJIGNoYXJhY3RlciBv
ciA4LWJpdCBpbnB1dCwgdXNlIHRoZSBsb29rdXAgdGFibGUuCisgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIG91dENoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odWNoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MgPSBrUGF0aENoYXJMb29rdXBbb3V0Q2hdOworICAgICAg
ICAgICAgaWYgKGZsYWdzICYgU1BFQ0lBTCkgeworICAgICAgICAgICAgICAgIC8vIE5lZWRzIHNw
ZWNpYWwgaGFuZGxpbmcgb2Ygc29tZSBzb3J0LgorICAgICAgICAgICAgICAgIGludCBkb3RsZW47
CisgICAgICAgICAgICAgICAgaWYgKChkb3RsZW4gPSBpc0RvdChzcGVjLCBpLCBlbmQpKSA+IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZG90IHdhcyBwcmVjZWVkZWQg
YnkgYSBzbGFzaCBpbiB0aGUgb3V0cHV0LiBXZQorICAgICAgICAgICAgICAgICAgICAvLyBhc3N1
bWUgdGhhdCB3aGVuIGNhbm9uaWNhbGl6aW5nIHBhdGhzLCB0aGV5IHdpbGwgYWx3YXlzCisgICAg
ICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHdpdGggYSBzbGFzaCBhbmQgbm90IGEgZG90LCBzbyB3
ZSBkb24ndCBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kcyBjaGVjayB0aGUg
b3V0cHV0LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgd2UgY2hlY2sgdGhpcyBpbiB0aGUgY2FzZSBvZiBkb3RzIHNvIHdlIGRvbid0IGhh
dmUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIHNsYXNoZXMuIFNpbmNl
IHNsYXNoZXMgYXJlIG11Y2ggbW9yZSBjb21tb24gdGhhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkb3RzLCB0aGlzIGFjdHVhbGx5IGluY3JlYXNlcyBwZXJmb3JtYW5jZSBtZWFzdXJhYmx5ICh0
aG91Z2gKKyAgICAgICAgICAgICAgICAgICAgLy8gc2xpZ2h0bHkpLgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQob3V0cHV0Lmxlbmd0aCgpID4gcGF0aEJlZ2luSW5PdXRwdXQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCgpID4gcGF0aEJlZ2luSW5PdXRwdXQgJiYg
b3V0cHV0LmF0KG91dHB1dC5sZW5ndGgoKSAtIDEpID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU2xhc2ggZm9sbG93ZWQgYnkgYSBkb3QsIGNoZWNrIHRvIHNlZSBpZiB0aGlz
IGlzIG1lYW5zIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29uc3VtZWRM
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKENsYXNzaWZ5QWZ0ZXJEb3Q8
Q0hBUj4oc3BlYywgaSArIGRvdGxlbiwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25zdW1lZExlbmd0aCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIE5PVF9BX0RJUkVDVE9SWToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgZG90IHRvIHRoZSBvdXRwdXQsIGl0IG1lYW5z
IG5vdGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZCgnLicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGRvdGxl
biAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUT1JZX0NVUjogLy8gQ3VycmVudCBkaXJlY3Rv
cnksIGp1c3Qgc2tpcCB0aGUgaW5wdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkgKz0gZG90bGVuICsgY29uc3VtZWRMZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJUkVD
VE9SWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja1VwVG9QcmV2aW91
c1NsYXNoKHBhdGhCZWdpbkluT3V0cHV0LCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpICs9IGRvdGxlbiArIGNvbnN1bWVkTGVuZ3RoIC0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGRvdCBpcyBub3QgcHJlY2VlZGVkIGJ5IGEgc2xhc2gsIGl0IGlzIGp1c3QgcGFydCBvZiBz
b21lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlIG5hbWUuCisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ICs9IGRvdGxlbiAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAob3V0Q2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICAvLyBDb252
ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcworICAgICAgICAgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCcvJyk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG91dENoID09
ICclJykgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZXNjYXBlIHNlcXVlbmNlcy4K
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB1bmVzY2FwZWRWYWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKERlY29kZUVzY2FwZWQoc3BlYywgJmksIGVuZCwgJnVuZXNjYXBl
ZFZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgZXNjYXBlIHNlcXVl
bmNlLCBzZWUgaWYgd2Uga2VlcCwgcmVqZWN0LCBvciB1bmVzY2FwZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgdW5lc2NhcGVkRmxhZ3MgPSBrUGF0aENoYXJMb29rdXBbdW5lc2Nh
cGVkVmFsdWVdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkRmxhZ3Mg
JiBVTkVTQ0FQRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZXNjYXBl
ZCB2YWx1ZSBzaG91bGRuJ3QgYmUgZXNjYXBlZCwgY29weSBpdC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVuZXNjYXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodW5lc2NhcGVkRmxhZ3MgJiBJTlZBTElEX0JJVCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIsIGNv
cHkgaXQgYW5kIHJlbWVtYmVyIHRoZSBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKCclJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVjW2kgLSAxXSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFs
aWQgZXNjYXBlZCBjaGFyYWN0ZXIgYnV0IHdlIHNob3VsZCBrZWVwIGl0IGVzY2FwZWQuIFdlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIGNh
c2Ugb2YgYW55IGhleCBsZXR0ZXJzIGluIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgc2VydmVyIGlzIHNlbnNpdGl2ZSB0byB0aGF0LCBzbyB3ZSBqdXN0IGNvcHkgdGhl
IHR3bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgd2l0aG91dCBj
aGVja2luZyAoRGVjb2RlRXNjYXBlIHdpbGwgaGF2ZSBhZHZhbmNlZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcGFpcikuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJScpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpIC0g
MV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19j
YXN0PGNoYXI+KHNwZWNbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQg
ZXNjYXBlIHNlcXVlbmNlLiBJRTcgcmVqZWN0cyBhbnkgVVJMcyB3aXRoIHN1Y2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNlcXVlbmNlcywgd2hpbGUgRmlyZWZveCwgSUU2LCBhbmQgU2Fm
YXJpIGFsbCBwYXNzIGl0IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuY2hh
bmdlZC4gV2UgYXJlIG1vcmUgcGVybWlzc2l2ZSB1bmxpa2UgSUU3LiBJIGRvbid0IHRoaW5rIHRo
aXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwcm9i
bGVtcywgaWYgaXQgZG9lcywgd2Ugc2hvdWxkIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gYmUgbW9yZSBsaWtlIElFNy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoJyUnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChmbGFncyAmIElOVkFMSURfQklUKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZvciBOVUxMcywgZXRjLiBmYWlsLgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2Nh
cGVkQ2hhcmFjdGVyKG91dENoLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgRVNDQVBFX0JJ
VCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNoYXJhY3RlciBzaG91bGQgYmUgZXNj
YXBlZC4KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihvdXRD
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIE5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGlzIGNoYXJhY3RlciwganVz
dCBhcHBlbmQgaXQuCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChvdXRDaCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb1BhdGgoY29uc3Qg
Q0hBUiogc3BlYywKKyAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiBvdXRwdXRQYXRoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgb3V0cHV0UGF0
aC0+c2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBpZiAocGF0aC5sZW5ndGgoKSA+IDAp
IHsKKyAgICAgICAgLy8gV3JpdGUgb3V0IGFuIGluaXRpYWwgc2xhc2ggaWYgdGhlIGlucHV0IGhh
cyBub25lLiBJZiB3ZSBqdXN0IHBhcnNlIGEgVVJMCisgICAgICAgIC8vIGFuZCB0aGVuIGNhbm9u
aWNhbGl6ZSBpdCwgaXQgd2lsbCBvZiBjb3Vyc2UgaGF2ZSBhIHNsYXNoIGFscmVhZHkuIFRoaXMK
KyAgICAgICAgLy8gY2hlY2sgaXMgZm9yIHRoZSByZXBsYWNlbWVudCBhbmQgcmVsYXRpdmUgVVJM
IHJlc29sdmluZyBjYXNlcyBvZiBmaWxlCisgICAgICAgIC8vIFVSTHMuCisgICAgICAgIGlmICgh
VVJMUGFyc2VyOjppc1VSTFNsYXNoKHNwZWNbcGF0aC5iZWdpbigpXSkpCisgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCcvJyk7CisKKyAgICAgICAgc3VjY2VzcyA9IERvUGFydGlhbFBhdGg8Q0hB
UiwgVUNIQVI+KHNwZWMsIHBhdGgsIG91dHB1dFBhdGgtPmJlZ2luKCksIG91dHB1dCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gTm8gaW5wdXQsIGNhbm9uaWNhbCBwYXRoIGlzIGEgc2xhc2gu
CisgICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKKyAgICB9CisgICAgb3V0cHV0UGF0aC0+c2V0
TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBhdGgtPmJlZ2luKCkpOworICAgIHJldHVy
biBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIENhbm9uaWNhbGl6ZVBhdGgo
Y29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25l
bnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQoreworICAg
IHJldHVybiBEb1BhdGg8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCBv
dXRwdXRQYXRoKTsKK30KKworYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IFVDaGFyKiBzcGVj
LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAg
ICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgpCit7CisgICAgcmV0dXJuIERvUGF0aDxV
Q2hhciwgVUNoYXI+KHNwZWMsIHBhdGgsIG91dHB1dCwgb3V0cHV0UGF0aCk7Cit9CisKK2Jvb2wg
Q2Fub25pY2FsaXplUGFydGlhbFBhdGgoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIHJldHVybiBEb1BhcnRp
YWxQYXRoPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIHBhdGgsIHBhdGhCZWdpbkluT3V0cHV0
LCBvdXRwdXQpOworfQorCitib29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKGNvbnN0IFVDaGFy
KiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
Cit7CisgICAgcmV0dXJuIERvUGFydGlhbFBhdGg8VUNoYXIsIFVDaGFyPihzcGVjLCBwYXRoLCBw
YXRoQmVnaW5Jbk91dHB1dCwgb3V0cHV0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25p
Y2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgx
OWM4OWQxMTQ1NTIzYTdhZDlhYWNmYmU4M2I1NGYwMGQ2NmUwNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRodXJsLmNwcApAQCAtMCwwICsxLDEy
MCBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0
cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBGdW5jdGlvbnMg
Zm9yIGNhbm9uaWNhbGl6aW5nICJwYXRoIiBVUkxzLiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0
aGUgcGF0aAorLy8gb2YgYSBVUkwsIHRoZXNlIGFyZSBVUkxzIHRoYXQgaGF2ZSBubyBhdXRob3Jp
dHkgc2VjdGlvbiwgb25seSBhIHBhdGguIEZvcgorLy8gZXhhbXBsZSwgImphdmFzY3JpcHQ6IiBh
bmQgImRhdGE6Ii4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgi
CisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFs
LmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9DYW5vbmljYWxpemVQYXRoVVJMKGNv
bnN0IFVSTENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291cmNlLCBjb25zdCBVUkxT
ZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91
cHV0UGFyc2VkKQoreworICAgIC8vIFNjaGVtZTogdGhpcyB3aWxsIGFwcGVuZCB0aGUgY29sb24u
CisgICAgYm9vbCBzdWNjZXNzID0gQ2Fub25pY2FsaXplU2NoZW1lKHNvdXJjZS5zY2hlbWUsIHBh
cnNlZC5zY2hlbWUsIG91dHB1dCwgJm91cHV0UGFyc2VkLnNjaGVtZSk7CisKKyAgICAvLyBXZSBh
c3N1bWUgdGhlcmUncyBubyBhdXRob3JpdHkgZm9yIHBhdGggVVJMcy4gTm90ZSB0aGF0IGhvc3Rz
IHNob3VsZCBuZXZlcgorICAgIC8vIGhhdmUgLTEgbGVuZ3RoLgorICAgIG91cHV0UGFyc2VkLnVz
ZXJuYW1lLnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICBv
dXB1dFBhcnNlZC5ob3N0LnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQucG9ydC5yZXNldCgpOwor
CisgICAgaWYgKHBhcnNlZC5wYXRoLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBDb3B5IHRoZSBw
YXRoIHVzaW5nIHBhdGggVVJMJ3MgbW9yZSBsYXggZXNjYXBpbmcgcnVsZXMgKHRoaW5rIGZvcgor
ICAgICAgICAvLyBqYXZhc2NyaXB0OikuIFdlIGNvbnZlcnQgdG8gVVRGLTggYW5kIGVzY2FwZSBu
b24tQVNDSUksIGJ1dCBsZWF2ZSBhbGwKKyAgICAgICAgLy8gQVNDSUkgY2hhcmFjdGVycyBhbG9u
ZS4gVGhpcyBoZWxwcyByZWFkYWJpbGl0eSBvZiBKYXZhU3RyaXB0LgorICAgICAgICBvdXB1dFBh
cnNlZC5wYXRoLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgICAgIGludCBlbmQgPSBw
YXJzZWQucGF0aC5lbmQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHBhcnNlZC5wYXRoLmJlZ2lu
KCk7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8
VUNIQVI+KHNvdXJjZS5wYXRoW2ldKTsKKyAgICAgICAgICAgIGlmICh1Y2ggPCAweDIwIHx8IHVj
aCA+PSAweDgwKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRD
aGFyKHNvdXJjZS5wYXRoLCAmaSwgZW5kLCBvdXRwdXQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4odWNoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgb3VwdXRQYXJzZWQucGF0aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgp
IC0gb3VwdXRQYXJzZWQucGF0aC5iZWdpbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBF
bXB0eSBwYXRoLgorICAgICAgICBvdXB1dFBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgfQorCisg
ICAgLy8gQXNzdW1lIHRoZXJlJ3Mgbm8gcXVlcnkgb3IgcmVmLgorICAgIG91cHV0UGFyc2VkLnF1
ZXJ5LnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQuZnJhZ21lbnQucmVzZXQoKTsKKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIGNhbm9uaWNhbGl6ZVBh
dGhVUkwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkKK3sKKyAgICByZXR1
cm4gZG9DYW5vbmljYWxpemVQYXRoVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KFVSTENvbXBvbmVu
dFNvdXJjZTxjaGFyPihzcGVjKSwgcGFyc2VkLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKwor
Ym9vbCBjYW5vbmljYWxpemVQYXRoVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdt
ZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0
UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8VUNoYXIsIFVDaGFy
PihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3VwdXRQ
YXJzZWQpOworfQorCitib29sIFJlcGxhY2VQYXRoVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxh
Y2VtZW50cywgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNl
ZCkKK3sKKyAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVS
TFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cE92ZXJyaWRlQ29tcG9uZW50
cyhiYXNlLCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBkb0Nh
bm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIG91
dHB1dCwgKm91cHV0UGFyc2VkKTsKK30KKworYm9vbCBSZXBsYWNlUGF0aFVSTChjb25zdCBjaGFy
KiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgY29uc3QgUmVwbGFjZW1lbnRz
PFVDaGFyPiYgcmVwbGFjZW1lbnRzLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVu
dHMqIG91cHV0UGFyc2VkKQoreworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OworICAgIFVS
TENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMgcGFy
c2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwg
cmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gZG9DYW5v
bmljYWxpemVQYXRoVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBvdXRw
dXQsICpvdXB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblF1ZXJ5LmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdmMjVhMjBjZDViNWJl
ODEwYTcxNGJiYmMzYjg3YzlmNWEyNzI4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHAKQEAgLTAsMCArMSwxODYgQEAKKy8vIENvcHly
aWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJV
UkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMQ2hhcmFjdGVyVHlwZXMuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg+CisKKy8vIFF1ZXJ5IGNhbm9uaWNhbGl6YXRp
b24gaW4gSUUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElFIGlzIHZlcnkg
cGVybWlzc2l2ZSBmb3IgcXVlcnkgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gbGlua3Mgb24gdGhl
IHBhZ2UKKy8vIChpbiBjb250cmFzdCB0byBsaW5rcyB0aGF0IGl0IGNvbnN0cnVjdHMgaXRzZWxm
IGJhc2VkIG9uIGZvcm0gZGF0YSkuIEl0IGRvZXMKKy8vIG5vdCB1bmVzY2FwZSBhbnkgY2hhcmFj
dGVyLiBJdCBkb2VzIG5vdCByZWplY3QgYW55IGVzY2FwZSBzZXF1ZW5jZSAoYmUgdGhleQorLy8g
aW52YWxpZCBsaWtlICIlMnkiIG9yIGZyZWFreSBsaWtlICUwMCkuCisvLworLy8gSUUgb25seSBl
c2NhcGVzIHNwYWNlcyBhbmQgbm90aGluZyBlbHNlLiBFbWJlZGRlZCBOVUxMcywgdGFicyAoMHgw
OSksCisvLyBMRiAoMHgwYSksIGFuZCBDUiAoMHgwZCkgYXJlIHJlbW92ZWQgKHRoaXMgcHJvYmFi
bHkgaGFwcGVucyBhdCBhbiBlYXJsaWVyCisvLyBsYXllciBzaW5jZSB0aGV5IGFyZSByZW1vdmVk
IGZyb20gYWxsIHBvcnRpb25zIG9mIHRoZSBVUkwpLiBBbGwgb3RoZXIKKy8vIGNoYXJhY3RlcnMg
YXJlIHBhc3NlZCB1bm1vZGlmaWVkLiBJbnZhbGlkIFVURi0xNiBzZXF1ZW5jZXMgYXJlIHByZXNl
cnZlZCBhcworLy8gd2VsbCwgd2l0aCBlYWNoIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgYmVpbmcg
Y29udmVydGVkIHRvIFVURi04LiBJdCBpcyB0aGUKKy8vIHNlcnZlcidzIGpvYiB0byBtYWtlIHNl
bnNlIG9mIHRoaXMgaW52YWxpZCBxdWVyeS4KKy8vCisvLyBJbnZhbGlkIG11bHRpYnl0ZSBzZXF1
ZW5jZXMgKGZvciBleGFtcGxlLCBpbnZhbGlkIFVURi04IG9uIGEgVVRGLTggcGFnZSkKKy8vIGFy
ZSBjb252ZXJ0ZWQgdG8gdGhlIGludmFsaWQgY2hhcmFjdGVyIGFuZCBzZW50IGFzIHVuZXNjYXBl
ZCBVVEYtOCAoMHhlZiwKKy8vIDB4YmYsIDB4YmQpLiBUaGlzIG1heSBub3QgYmUgY2Fub25pY2Fs
aXphdGlvbiwgdGhlIHBhcnNlciBtYXkgZ2VuZXJhdGUgdGhlc2UKKy8vIHN0cmluZ3MgYmVmb3Jl
IHRoZSBVUkwgaGFuZGxlciBldmVyIHNlZXMgdGhlbS4KKy8vCisvLyBPdXIgcXVlcnkgY2Fub25p
Y2FsaXphdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdlIGVzY2FwZSBh
bGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycywgbGlrZSBGaXJl
Zm94LgorLy8gVGhpcyBpcyBtb3JlIGNvbmZvcm1hbnQgdG8gdGhlIFVSTCBzcGVjLCBhbmQgdGhl
cmUgZG8gbm90IHNlZW0gdG8gYmUgbWFueQorLy8gcHJvYmxlbXMgcmVsYXRpbmcgdG8gRmlyZWZv
eCdzIGJlaGF2aW9yLgorLy8KKy8vIExpa2UgSUUsIHdlIHdpbGwgbmV2ZXIgdW5lc2NhcGUgKGFs
dGhvdWdoIHRoZSBhcHBsaWNhdGlvbiBtYXkgd2FudCB0byB0cnkKKy8vIHVuZXNjYXBpbmcgdG8g
cHJlc2VudCB0aGUgdXNlciB3aXRoIGEgbW9yZSB1bmRlcnN0YW5kYWJsZSBVUkwpLiBXZSB3aWxs
CisvLyByZXBsYWNlIGFsbCBpbnZhbGlkIHNlcXVlbmNlcyAoaW5jbHVkaW5nIGludmFsaWQgVVRG
LTE2IHNlcXVlbmNlcywgd2hpY2ggSUUKKy8vIGRvZXNuJ3QpIHdpdGggdGhlICJpbnZhbGlkIGNo
YXJhY3RlciwiIGFuZCB3ZSB3aWxsIGVzY2FwZSBpdC4KKworI2lmIFVTRShXVEZVUkwpCisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVycyBzdGFydGluZyBhdCB8YmVn
aW58IGFuZCBnb2luZyB1bnRpbCB8ZW5kfAorLy8gKG5vbi1pbmNsdXNpdmUpIGFyZSBhbGwgcmVw
cmVzZW50YWJsZSBpbiA3LWJpdHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Ym9vbCBpc0FsbEFTQ0lJKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcXVlcnkpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShzcGVjICsg
cXVlcnkuYmVnaW4oKSwgcXVlcnkubGVuZ3RoKCkpOworfQorCisvLyBGSVhNRTogQmVuamFtaW46
IGdldCByaWQgb2YgdGhpcyB3aGVuIGV2ZXJ5dGhpbmcgaXMgYmFzZWQgb24gTENoYXIuCit0ZW1w
bGF0ZTw+Citib29sIGlzQWxsQVNDSUk8Y2hhcj4oY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBxdWVyeSkKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzcGVjICsgcXVlcnkuYmVnaW4oKSksIHF1ZXJ5
Lmxlbmd0aCgpKTsKK30KKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBvdXRw
dXQsIGVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QKKy8vIG1hdGNoIHRoZSBnaXZlbiB8
dHlwZXwgaW4gU2hhcmVkQ2hhclR5cGVzLiBUaGlzIHZlcnNpb24gd2lsbCBhY2NlcHQgOCBvciAx
NgorLy8gYml0IGNoYXJhY3RlcnMsIGJ1dCBhc3N1bWVzIHRoYXQgdGhleSBoYXZlIG9ubHkgNy1i
aXQgdmFsdWVzLiBJdCBhbHNvIGFzc3VtZXMKKy8vIHRoYXQgYWxsIFVURi04IHZhbHVlcyBhcmUg
Y29ycmVjdCwgc28gZG9lc24ndCBib3RoZXIgY2hlY2tpbmcKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Cit2b2lkIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFVUkxD
aGFyYWN0ZXJUeXBlczo6aXNRdWVyeUNoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc291
cmNlW2ldKSkpCisgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KHNvdXJjZVtpXSksIG91dHB1dCk7CisgICAgICAgIGVsc2UgLy8g
RG9lc24ndCBuZWVkIGVzY2FwaW5nLgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNf
Y2FzdDxjaGFyPihzb3VyY2VbaV0pKTsKKyAgICB9Cit9CisKKy8vIFJ1bnMgdGhlIGNvbnZlcnRl
ciBvbiB0aGUgZ2l2ZW4gVVRGLTggaW5wdXQuIFNpbmNlIHRoZSBjb252ZXJ0ZXIgZXhwZWN0cwor
Ly8gVVRGLTE2LCB3ZSBoYXZlIHRvIGNvbnZlcnQgZmlyc3QuIFRoZSBjb252ZXJ0ZXIgbXVzdCBi
ZSBub24tbnVsbC4KK3ZvaWQgcnVuQ29udmVydGVyKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJlcGxhY2UgYW55
IG1pc2VuY29kZWQgdmFsdWVzIHdpdGggdGhlIGludmFsaWQKKyAgICAvLyBjaGFyYWN0ZXIuIFRo
aXMgaXMgd2hhdCB3ZSB3YW50IHNvIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIGVycm9yLgor
ICAgIFJhd1VSTEJ1ZmZlcjxVQ2hhcj4gdXRmMTY7CisgICAgQ29udmVydFVURjhUb1VURjE2KCZz
cGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgdXRmMTYpOworICAgIGNvbnZlcnRl
ci0+Q29udmVydEZyb21VVEYxNih1dGYxNi5kYXRhKCksIHV0ZjE2Lmxlbmd0aCgpLCBvdXRwdXQp
OworfQorCisvLyBSdW5zIHRoZSBjb252ZXJ0ZXIgd2l0aCB0aGUgZ2l2ZW4gVVRGLTE2IGlucHV0
LiBXZSBkb24ndCBoYXZlIHRvIGRvCisvLyBhbnl0aGluZywgYnV0IHRoaXMgb3ZlcnJpZGRkZW4g
ZnVuY3Rpb24gYWxsb3dzIHVzIHRvIHVzZSB0aGUgc2FtZSBjb2RlCisvLyBmb3IgYm90aCBVVEYt
OCBhbmQgVVRGLTE2IGlucHV0Lgordm9pZCBydW5Db252ZXJ0ZXIoY29uc3QgVUNoYXIqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgY29udmVydGVyLT5Db252ZXJ0RnJvbVVU
RjE2KCZzcGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgb3V0cHV0KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9Db252ZXJ0VG9RdWVyeUVu
Y29kaW5nKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVl
cnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
Cit7CisgICAgaWYgKGlzQWxsQVNDSUkoc3BlYywgcXVlcnkpKSB7CisgICAgICAgIC8vIEVhc3k6
IHRoZSBpbnB1dCBjYW4ganVzdCBhcHBlbmRlZCB3aXRoIG5vIGNoYXJhY3RlciBzZXQgY29udmVy
c2lvbnMuCisgICAgICAgIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZygmc3BlY1txdWVyeS5iZWdp
bigpXSwgcXVlcnkubGVuZ3RoKCksIG91dHB1dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
SGFyZGVyOiBjb252ZXJ0IHRvIHRoZSBwcm9wZXIgZW5jb2RpbmcgZmlyc3QuCisgICAgICAgIGlm
IChjb252ZXJ0ZXIpIHsKKyAgICAgICAgICAgIC8vIFJ1biB0aGUgY29udmVydGVyIHRvIGdldCBh
biA4LWJpdCBzdHJpbmcsIHRoZW4gYXBwZW5kIGl0LCBlc2NhcGluZworICAgICAgICAgICAgLy8g
bmVjZXNzYXJ5IHZhbHVlcy4KKyAgICAgICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiBlaWdodEJp
dFF1ZXJ5U3RyaW5nOworICAgICAgICAgICAgcnVuQ29udmVydGVyKHNwZWMsIHF1ZXJ5LCBjb252
ZXJ0ZXIsIGVpZ2h0Qml0UXVlcnlTdHJpbmcpOworICAgICAgICAgICAgYXBwZW5kUmF3OEJpdFF1
ZXJ5U3RyaW5nKGVpZ2h0Qml0UXVlcnlTdHJpbmcuZGF0YSgpLCBlaWdodEJpdFF1ZXJ5U3RyaW5n
Lmxlbmd0aCgpLCBvdXRwdXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8g
Y29udmVydGVyLCBkbyBvdXIgb3duIFVURi04IGNvbnZlcnNpb24uCisgICAgICAgICAgICBhcHBl
bmRTdHJpbmdPZlR5cGUoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBVUkxD
aGFyYWN0ZXJUeXBlczo6UXVlcnlDaGFyYWN0ZXIsIG91dHB1dCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRvQ2Fub25pY2Fs
aXplUXVlcnkoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBx
dWVyeSwgQ2hhcnNldENvbnZlcnRlciogY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFF1ZXJ5Q29t
cG9uZW50KQoreworICAgIGlmIChxdWVyeS5sZW5ndGgoKSA8IDApIHsKKyAgICAgICAgb3V0cHV0
UXVlcnlDb21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG91dHB1dC5hcHBlbmQoJz8nKTsKKyAgICBvdXRwdXRRdWVyeUNvbXBvbmVudC5zZXRC
ZWdpbihvdXRwdXQubGVuZ3RoKCkpOworCisgICAgZG9Db252ZXJ0VG9RdWVyeUVuY29kaW5nPENo
YXJhY3RlclR5cGU+KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCk7CisKKyAgICBvdXRw
dXRRdWVyeUNvbXBvbmVudC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UXVlcnlD
b21wb25lbnQuYmVnaW4oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgQ2Fub25pY2Fs
aXplUXVlcnkoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hh
cnNldENvbnZlcnRlciogY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeUNvbXBvbmVudCkKK3sK
KyAgICBkb0Nhbm9uaWNhbGl6ZVF1ZXJ5KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCwg
Km91dHB1dFF1ZXJ5Q29tcG9uZW50KTsKK30KKwordm9pZCBDYW5vbmljYWxpemVRdWVyeShjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgQ2hhcnNldENvbnZlcnRl
ciogY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeUNvbXBvbmVudCkKK3sKKyAgICBkb0Nhbm9u
aWNhbGl6ZVF1ZXJ5KHNwZWMsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFF1ZXJ5
Q29tcG9uZW50KTsKK30KKwordm9pZCBDb252ZXJ0VVRGMTZUb1F1ZXJ5RW5jb2RpbmcoY29uc3Qg
VUNoYXIqIGlucHV0LCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVy
KiBjb252ZXJ0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGRvQ29udmVydFRv
UXVlcnlFbmNvZGluZzxVQ2hhcj4oaW5wdXQsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblJlbGF0aXZlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fu
b25SZWxhdGl2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgwNzcyMmVkYzk0MzEwZjM0Mzk2Y2ZiNzc1Zjcy
YjlhM2VhYWNkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2Fub25SZWxhdGl2ZS5jcHAKQEAgLTAsMCArMSw1ODcgQEAKKy8vIENvcHlyaWdodCAyMDA3LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworLy8gQ2Fub25pY2FsaXplciBmdW5jdGlvbnMgZm9yIHdvcmtpbmcg
d2l0aCBhbmQgcmVzb2x2aW5nIHJlbGF0aXZlIFVSTHMuCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlVSTEZpbGUuaCIKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisjaW5j
bHVkZSAiVVJMVXRpbEludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2Ug
V1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisv
LyBGaXJlZm94IGRvZXMgYSBjYXNlLXNlbnNpdGl2ZSBjb21wYXJlICh3aGljaCBpcyBwcm9iYWJs
eSB3cm9uZy0tTW96aWxsYSBidWcKKy8vIDM3OTAzNCksIHdoZXJlYXMgSUUgaXMgY2FzZS1pbnNl
bnNldGl2ZS4KKy8vCisvLyBXZSBjaG9vc2UgdG8gYmUgbW9yZSBwZXJtaXNzaXZlIGxpa2UgSUUu
IFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKy8vIHVuZXNjYXBpbmcgb3IgYW55dGhpbmcg
aGVyZTogbmVpdGhlciBJRSBvciBGaXJlZm94IGFsbG93IHRoaXMuIFdlIGFsc28KKy8vIGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgaW52YWxpZCBzY2hlbWUgY2hhcmFjdGVycyBzaW5jZSB3ZSBh
cmUgY29tcGFyaW5nCisvLyBhZ2FpbnN0IHRoZSBjYW5vbmljYWwgc2NoZW1lIG9mIHRoZSBiYXNl
LgorLy8KKy8vIFRoZSBiYXNlIFVSTCBzaG91bGQgYWx3YXlzIGJlIGNhbm9uaWNhbCwgdGhlcmVm
b3JlIGlzIEFTQ0lJLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgQXJlU2NoZW1lc0Vx
dWFsKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21w
b25lbnQmIGJhc2VTY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSKiBjbXAs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGNtcFNjaGVtZSkKK3sK
KyAgICBpZiAoYmFzZVNjaGVtZS5sZW5ndGgoKSAhPSBjbXBTY2hlbWUubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJhc2VTY2hlbWUubGVu
Z3RoKCk7IGkrKykgeworICAgICAgICAvLyBXZSBhc3N1bWUgdGhlIGJhc2UgaXMgYWxyZWFkeSBj
YW5vbmljYWwsIHNvIHdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgLy8gY2Fub25pY2FsaXplIGl0
LgorICAgICAgICBpZiAoY2Fub25pY2FsU2NoZW1lQ2hhcihjbXBbY21wU2NoZW1lLmJlZ2luKCkg
KyBpXSkgIT0KKyAgICAgICAgICAgIGJhc2VbYmFzZVNjaGVtZS5iZWdpbigpICsgaV0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisjaWYg
T1MoV0lORE9XUykKKy8vIEhlcmUsIHdlIGFsc28gYWxsb3cgV2luZG93cyBwYXRocyB0byBiZSBy
ZXByZXNlbnRlZCBhcyAiL0M6LyIgc28gd2UgY2FuIGJlCisvLyBjb25zaXN0ZW50IGFib3V0IFVS
TCBwYXRocyBiZWdpbm5pbmcgd2l0aCBzbGFzaGVzLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UKKy8v
IERvZXNCZWdpbldpbmRvd3NEcml2ZVBhdGggZXhjZXB0IHRoYXQgaXQgYWxzbyByZXF1aXJlcyBh
IHNsYXNoIGF0IHRoZQorLy8gYmVnaW5uaW5nLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jv
b2wgRG9lc0JlZ2luU2xhc2hXaW5kb3dzRHJpdmVTcGVjKGNvbnN0IENIQVIqIHNwZWMsIGludCBz
dGFydE9mZnNldCwgaW50IHNwZWNMZW5ndGgpCit7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IHNw
ZWNMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gVVJMUGFyc2VyOjpp
c1VSTFNsYXNoKHNwZWNbc3RhcnRPZmZzZXRdKSAmJiBVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRv
d3NEcml2ZVNwZWMoc3BlYywgc3RhcnRPZmZzZXQgKyAxLCBzcGVjTGVuZ3RoKTsKK30KKworI2Vu
ZGlmIC8vIE9TKFdJTkRPV1MpCisKKy8vIFNlZSBpc1JlbGF0aXZlVVJMIGluIHRoZSBoZWFkZXIg
ZmlsZSBmb3IgdXNhZ2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorYm9vbCBEb0lzUmVsYXRp
dmVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogdXJs
LAorICAgICAgICAgICAgICAgICAgICAgaW50IHVybExlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCog
aXNSZWxhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogcmVsYXRpdmVD
b21wb25lbnQpCit7CisgICAgKmlzUmVsYXRpdmUgPSBmYWxzZTsgLy8gU28gd2UgY2FuIGRlZmF1
bHQgbGF0ZXIgdG8gbm90IHJlbGF0aXZlLgorCisgICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGFuZCBj
b25zdHJ1Y3QgYSBuZXcgcmFuZ2UgZm9yIHRoZSBzdWJzdHJpbmcuCisgICAgaW50IGJlZ2luID0g
MDsKKyAgICBVUkxQYXJzZXI6OnRyaW1VUkwodXJsLCAmYmVnaW4sICZ1cmxMZW5ndGgpOworICAg
IGlmIChiZWdpbiA+PSB1cmxMZW5ndGgpIHsKKyAgICAgICAgLy8gRW1wdHkgVVJMcyBhcmUgcmVs
YXRpdmUsIGJ1dCBkbyBub3RoaW5nLgorICAgICAgICAqcmVsYXRpdmVDb21wb25lbnQgPSBVUkxD
b21wb25lbnQoYmVnaW4sIDApOworICAgICAgICAqaXNSZWxhdGl2ZSA9IHRydWU7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gV2Ugc3BlY2lh
bCBjYXNlIHBhdGhzIGxpa2UgIkM6XGZvbyIgc28gdGhleSBjYW4gbGluayBkaXJlY3RseSB0byB0
aGUKKyAgICAvLyBmaWxlIG9uIFdpbmRvd3MgKElFIGNvbXBhdGFiaWxpdHkpLiBUaGUgc2VjdXJp
dHkgZG9tYWluIHN0dWZmIHNob3VsZAorICAgIC8vIHByZXZlbnQgYSBsaW5rIGxpa2UgdGhpcyBm
cm9tIGFjdHVhbGx5IGJlaW5nIGZvbGxvd2VkIGlmIGl0cyBvbiBhCisgICAgLy8gd2ViIHBhZ2Uu
CisgICAgLy8KKyAgICAvLyBXZSB0cmVhdCAiQzovZm9vIiBhcyBhbiBhYnNvbHV0ZSBVUkwuIFdl
IGNhbiBnbyBhaGVhZCBhbmQgdHJlYXQgIi9jOi8iCisgICAgLy8gYXMgcmVsYXRpdmUsIGFzIHRo
aXMgd2lsbCBqdXN0IHJlcGxhY2UgdGhlIHBhdGggd2hlbiB0aGUgYmFzZSBzY2hlbWUKKyAgICAv
LyBpcyBhIGZpbGUgYW5kIHRoZSBhbnN3ZXIgd2lsbCBzdGlsbCBiZSBjb3JyZWN0LgorICAgIC8v
CisgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgYmFja3NsYXNoZXMgd2hlbiBkZXRlY3RpbmcgVU5D
IHNpbmNlIHR3byBmb3J3YXJkCisgICAgLy8gc2hhc2hlcyBzaG91bGQgYmUgdHJlYXRlZCBhIGEg
cmVsYXRpdmUgVVJMIHdpdGggYSBob3N0bmFtZS4KKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVn
aW5XaW5kb3dzRHJpdmVTcGVjKHVybCwgYmVnaW4sIHVybExlbmd0aCkgfHwgVVJMUGFyc2VyOjpk
b2VzQmVnaW5VTkNQYXRoKHVybCwgYmVnaW4sIHVybExlbmd0aCwgdHJ1ZSkpCisgICAgICAgIHJl
dHVybiB0cnVlOworI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKKyAgICAvLyBTZWUgaWYgd2UndmUg
Z290IGEgc2NoZW1lLCBpZiBub3QsIHdlIGtub3cgdGhpcyBpcyBhIHJlbGF0aXZlIFVSTC4KKyAg
ICAvLyBCVVQ6IEp1c3QgYmVjYXVzZSB3ZSBoYXZlIGEgc2NoZW1lLCBkb2Vzbid0IG1ha2UgaXQg
YWJzb2x1dGUuCisgICAgLy8gImh0dHA6Zm9vLmh0bWwiIGlzIGEgcmVsYXRpdmUgVVJMIHdpdGgg
cGF0aCAiZm9vLmh0bWwiLiBJZiB0aGUgc2NoZW1lIGlzCisgICAgLy8gZW1wdHksIHdlIHRyZWF0
IGl0IGFzIHJlbGF0aXZlICgiOmZvbyIpIGxpa2UgSUUgZG9lcy4KKyAgICBVUkxDb21wb25lbnQg
c2NoZW1lOworICAgIGlmICghVVJMUGFyc2VyOjpFeHRyYWN0U2NoZW1lKHVybCwgdXJsTGVuZ3Ro
LCAmc2NoZW1lKSB8fCAhc2NoZW1lLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIERvbid0IGFsbG93
IHJlbGF0aXZlIFVSTHMgaWYgdGhlIGJhc2Ugc2NoZW1lIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKyAg
ICAgICAgaWYgKCFpc0Jhc2VIaWVyYXJjaGljYWwpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgKnJlbGF0aXZlQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
YmVnaW4sIHVybExlbmd0aCk7CisgICAgICAgICppc1JlbGF0aXZlID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNjaGVtZSBpc24ndCB2YWxpZCwg
dGhlbiBpdCdzIHJlbGF0aXZlLgorICAgIGludCBzY2hlbWVFbmQgPSBzY2hlbWUuZW5kKCk7Cisg
ICAgZm9yIChpbnQgaSA9IHNjaGVtZS5iZWdpbigpOyBpIDwgc2NoZW1lRW5kOyBpKyspIHsKKyAg
ICAgICAgaWYgKCFjYW5vbmljYWxTY2hlbWVDaGFyKHVybFtpXSkpIHsKKyAgICAgICAgICAgICpy
ZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2luLCB1cmxMZW5n
dGgpOworICAgICAgICAgICAgKmlzUmVsYXRpdmUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgc2NoZW1lIGlzIG5vdCB0
aGUgc2FtZSwgdGhlbiB3ZSBjYW4ndCBjb3VudCBpdCBhcyByZWxhdGl2ZS4KKyAgICBpZiAoIUFy
ZVNjaGVtZXNFcXVhbChiYXNlLCBiYXNlUGFyc2VkLnNjaGVtZSwgdXJsLCBzY2hlbWUpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdoZW4gdGhlIHNjaGVtZSB0aGF0IHRoZXkgYm90
aCBzaGFyZSBpcyBub3QgaGllcmFyY2hpY2FsLCB0cmVhdCB0aGUKKyAgICAvLyBpbmNvbWluZyBz
Y2hlbWUgYXMgYWJzb2x1dGUgKHRoaXMgd2F5IHdpdGggdGhlIGJhc2Ugb2YgImRhdGE6Zm9vIiwK
KyAgICAvLyAiZGF0YTpiYXIiIHdpbGwgYmUgcmVwb3J0ZWQgYXMgYWJzb2x1dGUuCisgICAgaWYg
KCFpc0Jhc2VIaWVyYXJjaGljYWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IGNv
bG9uT2Zmc2V0ID0gc2NoZW1lLmVuZCgpOworCisgICAgLy8gSWYgaXQncyBhIGZpbGVzeXN0ZW0g
VVJMLCB0aGUgb25seSB2YWxpZCB3YXkgdG8gbWFrZSBpdCByZWxhdGl2ZSBpcyBub3QgdG8KKyAg
ICAvLyBzdXBwbHkgYSBzY2hlbWUuIFRoZXJlJ3Mgbm8gZXF1aXZhbGVudCB0byBlLmcuIGh0dHA6
aW5kZXguaHRtbC4KKyAgICBpZiAoVVJMVXRpbGl0aWVzOjpDb21wYXJlU2NoZW1lQ29tcG9uZW50
KHVybCwgc2NoZW1lLCAiZmlsZXN5c3RlbSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIEV4dHJhY3RTY2hlbWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjb2xvbiBpbW1lZGlhdGVseSBm
b2xsb3dzIHdoYXQgaXQKKyAgICAvLyBjb25zaWRlcnMgdG8gYmUgdGhlIHNjaGVtZS4gY291bnRD
b25zZWN1dGl2ZVNsYXNoZXMgd2lsbCBoYW5kbGUgdGhlCisgICAgLy8gY2FzZSB3aGVyZSB0aGUg
YmVnaW4gb2Zmc2V0IGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0LgorICAgIGludCBudW1TbGFzaGVz
ID0gVVJMUGFyc2VyOjpjb3VudENvbnNlY3V0aXZlU2xhc2hlcyh1cmwsIGNvbG9uT2Zmc2V0ICsg
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsTGVuZ3RoKTsKKworICAgIGlmICghbnVtU2xhc2hlcyB8fCBudW1TbGFzaGVzID09IDEp
IHsKKyAgICAgICAgLy8gTm8gc2xhc2hlcyBtZWFucyBpdCdzIGEgcmVsYXRpdmUgcGF0aCBsaWtl
ICJodHRwOmZvby5odG1sIi4gT25lIHNsYXNoCisgICAgICAgIC8vIGlzIGFuIGFic29sdXRlIHBh
dGguICJodHRwOi9ob21lL2Zvby5odG1sIgorICAgICAgICAqaXNSZWxhdGl2ZSA9IHRydWU7Cisg
ICAgICAgICpyZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGNvbG9u
T2Zmc2V0ICsgMSwgdXJsTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gVHdvIG9yIG1vcmUgc2xhc2hlcyBhZnRlciB0aGUgc2NoZW1lIHdlIHRyZWF0IGFzIGFi
c29sdXRlLgorICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb3BpZXMgYWxsIGNoYXJhY3RlcnMg
aW4gdGhlIHJhbmdlIFtiZWdpbiwgZW5kKSBvZiB8c3BlY3wgdG8gdGhlIG91dHB1dCwKKy8vIHVw
IHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3Qgc2xhc2guIFRoZXJlIHNob3VsZCBiZSBhIHNs
YXNoIGluIHRoZQorLy8gcmFuZ2UsIGlmIG5vdCwgbm90aGluZyB3aWxsIGJlIGNvcGllZC4KKy8v
CisvLyBUaGUgaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBjYW5vbmljYWwsIHNvIHdlIHNlYXJjaCBv
bmx5IGZvciBleGFjdCBzbGFzaGVzCisvLyBhbmQgbm90IGJhY2tzbGFzaGVzIGFzIHdlbGwuIFdl
IGFsc28ga25vdyB0aGF0IGl0J3MgQVNDSUkuCit2b2lkIENvcHlUb0xhc3RTbGFzaChjb25zdCBj
aGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIC8vIEZpbmQgdGhlIGxhc3Qgc2xhc2guCisgICAgaW50IGxhc3RTbGFzaCA9IC0xOwor
ICAgIGZvciAoaW50IGkgPSBlbmQgLSAxOyBpID49IGJlZ2luOyAtLWkpIHsKKyAgICAgICAgaWYg
KHNwZWNbaV0gPT0gJy8nKSB7CisgICAgICAgICAgICBsYXN0U2xhc2ggPSBpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxhc3RTbGFzaCA8IDApCisgICAg
ICAgIHJldHVybjsgLy8gTm8gc2xhc2guCisKKyAgICAvLyBDb3B5LgorICAgIGZvciAoaW50IGkg
PSBiZWdpbjsgaSA8PSBsYXN0U2xhc2g7ICsraSkKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzcGVj
W2ldKTsKK30KKworLy8gQ29waWVzIGEgc2luZ2xlIGNvbXBvbmVudCBmcm9tIHRoZSBzb3VyY2Ug
dG8gdGhlIG91dHB1dC4gVGhpcyBpcyB1c2VkCisvLyB3aGVuIHJlc29sdmluZyByZWxhdGl2ZSBV
UkxzIGFuZCBhIGdpdmVuIGNvbXBvbmVudCBpcyB1bmNoYW5nZWQuIFNpbmNlIHRoZQorLy8gc291
cmNlIHNob3VsZCBhbHJlYWR5IGJlIGNhbm9uaWNhbCwgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0
aGluZyBzcGVjaWFsLAorLy8gYW5kIHRoZSBpbnB1dCBpcyBBU0NJSS4KK3ZvaWQgQ29weU9uZUNv
bXBvbmVudChjb25zdCBjaGFyKiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBzb3VyY2VDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiBvdXRwdXRDb21wb25lbnQpCit7CisgICAgaWYgKHNvdXJjZUNvbXBvbmVudC5sZW5ndGgoKSA8
IDApIHsKKyAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgbm90IHByZXNlbnQuCisgICAgICAg
ICpvdXRwdXRDb21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG91dHB1dENvbXBvbmVudC0+c2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAg
ICBpbnQgc291cmNlRW5kID0gc291cmNlQ29tcG9uZW50LmVuZCgpOworICAgIGZvciAoaW50IGkg
PSBzb3VyY2VDb21wb25lbnQuYmVnaW4oKTsgaSA8IHNvdXJjZUVuZDsgaSsrKQorICAgICAgICBv
dXRwdXQuYXBwZW5kKHNvdXJjZVtpXSk7CisgICAgb3V0cHV0Q29tcG9uZW50LT5zZXRMZW5ndGgo
b3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0Q29tcG9uZW50LT5iZWdpbigpKTsKK30KKworI2lmIE9T
KFdJTkRPV1MpCisKKy8vIENhbGxlZCBvbiBXaW5kb3dzIHdoZW4gdGhlIGJhc2UgVVJMIGlzIGEg
ZmlsZSBVUkwsIHRoaXMgd2lsbCBjb3B5IHRoZSAiQzoiCisvLyB0byB0aGUgb3V0cHV0LCBpZiB0
aGVyZSBpcyBhIGRyaXZlIGxldHRlciBhbmQgaWYgdGhhdCBkcml2ZSBsZXR0ZXIgaXMgbm90Cisv
LyBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSByZWxhdGl2ZSBVUkwuIE90aGVyd2lzZSwgZG8gbm90
aGluZy4KKy8vCisvLyBJdCB3aWxsIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlCisvLyBiYXNlIHRvIGJlIHByb2Nlc3NlZDogaWYg
dGhlcmUgaXMgYSAiQzoiLCB0aGUgc2xhc2ggYWZ0ZXIgaXQsIG9yIGlmCisvLyB0aGVyZSBpcyBu
byBkcml2ZSBsZXR0ZXIsIHRoZSBzbGFzaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLCBv
cgorLy8gdGhlIGVuZCBvZiB0aGUgYmFzZS4gVGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUgc3RhcnRp
bmcgb2Zmc2V0IGZvciBmdXJ0aGVyCisvLyBwYXRoIHByb2Nlc3NpbmcuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDSEFSPgoraW50IENvcHlCYXNlRHJpdmVTcGVjSWZOZWNlc3NhcnkoY29uc3QgY2hhciog
YmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNlUGF0aEJl
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2VQYXRoRW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVsYXRpdmVVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aFN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbGF0aXZlVXJsTGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7Cisg
ICAgaWYgKGJhc2VQYXRoQmVnaW4gPj0gYmFzZVBhdGhFbmQpCisgICAgICAgIHJldHVybiBiYXNl
UGF0aEJlZ2luOyAvLyBObyBwYXRoLgorCisgICAgLy8gSWYgdGhlIHJlbGF0aXZlIGJlZ2lucyB3
aXRoIGEgZHJpdmUgc3BlYywgZG9uJ3QgZG8gYW55dGhpbmcuIFRoZSBleGlzdGluZworICAgIC8v
IGRyaXZlIHNwZWMgaW4gdGhlIGJhc2Ugd2lsbCBiZSByZXBsYWNlZC4KKyAgICBpZiAoVVJMUGFy
c2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJlbGF0aXZlVVJMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFN0YXJ0LCByZWxhdGl2ZVVybExl
bmd0aCkpIHsKKyAgICAgICAgcmV0dXJuIGJhc2VQYXRoQmVnaW47IC8vIFJlbGF0aXZlIFVSTCBw
YXRoIGlzICJDOi9mb28iCisgICAgfQorCisgICAgLy8gVGhlIHBhdGggc2hvdWxkIGJlZ2luIHdp
dGggYSBzbGFzaCAoYXMgYWxsIGNhbm9uaWNhbCBwYXRocyBkbykuIFdlIGNoZWNrCisgICAgLy8g
aWYgaXQgaXMgZm9sbG93ZWQgYnkgYSBkcml2ZSBsZXR0ZXIgYW5kIGNvcHkgaXQuCisgICAgaWYg
KERvZXNCZWdpblNsYXNoV2luZG93c0RyaXZlU3BlYyhiYXNlVVJMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVBhdGhCZWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXRoRW5kKSkgeworICAgICAgICAvLyBDb3B5IHRo
ZSB0d28tY2hhcmFjdGVyIGRyaXZlIHNwZWMgdG8gdGhlIG91dHB1dC4gSXQgd2lsbCBub3cgbG9v
ayBsaWtlCisgICAgICAgIC8vICJmaWxlOi8vL0M6IiBzbyB0aGUgcmVzdCBvZiBpdCBjYW4gYmUg
dHJlYXRlZCBsaWtlIGEgc3RhbmRhcmQgcGF0aC4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycp
OworICAgICAgICBvdXRwdXQuYXBwZW5kKGJhc2VVUkxbYmFzZVBhdGhCZWdpbiArIDFdKTsKKyAg
ICAgICAgb3V0cHV0LmFwcGVuZChiYXNlVVJMW2Jhc2VQYXRoQmVnaW4gKyAyXSk7CisgICAgICAg
IHJldHVybiBiYXNlUGF0aEJlZ2luICsgMzsKKyAgICB9CisKKyAgICByZXR1cm4gYmFzZVBhdGhC
ZWdpbjsKK30KKworI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKKy8vIEEgc3Vicm91dGluZSBvZiBk
b1Jlc29sdmVSZWxhdGl2ZVVSTCwgdGhpcyByZXNvbHZlcyB0aGUgVVJMIGtub3duaW5nIHRoYXQK
Ky8vIHRoZSBpbnB1dCBpcyBhIHJlbGF0aXZlIHBhdGggb3IgbGVzcyAocXl1ZXJ5IG9yIHJlZiku
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorYm9vbCBkb1Jlc29sdmVSZWxhdGl2ZVBhdGgoY29u
c3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKiBi
YXNlSXNGaWxlICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVs
YXRpdmVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENv
bnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAgIC8v
IFdlIGtub3cgdGhlIGF1dGhvcml0eSBzZWN0aW9uIGRpZG4ndCBjaGFuZ2UsIGNvcHkgaXQgdG8g
dGhlIG91dHB1dC4gV2UKKyAgICAvLyBhbHNvIGtub3cgd2UgaGF2ZSBhIHBhdGggc28gY2FuIGNv
cHkgdXAgdG8gdGhlcmUuCisgICAgVVJMQ29tcG9uZW50IHBhdGgsIHF1ZXJ5LCByZWY7CisgICAg
VVJMUGFyc2VyOjpwYXJzZVBhdGhJbnRlcm5hbChyZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
cXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVmKTsKKyAgICAvLyBD
YW5vbmljYWwgVVJMcyBhbHdheXMgaGF2ZSBhIHBhdGgsIHNvIHdlIGNhbiB1c2UgdGhhdCBvZmZz
ZXQuCisgICAgb3V0cHV0LmFwcGVuZChiYXNlVVJMLCBiYXNlUGFyc2VkLnBhdGguYmVnaW4oKSk7
CisKKyAgICBpZiAocGF0aC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlIHBhdGggaXMg
cmVwbGFjZWQgb3IgbW9kaWZpZWQuCisgICAgICAgIGludCB0cnVlUGF0aEJlZ2luID0gb3V0cHV0
Lmxlbmd0aCgpOworCisgICAgICAgIC8vIEZvciBmaWxlOiBVUkxzIG9uIFdpbmRvd3MsIHdlIGRv
bid0IHdhbnQgdG8gdHJlYXQgdGhlIGRyaXZlIGxldHRlciBhbmQKKyAgICAgICAgLy8gY29sb24g
YXMgcGFydCBvZiB0aGUgcGF0aCBmb3IgcmVsYXRpdmUgZmlsZSByZXNvbHV0aW9uIHdoZW4gdGhl
CisgICAgICAgIC8vIGluY29taW5nIFVSTCBkb2VzIG5vdCBwcm92aWRlIGEgZHJpdmUgc3BlYy4g
V2Ugc2F2ZSB0aGUgdHJ1ZSBwYXRoCisgICAgICAgIC8vIGJlZ2lubmluZyBzbyB3ZSBjYW4gZml4
IGl0IHVwIGFmdGVyIHdlIGFyZSBkb25lLgorICAgICAgICBpbnQgYmFzZVBhdGhCZWdpbiA9IGJh
c2VQYXJzZWQucGF0aC5iZWdpbigpOworI2lmIE9TKFdJTkRPV1MpCisgICAgICAgIGlmIChiYXNl
SXNGaWxlKSB7CisgICAgICAgICAgICBiYXNlUGF0aEJlZ2luID0gQ29weUJhc2VEcml2ZVNwZWNJ
Zk5lY2Vzc2FyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VVUkwsIGJhc2VQYXJzZWQucGF0aC5iZWdpbigpLCBiYXNlUGFyc2Vk
LnBhdGguZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWxhdGl2ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQuYmVnaW4oKSwgcmVs
YXRpdmVDb21wb25lbnQuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworICAgICAgICAgICAgLy8gTm93IHRoZSBv
dXRwdXQgbG9va3MgbGlrZSBlaXRoZXIgImZpbGU6Ly8iIG9yICJmaWxlOi8vL0M6IgorICAgICAg
ICAgICAgLy8gYW5kIHdlIGNhbiBzdGFydCBhcHBlbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIHBhdGgu
IHxiYXNlUGF0aEJlZ2lufAorICAgICAgICAgICAgLy8gcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIg
aW4gdGhlIGJhc2UgdGhhdCBjb21lcyBuZXh0LgorICAgICAgICB9CisjZW5kaWYgLy8gT1MoV0lO
RE9XUykKKworICAgICAgICBpZiAoVVJMUGFyc2VyOjppc1VSTFNsYXNoKHJlbGF0aXZlVVJMW3Bh
dGguYmVnaW4oKV0pKSB7CisgICAgICAgICAgICAvLyBFYXN5IGNhc2U6IHRoZSBwYXRoIGlzIGFu
IGFic29sdXRlIHBhdGggb24gdGhlIHNlcnZlciwgc28gd2UgY2FuCisgICAgICAgICAgICAvLyBq
dXN0IHJlcGxhY2UgZXZlcnl0aGluZyBmcm9tIHRoZSBwYXRoIG9uIHdpdGggdGhlIG5ldyB2ZXJz
aW9ucy4KKyAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBpbnB1dCBzaG91bGQgYmUgY2Fub25pY2Fs
IGhpZXJhcmNoaWNhbCBVUkwsIHdlIHNob3VsZAorICAgICAgICAgICAgLy8gYWx3YXlzIGhhdmUg
YSBwYXRoLgorICAgICAgICAgICAgc3VjY2VzcyAmPSBDYW5vbmljYWxpemVQYXRoKHJlbGF0aXZl
VVJMLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgJm91dHB1dFBhcnNlZC0+cGF0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBSZWxhdGl2ZSBwYXRoLCByZXBsYWNlIHRoZSBxdWVyeSwgYW5kIHJlZmVyZW5jZS4gV2UgdGFr
ZSB0aGUKKyAgICAgICAgICAgIC8vIG9yaWdpbmFsIHBhdGggd2l0aCB0aGUgZmlsZSBwYXJ0IHN0
cmlwcGVkLCBhbmQgYXBwZW5kIHRoZSBuZXcgcGF0aC4KKyAgICAgICAgICAgIC8vIFRoZSBjYW5v
bmljYWxpemVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc29sdmluZyAiLi4iIGFuZCAiLiIKKyAgICAg
ICAgICAgIGludCBwYXRoQmVnaW4gPSBvdXRwdXQubGVuZ3RoKCk7CisgICAgICAgICAgICBDb3B5
VG9MYXN0U2xhc2goYmFzZVVSTCwgYmFzZVBhdGhCZWdpbiwgYmFzZVBhcnNlZC5wYXRoLmVuZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisgICAgICAgICAgICBzdWNj
ZXNzICY9IENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKHJlbGF0aXZlVVJMLCBwYXRoLCBwYXRoQmVn
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCk7CisgICAgICAgICAgICBvdXRwdXRQYXJzZWQtPnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21S
YW5nZShwYXRoQmVnaW4sIG91dHB1dC5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgIC8vIENvcHkg
dGhlIHJlc3Qgb2YgdGhlIHN0dWZmIGFmdGVyIHRoZSBwYXRoIGZyb20gdGhlIHJlbGF0aXZlIHBh
dGguCisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5pc2ggd2l0aCB0aGUgcXVlcnkgYW5kIHJl
ZmVyZW5jZSBwYXJ0ICh0aGVzZSBjYW4ndCBmYWlsKS4KKyAgICAgICAgQ2Fub25pY2FsaXplUXVl
cnkocmVsYXRpdmVVUkwsIHF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisgICAgICAgIENhbm9uaWNh
bGl6ZVJlZihyZWxhdGl2ZVVSTCwgcmVmLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPmZyYWdtZW50
KTsKKworICAgICAgICAvLyBGaXggdGhlIHBhdGggYmVnaW5uaW5nIHRvIGFkZCBiYWNrIHRoZSAi
QzoiIHdlIG1heSBoYXZlIHdyaXR0ZW4gYWJvdmUuCisgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0
aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHRydWVQYXRoQmVnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0
aC5lbmQoKSk7CisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKworICAgIC8vIElmIHdl
IGdldCBoZXJlLCB0aGUgcGF0aCBpcyB1bmNoYW5nZWQ6IGNvcHkgdG8gb3V0cHV0LgorICAgIENv
cHlPbmVDb21wb25lbnQoYmFzZVVSTCwgYmFzZVBhcnNlZC5wYXRoLCBvdXRwdXQsICZvdXRwdXRQ
YXJzZWQtPnBhdGgpOworCisgICAgaWYgKHF1ZXJ5LmlzVmFsaWQoKSkgeworICAgICAgICAvLyBK
dXN0IHRoZSBxdWVyeSBzcGVjaWZpZWQsIHJlcGxhY2UgdGhlIHF1ZXJ5IGFuZCByZWZlcmVuY2Ug
KGlnbm9yZQorICAgICAgICAvLyBmYWlsdXJlcyBmb3IgcmVmcykKKyAgICAgICAgQ2Fub25pY2Fs
aXplUXVlcnkocmVsYXRpdmVVUkwsIHF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisgICAgICAgIENh
bm9uaWNhbGl6ZVJlZihyZWxhdGl2ZVVSTCwgcmVmLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPmZy
YWdtZW50KTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorCisgICAgLy8gSWYgd2Ug
Z2V0IGhlcmUsIHRoZSBxdWVyeSBpcyB1bmNoYW5nZWQ6IGNvcHkgdG8gb3V0cHV0LiBOb3RlIHRo
YXQgdGhlCisgICAgLy8gcmFuZ2Ugb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlciBkb2Vzbid0IGluY2x1
ZGUgdGhlIHF1ZXN0aW9uIG1hcmssIHNvIHdlCisgICAgLy8gaGF2ZSB0byBhZGQgaXQgbWFudWFs
bHkgaWYgdGhlcmUgaXMgYSBjb21wb25lbnQuCisgICAgaWYgKGJhc2VQYXJzZWQucXVlcnkuaXNW
YWxpZCgpKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCc/Jyk7CisgICAgQ29weU9uZUNvbXBvbmVu
dChiYXNlVVJMLCBiYXNlUGFyc2VkLnF1ZXJ5LCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnF1ZXJ5
KTsKKworICAgIGlmIChyZWYuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEp1c3QgdGhlIHJlZmVy
ZW5jZSBzcGVjaWZpZWQ6IHJlcGxhY2UgaXQgKGlnbm9yaW5nIGZhaWx1cmVzKS4KKyAgICAgICAg
Q2Fub25pY2FsaXplUmVmKHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
ZnJhZ21lbnQpOworICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisKKyAgICAvLyBXZSBz
aG91bGQgYWx3YXlzIGhhdmUgc29tZXRoaW5nIHRvIGRvIGluIHRoaXMgZnVuY3Rpb24sIHRoZSBj
YWxsZXIgY2hlY2tzCisgICAgLy8gdGhhdCBzb21lIGNvbXBvbmVudCBpcyBiZWluZyByZXBsYWNl
ZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwor
Ly8gUmVzb2x2ZXMgYSByZWxhdGl2ZSBVUkwgdGhhdCBjb250YWlucyBhIGhvc3QuIFR5cGljYWxs
eSwgdGhlc2Ugd2lsbAorLy8gYmUgb2YgdGhlIGZvcm0gIi8vd3d3LmFwcGxlLmNvbS9mb28vYmFy
P2JheiNmcmFnbWVudCIgYW5kIHRoZSBvbmx5IHRoaW5nIHdoaWNoCisvLyBzaG91bGQgYmUga2Vw
dCBmcm9tIHRoZSBvcmlnaW5hbCBVUkwgaXMgdGhlIHNjaGVtZS4KK3RlbXBsYXRlPHR5cGVuYW1l
IENIQVI+Citib29sIGRvUmVzb2x2ZVJlbGF0aXZlSG9zdChjb25zdCBjaGFyKiBiYXNlVVJMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSKiByZWxhdGl2ZVVSTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21w
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBQYXJzZSB0aGUgcmVsYXRpdmUgVVJMLCBqdXN0IGxpa2Ugd2Ugd291
bGQgZm9yIGFueXRoaW5nIGZvbGxvd2luZyBhCisgICAgLy8gc2NoZW1lLgorICAgIFVSTFNlZ21l
bnRzIHJlbGF0aXZlUGFyc2VkOyAvLyBFdmVyeXRoaW5nIGJ1dCB0aGUgc2NoZW1lIGlzIHZhbGlk
LgorICAgIFVSTFBhcnNlcjo6UGFyc2VBZnRlclNjaGVtZSgmcmVsYXRpdmVVUkxbcmVsYXRpdmVD
b21wb25lbnQuYmVnaW4oKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0
aXZlQ29tcG9uZW50Lmxlbmd0aCgpLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVsYXRpdmVQYXJzZWQpOworCisgICAgLy8gTm93
IHdlIGNhbiBqdXN0IHVzZSB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdG8gcmVwbGFjZSBhbGwg
dGhlIG5lY2Vzc2FyeQorICAgIC8vIHBhcnRzIG9mIHRoZSBvbGQgVVJMIHdpdGggdGhlIG5ldyBv
bmUuCisgICAgUmVwbGFjZW1lbnRzPENIQVI+IHJlcGxhY2VtZW50czsKKyAgICByZXBsYWNlbWVu
dHMuU2V0VXNlcm5hbWUocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnVzZXJuYW1lKTsKKyAg
ICByZXBsYWNlbWVudHMuU2V0UGFzc3dvcmQocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnBh
c3N3b3JkKTsKKyAgICByZXBsYWNlbWVudHMuU2V0SG9zdChyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQ
YXJzZWQuaG9zdCk7CisgICAgcmVwbGFjZW1lbnRzLlNldFBvcnQocmVsYXRpdmVVUkwsIHJlbGF0
aXZlUGFyc2VkLnBvcnQpOworICAgIHJlcGxhY2VtZW50cy5TZXRQYXRoKHJlbGF0aXZlVVJMLCBy
ZWxhdGl2ZVBhcnNlZC5wYXRoKTsKKyAgICByZXBsYWNlbWVudHMuU2V0UXVlcnkocmVsYXRpdmVV
UkwsIHJlbGF0aXZlUGFyc2VkLnF1ZXJ5KTsKKyAgICByZXBsYWNlbWVudHMuU2V0UmVmKHJlbGF0
aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5mcmFnbWVudCk7CisKKyAgICByZXR1cm4gUmVwbGFjZVN0
YW5kYXJkVVJMKGJhc2VVUkwsIGJhc2VQYXJzZWQsIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7
Cit9CisKKy8vIFJlc29sdmVzIGEgcmVsYXRpdmUgVVJMIHRoYXQgaGFwcGVucyB0byBiZSBhbiBh
YnNvbHV0ZSBmaWxlIHBhdGguIEV4YW1wbGVzCisvLyBpbmNsdWRlOiAiLy9ob3N0bmFtZS9wYXRo
IiwgIi9jOi9mb28iLCBhbmQgIi8vaG9zdG5hbWUvYzovZm9vIi4KK3RlbXBsYXRlPHR5cGVuYW1l
IENIQVI+Citib29sIERvUmVzb2x2ZUFic29sdXRlRmlsZShjb25zdCBDSEFSKiByZWxhdGl2ZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRp
dmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVy
KiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICAvLyBQYXJzZSB0aGUgZmlsZSBVUkwuIFRoZSBmaWxlIFVSbCBw
YXJzaW5nIGZ1bmN0aW9uIHVzZXMgdGhlIHNhbWUgbG9naWMKKyAgICAvLyBhcyB3ZSBkbyBmb3Ig
ZGV0ZXJtaW5pbmcgaWYgdGhlIGZpbGUgaXMgYWJzb2x1dGUsIGluIHdoaWNoIGNhc2UgaXQgd2ls
bAorICAgIC8vIG5vdCBib3RoZXIgdG8gbG9vayBmb3IgYSBzY2hlbWUuCisgICAgVVJMU2VnbWVu
dHMgcmVsYXRpdmVQYXJzZWQ7CisgICAgVVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwoJnJlbGF0aXZl
VVJMW3JlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCldLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbGF0aXZlQ29tcG9uZW50Lmxlbmd0aCgpLCAmcmVsYXRpdmVQYXJzZWQpOworCisgICAg
cmV0dXJuIENhbm9uaWNhbGl6ZUZpbGVVUkwoJnJlbGF0aXZlVVJMW3JlbGF0aXZlQ29tcG9uZW50
LmJlZ2luKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9u
ZW50Lmxlbmd0aCgpLCByZWxhdGl2ZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCisvLyBUT0RP
KGJyZXR0dykgdHJlYXQgdHdvIHNsYXNoZXMgYXMgcm9vdCBsaWtlIE1vemlsbGEgZm9yIEZUUD8K
K3RlbXBsYXRlPHR5cGVuYW1lIENIQVI+Citib29sIGRvUmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0
IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJhc2VJc0Zp
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZlVVJMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29t
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVy
eUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJz
ZWQpCit7CisgICAgLy8gU3RhcnRpbmcgcG9pbnQgZm9yIG91ciBvdXRwdXQgcGFyc2VkLiBXZSds
bCBmaXggd2hhdCB3ZSBjaGFuZ2UuCisgICAgKm91dHB1dFBhcnNlZCA9IGJhc2VQYXJzZWQ7CisK
KyAgICAvLyBTYW5pdHkgY2hlY2s6IHRoZSBpbnB1dCBzaG91bGQgaGF2ZSBhIGhvc3Qgb3Igd2Un
bGwgYnJlYWsgYmFkbHkgYmVsb3cuCisgICAgLy8gV2UgY2FuIG9ubHkgcmVzb2x2ZSByZWxhdGl2
ZSBVUkxzIHdpdGggYmFzZSBVUkxzIHRoYXQgaGF2ZSBob3N0cyBhbmQKKyAgICAvLyBwYXRocyAo
ZXZlbiB0aGUgZGVmYXVsdCBwYXRoIG9mICIvIiBpcyBPSykuCisgICAgLy8KKyAgICAvLyBXZSBh
bGxvdyBob3N0cyB3aXRoIG5vIGxlbmd0aCBzbyB3ZSBjYW4gaGFuZGxlIGZpbGUgVVJMcywgZm9y
IGV4YW1wbGUuCisgICAgaWYgKGJhc2VQYXJzZWQucGF0aC5sZW5ndGgoKSA8PSAwKSB7CisgICAg
ICAgIC8vIE9uIGVycm9yLCByZXR1cm4gdGhlIGlucHV0IChyZXNvbHZpbmcgYSByZWxhdGl2ZSBV
Ukwgb24gYSBub24tcmVsYXRpdmUKKyAgICAgICAgLy8gYmFzZSA9IHRoZSBiYXNlKS4KKyAgICAg
ICAgaW50IGJhc2VMZW5ndGggPSBiYXNlUGFyc2VkLmxlbmd0aCgpOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGJhc2VMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
YmFzZVVSTFtpXSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVs
YXRpdmVDb21wb25lbnQubGVuZ3RoKCkgPD0gMCkgeworICAgICAgICAvLyBFbXB0eSByZWxhdGl2
ZSBVUkwsIGxlYXZlIHVuY2hhbmdlZCwgb25seSByZW1vdmluZyB0aGUgcmVmIGNvbXBvbmVudC4K
KyAgICAgICAgaW50IGJhc2VMZW5ndGggPSBiYXNlUGFyc2VkLmxlbmd0aCgpOworICAgICAgICBi
YXNlTGVuZ3RoIC09IGJhc2VQYXJzZWQuZnJhZ21lbnQubGVuZ3RoKCkgKyAxOworICAgICAgICBv
dXRwdXRQYXJzZWQtPmZyYWdtZW50LnJlc2V0KCk7CisgICAgICAgIG91dHB1dC5hcHBlbmQoYmFz
ZVVSTCwgYmFzZUxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlu
dCBudW1TbGFzaGVzID0gVVJMUGFyc2VyOjpjb3VudENvbnNlY3V0aXZlU2xhc2hlcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRp
dmVVUkwsIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCksIHJlbGF0aXZlQ29tcG9uZW50LmVuZCgp
KTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gT24gV2luZG93cywgdHdvIHNsYXNoZXMgZm9y
IGEgZmlsZSBwYXRoIChyZWdhcmRsZXNzIG9mIHdoaWNoIGRpcmVjdGlvbgorICAgIC8vIHRoZXkg
YXJlKSBtZWFucyB0aGF0IGl0J3MgVU5DLiBUd28gYmFja3NsYXNoZXMgb24gYW55IGJhc2Ugc2No
ZW1lIG1lYW4KKyAgICAvLyB0aGF0IGl0J3MgYW4gYWJzb2x1dGUgVU5DIHBhdGggKHdlIHVzZSB0
aGUgYmFzZUlzRmlsZSBmbGFnIHRvIGNvbnRyb2wKKyAgICAvLyBob3cgc3RyaWN0IHRoZSBVTkMg
ZmluZGVyIGlzKS4KKyAgICAvLworICAgIC8vIFdlIGFsc28gYWxsb3cgV2luZG93cyBhYnNvbHV0
ZSBkcml2ZSBzcGVjcyBvbiBhbnkgc2NoZW1lIChmb3IgZXhhbXBsZQorICAgIC8vICJjOlxmb28i
KSBsaWtlIElFIGRvZXMuIFRoZXJlIG11c3QgYmUgbm8gcHJlY2VlZGluZyBzbGFzaGVzIGluIHRo
aXMKKyAgICAvLyBjYXNlICh3ZSByZWplY3QgYW55dGhpbmcgbGlrZSAiL2M6L2ZvbyIpIGJlY2F1
c2UgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAorICAgIC8vIGFzIGEgcGF0aC4gRm9yIGZpbGUgVVJM
cywgd2UgYWxsb3cgYW55IG51bWJlciBvZiBzbGFzaGVzIHNpbmNlIHRoYXQgd291bGQKKyAgICAv
LyBiZSBzZXR0aW5nIHRoZSBwYXRoLgorICAgIC8vCisgICAgLy8gVGhpcyBhc3N1bWVzIHRoZSBh
YnNvbHV0ZSBwYXRoIHJlc29sdmVyIGhhbmRsZXMgYWJzb2x1dGUgVVJMcyBsaWtlIHRoaXMKKyAg
ICAvLyBwcm9wZXJseS4gVVJMVXRpbGl0aWVzOjpEb0Nhbm9uaWNhbGl6ZSBkb2VzIHRoaXMuCisg
ICAgaW50IGFmdGVyU2xhc2hlcyA9IHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luICsgbnVtU2xhc2hl
czsKKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVnaW5VTkNQYXRoKHJlbGF0aXZlVVJMLCByZWxh
dGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxhdGl2ZUNvbXBvbmVudC5lbmQoKSwgIWJhc2VJc0Zp
bGUpCisgICAgICAgIHx8ICgoIW51bVNsYXNoZXMgfHwgYmFzZUlzRmlsZSkgJiYgVVJMUGFyc2Vy
Ojpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJlbGF0aXZlVVJMLCBhZnRlclNsYXNoZXMsIHJl
bGF0aXZlQ29tcG9uZW50LmVuZCgpKSkpIHsKKyAgICAgICAgICAgICByZXR1cm4gRG9SZXNvbHZl
QWJzb2x1dGVGaWxlKHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91
dHB1dFBhcnNlZCk7CisgICAgICAgICB9CisjZWxzZQorICAgIC8vIE90aGVyIHBsYXRmb3JtcyBu
ZWVkIGV4cGxpY2l0IGhhbmRsaW5nIGZvciBmaWxlOiBVUkxzIHdpdGggbXVsdGlwbGUKKyAgICAv
LyBzbGFzaGVzIGJlY2F1c2UgdGhlIGdlbmVyaWMgc2NoZW1lIHBhcnNpbmcgYWx3YXlzIGV4dHJh
Y3RzIGEgaG9zdCwgYnV0IGEKKyAgICAvLyBmaWxlOiBVUkwgb25seSBoYXMgYSBob3N0IGlmIGl0
IGhhcyBleGFjdGx5IDIgc2xhc2hlcy4gVGhpcyBhbHNvCisgICAgLy8gaGFuZGxlcyB0aGUgc3Bl
Y2lhbCBjYXNlIHdoZXJlIHRoZSBVUkwgaXMgb25seSBzbGFzaGVzLCBzaW5jZSB0aGF0CisgICAg
Ly8gZG9lc24ndCBoYXZlIGEgaG9zdCBwYXJ0IGVpdGhlci4KKyAgICBpZiAoYmFzZUlzRmlsZSAm
JiAobnVtU2xhc2hlcyA+IDIgfHwgbnVtU2xhc2hlcyA9PSByZWxhdGl2ZUNvbXBvbmVudC5sZW5n
dGgoKSkpIHsKKyAgICAgICAgcmV0dXJuIERvUmVzb2x2ZUFic29sdXRlRmlsZShyZWxhdGl2ZVVS
TCwgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisjZW5kaWYK
KworICAgIC8vIEFueSBvdGhlciBkb3VibGUtc2xhc2hlcyBtZWFuIHRoYXQgdGhpcyBpcyByZWxh
dGl2ZSB0byB0aGUgc2NoZW1lLgorICAgIGlmIChudW1TbGFzaGVzID49IDIpIHsKKyAgICAgICAg
cmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlSG9zdChiYXNlVVJMLCBiYXNlUGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnZlcnRl
ciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIFdoZW4gd2UgZ2V0IGhl
cmUsIHdlIGtub3cgdGhhdCB0aGUgcmVsYXRpdmUgVVJMIGlzIG9uIHRoZSBzYW1lIGhvc3QuCisg
ICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlUGF0aChiYXNlVVJMLCBiYXNlUGFyc2VkLCBiYXNl
SXNGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVUkwsIHJl
bGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlD
b252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
Ym9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGZyYWdtZW50TGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAg
ICAgICAgIGJvb2wqIGlzUmVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50
KiByZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gRG9Jc1JlbGF0aXZlVVJMPGNoYXI+
KGJhc2UsIGJhc2VQYXJzZWQsIGZyYWdtZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFy
Y2hpY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSwgcmVs
YXRpdmVDb21wb25lbnQpOworfQorCitib29sIGlzUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAg
ICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZnJhZ21lbnQsCisgICAgICAgICAgICAgICAg
ICAgaW50IGZyYWdtZW50TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGll
cmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzUmVsYXRpdmUsCisgICAgICAg
ICAgICAgICAgICAgVVJMQ29tcG9uZW50KiByZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICByZXR1
cm4gRG9Jc1JlbGF0aXZlVVJMPFVDaGFyPihiYXNlLCBiYXNlUGFyc2VkLCBmcmFnbWVudCwgZnJh
Z21lbnRMZW5ndGgsIGlzQmFzZUhpZXJhcmNoaWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1JlbGF0aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Cit9CisKK2Jvb2wgcmVz
b2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmFzZUlzRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHJlbGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252
ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0
cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZVVSTDxjaGFyPihiYXNl
VVJMLCBiYXNlUGFyc2VkLCBiYXNlSXNGaWxlLCByZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVy
LCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlVVJMKGNv
bnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdt
ZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmFzZUlzRmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiByZWxhdGl2ZVVSTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZl
cnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAg
ICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2VVUkwsIGJhc2VQYXJzZWQs
IGJhc2VJc0ZpbGUsIHJlbGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1
dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblN0ZFVSTC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTENhbm9uU3RkVVJMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWY2YThmZjU3MDM0MWM4NTc3NjU4
MGExNmJiOWY5YTNkNGNiYjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblN0ZFVSTC5jcHAKQEAgLTAsMCArMSwyMjIgQEAKKy8vIENvcHlyaWdodCAy
MDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIs
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gRnVuY3Rpb25zIHRvIGNhbm9uaWNhbGl6ZSAic3Rh
bmRhcmQiIFVSTHMsIHdoaWNoIGFyZSBvbmVzIHRoYXQgaGF2ZSBhbgorLy8gYXV0aG9yaXR5IHNl
Y3Rpb24gaW5jbHVkaW5nIGEgaG9zdCBuYW1lLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUg
IlVSTENhbm9uSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYg
eworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBEb0Nhbm9uaWNhbGl6ZVN0
YW5kYXJkVVJMKGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxDSEFSPiYgc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBTY2hlbWU6IHRoaXMgd2lsbCBhcHBlbmQgdGhlIGNvbG9uLgorICAg
IGJvb2wgc3VjY2VzcyA9IENhbm9uaWNhbGl6ZVNjaGVtZShzb3VyY2Uuc2NoZW1lLCBwYXJzZWQu
c2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZv
dXRwdXRQYXJzZWQtPnNjaGVtZSk7CisKKyAgICAvLyBBdXRob3JpdHkgKHVzZXJuYW1lLCBwYXNz
d29yZCwgaG9zdCwgcG9ydCkKKyAgICBib29sIGhhdmVBdXRob3JpdHk7CisgICAgaWYgKHBhcnNl
ZC51c2VybmFtZS5pc05vbkVtcHR5KCkgfHwgcGFyc2VkLnBhc3N3b3JkLmlzVmFsaWQoKSB8fCBw
YXJzZWQuaG9zdC5pc05vbkVtcHR5KCkgfHwgcGFyc2VkLnBvcnQuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGhhdmVBdXRob3JpdHkgPSB0cnVlOworCisgICAgICAgIC8vIE9ubHkgd3JpdGUgdGhlIGF1
dGhvcml0eSBzZXBhcmF0b3JzIHdoZW4gd2UgaGF2ZSBhIHNjaGVtZS4KKyAgICAgICAgaWYgKHBh
cnNlZC5zY2hlbWUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7
CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBVc2VyIGluZm86IHRoZSBjYW5vbmljYWxpemVyIHdpbGwgaGFuZGxlIHRoZSA6IGFuZCBALgor
ICAgICAgICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVVzZXJJbmZvKHNvdXJjZS51c2VybmFtZSwg
cGFyc2VkLnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZS5wYXNzd29yZCwgcGFyc2VkLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmb3V0cHV0UGFyc2VkLT51c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmb3V0cHV0UGFyc2VkLT5wYXNzd29yZCk7CisKKyAgICAgICAg
c3VjY2VzcyAmPSBDYW5vbmljYWxpemVIb3N0KHNvdXJjZS5ob3N0LCBwYXJzZWQuaG9zdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+
aG9zdCk7CisKKyAgICAgICAgLy8gSG9zdCBtdXN0IG5vdCBiZSBlbXB0eSBmb3Igc3RhbmRhcmQg
VVJMcy4KKyAgICAgICAgaWYgKCFwYXJzZWQuaG9zdC5pc05vbkVtcHR5KCkpCisgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgLy8gUG9ydDogdGhlIHBvcnQgY2Fub25pY2Fs
aXplciB3aWxsIGhhbmRsZSB0aGUgY29sb24uCisgICAgICAgIGludCBkZWZhdWx0UG9ydCA9IERl
ZmF1bHRQb3J0Rm9yU2NoZW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm91dHB1dC5kYXRhKClbb3V0cHV0UGFyc2VkLT5zY2hlbWUuYmVnaW4oKV0s
IG91dHB1dFBhcnNlZC0+c2NoZW1lLmxlbmd0aCgpKTsKKyAgICAgICAgc3VjY2VzcyAmPSBDYW5v
bmljYWxpemVQb3J0KHNvdXJjZS5wb3J0LCBwYXJzZWQucG9ydCwgZGVmYXVsdFBvcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnBv
cnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIGF1dGhvcml0eSwgY2xlYXIgdGhlIGNv
bXBvbmVudHMuCisgICAgICAgIGhhdmVBdXRob3JpdHkgPSBmYWxzZTsKKyAgICAgICAgb3V0cHV0
UGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgICAgIG91dHB1dFBhcnNlZC0+dXNlcm5hbWUucmVz
ZXQoKTsKKyAgICAgICAgb3V0cHV0UGFyc2VkLT5wYXNzd29yZC5yZXNldCgpOworICAgICAgICBv
dXRwdXRQYXJzZWQtPnBvcnQucmVzZXQoKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBT
dGFuZGFyZCBVUkxzIG11c3QgaGF2ZSBhbiBhdXRob3JpdHkuCisgICAgfQorCisgICAgLy8gUGF0
aAorICAgIGlmIChwYXJzZWQucGF0aC5pc05vbkVtcHR5KCkpIHsKKyAgICAgICAgc3VjY2VzcyAm
PSBDYW5vbmljYWxpemVQYXRoKHNvdXJjZS5wYXRoLCBwYXJzZWQucGF0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cGF0aCk7Cisg
ICAgfSBlbHNlIGlmIChoYXZlQXV0aG9yaXR5IHx8IHBhcnNlZC5xdWVyeS5pc05vbkVtcHR5KCkg
fHwgcGFyc2VkLmZyYWdtZW50LmlzTm9uRW1wdHkoKSkgeworICAgICAgICAvLyBXaGVuIHdlIGhh
dmUgYW4gZW1wdHkgcGF0aCwgbWFrZSB1cCBhIHBhdGggd2hlbiB3ZSBoYXZlIGFuIGF1dGhvcml0
eQorICAgICAgICAvLyBvciBzb21ldGhpbmcgZm9sbG93aW5nIHRoZSBwYXRoLiBUaGUgb25seSB0
aW1lIHdlIGFsbG93IGFuIGVtcHR5CisgICAgICAgIC8vIG91dHB1dCBwYXRoIGlzIHdoZW4gdGhl
cmUgaXMgbm90aGluZyBlbHNlLgorICAgICAgICBvdXRwdXRQYXJzZWQtPnBhdGggPSBVUkxDb21w
b25lbnQob3V0cHV0Lmxlbmd0aCgpLCAxKTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHBhdGggYXQgYWxsCisgICAgICAgIG91dHB1dFBh
cnNlZC0+cGF0aC5yZXNldCgpOworICAgIH0KKworICAgIC8vIFF1ZXJ5CisgICAgQ2Fub25pY2Fs
aXplUXVlcnkoc291cmNlLnF1ZXJ5LCBwYXJzZWQucXVlcnksIHF1ZXJ5Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkpOworCisgICAg
Ly8gUmVmOiBpZ25vcmUgZmFpbHVyZSBmb3IgdGhpcywgc2luY2UgdGhlIHBhZ2UgY2FuIHByb2Jh
Ymx5IHN0aWxsIGJlIGxvYWRlZC4KKyAgICBDYW5vbmljYWxpemVSZWYoc291cmNlLnJlZiwgcGFy
c2VkLmZyYWdtZW50LCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPmZyYWdtZW50KTsKKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCisKKy8vIFJldHVybnMgdGhlIGRl
ZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbCBzY2hlbWUsIG9yIFBPUlRfVU5TUEVD
SUZJRUQKKy8vIGlmIHRoZSBzY2hlbWUgaXMgdW5rbm93bi4KK2ludCBEZWZhdWx0UG9ydEZvclNj
aGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIGludCBzY2hlbWVMZW5ndGgpCit7CisgICAgaW50IGRl
ZmF1bHRQb3J0ID0gVVJMUGFyc2VyOjpQT1JUX1VOU1BFQ0lGSUVEOworICAgIHN3aXRjaCAoc2No
ZW1lTGVuZ3RoKSB7CisgICAgY2FzZSA0OgorICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAi
aHR0cCIsIHNjaGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDgwOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJo
dHRwcyIsIHNjaGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDQ0MzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAi
ZnRwIiwgc2NoZW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gMjE7CisgICAg
ICAgIGVsc2UgaWYgKCFzdHJuY21wKHNjaGVtZSwgIndzcyIsIHNjaGVtZUxlbmd0aCkpCisgICAg
ICAgICAgICBkZWZhdWx0UG9ydCA9IDQ0MzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA2Ogor
ICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1lLCAiZ29waGVyIiwgc2NoZW1lTGVuZ3RoKSkKKyAg
ICAgICAgICAgIGRlZmF1bHRQb3J0ID0gNzA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoK
KyAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVtZSwgIndzIiwgc2NoZW1lTGVuZ3RoKSkKKyAgICAg
ICAgICAgIGRlZmF1bHRQb3J0ID0gODA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gZGVmYXVsdFBvcnQ7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3Qg
Y2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHNwZWNMZW5n
dGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemVTdGFuZGFyZFVSTDxjaGFy
LCB1bnNpZ25lZCBjaGFyPihVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4oc3BlYyksIHBhcnNlZCwg
cXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIENhbm9u
aWNhbGl6ZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBEb0Nh
bm9uaWNhbGl6ZVN0YW5kYXJkVVJMPFVDaGFyLCBVQ2hhcj4oVVJMQ29tcG9uZW50U291cmNlPFVD
aGFyPihzcGVjKSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30K
KworLy8gSXQgbWlnaHQgYmUgbmljZSBpbiB0aGUgZnV0dXJlIHRvIG9wdGltaXplIHRoaXMgc28g
dW5jaGFuZ2VkIGNvbXBvbmVudHMgZG9uJ3QKKy8vIG5lZWQgdG8gYmUgcmVjYW5vbmljYWxpemVk
LiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBzaW5jZSB0aGUgY29tbW9uIGNhc2UgZm9yCisvLyBS
ZXBsYWNlQ29tcG9uZW50cyBpcyByZW1vdmluZyB0aGluZ3Mgd2UgZG9uJ3Qgd2FudCwgbGlrZSBy
ZWZlcmVuY2UgZnJhZ21lbnRzCisvLyBhbmQgdXNlcm5hbWVzLiBUaGVzZSBjYXNlcyBjYW4gYmVj
b21lIG1vcmUgZWZmaWNpZW50IGlmIHdlIGNhbiBhc3N1bWUgdGhlCisvLyByZXN0IG9mIHRoZSBV
UkwgaXMgT0sgd2l0aCB0aGVzZSByZW1vdmVkIChvciBvbmx5IHRoZSBtb2RpZmllZCBwYXJ0cwor
Ly8gcmVjYW5vbmljYWxpemVkKS4gVGhpcyB3b3VsZCBiZSBtdWNoIG1vcmUgY29tcGxleCB0byBp
bXBsZW1lbnQsIGhvd2V2ZXIuCisvLworLy8gWW91IHdvdWxkIGFsc28gbmVlZCB0byB1cGRhdGUg
RG9SZXBsYWNlQ29tcG9uZW50cyBpbiBVUkxVdGlsaXRpZXMuY2Mgd2hpY2gKKy8vIHJlbGllcyBv
biB0aGlzIHJlLWNoZWNraW5nIGV2ZXJ5dGhpbmcgKHNlZSB0aGUgY29tbWVudCB0aGVyZSBmb3Ig
d2h5KS4KK2Jvb2wgUmVwbGFjZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgVVJM
Q29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJz
ZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFj
ZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemVTdGFu
ZGFyZFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgcXVlcnlDb252ZXJ0
ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworLy8gRm9yIDE2LWJpdCByZXBsYWNlbWVu
dHMsIHdlIHR1cm4gYWxsIHRoZSByZXBsYWNlbWVudHMgaW50byBVVEYtOCBzbyB0aGUKKy8vIHJl
Z3VsYXIgY29kZXBhdGggY2FuIGJlIHVzZWQuCitib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25z
dCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMm
IGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8
VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29u
dmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKKyAgICBVUkxDb21w
b25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChi
YXNlUGFyc2VkKTsKKyAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxh
Y2VtZW50cywgdXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIERvQ2Fub25pY2Fs
aXplU3RhbmRhcmRVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIHF1ZXJ5
Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBl
cy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmNwcAppbmRl
eCBmNTZlNzIwN2NjNWU2NmRiYTk3OTZiZjYxNjMxMWI1NzcyZmMzNGRkLi43ZTNlMTNkMjA5NDFj
M2ZlNGUwZDU2YzE3OTVjNTY2ZmM1NGEzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTENoYXJhY3RlclR5cGVzLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2lmIFVTRShXVEZVUkwp
CiAKIG5hbWVzcGFjZSBXVEYgewotCiBjb25zdCB1bnNpZ25lZCBjaGFyIFVSTENoYXJhY3RlclR5
cGVzOjpjaGFyYWN0ZXJUeXBlVGFibGVbMHgxMDBdID0gewogICAgIEludmFsaWRDaGFyYWN0ZXIs
IEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCiAg
ICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rlciwg
SW52YWxpZENoYXJhY3RlciwKQEAgLTQzLDEwMCArNDIsMTAwIEBAIGNvbnN0IHVuc2lnbmVkIGNo
YXIgVVJMQ2hhcmFjdGVyVHlwZXM6OmNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF0gPSB7CiAgICAg
SW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52
YWxpZENoYXJhY3RlciwKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJ
bnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDEwIC0gMHgxZgogICAgIElu
dmFsaWRDaGFyYWN0ZXIsIC8vIDB4MjAgICcgJyAoZXNjYXBlIHNwYWNlcyBpbiBxdWVyaWVzKQot
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjEgICEKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDIxICAhCiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgyMiAgIgogICAgIEludmFsaWRD
aGFyYWN0ZXIsIC8vIDB4MjMgICMgIChpbnZhbGlkIGluIHF1ZXJ5IHNpbmNlIGl0IG1hcmtzIHRo
ZSByZWYpCiAgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyNCAg
JAogICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjUgICUKICAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI2ICAmCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyNyAgJwotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjggICgKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI5ICApCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHgyYSAgKgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MjcgICcKKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDI4
ICAoCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHgyOSAgKQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MmEgICoKICAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJiICArCiAgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHgyYyAgLAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIsIC8vIDB4MmQgIC0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciwgLy8gMHgyZSAgLgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MmQgIC0KKyAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHgyZSAgLgogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDJmICAvCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBI
ZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzAg
IDAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3Rl
ciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8g
MHgzMSAgMQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hh
cmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVy
LCAvLyAweDMyICAyCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQ
djRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFy
YWN0ZXIsIC8vIDB4MzMgIDMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3Rh
bENoYXJhY3RlciwgLy8gMHgzNCAgNAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8
IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDM1ICA1Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFj
dGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxD
aGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzNyAgNwotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVj
aW1hbENoYXJhY3RlciwgLy8gMHgzOCAgOAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3Rl
ciwgLy8gMHgzOSAgOQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJ
UHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwg
T2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzAgIDAKKyAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNp
bWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDMxICAxCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxD
aGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzMiAg
MgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzMgIDMKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVy
IHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDM0ICA0CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQ
djRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBP
Y3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzNSAgNQorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2lt
YWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENo
YXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDM3ICA3
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIg
fCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4MzggIDgKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzOSAgOQogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAv
LyAweDNhICA6CiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4M2IgIDsKLSAgICBJbnZhbGlkQ2hh
cmFjdGVyLCAvLyAweDNjICA8CisgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgzYyAgPCAgKFRy
eSB0byBwcmV2ZW50IGNlcnRhaW4gdHlwZXMgb2YgWFNTLikKICAgICBRdWVyeUNoYXJhY3Rlciwg
Ly8gMHgzZCAgPQotICAgIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4M2UgID4KKyAgICBJbnZhbGlk
Q2hhcmFjdGVyLCAvLyAweDNlICA+ICAoVHJ5IHRvIHByZXZlbnQgY2VydGFpbiB0eXBlcyBvZiBY
U1MuKQogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNmICA/CiAgICAgUXVlcnlDaGFyYWN0ZXIs
IC8vIDB4NDAgIEAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2
NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0MSAgQQotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAw
eDQyICBCCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFy
YWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDMgIEMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0NCAg
RAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4Q2hhcmFjdGVyLCAvLyAweDQ1ICBFCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDYgIEYKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDQ3ICBHCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0OCAgSAotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NDkgIEkKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDRhICBKCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHg0YiAgSwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIsIC8vIDB4NGMgIEwKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyLCAvLyAweDRkICBNCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciwgLy8gMHg0ZSAgTgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8v
IDB4NGYgIE8KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUw
ICBQCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1MSAgUQot
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTIgIFIKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUzICBTCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1NCAgVAotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTUgIFUKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDU2ICBWCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHg1NyAgVwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyLCAvLyAweDU4ICBYCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1OSAgWQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIsIC8vIDB4NWEgIFoKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDQxICBBCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHg0MiAgQgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NDMgIEMKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDQ0ICBECisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHg0NSAgRQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0
ZXIsIC8vIDB4NDYgIEYKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ3ICBHCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0OCAgSAorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4
NDkgIEkKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50
Q2hhcmFjdGVyLCAvLyAweDRhICBKCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0YiAgSworICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGMgIEwKKyAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDRkICBNCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENv
bXBvbmVudENoYXJhY3RlciwgLy8gMHg0ZSAgTgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGYgIE8KKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDUw
ICBQCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg1MSAgUQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTIgIFIKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDUzICBTCisgICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg1NCAgVAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NTUgIFUKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU2ICBWCisgICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1NyAg
VworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU4ICBYCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1OSAgWQorICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NWEgIFoKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1YiAgWwogICAgIFF1ZXJ5Q2hhcmFj
dGVyLCAvLyAweDVjICAnXCcKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1ZCAgXQogICAgIFF1
ZXJ5Q2hhcmFjdGVyLCAvLyAweDVlICBeCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciwgLy8gMHg1ZiAgXworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NWYgIF8KICAgICBRdWVyeUNoYXJhY3Rlciwg
Ly8gMHg2MCAgYAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0
Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDYxICBhCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4
NjIgIGIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJh
Y3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2MyAgYwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDY0ICBk
Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIg
fCBIZXhDaGFyYWN0ZXIsIC8vIDB4NjUgIGUKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2NiAgZgotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NjcgIGcKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDY4ICBoCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2OSAgaQotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NmEgIGoKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDZiICBrCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciwgLy8gMHg2YyAgbAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIsIC8vIDB4NmQgIG0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
LCAvLyAweDZlICBuCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8g
MHg2ZiAgbwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzAg
IHAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDcxICBxCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3MiAgcgotICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzMgIHMKLSAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc0ICB0Ci0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3NSAgdQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzYgIHYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyLCAvLyAweDc3ICB3Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIsIC8vIDB4NzggIHgKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc5ICB5Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHg3YSAgegorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4NjEgIGEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50
Q2hhcmFjdGVyLCAvLyAweDYyICBiCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg2MyAgYworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4NjQgIGQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDY1ICBlCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rl
ciwgLy8gMHg2NiAgZgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjcgIGcKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY4ICBoCisgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2
OSAgaQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NmEgIGoKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZiICBrCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2YyAgbAorICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4NmQgIG0KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDZlICBuCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2ZiAgbworICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzAg
IHAKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDcxICBxCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3MiAgcgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzMgIHMKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDc0ICB0CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHg3NSAgdQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzYgIHYKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc3ICB3
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzggIHgKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc5ICB5CisgICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8g
MHg3YSAgegogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDdiICB7CiAgICAgUXVlcnlDaGFyYWN0
ZXIsIC8vIDB4N2MgIHwKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg3ZCAgfQotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4N2UgIH4KKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDdlICB+
CiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHg3ZgogICAgIEludmFsaWRDaGFyYWN0ZXIsIElu
dmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCiAgICAg
SW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52
YWxpZENoYXJhY3RlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hh
cmFjdGVyVHlwZXMuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMu
aAppbmRleCA2ZWRiOThjYTIwMzllYzRlNjg2N2EzNmY3NmY4MTIyZDBlZmMwNDdjLi41MzQ0ZTlj
NGFiNjFmNjdhNzg1NGU5ODgwY2YwMDQzZjFmNzZiZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmgKKysrIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5oCkBAIC0zNSwyNyArMzUsMjkgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIGNsYXNzIFVSTENoYXJhY3RlclR5cGVzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNRdWVyeUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5
cGUoYywgUXVlcnlDaGFyYWN0ZXIpOyB9Ci0gICAgc3RhdGljIGlubGluZSBib29sIGlzSVB2NENo
YXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5cGUoYywgSVB2NENoYXJhY3Rl
cik7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZXhDaGFyKHVuc2lnbmVkIGNoYXIgYykg
eyByZXR1cm4gaXNDaGFyT2ZUeXBlKGMsIEhleENoYXJhY3Rlcik7IH0KLQotcHJpdmF0ZToKLSAg
ICBlbnVtIENoYXJUeXBlcyB7CisgICAgZW51bSBDaGFyYWN0ZXJUeXBlcyB7CiAgICAgICAgIElu
dmFsaWRDaGFyYWN0ZXIgPSAwLAogICAgICAgICBRdWVyeUNoYXJhY3RlciA9IDEgPDwgMCwKICAg
ICAgICAgVXNlckluZm9DaGFyYWN0ZXIgPSAxIDw8IDEsCiAgICAgICAgIElQdjRDaGFyYWN0ZXIg
PSAxIDw8IDIsCi0gICAgICAgIEhleENoYXJhY3RlciA9IDEgPDwgMywKKyAgICAgICAgSGV4YWRl
Y2ltYWxDaGFyYWN0ZXIgPSAxIDw8IDMsCiAgICAgICAgIERlY2ltYWxDaGFyYWN0ZXIgPSAxIDw8
IDQsCiAgICAgICAgIE9jdGFsQ2hhcmFjdGVyID0gMSA8PCA1LAorICAgICAgICBDb21wb25lbnRD
aGFyYWN0ZXIgPSAxIDw8IDYsCiAgICAgfTsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIGNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF07CisgICAgc3RhdGljIGlubGluZSBib29sIGlz
Q29tcG9uZW50Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gaXNDaGFyYWN0
ZXJPZlR5cGUoY2hhcmFjdGVyLCBDb21wb25lbnRDaGFyYWN0ZXIpOyB9CisgICAgc3RhdGljIGlu
bGluZSBib29sIGlzSGV4Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1cm4gaXND
aGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBIZXhhZGVjaW1hbENoYXJhY3Rlcik7IH0KKyAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNJUHY0Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyBy
ZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBJUHY0Q2hhcmFjdGVyKTsgfQorICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1F1ZXJ5Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3Rlcikg
eyByZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBRdWVyeUNoYXJhY3Rlcik7IH0K
IAotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoYXJPZlR5cGUodW5zaWduZWQgY2hhciBjLCBD
aGFyVHlwZXMgdHlwZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGFyYWN0ZXJPZlR5cGUo
dW5zaWduZWQgY2hhciBIZXhDaGFyYWN0ZXIsIENoYXJhY3RlclR5cGVzIHR5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gISEoY2hhcmFjdGVyVHlwZVRhYmxlW2NdICYgdHlwZSk7CisgICAgICAg
IHJldHVybiAhIShjaGFyYWN0ZXJUeXBlVGFibGVbSGV4Q2hhcmFjdGVyXSAmIHR5cGUpOwogICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJU
eXBlVGFibGVbMHgxMDBdOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxFc2NhcGUuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxFc2NhcGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWNkY2RlMjRkNjc2ZTFhOTQ3MzgxM2Yy
ZjIzOTllNGNmMGMyNGZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMRXNjYXBlLmgiCi0KLSNpZiBV
U0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotY29uc3QgY2hhciBoZXhDaGFyYWN0ZXJU
YWJsZVsxNl0gPSB7Ci0gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycs
Ci0gICAgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi19OwotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxFc2NhcGUuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMTAwMTJhM2Y4YmVlN2U5M2Q4Mjg0ZDBkMjA0NWI2
OTBlODgxODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxFc2NhcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUz
ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSNp
Zm5kZWYgVVJMRXNjYXBlX2gKLSNkZWZpbmUgVVJMRXNjYXBlX2gKLQotI2lmIFVTRShXVEZVUkwp
Ci0KLSNpbmNsdWRlICJVUkxCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWV4dGVybiBj
b25zdCBjaGFyIGhleENoYXJhY3RlclRhYmxlWzE2XTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSW5D
aGFyLCB0eXBlbmFtZSBPdXRDaGFyPgotaW5saW5lIHZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXJh
Y3RlcihJbkNoYXIgY2gsIFVSTEJ1ZmZlcjxPdXRDaGFyPiYgYnVmZmVyKQotewotICAgIGJ1ZmZl
ci5hcHBlbmQoJyUnKTsKLSAgICBidWZmZXIuYXBwZW5kKGhleENoYXJhY3RlclRhYmxlW2NoID4+
IDRdKTsKLSAgICBidWZmZXIuYXBwZW5kKGhleENoYXJhY3RlclRhYmxlW2NoICYgMHhmXSk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxGaWxlLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TEZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODY2YzEwNDhhYjQ4MzNkYTk3YjQ3ZTk5NjQzN2NhMTU0YjM5
MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxGaWxlLmgK
QEAgLTAsMCArMSwxMTQgQEAKKy8vIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
Ly8gUHJvdmlkZXMgc2hhcmVkIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBpbnRlcm5hbHMgb2YgdGhl
IHBhcnNlciBhbmQKKy8vIGNhbm9uaWNhbGl6ZXIgZm9yIGZpbGUgVVJMcy4gRG8gbm90IHVzZSBv
dXRzaWRlIG9mIHRoZXNlIG1vZHVsZXMuCisKKyNpZm5kZWYgVVJMRmlsZV9oCisjZGVmaW5lIFVS
TEZpbGVfaAorCisjaW5jbHVkZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgorI2luY2x1ZGUgPHd0Zi91
bmljb2RlL1VuaWNvZGUuaD4KKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgewor
CituYW1lc3BhY2UgVVJMUGFyc2VyIHsKKworI2lmIE9TKFdJTkRPV1MpCisvLyBXZSBhbGxvdyBi
b3RoICJjOiIgYW5kICJjfCIgYXMgZHJpdmUgaWRlbnRpZmllcnMuCitpbmxpbmUgYm9vbCBpc1dp
bmRvd3NEcml2ZVNlcGFyYXRvcihVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGNoYXJh
Y3RlciA9PSAnOicgfHwgY2hhcmFjdGVyID09ICd8JzsKK30KK2lubGluZSBib29sIGlzV2luZG93
c0RyaXZlTGV0dGVyKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gKGNoYXJhY3RlciA+
PSAnQScgJiYgY2hhcmFjdGVyIDw9ICdaJykgfHwgKGNoYXJhY3RlciA+PSAnYScgJiYgY2hhcmFj
dGVyIDw9ICd6Jyk7Cit9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgdGhlIG5leHQgc2xhc2ggaW4gdGhlIGlucHV0IGFmdGVyIHRoZSBnaXZlbiBpbmRl
eCwgb3IKKy8vIHNwZWNMZW5ndGggaWYgdGhlIGVuZCBvZiB0aGUgaW5wdXQgaXMgcmVhY2hlZC4K
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgaW50IGZpbmROZXh0U2xh
c2goY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IGJlZ2luSW5kZXgsIGludCBzcGVjTGVu
Z3RoKQoreworICAgIGludCBpZHggPSBiZWdpbkluZGV4OworICAgIHdoaWxlIChpZHggPCBzcGVj
TGVuZ3RoICYmICFpc1VSTFNsYXNoKHNwZWNbaWR4XSkpCisgICAgICAgICsraWR4OworICAgIHJl
dHVybiBpZHg7Cit9CisKKyNpZiBPUyhXSU5ET1dTKQorLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBz
dGFydE9mZnNldCBpbiB0aGUgZ2l2ZW4gc3BlYyBsb29rcyBsaWtlIGl0IGJlZ2lucyBhCisvLyBk
cml2ZSBzcGVjLCBmb3IgZXhhbXBsZSAiYzoiLiBUaGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgaGFu
ZGxlcyBzdGFydE9mZnNldAorLy8gdmFsdWVzIHRoYXQgYXJlIGVxdWFsIHRvIG9yIGxhcmdlciB0
aGFuIHRoZSBzcGVjTGVuZ3RoIHRvIHNpbXBsaWZ5IGNhbGxlcnMuCisvLworLy8gSWYgdGhpcyBy
ZXR1cm5zIHRydWUsIHRoZSBzcGVjIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIHZhbGlkIGRyaXZl
IGxldHRlcgorLy8gcGx1cyBhIGNvbG9uIHN0YXJ0aW5nIGF0IHxzdGFydE9mZnNldHwuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGJvb2wgZG9lc0JlZ2luV2luZG93
c0RyaXZlU3BlYyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBzcGVjTGVuZ3RoKQoreworICAgIGludCByZW1haW5pbmdMZW5ndGggPSBzcGVjTGVuZ3RoIC0g
c3RhcnRPZmZzZXQ7CisgICAgaWYgKHJlbWFpbmluZ0xlbmd0aCA8IDIpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gTm90IGVub3VnaCByb29tLgorICAgIGlmICghaXNXaW5kb3dzRHJpdmVMZXR0
ZXIoc3BlY1tzdGFydE9mZnNldF0pKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERvZXNuJ3Qg
c3RhcnQgd2l0aCBhIHZhbGlkIGRyaXZlIGxldHRlci4KKyAgICBpZiAoIWlzV2luZG93c0RyaXZl
U2VwYXJhdG9yKHNwZWNbc3RhcnRPZmZzZXQgKyAxXSkpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gSXNuJ3QgZm9sbG93ZWQgd2l0aCBhIGRyaXZlIHNlcGFyYXRvci4KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdGFydE9mZnNldCBpbiB0aGUgZ2l2ZW4g
dGV4dCBsb29rcyBsaWtlIGl0IGJlZ2lucyBhCisvLyBVTkMgcGF0aCwgZm9yIGV4YW1wbGUgIlxc
Ii4gVGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGhhbmRsZXMgc3RhcnRPZmZzZXQKKy8vIHZhbHVl
cyB0aGF0IGFyZSBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiB0aGUgc3BlY0xlbmd0aCB0byBzaW1w
bGlmeSBjYWxsZXJzLgorLy8KKy8vIFdoZW4gc3RyaWN0U2xhc2hlcyBpcyBzZXQsIHRoaXMgZnVu
Y3Rpb24gd2lsbCBvbmx5IGFjY2VwdCBiYWNrc2xhc2hlcyBhcyBpcworLy8gc3RhbmRhcmQgZm9y
IFdpbmRvd3MuIE90aGVyd2lzZSwgaXQgd2lsbCBhY2NlcHQgZm9yd2FyZCBzbGFzaGVzIGFzIHdl
bGwKKy8vIHdoaWNoIHdlIHVzZSBmb3IgYSBsb3Qgb2YgVVJMIGhhbmRsaW5nLgordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBib29sIGRvZXNCZWdpblVOQ1BhdGgoY29u
c3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBib29s
IHN0cmljdFNsYXNoZXMpCit7CisgICAgaW50IHJlbWFpbmluZ0xlbmd0aCA9IGxlbmd0aCAtIHN0
YXJ0T2Zmc2V0OworICAgIGlmIChyZW1haW5pbmdMZW5ndGggPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoc3RyaWN0U2xhc2hlcykKKyAgICAgICAgcmV0dXJuIHRleHRbc3Rh
cnRPZmZzZXRdID09ICdcXCcgJiYgdGV4dFtzdGFydE9mZnNldCArIDFdID09ICdcXCc7CisgICAg
cmV0dXJuIGlzVVJMU2xhc2godGV4dFtzdGFydE9mZnNldF0pICYmIGlzVVJMU2xhc2godGV4dFtz
dGFydE9mZnNldCArIDFdKTsKK30KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQorCit9IC8vIG5hbWVz
cGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RG
VVJMKQorCisjZW5kaWYgLy8gVVJMRmlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTFBhcnNlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ2M2Q0MGVkN2Q5ZmJmMjRmYjk1YTY2NzBmYmM2Nzg0NjMzYTE5YjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmNwcApAQCAt
MCwwICsxLDc4NyBAQAorLyogQmFzZWQgb24gbnNVUkxQYXJzZXJzLmNjIGZyb20gTW96aWxsYQor
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IChD
KSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0
IDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqICAgRGFyaW4gRmlzaGVyIChvcmlnaW5hbCBhdXRob3IpCisgKgor
ICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1
bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiks
CisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwg
YXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRv
IGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUg
cHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5k
IG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91
IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkg
dXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkg
b25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJ
Q0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVS
TFBhcnNlLmgiCisKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisjaW5jbHVkZSAiVVJM
VXRpbC5oIgorI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNlciB7CisKK25hbWVzcGFjZSB7CisKKy8v
IFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBhdXRob3JpdHkgdGVybWluYXRvciBpbiB0
aGUgaW5wdXQgc3RhcnRpbmcKKy8vIGZyb20gc3RhcnRPZmZzZXQuIElmIG5vIHRlcm1pbmF0b3Ig
aXMgZm91bmQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBlcXVhbAorLy8gdG8gc3BlY0xlbmd0
aC4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbnQgZmluZE5leHRBdXRob3Jp
dHlUZXJtaW5hdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9mZnNldCwg
aW50IHNwZWNMZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9IHN0YXJ0T2Zmc2V0OyBpIDwgc3Bl
Y0xlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChJc0F1dGhvcml0eVRlcm1pbmF0b3Ioc3BlY1tp
XSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIHNwZWNMZW5ndGg7
IC8vIE5vdCBmb3VuZC4KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3Zv
aWQgcGFyc2VVc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHVzZXIsIFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIFVSTENvbXBvbmVudCYgcGFzc3dv
cmQpCit7CisgICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHVzZXIgc2VjdGlvbiwg
d2hpY2ggc2VwYXJhdGVzIHRoZSB1c2VybmFtZSBhbmQKKyAgICAvLyBwYXNzd29yZC4KKyAgICBp
bnQgY29sb25PZmZzZXQgPSAwOworICAgIHdoaWxlIChjb2xvbk9mZnNldCA8IHVzZXIubGVuZ3Ro
KCkgJiYgc3BlY1t1c2VyLmJlZ2luKCkgKyBjb2xvbk9mZnNldF0gIT0gJzonKQorICAgICAgICAr
K2NvbG9uT2Zmc2V0OworCisgICAgaWYgKGNvbG9uT2Zmc2V0IDwgdXNlci5sZW5ndGgoKSkgewor
ICAgICAgICAvLyBGb3VuZCBzZXBhcmF0b3I6IDx1c2VybmFtZT46PHBhc3N3b3JkPgorICAgICAg
ICB1c2VybmFtZSA9IFVSTENvbXBvbmVudCh1c2VyLmJlZ2luKCksIGNvbG9uT2Zmc2V0KTsKKyAg
ICAgICAgcGFzc3dvcmQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZSh1c2VyLmJlZ2luKCkgKyBj
b2xvbk9mZnNldCArIDEsIHVzZXIuZW5kKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5v
IHNlcGFyYXRvciwgdHJlYXQgZXZlcnl0aGluZyBhcyB0aGUgdXNlcm5hbWUKKyAgICAgICAgdXNl
cm5hbWUgPSB1c2VyOworICAgICAgICBwYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgcGFyc2VTZXJ2ZXJJ
bmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2VydmVy
SW5mbywgVVJMQ29tcG9uZW50JiBob3N0bmFtZSwgVVJMQ29tcG9uZW50JiBwb3J0KQoreworICAg
IGlmICghc2VydmVySW5mby5sZW5ndGgoKSkgeworICAgICAgICAvLyBObyBzZXJ2ZXIgaW5mbywg
aG9zdCBuYW1lIGlzIGVtcHR5LgorICAgICAgICBob3N0bmFtZSA9IFVSTENvbXBvbmVudCgpOwor
ICAgICAgICBwb3J0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGUgaG9zdCBzdGFydHMgd2l0aCBhIGxlZnQtYnJhY2tldCwgYXNzdW1lIHRo
ZSBlbnRpcmUgaG9zdCBpcyBhbgorICAgIC8vIElQdjYgbGl0ZXJhbC4gT3RoZXJ3aXNlLCBhc3N1
bWUgbm9uZSBvZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGxpdGVyYWwuCisgICAgLy8gVGhpcyBhc3N1
bXB0aW9uIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB3ZSBmaW5kIGEgcmlnaHQtYnJhY2tldC4KKyAg
ICAvLworICAgIC8vIE91ciBJUHY2IGFkZHJlc3MgY2Fub25pY2FsaXphdGlvbiBjb2RlIHJlcXVp
cmVzIGJvdGggYnJhY2tldHMgdG8gZXhpc3QsCisgICAgLy8gYnV0IHRoZSBhYmlsaXR5IHRvIGxv
Y2F0ZSBhbiBpbmNvbXBsZXRlIGFkZHJlc3MgY2FuIHN0aWxsIGJlIHVzZWZ1bC4KKyAgICBpbnQg
aXB2NlRlcm1pbmF0b3IgPSBzcGVjW3NlcnZlckluZm8uYmVnaW4oKV0gPT0gJ1snID8gc2VydmVy
SW5mby5lbmQoKSA6IC0xOworICAgIGludCBjb2xvbiA9IC0xOworCisgICAgLy8gRmluZCB0aGUg
bGFzdCByaWdodC1icmFja2V0LCBhbmQgdGhlIGxhc3QgY29sb24uCisgICAgZm9yIChpbnQgaSA9
IHNlcnZlckluZm8uYmVnaW4oKTsgaSA8IHNlcnZlckluZm8uZW5kKCk7ICsraSkgeworICAgICAg
ICBzd2l0Y2ggKHNwZWNbaV0pIHsKKyAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICBpcHY2
VGVybWluYXRvciA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnOic6Cisg
ICAgICAgICAgICBjb2xvbiA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChjb2xvbiA+IGlwdjZUZXJtaW5hdG9yKSB7CisgICAgICAgIC8vIEZvdW5k
IGEgcG9ydCBudW1iZXI6IDxob3N0bmFtZT46PHBvcnQ+CisgICAgICAgIGhvc3RuYW1lID0gVVJM
Q29tcG9uZW50Ojpmcm9tUmFuZ2Uoc2VydmVySW5mby5iZWdpbigpLCBjb2xvbik7CisgICAgICAg
IGlmICghaG9zdG5hbWUubGVuZ3RoKCkpCisgICAgICAgICAgICBob3N0bmFtZS5yZXNldCgpOwor
ICAgICAgICBwb3J0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY29sb24gKyAxLCBzZXJ2ZXJJ
bmZvLmVuZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBwb3J0OiA8aG9zdG5hbWU+
CisgICAgICAgIGhvc3RuYW1lID0gc2VydmVySW5mbzsKKyAgICAgICAgcG9ydCA9IFVSTENvbXBv
bmVudCgpOworICAgIH0KK30KKworLy8gR2l2ZW4gYW4gYWxyZWFkeS1pZGVudGlmaWVkIGF1dGgg
c2VjdGlvbiwgYnJlYWtzIGl0IGludG8gaXRzIGNvbnNpdHVlbnQKKy8vIHBhcnRzLiBUaGUgcG9y
dCBudW1iZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHRoZSByZXN1bHRpbmcgaW50ZWdlciB3aWxsIGJl
CisvLyBmaWxsZWQgaW50byB0aGUgZ2l2ZW4gKnBvcnQgdmFyaWFibGUsIG9yIC0xIGlmIHRoZXJl
IGlzIG5vIHBvcnQgbnVtYmVyIG9yIGl0CisvLyBpcyBpbnZhbGlkLgordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9QYXJzZUF1dGhvcml0eShjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGhvcml0eSwgVVJMQ29tcG9uZW50JiB1
c2VybmFtZSwgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwgVVJMQ29tcG9uZW50JiBob3N0bmFtZSwg
VVJMQ29tcG9uZW50JiBwb3J0KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYXV0aG9yaXR5
LmlzVmFsaWQoKSwgIldlIHNob3VsZCBhbHdheXMgZ2V0IGFuIGF1dGhvcml0eSIpOworICAgIGlm
ICghYXV0aG9yaXR5Lmxlbmd0aCgpKSB7CisgICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50
KCk7CisgICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIGhvc3RuYW1l
ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIEAsIHdoaWNo
IGlzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdXNlciBpbmZvIGFuZAorICAgIC8vIHRoZSBz
ZXJ2ZXIgaW5mby4KKyAgICBpbnQgaSA9IGF1dGhvcml0eS5lbmQoKSAtIDE7CisgICAgd2hpbGUg
KGkgPiBhdXRob3JpdHkuYmVnaW4oKSAmJiBzcGVjW2ldICE9ICdAJykKKyAgICAgICAgLS1pOwor
CisgICAgaWYgKHNwZWNbaV0gPT0gJ0AnKSB7CisgICAgICAgIC8vIEZvdW5kIHVzZXIgaW5mbzog
PHVzZXItaW5mbz5APHNlcnZlci1pbmZvPgorICAgICAgICBwYXJzZVVzZXJJbmZvKHNwZWMsIFVS
TENvbXBvbmVudChhdXRob3JpdHkuYmVnaW4oKSwgaSAtIGF1dGhvcml0eS5iZWdpbigpKSwgdXNl
cm5hbWUsIHBhc3N3b3JkKTsKKyAgICAgICAgcGFyc2VTZXJ2ZXJJbmZvKHNwZWMsIFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBhdXRob3JpdHkuZW5kKCkpLCBob3N0bmFtZSwgcG9ydCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gdXNlciBpbmZvLCBldmVyeXRoaW5nIGlzIHNl
cnZlciBpbmZvLgorICAgICAgICB1c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOworICAgICAgICBw
YXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworICAgICAgICBwYXJzZVNlcnZlckluZm8oc3BlYywg
YXV0aG9yaXR5LCBob3N0bmFtZSwgcG9ydCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBwYXJzZVBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBoaWVyYXJjaGljYWxpZGVudGlmaWVycywgVVJMQ29tcG9u
ZW50JiByZXNvdXJjZVBhdGgsIFVSTENvbXBvbmVudCYgcXVlcnksIFVSTENvbXBvbmVudCYgZnJh
Z21lbnQpCit7CisgICAgLy8gcGF0aCA9IFsvXTxzZWdtZW50MT4vPHNlZ21lbnQyPi88Li4uPi88
c2VnbWVudE4+OzxwYXJhbT4/PHF1ZXJ5PiM8cmVmPgorCisgICAgLy8gU3BlY2lhbCBjYXNlIHdo
ZW4gdGhlcmUgaXMgbm8gcGF0aC4KKyAgICBpZiAoaGllcmFyY2hpY2FsaWRlbnRpZmllcnMubGVu
Z3RoKCkgPT0gLTEpIHsKKyAgICAgICAgcmVzb3VyY2VQYXRoID0gVVJMQ29tcG9uZW50KCk7Cisg
ICAgICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIGZyYWdtZW50ID0gVVJMQ29t
cG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShoaWVyYXJjaGljYWxpZGVudGlmaWVycy5sZW5ndGgoKSA+IDAsICJXZSBzaG91bGQgbmV2ZXIg
aGF2ZSAwIGxlbmd0aCBwYXRocyIpOworCisgICAgLy8gU2VhcmNoIGZvciBmaXJzdCBvY2N1cnJl
bmNlIG9mIGVpdGhlciA/IG9yICMuCisgICAgaW50IHBhdGhFbmQgPSBoaWVyYXJjaGljYWxpZGVu
dGlmaWVycy5lbmQoKTsKKworICAgIGludCBxdWVyeVNlcGFyYXRvciA9IC0xOyAvLyBJbmRleCBv
ZiB0aGUgJz8nCisgICAgaW50IGZyYWdtZW50U2VwYXJhdG9yID0gLTE7IC8vIEluZGV4IG9mIHRo
ZSAnIycKKyAgICBmb3IgKGludCBpID0gaGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4oKTsg
aSA8IHBhdGhFbmQ7ICsraSkgeworICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsKKyAgICAgICAg
Y2FzZSAnPyc6CisgICAgICAgICAgICAvLyBPbmx5IG1hdGNoIHRoZSBxdWVyeSBzdHJpbmcgaWYg
aXQgcHJlY2VkZXMgdGhlIHJlZmVyZW5jZSBmcmFnbWVudAorICAgICAgICAgICAgLy8gYW5kIHdo
ZW4gd2UgaGF2ZW4ndCBmb3VuZCBvbmUgYWxyZWFkeS4KKyAgICAgICAgICAgIGlmIChmcmFnbWVu
dFNlcGFyYXRvciA8IDAgJiYgcXVlcnlTZXBhcmF0b3IgPCAwKQorICAgICAgICAgICAgICAgIHF1
ZXJ5U2VwYXJhdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcjJzoK
KyAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgZmlyc3QgIyBzaWduIG9ubHkuCisgICAgICAgICAg
ICBpZiAoZnJhZ21lbnRTZXBhcmF0b3IgPCAwKQorICAgICAgICAgICAgICAgIGZyYWdtZW50U2Vw
YXJhdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gTWFya2VycyBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIGVhY2ggb2YgdGhlc2Ug
Y29ycmVzcG9uZGluZworICAgIC8vIGNvbXBvbmVudHMuIFRoZSBjb2RlIGJlbG93IHdvcmRzIGZy
b20gdGhlIGVuZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsCisgICAgLy8gYW5kIHdpbGwgdXBkYXRl
IHRoZXNlIGluZGljZXMgYXMgaXQgZmluZHMgY29tcG9uZW50cyB0aGF0IGV4aXN0LgorICAgIGlu
dCByZXNvdXJjZVBhdGhFbmQgPSAtMTsKKyAgICBpbnQgcXVlcnlFbmQgPSAtMTsKKworICAgIC8v
IFJlZiBmcmFnbWVudDogZnJvbSB0aGUgIyB0byB0aGUgZW5kIG9mIHRoZSBwYXRoLgorICAgIGlm
IChmcmFnbWVudFNlcGFyYXRvciA+PSAwKSB7CisgICAgICAgIHJlc291cmNlUGF0aEVuZCA9IHF1
ZXJ5RW5kID0gZnJhZ21lbnRTZXBhcmF0b3I7CisgICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UoZnJhZ21lbnRTZXBhcmF0b3IgKyAxLCBwYXRoRW5kKTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVyeUVuZCA9IHBhdGhFbmQ7CisgICAg
ICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorCisgICAgLy8gUXVlcnkgZnJh
Z21lbnQ6IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgPyB0byB0aGUgbmV4dCBib3VuZGFyeSAoZWl0aGVy
IHRoZSBlbmQKKyAgICAvLyBvZiB0aGUgcGF0aCBvciB0aGUgcmVmIGZyYWdtZW50KS4KKyAgICBp
ZiAocXVlcnlTZXBhcmF0b3IgPj0gMCkgeworICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVy
eVNlcGFyYXRvcjsKKyAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShxdWVy
eVNlcGFyYXRvciArIDEsIHF1ZXJ5RW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcXVlcnkgPSBV
UkxDb21wb25lbnQoKTsKKworICAgIC8vIEZpbGUgcGF0aDogdHJlYXQgYW4gZW1wdHkgZmlsZSBw
YXRoIGFzIG5vIGZpbGUgcGF0aC4KKyAgICBpZiAocmVzb3VyY2VQYXRoRW5kICE9IGhpZXJhcmNo
aWNhbGlkZW50aWZpZXJzLmJlZ2luKCkpCisgICAgICAgIHJlc291cmNlUGF0aCA9IFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLmJlZ2luKCksIHJlc291cmNl
UGF0aEVuZCk7CisgICAgZWxzZQorICAgICAgICByZXNvdXJjZVBhdGggPSBVUkxDb21wb25lbnQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgZG9FeHRyYWN0
U2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9u
ZW50JiBzY2hlbWUpCit7CisgICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGNvbnRy
b2wgY2hhcmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIHdoaWxlIChiZWdpbiA8IHVy
bExlbmd0aCAmJiBzaG91bGRUcmltRnJvbVVSTCh1cmxbYmVnaW5dKSkKKyAgICAgICAgKytiZWdp
bjsKKworICAgIGlmIChiZWdpbiA9PSB1cmxMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gSW5wdXQgaXMgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UuCisKKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCBjb2xvbiBjaGFyYWN0ZXIuCisgICAgZm9yIChpbnQgaSA9IGJlZ2luOyBpIDwgdXJsTGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHVybFtpXSA9PSAnOicpIHsKKyAgICAgICAgICAgIHNj
aGVtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2luLCBpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsgLy8gTm8gY29s
b24gZm91bmQ6IG5vIHNjaGVtZQorfQorCisvLyBGaWxscyBpbiBhbGwgbWVtYmVycyBvZiB0aGUg
UGFyc2VkIHN0cnVjdHVyZSBleGNlcHQgZm9yIHRoZSBzY2hlbWUuCisvLworLy8gfHNwZWN8IGlz
IHRoZSBmdWxsIHNwZWMgYmVpbmcgcGFyc2VkLCBvZiBsZW5ndGggfHNwZWNMZW5ndGh8LgorLy8g
fGFmdGVyU2NoZW1lfCBpcyB0aGUgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUg
c2NoZW1lIChhZnRlciB0aGUKKy8vICAgY29sb24pIHdoZXJlIHdlJ2xsIGJlZ2luIHBhcnNpbmcu
CisvLworLy8gQ29tcGF0YWJpbGl0eSBkYXRhIHBvaW50cy4gSSBsaXN0ICJob3N0IiwgInBhdGgi
IGV4dHJhY3RlZDoKKy8vIElucHV0ICAgICAgICAgICAgICAgIElFNiAgICAgICAgICAgICBGaXJl
Zm94ICAgICAgICAgICAgICAgIFVzCisvLyAtLS0tLSAgICAgICAgICAgICAgICAtLS0tLS0tLS0t
LS0tLSAgLS0tLS0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLS0tLQorLy8gaHR0cDovL2Zv
by5jb20vICAgICAgImZvby5jb20iLCAiLyIgICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5j
b20iLCAiLyIKKy8vIGh0dHA6Zm9vLmNvbS8gICAgICAgICJmb28uY29tIiwgIi8iICAiZm9vLmNv
bSIsICIvIiAgICAgICAgICJmb28uY29tIiwgIi8iCisvLyBodHRwOi9mb28uY29tLyAgICAgICBm
YWlsKCopICAgICAgICAgImZvby5jb20iLCAiLyIgICAgICAgICAiZm9vLmNvbSIsICIvIgorLy8g
aHR0cDpcZm9vLmNvbS8gICAgICAgZmFpbCgqKSAgICAgICAgICJcZm9vLmNvbSIsICIvIihmYWls
KSAgImZvby5jb20iLCAiLyIKKy8vIGh0dHA6Ly8vL2Zvby5jb20vICAgICJmb28uY29tIiwgIi8i
ICAiZm9vLmNvbSIsICIvIiAgICAgICAgICJmb28uY29tIiwgIi8iCisvLworLy8gKCopIEludGVy
ZXN0aW5nbHksIGFsdGhvdWdoIElFIGZhaWxzIHRvIGxvYWQgdGhlc2UgVVJMcywgaXRzIGhpc3Rv
cnkKKy8vIGNhbm9uaWNhbGl6ZXIgaGFuZGxlcyB0aGVtLCBtZWFuaW5nIGlmIHlvdSd2ZSBiZWVu
IHRvIHRoZSBjb3JyZXNwb25kaW5nCisvLyAiaHR0cDovL2Zvby5jb20vIiBsaW5rLCBpdCB3aWxs
IGJlIGNvbG9yZWQuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9Q
YXJzZUFmdGVyU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3Ro
LCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCit7CisgICAgaW50IHNsYXNo
ZXNDb3VudCA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGFmdGVyU2NoZW1lLCBzcGVj
TGVuZ3RoKTsKKyAgICBpbnQgYWZ0ZXJTbGFzaGVzID0gYWZ0ZXJTY2hlbWUgKyBzbGFzaGVzQ291
bnQ7CisKKyAgICAvLyBGaXJzdCBzcGxpdCBpbnRvIHR3byBtYWluIHBhcnRzLCB0aGUgYXV0aG9y
aXR5ICh1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3QsCisgICAgLy8gYW5kIHBvcnQpIGFuZCB0aGUg
ZnVsbCBwYXRoIChwYXRoLCBxdWVyeSwgYW5kIHJlZmVyZW5jZSkuCisgICAgVVJMQ29tcG9uZW50
IGF1dGhvcml0eTsKKyAgICBVUkxDb21wb25lbnQgZnVsbFBhdGg7CisKKyAgICAvLyBGb3VuZCAi
Ly88c29tZSBkYXRhPiIsIGxvb2tzIGxpa2UgYW4gYXV0aG9yaXR5IHNlY3Rpb24uIFRyZWF0IGV2
ZXJ5dGhpbmcKKyAgICAvLyBmcm9tIHRoZXJlIHRvIHRoZSBuZXh0IHNsYXNoIChvciBlbmQgb2Yg
c3BlYykgdG8gYmUgdGhlIGF1dGhvcml0eS4gTm90ZQorICAgIC8vIHRoYXQgd2UgaWdub3JlIHRo
ZSBudW1iZXIgb2Ygc2xhc2hlcyBhbmQgdHJlYXQgaXQgYXMgdGhlIGF1dGhvcml0eS4KKyAgICBp
bnQgZW5kQXV0aCA9IGZpbmROZXh0QXV0aG9yaXR5VGVybWluYXRvcihzcGVjLCBhZnRlclNsYXNo
ZXMsIHNwZWNMZW5ndGgpOworICAgIGF1dGhvcml0eSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGFmdGVyU2xhc2hlcywgZW5kQXV0aCk7CisKKyAgICBpZiAoZW5kQXV0aCA9PSBzcGVjTGVuZ3Ro
KSAvLyBObyBiZWdpbm5pbmcgb2YgcGF0aCBmb3VuZC4KKyAgICAgICAgZnVsbFBhdGggPSBVUkxD
b21wb25lbnQoKTsKKyAgICBlbHNlIC8vIEV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgc2xh
c2ggdG8gdGhlIGVuZCBpcyB0aGUgcGF0aC4KKyAgICAgICAgZnVsbFBhdGggPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShlbmRBdXRoLCBzcGVjTGVuZ3RoKTsKKworICAgIC8vIE5vdyBwYXJzZSB0
aG9zZSB0d28gc3ViLXBhcnRzLgorICAgIGRvUGFyc2VBdXRob3JpdHkoc3BlYywgYXV0aG9yaXR5
LCBwYXJzZWQudXNlcm5hbWUsIHBhcnNlZC5wYXNzd29yZCwgcGFyc2VkLmhvc3QsIHBhcnNlZC5w
b3J0KTsKKyAgICBwYXJzZVBhdGgoc3BlYywgZnVsbFBhdGgsIHBhcnNlZC5wYXRoLCBwYXJzZWQu
cXVlcnksIHBhcnNlZC5mcmFnbWVudCk7Cit9CisKKy8vIFRoZSBtYWluIHBhcnNpbmcgZnVuY3Rp
b24gZm9yIHN0YW5kYXJkIFVSTHMuIFN0YW5kYXJkIFVSTHMgaGF2ZSBhIHNjaGVtZSwKKy8vIGhv
c3QsIHBhdGgsIGV0Yy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRv
UGFyc2VTdGFuZGFyZFVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0
aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsK
KworICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMgYW5kIGNvbnRyb2wgY2hh
cmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIHRyaW1VUkwoc3BlYywgJmJlZ2luLCAm
c3BlY0xlbmd0aCk7CisKKyAgICBpbnQgYWZ0ZXJTY2hlbWUgPSAtMTsKKyAgICBpZiAoZG9FeHRy
YWN0U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZC5zY2hlbWUpKQorICAgICAgICBhZnRl
clNjaGVtZSA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOyAvLyBTa2lwIHBhc3QgdGhlIGNvbG9u
LgorICAgIGVsc2UgeworICAgICAgICAvLyBTYXkgdGhlcmUncyBubyBzY2hlbWUgd2hlbiB0aGVy
ZSBpcyBubyBjb2xvbi4gV2UgY291bGQgYWxzbyBzYXkgdGhhdAorICAgICAgICAvLyBldmVyeXRo
aW5nIGlzIHRoZSBzY2hlbWUuIEJvdGggd291bGQgcHJvZHVjZSBhbiBpbnZhbGlkIFVSTCwgYnV0
IHRoaXMgd2F5CisgICAgICAgIC8vIHNlZW1zIGxlc3Mgd3JvbmcgaW4gbW9yZSBjYXNlcy4KKyAg
ICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOworICAgICAgICBhZnRlclNjaGVtZSA9IGJlZ2lu
OworICAgIH0KKyAgICBkb1BhcnNlQWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJT
Y2hlbWUsIHBhcnNlZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2
b2lkIGRvUGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBz
cGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQoreworICAgIEFTU0VSVChzcGVjTGVuZ3Ro
ID49IDApOworCisgICAgLy8gR2V0IHRoZSB1bnVzZWQgcGFydHMgb2YgdGhlIFVSTCBvdXQgb2Yg
dGhlIHdheS4KKyAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dv
cmQucmVzZXQoKTsKKyAgICBwYXJzZWQuaG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJl
c2V0KCk7CisgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlzOyByZXNldCBm
b3IgY29udmVuaWVuY2UuCisgICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7IC8vIE1heSB1c2Ug
dGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgorICAgIHBhcnNlZC5xdWVyeS5yZXNldCgpOyAv
LyBNYXkgdXNlIHRoaXM7IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KKyAgICBwYXJzZWQuY2xlYXJJ
bm5lclVSTFNlZ21lbnRzKCk7IC8vIE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNl
LgorCisgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBj
aGFyYWN0ZXJzLgorICAgIGludCBiZWdpbiA9IDA7CisgICAgdHJpbVVSTChzcGVjLCAmYmVnaW4s
ICZzcGVjTGVuZ3RoKTsKKworICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQg
Y29udGFpbiBvbmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBjaGFycy4KKyAgICBpZiAoYmVnaW4g
PT0gc3BlY0xlbmd0aCkgeworICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaW5uZXJTdGFydCA9IC0xOworCisgICAgLy8gRXh0
cmFjdCB0aGUgc2NoZW1lLiBXZSBhbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBu
byBzY2hlbWUuCisgICAgaWYgKGRvRXh0cmFjdFNjaGVtZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5n
dGggLSBiZWdpbiwgcGFyc2VkLnNjaGVtZSkpIHsKKyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1
bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgcGFy
c2VkLnNjaGVtZS5zZXRCZWdpbihwYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBiZWdpbik7CisKKyAg
ICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkgPT0gc3BlY0xlbmd0aCAtIDEpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaW5uZXJTdGFydCA9IHBhcnNlZC5zY2hlbWUuZW5kKCkg
KyAxOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHNjaGVtZSBmb3VuZDsgdGhhdCdzIG5v
dCB2YWxpZCBmb3IgZmlsZXN5c3RlbSBVUkxzLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBVUkxDb21wb25lbnQgaW5uZXJTY2hl
bWU7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5uZXJTcGVjID0gJnNwZWNbaW5uZXJTdGFy
dF07CisgICAgaW50IGlubmVyU3BlY0xlbmd0aCA9IHNwZWNMZW5ndGggLSBpbm5lclN0YXJ0Owor
CisgICAgaWYgKGRvRXh0cmFjdFNjaGVtZShpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgaW5u
ZXJTY2hlbWUpKSB7CisgICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZl
IEV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCisgICAgICAgIGlubmVyU2NoZW1lLnNldEJlZ2lu
KGlubmVyU2NoZW1lLmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKworICAgICAgICBpZiAoaW5uZXJT
Y2hlbWUuZW5kKCkgPT0gc3BlY0xlbmd0aCAtIDEpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kOyB0aGF0J3Mgbm90IHZhbGlkIGZv
ciBmaWxlc3lzdGVtIFVSTHMuCisgICAgICAgIC8vIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyByZXR1
cm4gImZpbGVzeXN0ZW06Ly8iLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVVJMU2Vn
bWVudHMgaW5uZXJQYXJzZWQ7CisgICAgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNv
bXBvbmVudChzcGVjLCBpbm5lclNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVNjaGVtZSkpIHsK
KyAgICAgICAgLy8gRmlsZSBVUkxzIGFyZSBzcGVjaWFsLgorICAgICAgICBQYXJzZUZpbGVVUkwo
aW5uZXJTcGVjLCBpbm5lclNwZWNMZW5ndGgsICZpbm5lclBhcnNlZCk7CisgICAgfSBlbHNlIGlm
IChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgaW5uZXJTY2hlbWUs
IFVSTFV0aWxpdGllczo6a0ZpbGVTeXN0ZW1TY2hlbWUpKSB7CisgICAgICAgIC8vIEZpbGVzeXN0
ZW0gVVJMcyBkb24ndCBuZXN0LgorICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChVUkxV
dGlsaXRpZXM6OklzU3RhbmRhcmQoc3BlYywgaW5uZXJTY2hlbWUpKSB7CisgICAgICAgIC8vIEFs
bCAibm9ybWFsIiBVUkxzLgorICAgICAgICBkb1BhcnNlU3RhbmRhcmRVUkwoaW5uZXJTcGVjLCBp
bm5lclNwZWNMZW5ndGgsIGlubmVyUGFyc2VkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQWxsIG1lbWJlcnMgb2YgaW5uZXJQYXJzZWQgbmVlZCB0byBiZSBvZmZzZXQg
YnkgaW5uZXJTdGFydC4KKyAgICAvLyBJZiB3ZSBoYWQgYW55IHNjaGVtZSB0aGF0IHN1cHBvcnRl
ZCBuZXN0aW5nIG1vcmUgdGhhbiBvbmUgbGV2ZWwgZGVlcCwKKyAgICAvLyB3ZSdkIGhhdmUgdG8g
cmVjdXJzZSBpbnRvIHRoZSBpbm5lclBhcnNlZCdzIGlubmVyUGFyc2VkIHdoZW4KKyAgICAvLyBh
ZGp1c3RpbmcgYnkgaW5uZXJTdGFydC4KKyAgICBpbm5lclBhcnNlZC5zY2hlbWUuc2V0QmVnaW4o
aW5uZXJQYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKyAgICBpbm5lclBhcnNl
ZC51c2VybmFtZS5zZXRCZWdpbihpbm5lclBhcnNlZC51c2VybmFtZS5iZWdpbigpICsgaW5uZXJT
dGFydCk7CisgICAgaW5uZXJQYXJzZWQucGFzc3dvcmQuc2V0QmVnaW4oaW5uZXJQYXJzZWQucGFz
c3dvcmQuYmVnaW4oKSArIGlubmVyU3RhcnQpOworICAgIGlubmVyUGFyc2VkLmhvc3Quc2V0QmVn
aW4oaW5uZXJQYXJzZWQuaG9zdC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQYXJz
ZWQucG9ydC5zZXRCZWdpbihpbm5lclBhcnNlZC5wb3J0LmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsK
KyAgICBpbm5lclBhcnNlZC5xdWVyeS5zZXRCZWdpbihpbm5lclBhcnNlZC5xdWVyeS5iZWdpbigp
ICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQYXJzZWQuZnJhZ21lbnQuc2V0QmVnaW4oaW5uZXJQ
YXJzZWQuZnJhZ21lbnQuYmVnaW4oKSArIGlubmVyU3RhcnQpOworICAgIGlubmVyUGFyc2VkLnBh
dGguc2V0QmVnaW4oaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisKKyAg
ICAvLyBRdWVyeSBhbmQgcmVmIG1vdmUgZnJvbSBpbm5lclBhcnNlZCB0byBwYXJzZWQuCisgICAg
cGFyc2VkLnF1ZXJ5ID0gaW5uZXJQYXJzZWQucXVlcnk7CisgICAgaW5uZXJQYXJzZWQucXVlcnku
cmVzZXQoKTsKKyAgICBwYXJzZWQuZnJhZ21lbnQgPSBpbm5lclBhcnNlZC5mcmFnbWVudDsKKyAg
ICBpbm5lclBhcnNlZC5mcmFnbWVudC5yZXNldCgpOworCisgICAgcGFyc2VkLnNldElubmVyVVJM
U2VnbWVudHMoaW5uZXJQYXJzZWQpOworICAgIGlmICghaW5uZXJQYXJzZWQuc2NoZW1lLmlzVmFs
aWQoKSB8fCAhaW5uZXJQYXJzZWQucGF0aC5pc1ZhbGlkKCkgfHwgaW5uZXJQYXJzZWQuaW5uZXJV
UkxTZWdtZW50cygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgcGF0aCBpbiBpbm5l
clBhcnNlZCBzaG91bGQgc3RhcnQgd2l0aCBhIHNsYXNoLCB0aGVuIGhhdmUgYSBmaWxlc3lzdGVt
CisgICAgLy8gdHlwZSBmb2xsb3dlZCBieSBhIHNsYXNoLiBGcm9tIHRoZSBmaXJzdCBzbGFzaCB1
cCB0byBidXQgZXhjbHVkaW5nIHRoZQorICAgIC8vIHNlY29uZCBzaG91bGQgYmUgd2hhdCBpdCBr
ZWVwczsgdGhlIHJlc3QgZ29lcyB0byBwYXJzZWQuIElmIHRoZSBwYXRoIGVuZHMKKyAgICAvLyBi
ZWZvcmUgdGhlIHNlY29uZCBzbGFzaCwgaXQncyBzdGlsbCBwcmV0dHkgY2xlYXIgd2hhdCB0aGUg
dXNlciBtZWFudCwgc28KKyAgICAvLyB3ZSdsbCBsZXQgdGhhdCB0aHJvdWdoLgorICAgIGlmICgh
aXNVUkxTbGFzaChzcGVjW2lubmVyUGFyc2VkLnBhdGguYmVnaW4oKV0pKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQgaW5uZXJQYXRoRW5kID0gaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpICsg
MTsgLy8gc2tpcCB0aGUgbGVhZGluZyBzbGFzaAorICAgIHdoaWxlIChpbm5lclBhdGhFbmQgPCBz
cGVjTGVuZ3RoICYmICFpc1VSTFNsYXNoKHNwZWNbaW5uZXJQYXRoRW5kXSkpCisgICAgICAgICsr
aW5uZXJQYXRoRW5kOworICAgIHBhcnNlZC5wYXRoLnNldEJlZ2luKGlubmVyUGF0aEVuZCk7Cisg
ICAgaW50IG5ld0lubmVyUGF0aExlbmd0aCA9IGlubmVyUGF0aEVuZCAtIGlubmVyUGFyc2VkLnBh
dGguYmVnaW4oKTsKKyAgICBwYXJzZWQucGF0aC5zZXRMZW5ndGgoaW5uZXJQYXJzZWQucGF0aC5s
ZW5ndGgoKSAtIG5ld0lubmVyUGF0aExlbmd0aCk7CisgICAgaW5uZXJQYXJzZWQucGF0aC5zZXRM
ZW5ndGgobmV3SW5uZXJQYXRoTGVuZ3RoKTsKKyAgICBwYXJzZWQuc2V0SW5uZXJVUkxTZWdtZW50
cyhpbm5lclBhcnNlZCk7Cit9CisKKy8vIEluaXRpYWxpemVzIGEgcGF0aCBVUkwgd2hpY2ggaXMg
bWVyZWx5IGEgc2NoZW1lIGZvbGxvd2VkIGJ5IGEgcGF0aC4gRXhhbXBsZXMKKy8vIGluY2x1ZGUg
ImFib3V0OmZvbyIgYW5kICJqYXZhc2NyaXB0OmFsZXJ0KCdiYXInKTsiCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBkb1BhcnNlUGF0aFVSTChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICAv
LyBHZXQgdGhlIG5vbi1wYXRoIGFuZCBub24tc2NoZW1lIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9m
IHRoZSB3YXksIHdlIG5ldmVyCisgICAgLy8gdXNlIHRoZW0uCisgICAgcGFyc2VkLnVzZXJuYW1l
LnJlc2V0KCk7CisgICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7CisgICAgcGFyc2VkLmhvc3Qu
cmVzZXQoKTsKKyAgICBwYXJzZWQucG9ydC5yZXNldCgpOworICAgIHBhcnNlZC5xdWVyeS5yZXNl
dCgpOworICAgIHBhcnNlZC5mcmFnbWVudC5yZXNldCgpOworCisgICAgLy8gU3RyaXAgbGVhZGlu
ZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBiZWdp
biA9IDA7CisgICAgdHJpbVVSTChzcGVjLCAmYmVnaW4sICZzcGVjTGVuZ3RoKTsKKworICAgIC8v
IEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBvbmx5IHdoaXRlc3BhY2Ug
b3IgY29udHJvbCBjaGFycy4KKyAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgeworICAgICAg
ICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUsIHdpdGgg
dGhlIHBhdGggYmVpbmcgZXZlcnl0aGluZyBmb2xsb3dpbmcuIFdlIGFsc28KKyAgICAvLyBoYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1lLgorICAgIGlmIChFeHRyYWN0U2No
ZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAmcGFyc2VkLnNjaGVtZSkpIHsK
KyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVt
ZSBhIHN1YnN0cmluZy4KKyAgICAgICAgcGFyc2VkLnNjaGVtZS5zZXRCZWdpbihwYXJzZWQuc2No
ZW1lLmJlZ2luKCkgKyBiZWdpbik7CisKKyAgICAgICAgLy8gRm9yIGNvbXBhdGFiaWxpdHkgd2l0
aCB0aGUgc3RhbmRhcmQgVVJMIHBhcnNlciwgd2UgdHJlYXQgbm8gcGF0aCBhcworICAgICAgICAv
LyAtMSwgcmF0aGVyIHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9mIDAgKHdlIG5vcm1hbGx5IHdvdWxk
bid0IGNhcmUgc28KKyAgICAgICAgLy8gbXVjaCBmb3IgdGhlc2Ugbm9uLXN0YW5kYXJkIFVSTHMp
LgorICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKKyAg
ICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGFyc2VkLnNjaGVtZS5lbmQo
KSArIDEsIHNwZWNMZW5ndGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHNjaGVtZSBm
b3VuZCwganVzdCBwYXRoLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAg
IHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4sIHNwZWNMZW5ndGgp
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9Q
YXJzZU1haWx0b1VSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwg
VVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsKKwor
ICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMgb2YgdGhlIFVSTCBv
dXQgb2YgdGhlIHdheSwgd2UgbmV2ZXIKKyAgICAvLyB1c2UgdGhlbS4KKyAgICBwYXJzZWQudXNl
cm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICBwYXJzZWQu
aG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7CisgICAgcGFyc2VkLmZyYWdt
ZW50LnJlc2V0KCk7CisgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7IC8vIE1heSB1c2UgdGhpczsg
cmVzZXQgZm9yIGNvbnZlbmllbmNlLgorCisgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5n
IHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBiZWdpbiA9IDA7CisgICAg
dHJpbVVSTChzcGVjLCAmYmVnaW4sICZzcGVjTGVuZ3RoKTsKKworICAgIC8vIEhhbmRsZSBlbXB0
eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBvbmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBj
aGFycy4KKyAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgeworICAgICAgICBwYXJzZWQuc2No
ZW1lLnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpbnQgcGF0aEJlZ2luID0gLTE7CisgICAgaW50IHBhdGhFbmQgPSAt
MTsKKworICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVy
eXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbworICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGVyZSBpcyBubyBzY2hlbWUuCisgICAgaWYgKEV4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBz
cGVjTGVuZ3RoIC0gYmVnaW4sICZwYXJzZWQuc2NoZW1lKSkgeworICAgICAgICAvLyBPZmZzZXQg
dGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgorICAg
ICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2lu
KTsKKworICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSAhPSBzcGVjTGVuZ3RoIC0gMSkg
eworICAgICAgICAgICAgcGF0aEJlZ2luID0gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDE7CisgICAg
ICAgICAgICBwYXRoRW5kID0gc3BlY0xlbmd0aDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE5vIHNjaGVtZSBmb3VuZCwganVzdCBwYXRoLgorICAgICAgICBwYXJzZWQuc2No
ZW1lLnJlc2V0KCk7CisgICAgICAgIHBhdGhCZWdpbiA9IGJlZ2luOworICAgICAgICBwYXRoRW5k
ID0gc3BlY0xlbmd0aDsKKyAgICB9CisKKyAgICAvLyBTcGxpdCBbcGF0aEJlZ2luLCBwYXRoRW5k
KSBpbnRvIGEgcGF0aCArIHF1ZXJ5LgorICAgIGZvciAoaW50IGkgPSBwYXRoQmVnaW47IGkgPCBw
YXRoRW5kOyArK2kpIHsKKyAgICAgICAgaWYgKHNwZWNbaV0gPT0gJz8nKSB7CisgICAgICAgICAg
ICBwYXJzZWQucXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgcGF0aEVuZCk7
CisgICAgICAgICAgICBwYXRoRW5kID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gRm9yIGNvbXBhdGFiaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJM
IHBhcnNlciwgdHJlYXQgbm8gcGF0aCBhcworICAgIC8vIC0xLCByYXRoZXIgdGhhbiBoYXZpbmcg
YSBsZW5ndGggb2YgMAorICAgIGlmIChwYXRoQmVnaW4gPT0gcGF0aEVuZCkKKyAgICAgICAgcGFy
c2VkLnBhdGgucmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29t
cG9uZW50Ojpmcm9tUmFuZ2UocGF0aEJlZ2luLCBwYXRoRW5kKTsKK30KKworLy8gQ29udmVydHMg
YSBwb3J0IG51bWJlciBpbiBhIHN0cmluZyB0byBhbiBpbnRlZ2VyLiBXZSdkIGxpa2UgdG8ganVz
dCBjYWxsCisvLyBzc2NhbmYgYnV0IG91ciBpbnB1dCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCB3
aGljaCBzc2NhbmYgcmVxdWlyZXMuIEluc3RlYWQsCisvLyB3ZSBjb3B5IHRoZSBkaWdpdHMgdG8g
YSBzbWFsbCBzdGFjayBidWZmZXIgKHNpbmNlIHdlIGtub3cgdGhlIG1heGltdW0gbnVtYmVyCisv
LyBvZiBkaWdpdHMgaW4gYSB2YWxpZCBwb3J0IG51bWJlcikgdGhhdCB3ZSBjYW4gbnVsbCB0ZXJt
aW5hdGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW50IGRvUGFyc2VQb3J0
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50
KQoreworICAgIC8vIEVhc3kgc3VjY2VzcyBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gcG9ydC4KKyAg
ICBjb25zdCBpbnQga01heERpZ2l0cyA9IDU7CisgICAgaWYgKCFjb21wb25lbnQuaXNOb25FbXB0
eSgpKQorICAgICAgICByZXR1cm4gUE9SVF9VTlNQRUNJRklFRDsKKworICAgIC8vIFNraXAgb3Zl
ciBhbnkgbGVhZGluZyAwcy4KKyAgICBVUkxDb21wb25lbnQgZGlnaXRDb21wb25lbnQoY29tcG9u
ZW50LmVuZCgpLCAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudC5sZW5ndGgo
KTsgaSsrKSB7CisgICAgICAgIGlmIChzcGVjW2NvbXBvbmVudC5iZWdpbigpICsgaV0gIT0gJzAn
KSB7CisgICAgICAgICAgICBkaWdpdENvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGNvbXBvbmVudC5iZWdpbigpICsgaSwgY29tcG9uZW50LmVuZCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZGlnaXRDb21wb25lbnQubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiAwOyAvLyBBbGwgZGlnaXRzIHdlcmUgMC4KKworICAgIC8vIFZlcmlm
eSB3ZSBkb24ndCBoYXZlIHRvbyBtYW55IGRpZ2l0cyAod2UnbGwgYmUgY29weWluZyB0byBvdXIg
YnVmZmVyIHNvCisgICAgLy8gd2UgbmVlZCB0byBkb3VibGUtY2hlY2spLgorICAgIGlmIChkaWdp
dENvbXBvbmVudC5sZW5ndGgoKSA+IGtNYXhEaWdpdHMpCisgICAgICAgIHJldHVybiBQT1JUX0lO
VkFMSUQ7CisKKyAgICAvLyBDb3B5IHZhbGlkIGRpZ2l0cyB0byB0aGUgYnVmZmVyLgorICAgIGNo
YXIgZGlnaXRzW2tNYXhEaWdpdHMgKyAxXTsgLy8gKzEgZm9yIG51bGwgdGVybWluYXRvcgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZGlnaXRDb21wb25lbnQubGVuZ3RoKCk7IGkrKykgeworICAg
ICAgICBDaGFyYWN0ZXJUeXBlIGNoID0gc3BlY1tkaWdpdENvbXBvbmVudC5iZWdpbigpICsgaV07
CisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGNoKSkgeworICAgICAgICAgICAgLy8gSW52YWxp
ZCBwb3J0IGRpZ2l0LCBmYWlsLgorICAgICAgICAgICAgcmV0dXJuIFBPUlRfSU5WQUxJRDsKKyAg
ICAgICAgfQorICAgICAgICBkaWdpdHNbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihjaCk7CisgICAg
fQorCisgICAgLy8gTnVsbC10ZXJtaW5hdGUgdGhlIHN0cmluZyBhbmQgY29udmVydCB0byBpbnRl
Z2VyLiBTaW5jZSB3ZSBndWFyYW50ZWUKKyAgICAvLyBvbmx5IGRpZ2l0cywgYXRvaSdzIGxhY2sg
b2YgZXJyb3IgaGFuZGxpbmcgaXMgT0suCisgICAgZGlnaXRzW2RpZ2l0Q29tcG9uZW50Lmxlbmd0
aCgpXSA9IDA7CisgICAgaW50IHBvcnQgPSBhdG9pKGRpZ2l0cyk7CisgICAgaWYgKHBvcnQgPiA2
NTUzNSkKKyAgICAgICAgcmV0dXJuIFBPUlRfSU5WQUxJRDsgLy8gT3V0IG9mIHJhbmdlLgorICAg
IHJldHVybiBwb3J0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9p
ZCBkb0V4dHJhY3RGaWxlTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCYgZmlsZU5hbWUpCit7CisgICAgLy8gSGFuZGxl
IGVtcHR5IHBhdGhzOiB0aGV5IGhhdmUgbm8gZmlsZSBuYW1lcy4KKyAgICBpZiAoIXBhdGguaXNO
b25FbXB0eSgpKSB7CisgICAgICAgIGZpbGVOYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTZWFyY2ggYmFja3dhcmRzIGZvciBhIHBhcmFtZXRl
ciwgd2hpY2ggaXMgYSBub3JtYWxseSB1bnVzZWQgZmllbGQgaW4gYQorICAgIC8vIFVSTCBkZWxp
bWl0ZWQgYnkgYSBzZW1pY29sb24uIFdlIHBhcnNlIHRoZSBwYXJhbWV0ZXIgYXMgcGFydCBvZiB0
aGUKKyAgICAvLyBwYXRoLCBidXQgaGVyZSwgd2UgZG9uJ3Qgd2FudCB0byBjb3VudCBpdC4gVGhl
IGxhc3Qgc2VtaWNvbG9uIGlzIHRoZQorICAgIC8vIHBhcmFtZXRlci4gVGhlIHBhdGggc2hvdWxk
IHN0YXJ0IHdpdGggYSBzbGFzaCwgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjaworICAgIC8vIHRo
ZSBmaXJzdCBvbmUuCisgICAgaW50IGZpbGVFbmQgPSBwYXRoLmVuZCgpOworICAgIGZvciAoaW50
IGkgPSBwYXRoLmVuZCgpIC0gMTsgaSA+IHBhdGguYmVnaW4oKTsgLS1pKSB7CisgICAgICAgIGlm
IChzcGVjW2ldID09ICc7JykgeworICAgICAgICAgICAgZmlsZUVuZCA9IGk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyBzZWFyY2ggYmFja3dhcmRz
IGZyb20gdGhlIGZpbGVuYW1lIGVuZCB0byB0aGUgcHJldmlvdXMgc2xhc2gKKyAgICAvLyB0byBm
aW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVuYW1lLgorICAgIGZvciAoaW50IGkgPSBmaWxl
RW5kIC0gMTsgaSA+PSBwYXRoLmJlZ2luKCk7IC0taSkgeworICAgICAgICBpZiAoaXNVUkxTbGFz
aChzcGVjW2ldKSkgeworICAgICAgICAgICAgLy8gRmlsZSBuYW1lIGlzIGV2ZXJ5dGhpbmcgZm9s
bG93aW5nIHRoaXMgY2hhcmFjdGVyIHRvIHRoZSBlbmQKKyAgICAgICAgICAgIGZpbGVOYW1lID0g
VVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGZpbGVFbmQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm8gc2xhc2ggZm91bmQsIHRoaXMgbWVh
bnMgdGhlIGlucHV0IHdhcyBkZWdlbmVyYXRlIChnZW5lcmFsbHkgcGF0aHMKKyAgICAvLyB3aWxs
IHN0YXJ0IHdpdGggYSBzbGFzaCkuIExldCdzIGNhbGwgZXZlcnl0aGluZyB0aGUgZmlsZSBuYW1l
LgorICAgIGZpbGVOYW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGF0aC5iZWdpbigpLCBm
aWxlRW5kKTsKKyAgICByZXR1cm47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Citib29sIGRvRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQ29tcG9uZW50JiBrZXksIFVSTENvbXBvbmVudCYg
dmFsdWUpCit7CisgICAgaWYgKCFxdWVyeS5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGludCBzdGFydCA9IHF1ZXJ5LmJlZ2luKCk7CisgICAgaW50IGN1cnJlbnQg
PSBzdGFydDsKKyAgICBpbnQgZW5kID0gcXVlcnkuZW5kKCk7CisKKyAgICAvLyBXZSBhc3N1bWUg
dGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgImtleSIg
YW5kIHdlCisgICAgLy8gc2tpcCB0byB0aGUgZW5kIG9mIGl0LgorICAgIGtleS5zZXRCZWdpbihj
dXJyZW50KTsKKyAgICB3aGlsZSAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcm
JyAmJiBzcGVjW2N1cnJlbnRdICE9ICc9JykKKyAgICAgICAgKytjdXJyZW50OworICAgIGtleS5z
ZXRMZW5ndGgoY3VycmVudCAtIGtleS5iZWdpbigpKTsKKworICAgIC8vIFNraXAgdGhlIHNlcGFy
YXRvciBhZnRlciB0aGUga2V5IChpZiBhbnkpLgorICAgIGlmIChjdXJyZW50IDwgZW5kICYmIHNw
ZWNbY3VycmVudF0gPT0gJz0nKQorICAgICAgICArK2N1cnJlbnQ7CisKKyAgICAvLyBGaW5kIHRo
ZSB2YWx1ZSBwYXJ0LgorICAgIHZhbHVlLnNldEJlZ2luKGN1cnJlbnQpOworICAgIHdoaWxlIChj
dXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gIT0gJyYnKQorICAgICAgICArK2N1cnJlbnQ7
CisgICAgdmFsdWUuc2V0TGVuZ3RoKGN1cnJlbnQgLSB2YWx1ZS5iZWdpbigpKTsKKworICAgIC8v
IEZpbmFsbHkgc2tpcCB0aGUgbmV4dCBzZXBhcmF0b3IgaWYgYW55CisgICAgaWYgKGN1cnJlbnQg
PCBlbmQgJiYgc3BlY1tjdXJyZW50XSA9PSAnJicpCisgICAgICAgICsrY3VycmVudDsKKworICAg
IC8vIFNhdmUgdGhlIG5ldyBxdWVyeQorICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworYm9vbCBFeHRyYWN0U2NoZW1lKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJM
Q29tcG9uZW50KiBzY2hlbWUpCit7CisgICAgcmV0dXJuIGRvRXh0cmFjdFNjaGVtZSh1cmwsIHVy
bExlbmd0aCwgKnNjaGVtZSk7Cit9CisKK2Jvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBVQ2hhciog
dXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSkKK3sKKyAgICByZXR1cm4g
ZG9FeHRyYWN0U2NoZW1lKHVybCwgdXJsTGVuZ3RoLCAqc2NoZW1lKTsKK30KKworLy8gVGhpcyBo
YW5kbGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXkgYmUgYW4gYXV0aG9yaXR5IHRlcm1pbmF0b3IsIGlu
Y2x1ZGluZworLy8gYmFja3NsYXNoLiBGb3Igc3BlY2lhbCBiYWNrc2xhc2ggaGFuZGxpbmcgc2Vl
IERvUGFyc2VBZnRlclNjaGVtZS4KK2Jvb2wgSXNBdXRob3JpdHlUZXJtaW5hdG9yKFVDaGFyIGNo
YXJhY3RlcikKK3sKKyAgICByZXR1cm4gaXNVUkxTbGFzaChjaGFyYWN0ZXIpIHx8IGNoYXJhY3Rl
ciA9PSAnPycgfHwgY2hhcmFjdGVyID09ICcjJzsKK30KKwordm9pZCBFeHRyYWN0RmlsZU5hbWUo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCog
ZmlsZU5hbWUpCit7CisgICAgZG9FeHRyYWN0RmlsZU5hbWUodXJsLCBwYXRoLCAqZmlsZU5hbWUp
OworfQorCit2b2lkIEV4dHJhY3RGaWxlTmFtZShjb25zdCBVQ2hhciogdXJsLCBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmlsZU5hbWUpCit7CisgICAgZG9FeHRyYWN0
RmlsZU5hbWUodXJsLCBwYXRoLCAqZmlsZU5hbWUpOworfQorCitib29sIEV4dHJhY3RRdWVyeUtl
eVZhbHVlKGNvbnN0IGNoYXIqIHVybCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50
KiBrZXksIFVSTENvbXBvbmVudCogdmFsdWUpCit7CisgICAgcmV0dXJuIGRvRXh0cmFjdFF1ZXJ5
S2V5VmFsdWUodXJsLCAqcXVlcnksICprZXksICp2YWx1ZSk7Cit9CisKK2Jvb2wgRXh0cmFjdFF1
ZXJ5S2V5VmFsdWUoY29uc3QgVUNoYXIqIHVybCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29t
cG9uZW50KiBrZXksICBVUkxDb21wb25lbnQqIHZhbHVlKQoreworICAgIHJldHVybiBkb0V4dHJh
Y3RRdWVyeUtleVZhbHVlKHVybCwgKnF1ZXJ5LCAqa2V5LCAqdmFsdWUpOworfQorCit2b2lkIFBh
cnNlQXV0aG9yaXR5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwg
VVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwgVVJMQ29tcG9u
ZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKQoreworICAgIGRvUGFyc2VB
dXRob3JpdHkoc3BlYywgYXV0aCwgKnVzZXJuYW1lLCAqcGFzc3dvcmQsICpob3N0bmFtZSwgKnBv
cnROdW1iZXIpOworfQorCit2b2lkIFBhcnNlQXV0aG9yaXR5KGNvbnN0IFVDaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIGF1dGgsIFVSTENvbXBvbmVudCogdXNlcm5hbWUsIFVSTENvbXBv
bmVudCogcGFzc3dvcmQsIFVSTENvbXBvbmVudCogaG9zdG5hbWUsIFVSTENvbXBvbmVudCogcG9y
dE51bWJlcikKK3sKKyAgICBkb1BhcnNlQXV0aG9yaXR5KHNwZWMsIGF1dGgsICp1c2VybmFtZSwg
KnBhc3N3b3JkLCAqaG9zdG5hbWUsICpwb3J0TnVtYmVyKTsKK30KKworaW50IFBhcnNlUG9ydChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCkKK3sKKyAgICByZXR1cm4g
ZG9QYXJzZVBvcnQodXJsLCBwb3J0KTsKK30KKworaW50IFBhcnNlUG9ydChjb25zdCBVQ2hhciog
dXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQpCit7CisgICAgcmV0dXJuIGRvUGFyc2VQb3J0
KHVybCwgcG9ydCk7Cit9CisKK3ZvaWQgUGFyc2VTdGFuZGFyZFVSTChjb25zdCBjaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgZG9QYXJzZVN0YW5k
YXJkVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9pZCBQYXJzZVN0YW5kYXJk
VVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQp
Cit7CisgICAgZG9QYXJzZVN0YW5kYXJkVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30K
Kwordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxT
ZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VQYXRoVVJMKHVybCwgdXJsTGVuZ3RoLCAq
cGFyc2VkKTsKK30KKwordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlUGF0aFVSTCh1cmws
IHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQgUGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0
IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBk
b1BhcnNlRmlsZVN5c3RlbVVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQg
UGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNl
Z21lbnRzKiBwYXJzZWQpCit7CisgICAgZG9QYXJzZUZpbGVTeXN0ZW1VUkwodXJsLCB1cmxMZW5n
dGgsICpwYXJzZWQpOworfQorCit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIHVybCwg
aW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlTWFpbHRv
VVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9pZCBQYXJzZU1haWx0b1VSTChj
b25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQorewor
ICAgIGRvUGFyc2VNYWlsdG9VUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOworfQorCit2b2lk
IHBhcnNlUGF0aEludGVybmFsKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
cGF0aCwgVVJMQ29tcG9uZW50KiBmaWxlcGF0aCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29t
cG9uZW50KiBmcmFnbWVudCkKK3sKKyAgICBwYXJzZVBhdGgoc3BlYywgcGF0aCwgKmZpbGVwYXRo
LCAqcXVlcnksICpmcmFnbWVudCk7Cit9CisKK3ZvaWQgcGFyc2VQYXRoSW50ZXJuYWwoY29uc3Qg
VUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBmaWxl
cGF0aCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50KiBmcmFnbWVudCkKK3sKKyAg
ICBwYXJzZVBhdGgoc3BlYywgcGF0aCwgKmZpbGVwYXRoLCAqcXVlcnksICpmcmFnbWVudCk7Cit9
CisKK3ZvaWQgUGFyc2VBZnRlclNjaGVtZShjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0
aCwgaW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VB
ZnRlclNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCBhZnRlclNjaGVtZSwgKnBhcnNlZCk7Cit9CisK
K3ZvaWQgUGFyc2VBZnRlclNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgs
IGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlQWZ0
ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJTY2hlbWUsICpwYXJzZWQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJz
ZS5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlODU4
NTI4MmY2MGFkNTE2ODAxMDNlYWUxNzI4OGIxYjM0NTg5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8vIENv
cHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBVUkxQYXJzZV9oCisjZGVm
aW5lIFVSTFBhcnNlX2gKKworI2luY2x1ZGUgIlVSTENvbXBvbmVudC5oIgorI2luY2x1ZGUgIlVS
TFNlZ21lbnRzLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCisjaWYgVVNF
KFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxQYXJzZXIgeworCisv
LyBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIHBhcnNlIHRoZSBn
aXZlbiBVUkwsIGZpbGxpbmcgaW4gYWxsIG9mIHRoZSBzdHJ1Y3R1cmUncworLy8gY29tcG9uZW50
cy4gVGhlc2UgZnVuY3Rpb25zIGNhbiBub3QgZmFpbCwgdGhleSB3aWxsIGFsd2F5cyBkbyB0aGVp
ciBiZXN0CisvLyBhdCBpbnRlcnByZXRpbmcgdGhlIGlucHV0IGdpdmVuLgorLy8KKy8vIFRoZSBz
dHJpbmcgbGVuZ3RoIG9mIHRoZSBVUkwgTVVTVCBiZSBzcGVjaWZpZWQsIHdlIGRvIG5vdCBjaGVj
ayBmb3IgTlVMTHMKKy8vIGF0IGFueSBwb2ludCBpbiB0aGUgcHJvY2VzcywgYW5kIHdpbGwgYWN0
dWFsbHkgaGFuZGxlIGVtYmVkZGVkIE5VTExzLgorLy8KKy8vIElNUE9SVEFOVDogVGhlc2UgZnVu
Y3Rpb25zIGRvIE5PVCBoYW5nIG9uIHRvIHRoZSBnaXZlbiBwb2ludGVyIG9yIGNvcHkgaXQKKy8v
IGluIGFueSB3YXkuIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUgc3RydWN0LgorLy8KKy8vIFRo
ZSA4LWJpdCB2ZXJzaW9ucyByZXF1aXJlIFVURi04IGVuY29kaW5nLgorCisvLyBTdGFuZGFyZFVS
TCBpcyBmb3Igd2hlbiB0aGUgc2NoZW1lIGlzIGtub3duIHRvIGJlIG9uZSB0aGF0IGhhcyBhbgor
Ly8gYXV0aG9yaXR5IChob3N0KSBsaWtlICJodHRwIi4gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBo
YW5kbGUgd2VpcmQgb25lcworLy8gbGlrZSAiYWJvdXQ6IiBhbmQgImphdmFzY3JpcHQ6Iiwgb3Ig
ZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciAiZmlsZToiIFVSTHMuCit2b2lkIFBhcnNlU3RhbmRhcmRV
UkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsK
K3ZvaWQgUGFyc2VTdGFuZGFyZFVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBV
UkxTZWdtZW50cyogcGFyc2VkKTsKKworLy8gUGF0aFVSTCBpcyBmb3Igd2hlbiB0aGUgc2NoZW1l
IGlzIGtub3duIG5vdCB0byBoYXZlIGFuIGF1dGhvcml0eSAoaG9zdCkKKy8vIHNlY3Rpb24gYnV0
IHRoYXQgYXJlbid0IGZpbGUgVVJMcyBlaXRoZXIuIFRoZSBzY2hlbWUgaXMgcGFyc2VkLCBhbmQK
Ky8vIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHNjaGVtZSBpcyBjb25zaWRlcmVkIGFzIHRoZSBwYXRo
LiBUaGlzIGlzIHVzZWQgZm9yCisvLyB0aGluZ3MgbGlrZSAiYWJvdXQ6IiBhbmQgImphdmFzY3Jp
cHQ6Igordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBV
UkxTZWdtZW50cyogcGFyc2VkKTsKK3ZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IFVDaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOworCisvLyBGaWxlVVJMIGlzIGZv
ciBmaWxlIFVSTHMuIFRoZXJlIGFyZSBzb21lIHNwZWNpYWwgcnVsZXMgZm9yIGludGVycHJldGlu
ZworLy8gdGhlc2UuCit2b2lkIFBhcnNlRmlsZVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxM
ZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJzZUZpbGVVUkwoY29uc3QgVUNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIEZpbGVz
eXN0ZW0gVVJMcyBhcmUgc3RydWN0dXJlZCBkaWZmZXJlbnRseSB0aGFuIG90aGVyIFVSTHMuCit2
b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVS
TFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJzZUZpbGVTeXN0ZW1VUkwoY29uc3QgVUNoYXIq
IHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIE1haWx0b1VS
TCBpcyBmb3IgbWFpbHRvOiB1cmxzLiBUaGV5IGFyZSBtYWRlIHVwIHNjaGVtZSxwYXRoLHF1ZXJ5
Cit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJM
U2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IFVDaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOworCisvLyBIZWxwZXIgZnVuY3Rp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKy8vIExvY2F0ZXMgdGhlIHNjaGVtZSBhY2NvcmRpbmcgdG8gdGhlIFVSTCAgcGFy
c2VyJ3MgcnVsZXMuIFRoaXMgZnVuY3Rpb24gaXMKKy8vIGRlc2lnbmVkIHNvIHRoZSBjYWxsZXIg
Y2FuIGZpbmQgdGhlIHNjaGVtZSBhbmQgY2FsbCB0aGUgY29ycmVjdCBJbml0KgorLy8gZnVuY3Rp
b24gYWNjb3JkaW5nIHRvIHRoZWlyIGtub3duIHNjaGVtZSB0eXBlcy4KKy8vCisvLyBJdCBhbHNv
IGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24gb24gdGhlIHNjaGVtZS4KKy8vCisvLyBU
aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNjaGVtZSBpcyBmb3VuZCBhbmQg
d2lsbCBwdXQgdGhlCisvLyBzY2hlbWUncyByYW5nZSBpbnRvICpzY2hlbWUuIEZhbHNlIG1lYW5z
IG5vIHNjaGVtZSBjb3VsZCBiZSBmb3VuZC4gTm90ZQorLy8gdGhhdCBhIFVSTCBiZWdpbm5pbmcg
d2l0aCBhIGNvbG9uIGhhcyBhIHNjaGVtZSwgYnV0IGl0IGlzIGVtcHR5LCBzbyB0aGlzCisvLyBm
dW5jdGlvbiB3aWxsIHJldHVybiB0cnVlIGJ1dCAqc2NoZW1lIHdpbGwgPSAoMCwwKS4KKy8vCisv
LyBUaGUgc2NoZW1lIGlzIGZvdW5kIGJ5IHNraXBwaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFy
YWN0ZXJzIGF0IHRoZQorLy8gYmVnaW5uaW5nLCBhbmQgdGFraW5nIGV2ZXJ5dGhpbmcgZnJvbSB0
aGVyZSB0byB0aGUgZmlyc3QgY29sb24gdG8gYmUgdGhlCisvLyBzY2hlbWUuIFRoZSBjaGFyYWN0
ZXIgYXQgc2NoZW1lLmVuZCgpIHdpbGwgYmUgdGhlIGNvbG9uICh3ZSBtYXkgZW5oYW5jZQorLy8g
dGhpcyB0byBoYW5kbGUgZnVsbCB3aWR0aCBjb2xvbnMgb3Igc29tZXRoaW5nLCBzbyBkb24ndCBj
b3VudCBvbiB0aGUKKy8vIGFjdHVhbCBjaGFyYWN0ZXIgdmFsdWUpLiBUaGUgY2hhcmFjdGVyIGF0
IHNjaGVtZS5lbmQoKSsxIHdpbGwgYmUgdGhlCisvLyBiZWdpbm5pbmcgb2YgdGhlIHJlc3Qgb2Yg
dGhlIFVSTCwgYmUgaXQgdGhlIGF1dGhvcml0eSBvciB0aGUgcGF0aCAob3IgdGhlCisvLyBlbmQg
b2YgdGhlIHN0cmluZykuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTgg
ZW5jb2RpbmcuCitib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVu
Z3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSk7Citib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgVUNo
YXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50KiBzY2hlbWUpOworCisvLyBSZXR1
cm5zIHRydWUgaWYgY2ggaXMgYSBjaGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzIHRoZSBhdXRob3Jp
dHkgc2VnbWVudCBvZiBhIFVSTC4KK2Jvb2wgSXNBdXRob3JpdHlUZXJtaW5hdG9yKFVDaGFyKTsK
KworLy8gRG9lcyBhIGJlc3QgZWZmb3J0IHBhcnNlIG9mIGlucHV0IHxzcGVjfCwgaW4gcmFuZ2Ug
fGF1dGh8LiBJZiBhIHBhcnRpY3VsYXIKKy8vIGNvbXBvbmVudCBpcyBub3QgZm91bmQsIGl0IHdp
bGwgYmUgc2V0IHRvIGludmFsaWQuCit2b2lkIFBhcnNlQXV0aG9yaXR5KGNvbnN0IGNoYXIqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwKKyAgICAgICAgICAgICAgICAgICAgVVJMQ29t
cG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwgVVJMQ29tcG9uZW50KiBo
b3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKTsKK3ZvaWQgUGFyc2VBdXRob3JpdHko
Y29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwKKyAgICAgICAgICAg
ICAgICAgICAgVVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwg
VVJMQ29tcG9uZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKTsKKworLy8g
Q29tcHV0ZXMgdGhlIGludGVnZXIgcG9ydCB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBwb3J0IGNvbXBv
bmVudC4gVGhlIHBvcnQKKy8vIGNvbXBvbmVudCBzaG91bGQgaGF2ZSBiZWVuIGlkZW50aWZpZWQg
Ynkgb25lIG9mIHRoZSBpbml0IGZ1bmN0aW9ucyBvbgorLy8gfFBhcnNlZHwgZm9yIHRoZSBnaXZl
biBpbnB1dCB1cmwuCisvLworLy8gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEgcG9zaXRpdmUg
aW50ZWdlciBiZXR3ZWVuIDAgYW5kIDY0Sywgb3Igb25lIG9mCisvLyB0aGUgdHdvIHNwZWNpYWwg
dmFsdWVzIGJlbG93LgorZW51bSBTcGVjaWFsUG9ydCB7IFBPUlRfVU5TUEVDSUZJRUQgPSAtMSwg
UE9SVF9JTlZBTElEID0gLTIgfTsKK2ludCBQYXJzZVBvcnQoY29uc3QgY2hhciogdXJsLCBjb25z
dCBVUkxDb21wb25lbnQmIHBvcnQpOworaW50IFBhcnNlUG9ydChjb25zdCBVQ2hhciogdXJsLCBj
b25zdCBVUkxDb21wb25lbnQmIHBvcnQpOworCisvLyBFeHRyYWN0cyB0aGUgcmFuZ2Ugb2YgdGhl
IGZpbGUgbmFtZSBpbiB0aGUgZ2l2ZW4gdXJsLiBUaGUgcGF0aCBtdXN0CisvLyBhbHJlYWR5IGhh
dmUgYmVlbiBjb21wdXRlZCBieSB0aGUgcGFyc2UgZnVuY3Rpb24sIGFuZCB0aGUgbWF0Y2hpbmcg
VVJMCisvLyBhbmQgZXh0cmFjdGVkIHBhdGggYXJlIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24u
IFRoZSBmaWxlbmFtZSBpcworLy8gZGVmaW5lZCBhcyBiZWluZyBldmVyeXRoaW5nIGZyb20gdGhl
IGxhc3Qgc2xhc2gvYmFja3NsYXNoIG9mIHRoZSBwYXRoCisvLyB0byB0aGUgZW5kIG9mIHRoZSBw
YXRoLgorLy8KKy8vIFRoZSBmaWxlIG5hbWUgd2lsbCBiZSBlbXB0eSBpZiB0aGUgcGF0aCBpcyBl
bXB0eSBvciB0aGVyZSBpcyBub3RoaW5nCisvLyBmb2xsb3dpbmcgdGhlIGxhc3Qgc2xhc2guCisv
LworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCit2b2lkIEV4
dHJhY3RGaWxlTmFtZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwg
VVJMQ29tcG9uZW50KiBmaWxlTmFtZSk7Cit2b2lkIEV4dHJhY3RGaWxlTmFtZShjb25zdCBVQ2hh
ciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmlsZU5hbWUp
OworCisvLyBFeHRyYWN0IHRoZSBmaXJzdCBrZXkvdmFsdWUgZnJvbSB0aGUgcmFuZ2UgZGVmaW5l
ZCBieSB8KnF1ZXJ5fC4gVXBkYXRlcworLy8gfCpxdWVyeXwgdG8gc3RhcnQgYXQgdGhlIGVuZCBv
ZiB0aGUgZXh0cmFjdGVkIGtleS92YWx1ZSBwYWlyLiBUaGlzIGlzCisvLyBkZXNpZ25lZCBmb3Ig
dXNlIGluIGEgbG9vcDogeW91IGNhbiBrZWVwIGNhbGxpbmcgaXQgd2l0aCB0aGUgc2FtZSBxdWVy
eQorLy8gb2JqZWN0IGFuZCBpdCB3aWxsIGl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgaW4gdGhlIHF1
ZXJ5LgorLy8KKy8vIFNvbWUga2V5L3ZhbHVlIHBhaXJzIG1heSBoYXZlIHRoZSBrZXksIHRoZSB2
YWx1ZSwgb3IgYm90aCBiZSBlbXB0eSAoZm9yCisvLyBleGFtcGxlLCB0aGUgcXVlcnkgc3RyaW5n
ICI/JiIpLiBUaGVzZSB3aWxsIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgYW4gZW1wdHkKKy8vIGxh
c3QgcGFyYW1ldGVyICJmb28uY29tPyIgb3IgZm9vLmNvbT9hJiIgd2lsbCBub3QgYmUgcmV0dXJu
ZWQsIHRoaXMgY2FzZQorLy8gaXMgdGhlIHNhbWUgYXMgImRvbmUuIgorLy8KKy8vIFRoZSBpbml0
aWFsIHF1ZXJ5IGNvbXBvbmVudCBzaG91bGQgbm90IGluY2x1ZGUgdGhlICc/JyAodGhpcyBpcyB0
aGUgZGVmYXVsdAorLy8gZm9yIHBhcnNlZCBVUkxzKS4KKy8vCisvLyBJZiBubyBrZXkvdmFsdWUg
YXJlIGZvdW5kIHwqa2V5fCBhbmQgfCp2YWx1ZXwgd2lsbCBiZSB1bmNoYW5nZWQgYW5kIGl0IHdp
bGwKKy8vIHJldHVybiBmYWxzZS4KK2Jvb2wgRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgY2hh
ciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGtleSwgVVJMQ29tcG9u
ZW50KiB2YWx1ZSk7Citib29sIEV4dHJhY3RRdWVyeUtleVZhbHVlKGNvbnN0IFVDaGFyKiB1cmws
IFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCoga2V5LCBVUkxDb21wb25lbnQqIHZh
bHVlKTsKKworfSAvLyBuYW1lc3BhY2UgVVJMUGFyc2VyCisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVSTFBhcnNlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VGaWxlLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMUGFyc2VGaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWY2YmRjODk0OTZlZWQ4
ZmYxOThiOTk1M2U1ZmY3ZjMzMzFmMTVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwCkBAIC0wLDAgKzEsMjQ5IEBACisvLyBDb3B5cmln
aHQgMjAwNywgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAy
MDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
Ky8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxQYXJzZS5oIgorCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUgIlVSTFBhcnNl
SW50ZXJuYWwuaCIKKworLy8gSW50ZXJlc3RpbmcgSUUgZmlsZTppc21zLi4uCisvLworLy8gIElO
UFVUICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVAorLy8gID09PT09PT09PT09PT09PT09PT09
PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIGZpbGU6L2Zvby9iYXIg
ICAgICAgICAgICAgIGZpbGU6Ly8vZm9vL2JhcgorLy8gICAgICBUaGUgcmVzdWx0IGhlcmUgc2Vl
bXMgdG90YWxseSBpbnZhbGlkIT8hPyBUaGlzIGlzbid0IFVOQy4KKy8vCisvLyAgZmlsZTovCisv
LyAgZmlsZTovLyBvciBhbnkgb3RoZXIgbnVtYmVyIG9mIHNsYXNoZXMKKy8vICAgICAgSUU2IGRv
ZXNuJ3QgZG8gYW55dGhpbmcgYXQgYWxsIGlmIHlvdSBjbGljayBvbiB0aGlzIGxpbmsuIE5vIGVy
cm9yOgorLy8gICAgICBub3RoaW5nLiBJRTYncyBoaXN0b3J5IHN5c3RlbSBzZWVtcyB0byBhbHdh
eXMgY29sb3IgdGhpcyBsaW5rLCBzbyBJJ20KKy8vICAgICAgZ3Vlc3NpbmcgdGhhdCBpdCBtYXBz
IGludGVybmFsbHkgdG8gdGhlIGVtcHR5IFVSTC4KKy8vCisvLyAgQzpcICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsZTovLy9DOi8KKy8vICAgICAgV2hlbiBvbiBhIGZpbGU6IFVSTCBzb3VyY2Ug
cGFnZSwgdGhpcyBsaW5rIHdpbGwgd29yay4gV2hlbiBvdmVyIEhUVFAsCisvLyAgICAgIHRoZSBm
aWxlOiBVUkwgd2lsbCBhcHBlYXIgaW4gdGhlIHN0YXR1cyBiYXIgYnV0IHRoZSBsaW5rIHdpbGwg
bm90IHdvcmsKKy8vICAgICAgKHNlY3VyaXR5IHJlc3RyaWN0aW9uIGZvciBhbGwgZmlsZSBVUkxz
KS4KKy8vCisvLyAgZmlsZTpmb28vICAgICAgICAgICAgICAgICAgZmlsZTpmb28vICAgICAoaW52
YWxpZD8hPyE/KQorLy8gIGZpbGU6L2Zvby8gICAgICAgICAgICAgICAgIGZpbGU6Ly8vZm9vLyAg
KGludmFsaWQ/IT8hPykKKy8vICBmaWxlOi8vZm9vLyAgICAgICAgICAgICAgICBmaWxlOi8vZm9v
LyAgIChVTkMgdG8gc2VydmVyICJmb28iKQorLy8gIGZpbGU6Ly8vZm9vLyAgICAgICAgICAgICAg
IGZpbGU6Ly8vZm9vLyAgKGludmFsaWQsIHNlZW1zIHRvIGJlIGEgZmlsZSkKKy8vICBmaWxlOi8v
Ly9mb28vICAgICAgICAgICAgICBmaWxlOi8vZm9vLyAgIChVTkMgdG8gc2VydmVyICJmb28iKQor
Ly8gICAgICBBbnkgbW9yZSB0aGFuIGZvdXIgc2xhc2hlcyBpcyBhbHNvIHRyZWF0ZWQgYXMgVU5D
LgorLy8KKy8vICBmaWxlOkM6LyAgICAgICAgICAgICAgICAgICBmaWxlOi8vQzovCisvLyAgZmls
ZTovQzovICAgICAgICAgICAgICAgICAgZmlsZTovL0M6LworLy8gICAgICBUaGUgbnVtYmVyIG9m
IHNsYXNoZXMgYWZ0ZXIgImZpbGU6IiBkb24ndCBtYXR0ZXIgaWYgdGhlIHRoaW5nIGZvbGxvd2lu
ZworLy8gICAgICBpdCBsb29rcyBsaWtlIGFuIGFic29sdXRlIGRyaXZlIHBhdGguIEFsc28sIHNs
YXNoZXMgYW5kIGJhY2tzbGFzaGVzIGFyZQorLy8gICAgICBlcXVhbGx5IHZhbGlkIGhlcmUuCisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNl
ciB7CisKK25hbWVzcGFjZSB7CisKKy8vIEEgc3ViY29tcG9uZW50IG9mIERvSW5pdEZpbGVVUkws
IHRoZSBpbnB1dCBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBhIFVOQworLy8gcGF0aCBuYW1l
LCB3aXRoIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBzbGFzaGVz
IGZvbGxvd2luZworLy8gdGhlIHNjaGVtZSBnaXZlbiBpbiB8YWZ0ZXJTbGFzaGVzfC4gVGhpcyB3
aWxsIGluaXRpYWxpemUgdGhlIGhvc3QsIHBhdGgsCisvLyBxdWVyeSwgYW5kIHJlZiwgYW5kIGxl
YXZlIHRoZSBvdGhlciBvdXRwdXQgY29tcG9uZW50cyB1bnRvdWNoZWQKKy8vIChEb0luaXRGaWxl
VVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Cit2b2lkIERvUGFyc2VVTkMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IGFmdGVy
U2xhc2hlcywgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgaW50
IG5leHRTbGFzaCA9IGZpbmROZXh0U2xhc2goc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3Ro
KTsKKyAgICBpZiAobmV4dFNsYXNoID09IHNwZWNMZW5ndGgpIHsKKyAgICAgICAgLy8gTm8gYWRk
aXRpb25hbCBzbGFzaCBmb3VuZCwgYXMgaW4gImZpbGU6Ly9mb28iLCB0cmVhdCB0aGUgdGV4dCBh
cyB0aGUKKyAgICAgICAgLy8gaG9zdCB3aXRoIG5vIHBhdGggKHRoaXMgd2lsbCBlbmQgdXAgYmVp
bmcgVU5DIHRvIHNlcnZlciAiZm9vIikuCisgICAgICAgIGludCBob3N0TGVuZ3RoID0gc3BlY0xl
bmd0aCAtIGFmdGVyU2xhc2hlczsKKyAgICAgICAgaWYgKGhvc3RMZW5ndGgpCisgICAgICAgICAg
ICBwYXJzZWQtPmhvc3QgPSBVUkxDb21wb25lbnQoYWZ0ZXJTbGFzaGVzLCBob3N0TGVuZ3RoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgICAg
IHBhcnNlZC0+cGF0aC5yZXNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgT1Mo
V0lORE9XUykKKyAgICAvLyBTZWUgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtl
IGEgcGF0aCBmb2xsb3dpbmcgdGhlIGZpcnN0CisgICAgLy8gY29tcG9uZW50LiBBcyBpbiAiZmls
ZTovL2xvY2FsaG9zdC9jOi8iLCB3ZSBnZXQgImM6LyIgb3V0LiBXZSB3YW50IHRvCisgICAgLy8g
dHJlYXQgdGhpcyBhcyBhIGhhdmluZyBubyBob3N0IGJ1dCB0aGUgcGF0aCBnaXZlbi4gV29ya3Mg
b24gV2luZG93cyBvbmx5LgorICAgIGlmIChkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNwZWMs
IG5leHRTbGFzaCArIDEsIHNwZWNMZW5ndGgpKSB7CisgICAgICAgIHBhcnNlZC0+aG9zdC5yZXNl
dCgpOworICAgICAgICBwYXJzZVBhdGhJbnRlcm5hbChzcGVjLCBNYWtlUmFuZ2UobmV4dFNsYXNo
LCBzcGVjTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlZC0+cGF0aCwg
JnBhcnNlZC0+cXVlcnksICZwYXJzZWQtPnJlZik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIC8vIE90aGVyd2lzZSwgZXZlcnl0aGluZyB1cCB1bnRpbCB0aGF0IGZpcnN0
IHNsYXNoIHdlIGZvdW5kIGlzIHRoZSBob3N0IG5hbWUsCisgICAgLy8gd2hpY2ggd2lsbCBlbmQg
dXAgYmVpbmcgdGhlIFVOQyBob3N0LiBGb3IgZXhhbXBsZSAiZmlsZTovL2Zvby9iYXIudHh0Igor
ICAgIC8vIHdpbGwgZ2V0IGEgc2VydmVyIG5hbWUgb2YgImZvbyIgYW5kIGEgcGF0aCBvZiAiL2Jh
ciIuIExhdGVyLCBvbiBXaW5kb3dzLAorICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
dGhlIGZpbGVuYW1lICJcXGZvb1xiYXIudHh0IiBpbiBwcm9wZXIgVU5DCisgICAgLy8gbm90YXRp
b24uCisgICAgaW50IGhvc3RMZW5ndGggPSBuZXh0U2xhc2ggLSBhZnRlclNsYXNoZXM7CisgICAg
aWYgKGhvc3RMZW5ndGgpCisgICAgICAgIHBhcnNlZC0+aG9zdCA9IFVSTENvbXBvbmVudDo6ZnJv
bVJhbmdlKGFmdGVyU2xhc2hlcywgbmV4dFNsYXNoKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNl
ZC0+aG9zdC5yZXNldCgpOworICAgIGlmIChuZXh0U2xhc2ggPCBzcGVjTGVuZ3RoKSB7CisgICAg
ICAgIHBhcnNlUGF0aEludGVybmFsKHNwZWMsIFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKG5leHRT
bGFzaCwgc3BlY0xlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZWQtPnBh
dGgsICZwYXJzZWQtPnF1ZXJ5LCAmcGFyc2VkLT5mcmFnbWVudCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHBhcnNlZC0+cGF0aC5yZXNldCgpOworfQorCisvLyBBIHN1YmNvbXBvbmVudCBvZiBEb1Bh
cnNlRmlsZVVSTCwgdGhlIGlucHV0IHNob3VsZCBiZSBhIGxvY2FsIGZpbGUsIHdpdGggdGhlCisv
LyBiZWdpbm5pbmcgb2YgdGhlIHBhdGggaW5kaWNhdGVkIGJ5IHRoZSBpbmRleCBpbiB8cGF0aEJl
Z2lufC4gVGhpcyB3aWxsCisvLyBpbml0aWFsaXplIHRoZSBob3N0LCBwYXRoLCBxdWVyeSwgYW5k
IHJlZiwgYW5kIGxlYXZlIHRoZSBvdGhlciBvdXRwdXQKKy8vIGNvbXBvbmVudHMgdW50b3VjaGVk
IChEb0luaXRGaWxlVVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Cit2b2lkIERvUGFyc2VMb2NhbEZpbGUoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogc3BlYywgaW50IHBhdGhCZWdpbiwgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJz
ZWQpCit7CisgICAgcGFyc2VkLT5ob3N0LnJlc2V0KCk7CisgICAgcGFyc2VQYXRoSW50ZXJuYWwo
c3BlYywgVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGF0aEJlZ2luLCBzcGVjTGVuZ3RoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAmcGFyc2VkLT5wYXRoLCAmcGFyc2VkLT5xdWVyeSwgJnBhcnNl
ZC0+ZnJhZ21lbnQpOworfQorCisvLyBCYWNrZW5kIGZvciB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25z
IHRoYXQgb3BlcmF0ZXMgb24gZWl0aGVyIGNoYXIgdHlwZS4KKy8vIFdlIGFyZSBoYW5kZWQgdGhl
IGNoYXJhY3RlciBhZnRlciB0aGUgImZpbGU6IiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzcGVj
LgorLy8gVXN1YWxseSB0aGlzIGlzIGEgc2xhc2gsIGJ1dCBuZWVkbid0IGJlOyB3ZSBhbGxvdyBw
YXRocyBsaWtlICJmaWxlOmM6XGZvbyIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgordm9pZCBEb1BhcnNlRmlsZVVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3Bl
Y0xlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xlbmd0aCA+
PSAwKTsKKworICAgIC8vIEdldCB0aGUgcGFydHMgd2UgbmV2ZXIgdXNlIGZvciBmaWxlIFVSTHMg
b3V0IG9mIHRoZSB3YXkuCisgICAgcGFyc2VkLT51c2VybmFtZS5yZXNldCgpOworICAgIHBhcnNl
ZC0+cGFzc3dvcmQucmVzZXQoKTsKKyAgICBwYXJzZWQtPnBvcnQucmVzZXQoKTsKKworICAgIC8v
IE1hbnkgb2YgdGhlIGNvZGUgcGF0aHMgZG9uJ3Qgc2V0IHRoZXNlLCBzbyBpdCdzIGNvbnZlbmll
bnQgdG8ganVzdCBjbGVhcgorICAgIC8vIHRoZW0uIFdlJ2xsIHdyaXRlIHRoZW0gaW4gdGhvc2Ug
Y2FzZXMgd2UgbmVlZCB0aGVtLgorICAgIHBhcnNlZC0+cXVlcnkucmVzZXQoKTsKKyAgICBwYXJz
ZWQtPmZyYWdtZW50LnJlc2V0KCk7CisKKyAgICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcg
c3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgaW50IGJlZ2luID0gMDsKKyAgICB0
cmltVVJMKHNwZWMsICZiZWdpbiwgJnNwZWNMZW5ndGgpOworCisgICAgLy8gRmluZCB0aGUgc2No
ZW1lLgorICAgIGludCBudW1TbGFzaGVzOworICAgIGludCBhZnRlclNjaGVtZTsKKyAgICBpbnQg
YWZ0ZXJTbGFzaGVzOworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gU2VlIGhvdyBtYW55IHNsYXNo
ZXMgdGhlcmUgYXJlLiBXZSB3YW50IHRvIGhhbmRsZSBjYXNlcyBsaWtlIFVOQyBidXQgYWxzbwor
ICAgIC8vICIvYzovZm9vIi4gVGhpcyBpcyB3aGVuIHRoZXJlIGlzIG5vIHNjaGVtZSwgc28gd2Ug
Y2FuIGFsbG93IHBhZ2VzIHRvIGRvCisgICAgLy8gbGlua3MgbGlrZSAiYzovZm9vL2JhciIgb3Ig
Ii8vZm9vL2JhciIuIFRoaXMgaXMgYWxzbyBjYWxsZWQgYnkgdGhlCisgICAgLy8gcmVsYXRpdmUg
VVJMIHJlc29sdmVyIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGVyZSBpcyBhbiBhYnNvbHV0ZSBVUkws
IHdoaWNoCisgICAgLy8gbWF5IGdpdmUgdXMgaW5wdXQgbGlrZSAiL2M6L2ZvbyIuCisgICAgbnVt
U2xhc2hlcyA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3Ro
KTsKKyAgICBhZnRlclNsYXNoZXMgPSBiZWdpbiArIG51bVNsYXNoZXM7CisgICAgaWYgKGRvZXNC
ZWdpbldpbmRvd3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoKSkgewor
ICAgICAgICAvLyBXaW5kb3dzIHBhdGgsIGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUg
KGZvciBleGFtcGxlLCAiYzpcZm9vIikuCisgICAgICAgIHBhcnNlZC0+c2NoZW1lLnJlc2V0KCk7
CisgICAgICAgIGFmdGVyU2NoZW1lID0gYWZ0ZXJTbGFzaGVzOworICAgIH0gZWxzZSBpZiAoZG9l
c0JlZ2luVU5DUGF0aChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCwgZmFsc2UpKSB7CisgICAgICAg
IC8vIFdpbmRvd3MgVU5DIHBhdGg6IGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUsIGJ1
dCBrZWVwIHRoZSBzbGFzaGVzLgorICAgICAgICBwYXJzZWQtPnNjaGVtZS5yZXNldCgpOworICAg
ICAgICBhZnRlclNjaGVtZSA9IGJlZ2luOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAg
ICAgICBpZiAoRXh0cmFjdFNjaGVtZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5ndGggLSBiZWdpbiwg
JnBhcnNlZC0+c2NoZW1lKSkgeworICAgICAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNp
bmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgICAgIHBhcnNl
ZC0+c2NoZW1lLnNldEJlZ2luKHBhcnNlZC0+c2NoZW1lLmJlZ2luKCkgKyBiZWdpbik7CisgICAg
ICAgICAgICBhZnRlclNjaGVtZSA9IHBhcnNlZC0+c2NoZW1lLmVuZCgpICsgMTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIHNjaGVtZSBmb3VuZCwgcmVtZW1iZXIgdGhhdC4K
KyAgICAgICAgICAgIHBhcnNlZC0+c2NoZW1lLnJlc2V0KCk7CisgICAgICAgICAgICBhZnRlclNj
aGVtZSA9IGJlZ2luOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIGVtcHR5IHNw
ZWNzIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJzLAor
ICAgIC8vIG9yIHRoYXQgYXJlIGp1c3QgdGhlIHNjaGVtZSAoZm9yIGV4YW1wbGUgImZpbGU6Iiku
CisgICAgaWYgKGFmdGVyU2NoZW1lID09IHNwZWNMZW5ndGgpIHsKKyAgICAgICAgcGFyc2VkLT5o
b3N0LnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC0+cGF0aC5yZXNldCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbnVtU2xhc2hlcyA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNw
ZWMsIGFmdGVyU2NoZW1lLCBzcGVjTGVuZ3RoKTsKKworICAgIGFmdGVyU2xhc2hlcyA9IGFmdGVy
U2NoZW1lICsgbnVtU2xhc2hlczsKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIGlucHV0IGlzIGEgZHJpdmUgYWdhaW4uIFdlIGNoZWNrZWQgYWJvdmUgZm9yIHdpbmRv
d3MKKyAgICAvLyBkcml2ZSBzcGVjcywgYnV0IHRoYXQncyBvbmx5IGF0IHRoZSB2ZXJ5IGJlZ2lu
bmluZyB0byBzZWUgaWYgd2UgaGF2ZSBhCisgICAgLy8gc2NoZW1lIGF0IGFsbC4gVGhpcyB0ZXN0
IHdpbGwgYmUgZHVwbGljYXRlZCBpbiB0aGF0IGNhc2UsIGJ1dCB3aWxsCisgICAgLy8gYWRkaXRp
b25hbGx5IGhhbmRsZSBhbGwgY2FzZXMgd2l0aCBhIHJlYWwgc2NoZW1lIHN1Y2ggYXMgImZpbGU6
Ly8vQzovIi4KKyAgICBpZiAoIWRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJT
bGFzaGVzLCBzcGVjTGVuZ3RoKSAmJiAgbnVtU2xhc2hlcyAhPSAzKSB7CisgICAgICAgIC8vIEFu
eXRoaW5nIG5vdCBiZWdpbm5pbmcgd2l0aCBhIGRyaXZlIHNwZWMgKCJjOlwiKSBvbiBXaW5kb3dz
IGlzIHRyZWF0ZWQKKyAgICAgICAgLy8gYXMgVU5DLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhy
ZWUgc2xhc2hlcyB3aGljaCBhbHdheXMgbWVhbnMgYSBmaWxlLgorICAgICAgICAvLyBFdmVuIElF
NyB0cmVhdHMgZmlsZTovLy9mb28vYmFyIGFzICIvZm9vL2JhciIsIHdoaWNoIHRoZW4gZmFpbHMu
CisgICAgICAgIERvUGFyc2VVTkMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoLCBwYXJz
ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICAvLyBmaWxlOiBVUkwgd2l0
aCBleGFjdGx5IDIgc2xhc2hlcyBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYSBob3N0IGNvbXBvbmVu
dC4KKyAgICBpZiAobnVtU2xhc2hlcyA9PSAyKSB7CisgICAgICAgIERvUGFyc2VVTkMoc3BlYywg
YWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoLCBwYXJzZWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKKyAgICAvLyBFYXN5IGFuZCBjb21tb24gY2FzZSwg
dGhlIGZ1bGwgcGF0aCBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzY2hlbWUKKyAgICAvLyAobW9k
dWxvIHNsYXNoZXMpLCBhcyBpbiAiZmlsZTovL2M6L2ZvbyIuIEp1c3QgdHJlYXQgZXZlcnl0aGlu
ZyBmcm9tCisgICAgLy8gdGhlcmUgdG8gdGhlIGVuZCBhcyB0aGUgcGF0aC4gRW1wdHkgaG9zdHMg
aGF2ZSAwIGxlbmd0aCBpbnN0ZWFkIG9mIC0xLgorICAgIC8vIFdlIGluY2x1ZGUgdGhlIGxhc3Qg
c2xhc2ggYXMgcGFydCBvZiB0aGUgcGF0aCBpZiB0aGVyZSBpcyBvbmUuCisgICAgRG9QYXJzZUxv
Y2FsRmlsZShzcGVjLAorICAgICAgICAgICAgICAgICAgICAgbnVtU2xhc2hlcyA+IDAgPyBhZnRl
clNjaGVtZSArIG51bVNsYXNoZXMgLSAxIDogYWZ0ZXJTY2hlbWUsCisgICAgICAgICAgICAgICAg
ICAgICBzcGVjTGVuZ3RoLCBwYXJzZWQpOworfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIFBh
cnNlRmlsZVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBw
YXJzZWQpCit7CisgICAgRG9QYXJzZUZpbGVVUkwodXJsLCB1cmxMZW5ndGgsIHBhcnNlZCk7Cit9
CisKK3ZvaWQgUGFyc2VGaWxlVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVS
TFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgRG9QYXJzZUZpbGVVUkwodXJsLCB1cmxMZW5ndGgs
IHBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTFBhcnNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
UGFyc2VJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkZTBjNDViODE3ZGM3ZWE1NmQzMDg5ZjRmMjdj
NWUxYzkxYzUzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFBhcnNlSW50ZXJuYWwuaApAQCAtMCwwICsxLDExNyBAQAorLy8gQ29weXJpZ2h0IDIwMDcsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisvLyBDb250YWlucyBjb21tb24gaW5saW5lIGhlbHBlciBmdW5jdGlv
bnMgdXNlZCBieSB0aGUgVVJMIHBhcnNpbmcgcm91dGluZXMuCisKKyNpZm5kZWYgVVJMUGFyc2VJ
bnRlcm5hbF9oCisjZGVmaW5lIFVSTFBhcnNlSW50ZXJuYWxfaAorCisjaW5jbHVkZSAiVVJMUGFy
c2UuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKKyNpZiBVU0UoV1RGVVJM
KQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNlciB7CisKKy8vIFdlIHRy
ZWF0IHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIHRoZSBzYW1lIGZvciBJRSBjb21wYXRhYmlsaXR5
LgoraW5saW5lIGJvb2wgaXNVUkxTbGFzaChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gY2ggPT0g
Jy8nIHx8IGNoID09ICdcXCc7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJp
bSB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBVUkwgYmVjYXVzZSBpdCBpcyBhCisvLyBzcGFjZSBv
ciBhIGNvbnRyb2wgY2hhcmFjdGVyLgoraW5saW5lIGJvb2wgc2hvdWxkVHJpbUZyb21VUkwoVUNo
YXIgY2gpCit7CisgICAgcmV0dXJuIGNoIDw9ICcgJzsKK30KKworLy8gR2l2ZW4gYW4gYWxyZWFk
eS1pbml0aWFsaXplZCBiZWdpbiBpbmRleCBhbmQgbGVuZ3RoLCB0aGlzIHNocmlua3MgdGhlIHJh
bmdlCisvLyB0byBlbGltaW5hdGUgInNob3VsZC1iZS10cmltbWVkIiBjaGFyYWN0ZXJzLiBOb3Rl
IHRoYXQgdGhlIGxlbmd0aCBkb2VzICpub3QqCisvLyBpbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHVu
dHJpbW1lZCBkYXRhIGZyb20gfCpiZWdpbnwsIGJ1dCByYXRoZXIgdGhlIHBvc2l0aW9uCisvLyBp
biB0aGUgaW5wdXQgc3RyaW5nIChzbyB0aGUgc3RyaW5nIHN0YXJ0cyBhdCBjaGFyYWN0ZXIgfCpi
ZWdpbnwgaW4gdGhlIHNwZWMsCisvLyBhbmQgZ29lcyB1bnRpbCB8KmxlbnwpLgordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSB2b2lkIHRyaW1VUkwoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3BlYywgaW50KiBiZWdpbiwgaW50KiBsZW5ndGgpCit7CisgICAgLy8gU3RyaXAg
bGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgd2hpbGUgKCpi
ZWdpbiA8ICpsZW5ndGggJiYgc2hvdWxkVHJpbUZyb21VUkwoc3BlY1sqYmVnaW5dKSkKKyAgICAg
ICAgKCpiZWdpbikrKzsKKworICAgIC8vIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGNv
bnRyb2wgY2hhcmFjdGVycy4gV2UgbmVlZCB0aGUgPmkgdGVzdCBmb3IKKyAgICAvLyB3aGVuIHRo
ZSBpbnB1dCBzdHJpbmcgaXMgYWxsIGJsYW5rczsgd2UgZG9uJ3Qgd2FudCB0byBiYWNrIHBhc3Qg
dGhlIGlucHV0LgorICAgIHdoaWxlICgqbGVuZ3RoID4gKmJlZ2luICYmIHNob3VsZFRyaW1Gcm9t
VVJMKHNwZWNbKmxlbmd0aCAtIDFdKSkKKyAgICAgICAgKCpsZW5ndGgpLS07Cit9CisKKy8vIENv
dW50cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsYXNoZXMgc3RhcnRpbmcgYXQgdGhlIGdp
dmVuIG9mZnNldAorLy8gaW4gdGhlIGdpdmVuIHN0cmluZyBvZiB0aGUgZ2l2ZW4gbGVuZ3RoLgor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBpbnQgY291bnRDb25zZWN1
dGl2ZVNsYXNoZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSAqc3RyLCBpbnQgYmVnaW5fb2Zmc2V0LCBp
bnQgc3RyTGVuZ3RoKQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGJlZ2luX29m
ZnNldCArIGNvdW50IDwgc3RyTGVuZ3RoICYmIGlzVVJMU2xhc2goc3RyW2JlZ2luX29mZnNldCAr
IGNvdW50XSkpCisgICAgICAgICsrY291bnQ7CisgICAgcmV0dXJuIGNvdW50OworfQorCisvLyBJ
bnRlcm5hbCBmdW5jdGlvbnMgaW4gVVJMUGFyc2VyLmNjIHRoYXQgcGFyc2UgdGhlIHBhdGgsIHRo
YXQgaXMsIGV2ZXJ5dGhpbmcKKy8vIGZvbGxvd2luZyB0aGUgYXV0aG9yaXR5IHNlY3Rpb24uIFRo
ZSBpbnB1dCBpcyB0aGUgcmFuZ2Ugb2YgZXZlcnl0aGluZworLy8gZm9sbG93aW5nIHRoZSBhdXRo
b3JpdHkgc2VjdGlvbiwgYW5kIHRoZSBvdXRwdXQgaXMgdGhlIGlkZW50aWZpZWQgcmFuZ2VzLgor
Ly8KKy8vIFRoaXMgaXMgZGVzaWduZWQgZm9yIHRoZSBmaWxlIFVSTCBwYXJzZXIgb3Igb3RoZXIg
Y29uc3VtZXJzIHdobyBtYXkgZG8KKy8vIHNwZWNpYWwgc3R1ZmYgYXQgdGhlIGJlZ2lubmluZywg
YnV0IHdhbnQgcmVndWxhciBwYXRoIHBhcnNpbmcsIGl0IGp1c3QKKy8vIG1hcHMgdG8gdGhlIGlu
dGVybmFsIHBhcnNpbmcgZnVuY3Rpb24gZm9yIHBhdGhzLgordm9pZCBwYXJzZVBhdGhJbnRlcm5h
bChjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21w
b25lbnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZmlsZXBh
dGgsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogcXVlcnksCisgICAgICAg
ICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZnJhZ21lbnQpOwordm9pZCBwYXJzZVBhdGhJ
bnRlcm5hbChjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQq
IGZpbGVwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIHF1ZXJ5LAor
ICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIGZyYWdtZW50KTsKKworCisvLyBH
aXZlbiBhIHNwZWMgYW5kIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBjb2xv
biBmb2xsb3dpbmcgdGhlCisvLyBzY2hlbWUsIHRoaXMgcGFyc2VzIGl0IGFuZCBmaWxscyBpbiB0
aGUgc3RydWN0dXJlLCBFdmVyeSBpdGVtIGluIHRoZSBwYXJzZWQKKy8vIHN0cnVjdHVyZSBpcyBm
aWxsZWQgRVhDRVBUIGZvciB0aGUgc2NoZW1lLCB3aGljaCBpcyB1bnRvdWNoZWQuCit2b2lkIFBh
cnNlQWZ0ZXJTY2hlbWUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGludCBhZnRl
clNjaGVtZSwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlQWZ0ZXJTY2hlbWUoY29u
c3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21l
bnRzKiBwYXJzZWQpOworCit9IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQorCisjZW5kaWYgLy8gVVJMUGFyc2VJbnRl
cm5hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlci5oIGIv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMmI0ZDU5OGEzMTlhM2NhMjdmODY1OTRiZTdjMGI4ZmIxYTA3MThiNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTFBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTk2ICswLDAgQEAKLS8qIEJh
c2VkIG9uIG5zVVJMUGFyc2Vycy5jYyBmcm9tIE1vemlsbGEKLSAqIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21t
dW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogT3RoZXIgY29udHJpYnV0b3JzOgotICogICBE
YXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhvcikKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqIEFs
dGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zCi0gKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAxLjEsIGZvdW5kIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBM
Iikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91
bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCi0gKiAodGhlICJHUEwi
KSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJl
Ci0gKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91cgotICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUg
dGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bwotICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQ
TCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5Ci0gKiBkZWxl
dGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
IGFuZAotICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEws
IGFzIHRoZSBjYXNlIG1heSBiZS4KLSAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgotICovCi0KLSNp
Zm5kZWYgVVJMUGFyc2VyX2gKLSNkZWZpbmUgVVJMUGFyc2VyX2gKLQotI2luY2x1ZGUgIlVSTENv
bXBvbmVudC5oIgotI2luY2x1ZGUgIlVSTFNlZ21lbnRzLmgiCi0jaW5jbHVkZSAiVW51c2VkUGFy
YW0uaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBCYXNlQ2hhcmFjdGVyVHlwZSA9IENoYXJh
Y3RlclR5cGU+Ci1jbGFzcyBVUkxQYXJzZXIgewotcHVibGljOgotICAgIGVudW0gU3BlY2lhbFBv
cnQgewotICAgICAgICBVbnNwZWNpZmllZFBvcnQgPSAtMSwKLSAgICAgICAgSW52YWxpZFBvcnQg
PSAtMiwKLSAgICB9OwotCi0gICAgLy8gVGhpcyBoYW5kbGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXkg
YmUgYW4gYXV0aG9yaXR5IHRlcm1pbmF0b3IsIGluY2x1ZGluZwotICAgIC8vIGJhY2tzbGFzaC4g
Rm9yIHNwZWNpYWwgYmFja3NsYXNoIGhhbmRsaW5nIHNlZSBwYXJzZUFmdGVyU2NoZW1lLgotICAg
IHN0YXRpYyBib29sIGlzUG9zc2libGVBdXRob3JpdHlUZXJtaW5hdG9yKENoYXJhY3RlclR5cGUg
Y2gpCi0gICAgewotICAgICAgICByZXR1cm4gaXNVUkxTbGFzaChjaCkgfHwgY2ggPT0gJz8nIHx8
IGNoID09ICcjJyB8fCBjaCA9PSAnOyc7Ci0gICAgfQotCi0gICAgLy8gR2l2ZW4gYW4gYWxyZWFk
eS1pZGVudGlmaWVkIGF1dGggc2VjdGlvbiwgYnJlYWtzIGl0IGludG8gaXRzIGNvbnN0aXR1ZW50
Ci0gICAgLy8gcGFydHMuIFRoZSBwb3J0IG51bWJlciB3aWxsIGJlIHBhcnNlZCBhbmQgdGhlIHJl
c3VsdGluZyBpbnRlZ2VyIHdpbGwgYmUKLSAgICAvLyBmaWxsZWQgaW50byB0aGUgZ2l2ZW4gKnBv
cnQgdmFyaWFibGUsIG9yIC0xIGlmIHRoZXJlIGlzIG5vIHBvcnQgbnVtYmVyCi0gICAgLy8gb3Ig
aXQgaXMgaW52YWxpZC4KLSAgICBzdGF0aWMgdm9pZCBwYXJzZUF1dGhvcml0eShjb25zdCBDaGFy
YWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGgsIFVSTENvbXBvbmVudCYg
dXNlcm5hbWUsIFVSTENvbXBvbmVudCYgcGFzc3dvcmQsIFVSTENvbXBvbmVudCYgaG9zdCwgVVJM
Q29tcG9uZW50JiBwb3J0KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCBBU1NFUlQoYXV0
aC5pc1ZhbGlkKCkpOyAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhbiBhdXRob3JpdHkuCi0gICAg
ICAgIGlmICghYXV0aC5sZW5ndGgoKSkgewotICAgICAgICAgICAgdXNlcm5hbWUucmVzZXQoKTsK
LSAgICAgICAgICAgIHBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgICAgICBob3N0LnJlc2V0KCk7
Ci0gICAgICAgICAgICBwb3J0LnJlc2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTZWFyY2ggYmFja3dhcmRzIGZvciBALCB3aGljaCBpcyB0aGUgc2Vw
YXJhdG9yIGJldHdlZW4gdGhlIHVzZXIgaW5mbwotICAgICAgICAvLyBhbmQgdGhlIHNlcnZlciBp
bmZvLiBSRkMgMzk4NiBmb3JiaWRzIEAgZnJvbSBvY2N1cmluZyBpbiBhdXRoLCBidXQKLSAgICAg
ICAgLy8gc29tZW9uZSBtaWdodCBpbmNsdWRlIGl0IGluIGEgcGFzc3dvcmQgdW5lc2NhcGVkLgot
ICAgICAgICBpbnQgaSA9IGF1dGguYmVnaW4oKSArIGF1dGgubGVuZ3RoKCkgLSAxOwotICAgICAg
ICB3aGlsZSAoaSA+IGF1dGguYmVnaW4oKSAmJiBzcGVjW2ldICE9ICdAJykKLSAgICAgICAgICAg
IC0taTsKLQotICAgICAgICBpZiAoc3BlY1tpXSA9PSAnQCcpIHsKLSAgICAgICAgICAgIC8vIEZv
dW5kIHVzZXIgaW5mbzogPHVzZXItaW5mbz5APHNlcnZlci1pbmZvPgotICAgICAgICAgICAgcGFy
c2VVc2VySW5mbyhzcGVjLCBVUkxDb21wb25lbnQoYXV0aC5iZWdpbigpLCBpIC0gYXV0aC5iZWdp
bigpKSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKLSAgICAgICAgICAgIHBhcnNlU2VydmVySW5mbyhz
cGVjLCBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgYXV0aC5iZWdpbigpICsgYXV0aC5s
ZW5ndGgoKSksIGhvc3QsIHBvcnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
Tm8gdXNlciBpbmZvLCBldmVyeXRoaW5nIGlzIHNlcnZlciBpbmZvLgotICAgICAgICAgICAgdXNl
cm5hbWUucmVzZXQoKTsKLSAgICAgICAgICAgIHBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBwYXJzZVNlcnZlckluZm8oc3BlYywgYXV0aCwgaG9zdCwgcG9ydCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBleHRyYWN0U2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUq
IHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxDb21wb25lbnQmIHNjaGVtZSkKLSAgICB7Ci0gICAg
ICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCi0g
ICAgICAgIGludCBiZWdpbiA9IDA7Ci0gICAgICAgIHdoaWxlIChiZWdpbiA8IHNwZWNMZW5ndGgg
JiYgc2hvdWxkVHJpbUZyb21VUkwoc3BlY1tiZWdpbl0pKQotICAgICAgICAgICAgYmVnaW4rKzsK
LSAgICAgICAgaWYgKGJlZ2luID09IHNwZWNMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIElucHV0IGlzIGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNlLgotCi0gICAgICAgIC8vIEZp
bmQgdGhlIGZpcnN0IGNvbG9uIGNoYXJhY3Rlci4KLSAgICAgICAgZm9yIChpbnQgaSA9IGJlZ2lu
OyBpIDwgc3BlY0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc3BlY1tpXSA9PSAnOicp
IHsKLSAgICAgICAgICAgICAgICBzY2hlbWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShiZWdp
biwgaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBjb2xvbiBmb3VuZDogbm8gc2NoZW1l
Ci0gICAgfQotCi0gICAgLy8gRmlsbHMgaW4gYWxsIG1lbWJlcnMgb2YgdGhlIFVSTFNlZ21lbnRz
IHN0cnVjdHVyZSAoZXhjZXB0IGZvciB0aGUKLSAgICAvLyBzY2hlbWUpIGZvciBzdGFuZGFyZCBV
UkxzLgotICAgIC8vCi0gICAgLy8gfHNwZWN8IGlzIHRoZSBmdWxsIHNwZWMgYmVpbmcgcGFyc2Vk
LCBvZiBsZW5ndGggfHNwZWNMZW5ndGh8LgotICAgIC8vIHxhZnRlclNjaGVtZXwgaXMgdGhlIGNo
YXJhY3RlciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHNjaGVtZSAoYWZ0ZXIKLSAgICAvLyB0
aGUgY29sb24pIHdoZXJlIHdlJ2xsIGJlZ2luIHBhcnNpbmcuCi0gICAgc3RhdGljIHZvaWQgcGFy
c2VBZnRlclNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwg
aW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAgIHsKLSAgICAgICAgaW50
IG51bWJlck9mU2xhc2hlcyA9IGNvbnNlY3V0aXZlU2xhc2hlcyhzcGVjLCBhZnRlclNjaGVtZSwg
c3BlY0xlbmd0aCk7Ci0gICAgICAgIGludCBhZnRlclNsYXNoZXMgPSBhZnRlclNjaGVtZSArIG51
bWJlck9mU2xhc2hlczsKLQotICAgICAgICAvLyBGaXJzdCBzcGxpdCBpbnRvIHR3byBtYWluIHBh
cnRzLCB0aGUgYXV0aG9yaXR5ICh1c2VybmFtZSwgcGFzc3dvcmQsCi0gICAgICAgIC8vIGhvc3Qs
IGFuZCBwb3J0KSBhbmQgdGhlIGZ1bGwgcGF0aCAocGF0aCwgcXVlcnksIGFuZCByZWZlcmVuY2Up
LgotICAgICAgICBVUkxDb21wb25lbnQgYXV0aG9yaXR5OwotICAgICAgICBVUkxDb21wb25lbnQg
ZnVsbFBhdGg7Ci0KLSAgICAgICAgLy8gRm91bmQgIi8vPHNvbWUgZGF0YT4iLCBsb29rcyBsaWtl
IGFuIGF1dGhvcml0eSBzZWN0aW9uLiBUcmVhdAotICAgICAgICAvLyBldmVyeXRoaW5nIGZyb20g
dGhlcmUgdG8gdGhlIG5leHQgc2xhc2ggKG9yIGVuZCBvZiBzcGVjKSB0byBiZSB0aGUKLSAgICAg
ICAgLy8gYXV0aG9yaXR5LiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBudW1iZXIgb2Ygc2xhc2hl
cyBhbmQgdHJlYXQgaXQgYXMKLSAgICAgICAgLy8gdGhlIGF1dGhvcml0eS4KLSAgICAgICAgaW50
IGF1dGhFbmQgPSBuZXh0QXV0aG9yaXR5VGVybWluYXRvcihzcGVjLCBhZnRlclNsYXNoZXMsIHNw
ZWNMZW5ndGgpOwotICAgICAgICBhdXRob3JpdHkgPSBVUkxDb21wb25lbnQoYWZ0ZXJTbGFzaGVz
LCBhdXRoRW5kIC0gYWZ0ZXJTbGFzaGVzKTsKLQotICAgICAgICBpZiAoYXV0aEVuZCA9PSBzcGVj
TGVuZ3RoKSAvLyBObyBiZWdpbm5pbmcgb2YgcGF0aCBmb3VuZC4KLSAgICAgICAgICAgIGZ1bGxQ
YXRoID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIGVsc2UgLy8gRXZlcnl0aGluZyBzdGFydGlu
ZyBmcm9tIHRoZSBzbGFzaCB0byB0aGUgZW5kIGlzIHRoZSBwYXRoLgotICAgICAgICAgICAgZnVs
bFBhdGggPSBVUkxDb21wb25lbnQoYXV0aEVuZCwgc3BlY0xlbmd0aCAtIGF1dGhFbmQpOwotCi0g
ICAgICAgIC8vIE5vdyBwYXJzZSB0aG9zZSB0d28gc3ViLXBhcnRzLgotICAgICAgICBwYXJzZUF1
dGhvcml0eShzcGVjLCBhdXRob3JpdHksIHBhcnNlZC51c2VybmFtZSwgcGFyc2VkLnBhc3N3b3Jk
LCBwYXJzZWQuaG9zdCwgcGFyc2VkLnBvcnQpOwotICAgICAgICBwYXJzZVBhdGgoc3BlYywgZnVs
bFBhdGgsIHBhcnNlZC5wYXRoLCBwYXJzZWQucXVlcnksIHBhcnNlZC5mcmFnbWVudCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIG1haW4gcGFyc2luZyBmdW5jdGlvbiBmb3Igc3RhbmRhcmQgVVJMcy4g
U3RhbmRhcmQgVVJMcyBoYXZlIGEgc2NoZW1lLAotICAgIC8vIGhvc3QsIHBhdGgsIGV0Yy4KLSAg
ICBzdGF0aWMgdm9pZCBwYXJzZVN0YW5kYXJkVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IGFkZCBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsKLQotICAgICAgICAvLyBTdHJpcCBs
ZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCi0gICAgICAg
IGludCBiZWdpbiA9IDA7Ci0gICAgICAgIHRyaW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgp
OwotCi0gICAgICAgIGludCBhZnRlclNjaGVtZTsKLSAgICAgICAgaWYgKGV4dHJhY3RTY2hlbWUo
c3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkLnNjaGVtZSkpCi0gICAgICAgICAgICBhZnRlclNjaGVt
ZSA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOyAvLyBTa2lwIHBhc3QgdGhlIGNvbG9uLgotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFNheSB0aGVyZSdzIG5vIHNjaGVtZSB3aGVuIHRo
ZXJlIGlzIGEgY29sb24uIFdlIGNvdWxkIGFsc28gc2F5Ci0gICAgICAgICAgICAvLyB0aGF0IGV2
ZXJ5dGhpbmcgaXMgdGhlIHNjaGVtZS4gQm90aCB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQKLSAg
ICAgICAgICAgIC8vIFVSTCwgYnV0IHRoaXMgd2F5IHNlZW1zIGxlc3Mgd3JvbmcgaW4gbW9yZSBj
YXNlcy4KLSAgICAgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgICAgIGFm
dGVyU2NoZW1lID0gYmVnaW47Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VBZnRlclNjaGVtZShz
cGVjLCBzcGVjTGVuZ3RoLCBhZnRlclNjaGVtZSwgcGFyc2VkKTsKLSAgICB9Ci0KLSAgICAvLyBU
aGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uIGZvciAobWF5IGJlKSByZWxhdGl2ZSBVUkxzLgotICAg
IHN0YXRpYyB2b2lkIHBhcnNlVVJMV2l0aEJhc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywg
aW50IHNwZWNMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBC
YXNlQ2hhcmFjdGVyVHlwZSogYmFzZVN0cmluZ1NwZWMsIGludCBiYXNlU3RyaW5nU3BlY0xlbmd0
aCwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VTdHJpbmdTZWdtZW50cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiZvdXRwdXRCdWZmZXIsIFVSTFNlZ21l
bnRzJiBwYXJzZWQpCi0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0oYmFzZVN0cmluZ1NwZWMp
OwotICAgICAgICBVTlVTRURfUEFSQU0oYmFzZVN0cmluZ1NwZWNMZW5ndGgpOwotICAgICAgICBV
TlVTRURfUEFSQU0oYmFzZVN0cmluZ1NlZ21lbnRzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNw
ZWMpOwotICAgICAgICBVTlVTRURfUEFSQU0oc3BlY0xlbmd0aCk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShvdXRwdXRCdWZmZXIpOwotICAgICAgICBVTlVTRURfUEFSQU0ocGFyc2VkKTsKLSAgICAg
ICAgLy8gRklYTUU6IFRvIGltcGxlbWVudC4KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJz
ZVBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRo
LCBVUkxDb21wb25lbnQmIGZpbGVwYXRoLCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxDb21wb25l
bnQmIGZyYWdtZW50KQotICAgIHsKLSAgICAgICAgLy8gcGF0aCA9IFsvXTxzZWdtZW50MT4vPHNl
Z21lbnQyPi88Li4uPi88c2VnbWVudE4+OzxwYXJhbT4/PHF1ZXJ5PiM8ZnJhZ21lbnQ+Ci0KLSAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gcGF0aC4KLSAgICAgICAgaWYg
KCFwYXRoLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgZmlsZXBhdGgucmVzZXQoKTsKLSAgICAg
ICAgICAgIHF1ZXJ5LnJlc2V0KCk7Ci0gICAgICAgICAgICBmcmFnbWVudC5yZXNldCgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgQVNTRVJU
KHBhdGgubGVuZ3RoKCkgPiAwKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgMCBsZW5ndGggcGF0
aHMuCi0KLSAgICAgICAgLy8gU2VhcmNoIGZvciBmaXJzdCBvY2N1cnJlbmNlIG9mIGVpdGhlciA/
IG9yICMuCi0gICAgICAgIGludCBwYXRoRW5kID0gcGF0aC5iZWdpbigpICsgcGF0aC5sZW5ndGgo
KTsKLQotICAgICAgICBpbnQgcXVlcnlTZXBhcmF0b3IgPSAtMTsgLy8gSW5kZXggb2YgdGhlICc/
JwotICAgICAgICBpbnQgcmVmU2VwYXJhdG9yID0gLTE7IC8vIEluZGV4IG9mIHRoZSAnIycKLSAg
ICAgICAgZm9yIChpbnQgaSA9IHBhdGguYmVnaW4oKTsgaSA8IHBhdGhFbmQ7IGkrKykgewotICAg
ICAgICAgICAgc3dpdGNoIChzcGVjW2ldKSB7Ci0gICAgICAgICAgICBjYXNlICc/JzoKLSAgICAg
ICAgICAgICAgICBpZiAocXVlcnlTZXBhcmF0b3IgPCAwKQotICAgICAgICAgICAgICAgICAgICBx
dWVyeVNlcGFyYXRvciA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlICcjJzoKLSAgICAgICAgICAgICAgICByZWZTZXBhcmF0b3IgPSBpOwotICAgICAgICAgICAg
ICAgIGkgPSBwYXRoRW5kOyAvLyBCcmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFya2VycyBwb2ludGluZyB0
byB0aGUgY2hhcmFjdGVyIGFmdGVyIGVhY2ggb2YgdGhlc2UgY29ycmVzcG9uZGluZwotICAgICAg
ICAvLyBjb21wb25lbnRzLiBUaGUgY29kZSBiZWxvdyB3b3JrcyBmcm9tIHRoZSBlbmQgYmFjayB0
byB0aGUgYmVnaW5uaW5nLAotICAgICAgICAvLyBhbmQgd2lsbCB1cGRhdGUgdGhlc2UgaW5kaWNl
cyBhcyBpdCBmaW5kcyBjb21wb25lbnRzIHRoYXQgZXhpc3QuCi0gICAgICAgIGludCBmaWxlRW5k
LCBxdWVyeUVuZDsKLQotICAgICAgICAvLyBGcmFnbWVudDogZnJvbSB0aGUgIyB0byB0aGUgZW5k
IG9mIHRoZSBwYXRoLgotICAgICAgICBpZiAocmVmU2VwYXJhdG9yID49IDApIHsKLSAgICAgICAg
ICAgIGZpbGVFbmQgPSByZWZTZXBhcmF0b3I7Ci0gICAgICAgICAgICBxdWVyeUVuZCA9IHJlZlNl
cGFyYXRvcjsKLSAgICAgICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
cmVmU2VwYXJhdG9yICsgMSwgcGF0aEVuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmaWxlRW5kID0gcGF0aEVuZDsKLSAgICAgICAgICAgIHF1ZXJ5RW5kID0gcGF0aEVuZDsKLSAg
ICAgICAgICAgIGZyYWdtZW50LnJlc2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBRdWVy
eSBmcmFnbWVudDogZXZlcnl0aGluZyBmcm9tIHRoZSA/IHRvIHRoZSBuZXh0IGJvdW5kYXJ5IChl
aXRoZXIKLSAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgcGF0aCBvciB0aGUgZnJhZ21lbnQgZnJh
Z21lbnQpLgotICAgICAgICBpZiAocXVlcnlTZXBhcmF0b3IgPj0gMCkgewotICAgICAgICAgICAg
ZmlsZUVuZCA9IHF1ZXJ5U2VwYXJhdG9yOwotICAgICAgICAgICAgcXVlcnkgPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShxdWVyeVNlcGFyYXRvciArIDEsIHF1ZXJ5RW5kKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBxdWVyeS5yZXNldCgpOwotCi0gICAgICAgIC8vIEZpbGUgcGF0aDog
dHJlYXQgYW4gZW1wdHkgZmlsZSBwYXRoIGFzIG5vIGZpbGUgcGF0aC4KLSAgICAgICAgaWYgKGZp
bGVFbmQgIT0gcGF0aC5iZWdpbigpKQotICAgICAgICAgICAgZmlsZXBhdGggPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShwYXRoLmJlZ2luKCksIGZpbGVFbmQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmaWxlcGF0aC5yZXNldCgpOwotICAgIH0KLQotICAgIC8vIEluaXRpYWxpemVzIGEg
cGF0aCBVUkwgd2hpY2ggaXMgbWVyZWx5IGEgc2NoZW1lIGZvbGxvd2VkIGJ5IGEgcGF0aC4KLSAg
ICAvLyBFeGFtcGxlcyBpbmNsdWRlICJhYm91dDpmb28iIGFuZCAiamF2YXNjcmlwdDphbGVydCgn
YmFyJyk7IgotICAgIHN0YXRpYyB2b2lkIHBhcnNlUGF0aFVSTChjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMgb2YgdGhlIFVSTCBv
dXQgb2YgdGhlIHdheSwgd2UKLSAgICAgICAgLy8gbmV2ZXIgdXNlIHRoZW0uCi0gICAgICAgIHBh
cnNlZC51c2VybmFtZS5yZXNldCgpOwotICAgICAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsK
LSAgICAgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLnBvcnQucmVzZXQo
KTsKLSAgICAgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5mcmFnbWVu
dC5yZXNldCgpOwotCi0gICAgICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMg
YW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgdGhpcyBp
cyB1bm5lY2Vzc2FyeT8KLSAgICAgICAgaW50IGJlZ2luID0gMDsKLSAgICAgICAgdHJpbVVSTChz
cGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNz
IG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sCi0gICAgICAg
IC8vIGNoYXJzLgotICAgICAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgewotICAgICAgICAg
ICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEV4dHJhY3Qg
dGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVyeXRoaW5nIGZvbGxvd2luZy4gV2Ug
YWxzbwotICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1l
LgotICAgICAgICBpZiAoZXh0cmFjdFNjaGVtZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5ndGggLSBi
ZWdpbiwgcGFyc2VkLnNjaGVtZSkpIHsKLSAgICAgICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0
cyBzaW5jZSB3ZSBnYXZlIGV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCi0gICAgICAgICAgICBw
YXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2luKTsKLQot
ICAgICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJMIHBh
cnNlciwgd2UgdHJlYXQgbm8gcGF0aAotICAgICAgICAgICAgLy8gYXMgLTEsIHJhdGhlciB0aGFu
IGhhdmluZyBhIGxlbmd0aCBvZiAwICh3ZSBub3JtYWxseSB3b3VsZG4ndAotICAgICAgICAgICAg
Ly8gY2FyZSBzbyBtdWNoIGZvciB0aGVzZSBub24tc3RhbmRhcmQgVVJMcykuCi0gICAgICAgICAg
ICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKLSAgICAgICAgICAg
ICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGFyc2VkLnNjaGVtZS5l
bmQoKSArIDEsIHNwZWNMZW5ndGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
Tm8gc2NoZW1lIGZvdW5kLCBqdXN0IHBhdGguCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJl
c2V0KCk7Ci0gICAgICAgICAgICBwYXJzZWQucGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGJlZ2luLCBzcGVjTGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IHBhcnNlTWFpbHRvVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3Ro
LCBVUkxTZWdtZW50cyYgcGFyc2VkKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCBBU1NF
UlQoc3BlY0xlbmd0aCA+PSAwKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG5vbi1wYXRoIGFuZCBu
b24tc2NoZW1lIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9mIHRoZSB3YXksIHdlCi0gICAgICAgIC8v
IG5ldmVyIHVzZSB0aGVtLgotICAgICAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKLSAgICAg
ICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5ob3N0LnJlc2V0KCk7
Ci0gICAgICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5mcmFnbWVudC5y
ZXNldCgpOwotICAgICAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlzOyBy
ZXNldCBmb3IgY29udmVuaWVuY2UuCi0KLSAgICAgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWls
aW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICBpbnQgYmVnaW4gPSAw
OwotICAgICAgICB0cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoKTsKLQotICAgICAgICAv
LyBIYW5kbGUgZW1wdHkgc3BlY3Mgb3Igb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNl
IG9yIGNvbnRyb2wKLSAgICAgICAgLy8gY2hhcnMuCi0gICAgICAgIGlmIChiZWdpbiA9PSBzcGVj
TGVuZ3RoKSB7Ci0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50IHBhdGhCZWdpbiA9IC0xOwotICAgICAgICBpbnQgcGF0aEVuZCA9IC0xOwot
Ci0gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVy
eXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbwotICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgaXMgbm8gc2NoZW1lLgotICAgICAgICBpZiAoZXh0cmFjdFNjaGVtZSgmc3BlY1ti
ZWdpbl0sIHNwZWNMZW5ndGggLSBiZWdpbiwgcGFyc2VkLnNjaGVtZSkpIHsKLSAgICAgICAgICAg
IC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZlIGV4dHJhY3RTY2hlbWUgYSBzdWJz
dHJpbmcuCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUu
YmVnaW4oKSArIGJlZ2luKTsKLQotICAgICAgICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkg
IT0gc3BlY0xlbmd0aCAtIDEpIHsKLSAgICAgICAgICAgICAgICBwYXRoQmVnaW4gPSBwYXJzZWQu
c2NoZW1lLmVuZCgpICsgMTsKLSAgICAgICAgICAgICAgICBwYXRoRW5kID0gc3BlY0xlbmd0aDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIHNjaGVt
ZSBmb3VuZCwganVzdCBwYXRoLgotICAgICAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwot
ICAgICAgICAgICAgcGF0aEJlZ2luID0gYmVnaW47Ci0gICAgICAgICAgICBwYXRoRW5kID0gc3Bl
Y0xlbmd0aDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNwbGl0IFtwYXRoQmVnaW4sIHBhdGhF
bmQpIGludG8gYSBwYXRoICsgcXVlcnkuCi0gICAgICAgIGZvciAoaW50IGkgPSBwYXRoQmVnaW47
IGkgPCBwYXRoRW5kOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzcGVjW2ldID09ICc/Jykgewot
ICAgICAgICAgICAgICAgIHBhcnNlZC5xdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkg
KyAxLCBwYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBwYXRoRW5kID0gaTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZvciBj
b21wYXRpYmlsaXR5IHdpdGggdGhlIHN0YW5kYXJkIFVSTCBwYXJzZXIsIHRyZWF0IG5vIHBhdGgg
YXMKLSAgICAgICAgLy8gLTEsIHJhdGhlciB0aGFuIGhhdmluZyBhIGxlbmd0aCBvZiAwCi0gICAg
ICAgIGlmIChwYXRoQmVnaW4gPT0gcGF0aEVuZCkKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoLnJl
c2V0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UocGF0aEJlZ2luLCBwYXRoRW5kKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
aW50IHBhcnNlUG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIGNvbXBvbmVudCkKLSAgICB7Ci0gICAgICAgIC8vIEVhc3kgc3VjY2VzcyBjYXNlIHdoZW4g
dGhlcmUgaXMgbm8gcG9ydC4KLSAgICAgICAgY29uc3QgaW50IG1heERpZ2l0cyA9IDU7Ci0gICAg
ICAgIGlmIChjb21wb25lbnQuaXNFbXB0eU9ySW52YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJu
IFVuc3BlY2lmaWVkUG9ydDsKLQotICAgICAgICBVUkxDb21wb25lbnQgbm9uWmVyb0RpZ2l0cyhj
b21wb25lbnQuZW5kKCksIDApOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVu
dC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4o
KSArIGldICE9ICcwJykgewotICAgICAgICAgICAgICAgIG5vblplcm9EaWdpdHMgPSBVUkxDb21w
b25lbnQ6OmZyb21SYW5nZShjb21wb25lbnQuYmVnaW4oKSArIGksIGNvbXBvbmVudC5lbmQoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFub25aZXJvRGlnaXRzLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7IC8v
IEFsbCBkaWdpdHMgd2VyZSAwLgotCi0gICAgICAgIGlmIChub25aZXJvRGlnaXRzLmxlbmd0aCgp
ID4gbWF4RGlnaXRzKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQb3J0OwotCi0gICAgICAg
IGludCBwb3J0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub25aZXJvRGlnaXRz
Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBzcGVjW25v
blplcm9EaWdpdHMuYmVnaW4oKSArIGldOwotICAgICAgICAgICAgaWYgKCFpc1BvcnREaWdpdChj
aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQb3J0OwotICAgICAgICAgICAgcG9y
dCAqPSAxMDsKLSAgICAgICAgICAgIHBvcnQgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpIC0gJzAn
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3J0ID4gNjU1MzUpCi0gICAgICAgICAgICByZXR1
cm4gSW52YWxpZFBvcnQ7Ci0gICAgICAgIHJldHVybiBwb3J0OwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGV4dHJhY3RGaWxlTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCYgZmlsZU5hbWUpCi0gICAgewotICAgICAg
ICAvLyBIYW5kbGUgZW1wdHkgcGF0aHM6IHRoZXkgaGF2ZSBubyBmaWxlIG5hbWVzLgotICAgICAg
ICBpZiAocGF0aC5pc0VtcHR5T3JJbnZhbGlkKCkpIHsKLSAgICAgICAgICAgIGZpbGVOYW1lLnJl
c2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZWFy
Y2ggYmFja3dhcmRzIGZvciBhIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBub3JtYWxseSB1bnVzZWQg
ZmllbGQKLSAgICAgICAgLy8gaW4gYSBVUkwgZGVsaW1pdGVkIGJ5IGEgc2VtaWNvbG9uLiBXZSBw
YXJzZSB0aGUgcGFyYW1ldGVyIGFzIHBhcnQgb2YKLSAgICAgICAgLy8gdGhlIHBhdGgsIGJ1dCBo
ZXJlLCB3ZSBkb24ndCB3YW50IHRvIGNvdW50IGl0LiBUaGUgbGFzdCBzZW1pY29sb24gaXMKLSAg
ICAgICAgLy8gdGhlIHBhcmFtZXRlci4KLSAgICAgICAgaW50IGZpbGVFbmQgPSBwYXRoLmVuZCgp
OwotICAgICAgICBmb3IgKGludCBpID0gcGF0aC5lbmQoKSAtIDE7IGkgPiBwYXRoLmJlZ2luKCk7
IC0taSkgewotICAgICAgICAgICAgaWYgKHNwZWNbaV0gPT0gJzsnKSB7Ci0gICAgICAgICAgICAg
ICAgZmlsZUVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgc2VhcmNoIGJhY2t3YXJkcyBmcm9tIHRoZSBmaWxl
bmFtZSBlbmQgdG8gdGhlIHByZXZpb3VzIHNsYXNoCi0gICAgICAgIC8vIHRvIGZpbmQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgZmlsZW5hbWUuCi0gICAgICAgIGZvciAoaW50IGkgPSBmaWxlRW5kIC0g
MTsgaSA+PSBwYXRoLmJlZ2luKCk7IC0taSkgewotICAgICAgICAgICAgaWYgKGlzVVJMU2xhc2go
c3BlY1tpXSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGaWxlIG5hbWUgaXMgZXZlcnl0aGluZyBm
b2xsb3dpbmcgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIGVuZAotICAgICAgICAgICAgICAgIGZpbGVO
YW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGZpbGVFbmQpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5v
IHNsYXNoIGZvdW5kLCB0aGlzIG1lYW5zIHRoZSBpbnB1dCB3YXMgZGVnZW5lcmF0ZSAoZ2VuZXJh
bGx5IHBhdGhzCi0gICAgICAgIC8vIHdpbGwgc3RhcnQgd2l0aCBhIHNsYXNoKS4gTGV0J3MgY2Fs
bCBldmVyeXRoaW5nIHRoZSBmaWxlIG5hbWUuCi0gICAgICAgIGZpbGVOYW1lID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2UocGF0aC5iZWdpbigpLCBmaWxlRW5kKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBleHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBV
UkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxDb21wb25lbnQmIGtleSwgVVJMQ29tcG9uZW50JiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChxdWVyeS5pc0VtcHR5T3JJbnZhbGlkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaW50IHN0YXJ0ID0gcXVlcnkuYmVnaW4oKTsK
LSAgICAgICAgaW50IGN1cnJlbnQgPSBzdGFydDsKLSAgICAgICAgaW50IGVuZCA9IHF1ZXJ5LmVu
ZCgpOwotCi0gICAgICAgIC8vIFdlIGFzc3VtZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBp
cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSAia2V5IgotICAgICAgICAvLyBhbmQgd2Ugc2tpcCB0byB0
aGUgZW5kIG9mIGl0LgotICAgICAgICBrZXkuc2V0QmVnaW4oY3VycmVudCk7Ci0gICAgICAgIHdo
aWxlIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gIT0gJyYnICYmIHNwZWNbY3VycmVu
dF0gIT0gJz0nKQotICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICBrZXkuc2V0TGVuZ3Ro
KGN1cnJlbnQgLSBrZXkuYmVnaW4oKSk7Ci0KLSAgICAgICAgLy8gU2tpcCB0aGUgc2VwYXJhdG9y
IGFmdGVyIHRoZSBrZXkgKGlmIGFueSkuCi0gICAgICAgIGlmIChjdXJyZW50IDwgZW5kICYmIHNw
ZWNbY3VycmVudF0gPT0gJz0nKQotICAgICAgICAgICAgKytjdXJyZW50OwotCi0gICAgICAgIC8v
IEZpbmQgdGhlIHZhbHVlIHBhcnQuCi0gICAgICAgIHZhbHVlLnNldEJlZ2luKGN1cnJlbnQpOwot
ICAgICAgICB3aGlsZSAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcmJykKLSAg
ICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgdmFsdWUuc2V0TGVuZ3RoKGN1cnJlbnQgLSB2
YWx1ZS5iZWdpbigpKTsKLQotICAgICAgICAvLyBGaW5hbGx5IHNraXAgdGhlIG5leHQgc2VwYXJh
dG9yIGlmIGFueQotICAgICAgICBpZiAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdID09
ICcmJykKLSAgICAgICAgICAgICsrY3VycmVudDsKLQotICAgICAgICAvLyBTYXZlIHRoZSBuZXcg
cXVlcnkKLSAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjdXJyZW50LCBl
bmQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLS8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBwcm90ZWN0ZWQgb3IgcHJpdmF0ZS4KLXB1YmxpYzoKLSAgICAvLyBXZSB0cmVhdCBzbGFz
aGVzIGFuZCBiYWNrc2xhc2hlcyB0aGUgc2FtZSBmb3IgSUUgY29tcGF0aWJpbGl0eS4KLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNVUkxTbGFzaChDaGFyYWN0ZXJUeXBlIGNoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNoID09ICcvJyB8fCBjaCA9PSAnXFwnOwotICAgIH0KLQotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJpbSB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBVUkwg
YmVjYXVzZSBpdCBpcwotICAgIC8vIGEgc3BhY2Ugb3IgYSBjb250cm9sIGNoYXJhY3Rlci4KLSAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVHJpbUZyb21VUkwoQ2hhcmFjdGVyVHlwZSBjaCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjaCA8PSAnICc7Ci0gICAgfQotCi0gICAgLy8gR2l2ZW4g
YW4gYWxyZWFkeS1pbml0aWFsaXplZCBiZWdpbiBpbmRleCBhbmQgZW5kIGluZGV4ICh0aGUgaW5k
ZXggYWZ0ZXIKLSAgICAvLyB0aGUgbGFzdCBDaGFyYWN0ZXJUeXBlIGluIHNwZWMpLCB0aGlzIHNo
cmlua3MgdGhlIHJhbmdlIHRvIGVsaW1pbmF0ZQotICAgIC8vICJzaG91bGQtYmUtdHJpbW1lZCIg
Y2hhcmFjdGVycy4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgdHJpbVVSTChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBpbnQmIGJlZ2luLCBpbnQmIGVuZCkKLSAgICB7Ci0gICAgICAgIC8vIFN0
cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICB3
aGlsZSAoYmVnaW4gPCBlbmQgJiYgc2hvdWxkVHJpbUZyb21VUkwoc3BlY1tiZWdpbl0pKQotICAg
ICAgICAgICAgKytiZWdpbjsKLQotICAgICAgICAvLyBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNl
IGFuZCBjb250cm9sIGNoYXJhY3RlcnMuIFdlIG5lZWQgdGhlID5pCi0gICAgICAgIC8vIHRlc3Qg
Zm9yIHdoZW4gdGhlIGlucHV0IHN0cmluZyBpcyBhbGwgYmxhbmtzOyB3ZSBkb24ndCB3YW50IHRv
IGJhY2sKLSAgICAgICAgLy8gcGFzdCB0aGUgaW5wdXQuCi0gICAgICAgIHdoaWxlIChlbmQgPiBi
ZWdpbiAmJiBzaG91bGRUcmltRnJvbVVSTChzcGVjW2VuZCAtIDFdKSkKLSAgICAgICAgICAgIC0t
ZW5kOwotICAgIH0KLQotICAgIC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNs
YXNoZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG9mZnNldAotICAgIC8vIGluIHRoZSBnaXZlbiBz
dHJpbmcgb2YgdGhlIGdpdmVuIGxlbmd0aC4KLSAgICBzdGF0aWMgaW5saW5lIGludCBjb25zZWN1
dGl2ZVNsYXNoZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSAqc3RyaW5nLCBpbnQgYmVnaW5PZmZzZXQs
IGludCBzdHJpbmdMZW5ndGgpCi0gICAgewotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAg
ICB3aGlsZSAoYmVnaW5PZmZzZXQgKyBjb3VudCA8IHN0cmluZ0xlbmd0aCAmJiBpc1VSTFNsYXNo
KHN0cmluZ1tiZWdpbk9mZnNldCArIGNvdW50XSkpCi0gICAgICAgICAgICArK2NvdW50OwotICAg
ICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFVSTFBhcnNlciBj
YW5ub3QgYmUgY29uc3RydWN0ZWQuCi0gICAgVVJMUGFyc2VyKCk7Ci0KLSAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBhIHZhbGlkIGRpZ2l0IHRvIHVzZSBpbiBh
IHBvcnQuCi0gICAgc3RhdGljIGlubGluZSBib29sIGlzUG9ydERpZ2l0KENoYXJhY3RlclR5cGUg
Y2gpCi0gICAgewotICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JzsKLSAgICB9
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIG5leHQgYXV0aG9yaXR5IHRlcm1p
bmF0b3IgaW4gdGhlIGlucHV0IHN0YXJ0aW5nCi0gICAgLy8gZnJvbSBzdGFydE9mZnNldC4gSWYg
bm8gdGVybWluYXRvciBpcyBmb3VuZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVxdWFsCi0g
ICAgLy8gdG8gc3BlY0xlbmd0aC4KLSAgICBzdGF0aWMgaW50IG5leHRBdXRob3JpdHlUZXJtaW5h
dG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9mZnNldCwgaW50IHNwZWNM
ZW5ndGgpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gc3RhcnRPZmZzZXQ7IGkgPCBzcGVj
TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpc1Bvc3NpYmxlQXV0aG9yaXR5VGVybWlu
YXRvcihzcGVjW2ldKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gc3BlY0xlbmd0aDsgLy8gTm90IGZvdW5kLgotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIHBhcnNlVXNlckluZm8oY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiB1c2VyLCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBVUkxDb21wb25lbnQmIHBh
c3N3b3JkKQotICAgIHsKLSAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHVz
ZXIgc2VjdGlvbiwgd2hpY2ggc2VwYXJhdGVzIHRoZQotICAgICAgICAvLyB1c2VybmFtZSBhbmQg
cGFzc3dvcmQuCi0gICAgICAgIGludCBjb2xvbk9mZnNldCA9IDA7Ci0gICAgICAgIHdoaWxlIChj
b2xvbk9mZnNldCA8IHVzZXIubGVuZ3RoKCkgJiYgc3BlY1t1c2VyLmJlZ2luKCkgKyBjb2xvbk9m
ZnNldF0gIT0gJzonKQotICAgICAgICAgICAgKytjb2xvbk9mZnNldDsKLQotICAgICAgICBpZiAo
Y29sb25PZmZzZXQgPCB1c2VyLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBzZXBh
cmF0b3I6IDx1c2VybmFtZT46PHBhc3N3b3JkPgotICAgICAgICAgICAgdXNlcm5hbWUgPSBVUkxD
b21wb25lbnQodXNlci5iZWdpbigpLCBjb2xvbk9mZnNldCk7Ci0gICAgICAgICAgICBwYXNzd29y
ZCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHVzZXIuYmVnaW4oKSArIGNvbG9uT2Zmc2V0ICsg
MSwgdXNlci5iZWdpbigpICsgdXNlci5sZW5ndGgoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBObyBzZXBhcmF0b3IsIHRyZWF0IGV2ZXJ5dGhpbmcgYXMgdGhlIHVzZXJuYW1l
Ci0gICAgICAgICAgICB1c2VybmFtZSA9IHVzZXI7Ci0gICAgICAgICAgICBwYXNzd29yZCA9IFVS
TENvbXBvbmVudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcGFyc2VT
ZXJ2ZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
c2VydmVySW5mbywgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQmIHBvcnQpCi0gICAg
ewotICAgICAgICBpZiAoIXNlcnZlckluZm8ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8vIE5v
IHNlcnZlciBpbmZvLCBob3N0IG5hbWUgaXMgZW1wdHkuCi0gICAgICAgICAgICBob3N0LnJlc2V0
KCk7Ci0gICAgICAgICAgICBwb3J0LnJlc2V0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgaG9zdCBzdGFydHMgd2l0aCBhIGxlZnQtYnJhY2tl
dCwgYXNzdW1lIHRoZSBlbnRpcmUgaG9zdCBpcyBhbgotICAgICAgICAvLyBJUHY2IGxpdGVyYWwu
IE90aGVyd2lzZSwgYXNzdW1lIG5vbmUgb2YgdGhlIGhvc3QgaXMgYW4gSVB2NiBsaXRlcmFsLgot
ICAgICAgICAvLyBUaGlzIGFzc3VtcHRpb24gd2lsbCBiZSBvdmVycmlkZGVuIGlmIHdlIGZpbmQg
YSByaWdodC1icmFja2V0LgotICAgICAgICAvLwotICAgICAgICAvLyBPdXIgSVB2NiBhZGRyZXNz
IGNhbm9uaWNhbGl6YXRpb24gY29kZSByZXF1aXJlcyBib3RoIGJyYWNrZXRzIHRvCi0gICAgICAg
IC8vIGV4aXN0LCBidXQgdGhlIGFiaWxpdHkgdG8gbG9jYXRlIGFuIGluY29tcGxldGUgYWRkcmVz
cyBjYW4gc3RpbGwgYmUKLSAgICAgICAgLy8gdXNlZnVsLgotICAgICAgICBpbnQgaXB2NlRlcm1p
bmF0b3IgPSBzcGVjW3NlcnZlckluZm8uYmVnaW4oKV0gPT0gJ1snID8gc2VydmVySW5mby5lbmQo
KSA6IC0xOwotICAgICAgICBpbnQgY29sb24gPSAtMTsKLQotICAgICAgICAvLyBGaW5kIHRoZSBs
YXN0IHJpZ2h0LWJyYWNrZXQsIGFuZCB0aGUgbGFzdCBjb2xvbi4KLSAgICAgICAgZm9yIChpbnQg
aSA9IHNlcnZlckluZm8uYmVnaW4oKTsgaSA8IHNlcnZlckluZm8uZW5kKCk7IGkrKykgewotICAg
ICAgICAgICAgc3dpdGNoIChzcGVjW2ldKSB7Ci0gICAgICAgICAgICBjYXNlICddJzoKLSAgICAg
ICAgICAgICAgICBpcHY2VGVybWluYXRvciA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgICAgICBjb2xvbiA9IGk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbG9uID4gaXB2
NlRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIGEgcG9ydCBudW1iZXI6IDxob3N0
bmFtZT46PHBvcnQ+Ci0gICAgICAgICAgICBob3N0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uo
c2VydmVySW5mby5iZWdpbigpLCBjb2xvbik7Ci0gICAgICAgICAgICBpZiAoIWhvc3QubGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgaG9zdC5yZXNldCgpOwotICAgICAgICAgICAgcG9ydCA9IFVS
TENvbXBvbmVudDo6ZnJvbVJhbmdlKGNvbG9uICsgMSwgc2VydmVySW5mby5lbmQoKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyBwb3J0OiA8aG9zdG5hbWU+Ci0gICAgICAg
ICAgICBob3N0ID0gc2VydmVySW5mbzsKLSAgICAgICAgICAgIHBvcnQucmVzZXQoKTsKLSAgICAg
ICAgfQotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdU
RlVSTCkKLQotI2VuZGlmIC8vIFVSTFBhcnNlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTFF1ZXJ5Q2Fub25pY2FsaXplci5oIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxRdWVyeUNhbm9uaWNhbGl6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDY3YzQ5N2ZkMjRmZjQ0ZGQ0ZTNjNDBmMjM3NjBjOGU0MzJiODZkOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8v
IENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSNpZm5kZWYgVVJMUXVl
cnlDYW5vbmljYWxpemVyX2gKLSNkZWZpbmUgVVJMUXVlcnlDYW5vbmljYWxpemVyX2gKLQotI2lm
IFVTRShXVEZVUkwpCi0KLSNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKLSNpbmNsdWRlICJVUkxC
dWZmZXIuaCIKLSNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5oIgotI2luY2x1ZGUgIlVSTENv
bXBvbmVudC5oIgotI2luY2x1ZGUgIlVSTEVzY2FwZS5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgSW5DaGFyLCB0eXBlbmFtZSBPdXRDaGFyLCB2b2lkIGNvbnZlcnRD
aGFyc2V0KGNvbnN0IEluQ2hhciosIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYpPgotY2xh
c3MgVVJMUXVlcnlDYW5vbmljYWxpemVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBjYW5v
bmljYWxpemUoY29uc3QgSW5DaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBV
UkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlciwgVVJMQ29tcG9uZW50JiByZXN1bHRRdWVyeSkKLSAg
ICB7Ci0gICAgICAgIGlmIChxdWVyeS5sZW5ndGgoKSA8IDApIHsKLSAgICAgICAgICAgIHJlc3Vs
dFF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBidWZmZXItPmFwcGVuZCgnPycpOwotICAgICAgICByZXN1bHRRdWVyeS5zZXRC
ZWdpbihidWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgY29udmVydFRvUXVlcnlFbmNvZGluZyhz
cGVjLCBxdWVyeSwgYnVmZmVyKTsKLSAgICAgICAgcmVzdWx0UXVlcnkuc2V0TGVuZ3RoKGJ1ZmZl
ci0+bGVuZ3RoKCkgLSByZXN1bHRRdWVyeS5iZWdpbigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgaXNBbGxBU0NJSShjb25zdCBJbkNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgcXVlcnkpCi0gICAgewotICAgICAgICBpbnQgZW5kID0gcXVlcnkuZW5kKCk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSBxdWVyeS5iZWdpbigpOyBpIDwgZW5kOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3BlY1tpXSkgPj0gMHg4MCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHN0YXRpYyBib29sIGlzUmF3OEJpdChjb25z
dCBJbkNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSBzb3VyY2U7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSAm
IDB4RkYgIT0gc291cmNlW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZyhjb25zdCBJbkNoYXIqIHNvdXJjZSwgaW50IGxl
bmd0aCwgVVJMQnVmZmVyPE91dENoYXI+KiBidWZmZXIpCi0gICAgewotICAgICAgICBBU1NFUlQo
aXNSYXc4Qml0KHNvdXJjZSwgbGVuZ3RoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzUXVl
cnlDaGFyKHNvdXJjZVtpXSkpCi0gICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJh
Y3RlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pLCBidWZmZXIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci0+YXBwZW5kKHN0YXRpY19jYXN0
PGNoYXI+KHNvdXJjZVtpXSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
Y29udmVydFRvUXVlcnlFbmNvZGluZyhjb25zdCBJbkNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcXVlcnksIFVSTEJ1ZmZlcjxPdXRDaGFyPiYgYnVmZmVyKQotICAgIHsKLSAgICAgICAg
aWYgKGlzQWxsQVNDSUkoc3BlYywgcXVlcnkpKSB7Ci0gICAgICAgICAgICBhcHBlbmRSYXc4Qml0
UXVlcnlTdHJpbmcoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBidWZmZXIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmF3VVJMQnVmZmVy
PGNoYXIsIDEwMjQ+IGNvbnZlcnRlZFF1ZXJ5OwotICAgICAgICBjb252ZXJ0Q2hhcnNldChzcGVj
LCBxdWVyeSwgY29udmVydGVkUXVlcnkpOwotICAgICAgICBhcHBlbmRSYXc4Qml0UXVlcnlTdHJp
bmcoY29udmVydGVkUXVlcnkuZGF0YSgpLCBjb252ZXJ0ZWRRdWVyeS5sZW5ndGgoKSwgYnVmZmVy
KTsKLSAgICB9Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuY3BwIGIvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHAKaW5kZXggMTU4ZTVkOWQ0OGNlY2I2MjU1
MDYzNzgzMDE1NGM5Mjc1ZDk1MGY4Mi4uOGQ5NzNjYzJhNWJiMGYwOTJlYmFkZDQyNmQ0ZjZhOTcz
ODFmZDE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHAKQEAgLTEzLDcg
KzEzLDcgQEAKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdO
VQogICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAq
CiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSBW
ZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1s
CiAgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBM
IG9yIHRoZSBHUEwgYXJlCi0gKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgogICogdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bwog
ICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8gdXNlIHlvdXIKICAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRp
Y2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTFNlZ21lbnRzLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmgKaW5k
ZXggOWYxNzIyOGQ2YzA2YjBkNWNkMjAxMDYzMjliM2FmZDI4YTQwOWFkOS4uMDM4NWY4MWRkOGMy
MGQ5OTI4ZDU5ODAyYzUyYWNmNDBlMjlmMTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxTZWdtZW50cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2Vn
bWVudHMuaApAQCAtMzEsMTEgKzMxLDE1IEBACiAjZGVmaW5lIFVSTFNlZ21lbnRzX2gKIAogI2lu
Y2x1ZGUgIlVSTENvbXBvbmVudC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNFKFdURlVSTCkKIAogbmFtZXNwYWNlIFdURiB7
CiAKK2NsYXNzIFVSTFNlZ21lbnRzOworCiAvLyBBIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBp
ZGVudGlmaWVkIHBhcnRzIG9mIGFuIGlucHV0IFVSTC4gVGhpcyBzdHJ1Y3R1cmUKIC8vIGRvZXMg
Tk9UIHN0b3JlIHRoZSBVUkwgaXRzZWxmLiBUaGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBzdG9yZSB0
aGUgVVJMIHRleHQKIC8vIGFuZCBpdHMgY29ycmVzcG9uZGluZyBQYXJzZWQgc3RydWN0dXJlIHNl
cGFyYXRlbHkuCkBAIC01OSw2ICs2MywyNiBAQCBwdWJsaWM6CiAKICAgICBVUkxTZWdtZW50cygp
IHsgfQogCisgICAgVVJMU2VnbWVudHMoY29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkK
KyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJTZWdtZW50OworICAgIH0KKworICAgIFVSTFNl
Z21lbnRzJiBvcGVyYXRvcj0oY29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkKKyAgICB7
CisgICAgICAgIHNjaGVtZSA9IG90aGVyU2VnbWVudC5zY2hlbWU7CisgICAgICAgIHVzZXJuYW1l
ID0gb3RoZXJTZWdtZW50LnVzZXJuYW1lOworICAgICAgICBwYXNzd29yZCA9IG90aGVyU2VnbWVu
dC5wYXNzd29yZDsKKyAgICAgICAgaG9zdCA9IG90aGVyU2VnbWVudC5ob3N0OworICAgICAgICBw
b3J0ID0gb3RoZXJTZWdtZW50LnBvcnQ7CisgICAgICAgIHBhdGggPSBvdGhlclNlZ21lbnQucGF0
aDsKKyAgICAgICAgcXVlcnkgPSBvdGhlclNlZ21lbnQucXVlcnk7CisgICAgICAgIGZyYWdtZW50
ID0gb3RoZXJTZWdtZW50LmZyYWdtZW50OworICAgICAgICBpZiAob3RoZXJTZWdtZW50Lm1faW5u
ZXJVUkxTZWdtZW50cykKKyAgICAgICAgICAgIG1faW5uZXJVUkxTZWdtZW50cyA9IGFkb3B0UHRy
KG5ldyBVUkxTZWdtZW50cygqb3RoZXJTZWdtZW50Lm1faW5uZXJVUkxTZWdtZW50cykpOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIC8vIFJldHVybnMgdGhlIGxlbmd0
aCBvZiB0aGUgVVJMICh0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbXBvbmVudCkuCiAgICAgLy8KICAg
ICAvLyBOb3RlIHRoYXQgZm9yIHNvbWUgaW52YWxpZCwgbm9uLWNhbm9uaWNhbCBVUkxzLCB0aGlz
IG1heSBub3QgYmUgdGhlIGxlbmd0aApAQCAtMTA1LDYgKzEyOSwxNiBAQCBwdWJsaWM6CiAgICAg
VVJMQ29tcG9uZW50IHBhdGg7CiAgICAgVVJMQ29tcG9uZW50IHF1ZXJ5OwogICAgIFVSTENvbXBv
bmVudCBmcmFnbWVudDsKKworICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgZGFtbiB1Z2x5IEFQSSBh
bmQgaXMgYmFzaWNhbGx5IHVudGVzdGVkLgorICAgIGNvbnN0IFVSTFNlZ21lbnRzKiBpbm5lclVS
TFNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lclVSTFNlZ21lbnRzLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRJbm5lclVSTFNlZ21lbnRzKGNvbnN0IFVSTFNlZ21lbnRzJiB1cmxTZWdtZW50
cykgeyBtX2lubmVyVVJMU2VnbWVudHMgPSBhZG9wdFB0cihuZXcgVVJMU2VnbWVudHModXJsU2Vn
bWVudHMpKTsgfQorICAgIHZvaWQgY2xlYXJJbm5lclVSTFNlZ21lbnRzKCkgeyByZXR1cm4gbV9p
bm5lclVSTFNlZ21lbnRzLmNsZWFyKCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGUgRmlsZXN5
c3RlbSBBUEkgZGVzY3JpYmUgYSBVUkwgZm9ybWF0IHdpdGggYW4gaW50ZXJuYWwgVVJMLiBFLmcu
OiBmaWxlc3lzdGVtOmh0dHA6Ly93d3cuYXBwbGUuY29tLworICAgIC8vIFRoZSBpbm5lciBVUkwg
c2VnbWVudCBjb250YWlucyB0aGUgcGFyc2VkIGlubmVyIFVSTCBvZiBhIGZpbGVzeXN0ZW06IFVS
TC4KKyAgICBPd25QdHI8VVJMU2VnbWVudHM+IG1faW5uZXJVUkxTZWdtZW50czsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxV
dGlsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2QyMzllNjYxZDNhYTgxYjk4ZTQzMTUyYTNiOGU0NDQ0NTJkMjhjYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAKQEAgLTAsMCArMSw1MTIgQEAK
Ky8vIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlVSTFV0aWwuaCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxGaWxlLmgiCisjaW5jbHVk
ZSAiVVJMVXRpbEludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RG
IHsKKworbmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7CisKK2NvbnN0IGNoYXIga0ZpbGVTY2hlbWVb
XSA9ICJmaWxlIjsKK2NvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXSA9ICJmaWxlc3lzdGVt
IjsKK2NvbnN0IGNoYXIga01haWx0b1NjaGVtZVtdID0gIm1haWx0byI7CisKK25hbWVzcGFjZSB7
CisKKy8vIEFTQ0lJLXNwZWNpZmljIHRvbG93ZXIuIFRoZSBzdGFuZGFyZCBsaWJyYXJ5J3MgdG9s
b3dlciBpcyBsb2NhbGUgc2Vuc2l0aXZlLAorLy8gc28gd2UgZG9uJ3Qgd2FudCB0byB1c2UgaXQg
aGVyZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgQ2hhcmFjdGVy
VHlwZSBUb0xvd2VyQVNDSUkoQ2hhcmFjdGVyVHlwZSBjKQoreworICAgIHJldHVybiAoYyA+PSAn
QScgJiYgYyA8PSAnWicpID8gKGMgKyAoJ2EnIC0gJ0EnKSkgOiBjOworfQorCisvLyBCYWNrZW5k
IGZvciBMb3dlckNhc2VFcXVhbHNBU0NJSS4KK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXI+Citpbmxp
bmUgYm9vbCBEb0xvd2VyQ2FzZUVxdWFsc0FTQ0lJKEl0ZXIgYUJlZ2luLCBJdGVyIGFFbmQsIGNv
bnN0IGNoYXIqIGIpCit7CisgICAgZm9yIChJdGVyIGl0ID0gYUJlZ2luOyBpdCAhPSBhRW5kOyAr
K2l0LCArK2IpIHsKKyAgICAgICAgaWYgKCEqYiB8fCBUb0xvd2VyQVNDSUkoKml0KSAhPSAqYikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuICEoKmIpOworfQor
Citjb25zdCBpbnQga051bVN0YW5kYXJkVVJMU2NoZW1lcyA9IDg7Citjb25zdCBjaGFyKiBrU3Rh
bmRhcmRVUkxTY2hlbWVzW2tOdW1TdGFuZGFyZFVSTFNjaGVtZXNdID0geworICAgICJodHRwIiwK
KyAgICAiaHR0cHMiLAorICAgIGtGaWxlU2NoZW1lLCAvLyBZZXMsIGZpbGUgdXJscyBjYW4gaGF2
ZSBhIGhvc3RuYW1lIQorICAgICJmdHAiLAorICAgICJnb3BoZXIiLAorICAgICJ3cyIsIC8vIFdl
YlNvY2tldC4KKyAgICAid3NzIiwgLy8gV2ViU29ja2V0IHNlY3VyZS4KKyAgICBrRmlsZVN5c3Rl
bVNjaGVtZQorfTsKKworLy8gR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcmFuZ2UgaW5zaWRlIHRoZSBz
dHJpbmcsIGNvbXBhcmVzIGl0IHRvIHRoZSBnaXZlbgorLy8gbG93ZXItY2FzZSB8Y29tcGFyZVRv
fCBidWZmZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGJvb2wg
RG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgY29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCit7CisgICAg
aWYgKCFjb21wb25lbnQuaXNOb25FbXB0eSgpKQorICAgICAgICByZXR1cm4gIWNvbXBhcmVUb1sw
XTsgLy8gV2hlbiBjb21wb25lbnQgaXMgZW1wdHksIG1hdGNoIGVtcHR5IHNjaGVtZS4KKyAgICBy
ZXR1cm4gTG93ZXJDYXNlRXF1YWxzQVNDSUkoJnNwZWNbY29tcG9uZW50LmJlZ2luKCldLCAmc3Bl
Y1tjb21wb25lbnQuZW5kKCldLCBjb21wYXJlVG8pOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGdpdmVuIHNjaGVtZSBpZGVudGlmaWVkIGJ5IHxzY2hlbWV8IHdpdGhpbiB8c3BlY3wgaXMg
b25lCisvLyBvZiB0aGUgcmVnaXN0ZXJlZCAic3RhbmRhcmQiIHNjaGVtZXMuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBkb0lzU3RhbmRhcmQoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUpCit7CisgICAgaWYgKCFzY2hl
bWUuaXNOb25FbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEVtcHR5IG9yIGludmFs
aWQgc2NoZW1lcyBhcmUgbm9uLXN0YW5kYXJkLgorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrTnVtU3RhbmRhcmRVUkxTY2hlbWVzOyArK2kpIHsKKyAgICAgICAgaWYgKExvd2VyQ2FzZUVx
dWFsc0FTQ0lJKCZzcGVjW3NjaGVtZS5iZWdpbigpXSwgJnNwZWNbc2NoZW1lLmVuZCgpXSwga1N0
YW5kYXJkVVJMU2NoZW1lc1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Ym9vbCBEb0ZpbmRBbmRDb21wYXJlU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0ciwgaW50
IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVt
ZSkKK3sKKyAgICAvLyBCZWZvcmUgZXh0cmFjdGluZyBzY2hlbWUsIGNhbm9uaWNhbGl6ZSB0aGUg
VVJMIHRvIHJlbW92ZSBhbnkgd2hpdGVzcGFjZS4KKyAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGNh
bm9uaWNhbGl6YXRpb24gZG9uZSBpbiBEb0Nhbm9uaWNhbGl6ZSBmdW5jdGlvbi4KKyAgICBSYXdV
UkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gd2hpdGVzcGFjZUJ1ZmZlcjsKKyAgICBpbnQgc3BlY0xl
bmd0aDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjID0gVVJMQ2Fub25pY2FsaXplcjo6
cmVtb3ZlVVJMV2hpdGVzcGFjZShzdHIsIHN0ckxlbmd0aCwgd2hpdGVzcGFjZUJ1ZmZlciwgJnNw
ZWNMZW5ndGgpOworCisgICAgVVJMQ29tcG9uZW50IG91clNjaGVtZTsKKyAgICBpZiAoIVVSTFBh
cnNlcjo6RXh0cmFjdFNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCAmb3VyU2NoZW1lKSkgeworICAg
ICAgICAvLyBObyBzY2hlbWUuCisgICAgICAgIGlmIChmb3VuZFNjaGVtZSkKKyAgICAgICAgICAg
ICpmb3VuZFNjaGVtZSA9IFVSTENvbXBvbmVudCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChmb3VuZFNjaGVtZSkKKyAgICAgICAgKmZvdW5kU2NoZW1lID0gb3VyU2No
ZW1lOworICAgIHJldHVybiBEb0NvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgb3VyU2NoZW1l
LCBjb21wYXJlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wg
RG9DYW5vbmljYWxpemUoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5TcGVjLCBpbnQgaW5TcGVjTGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVy
dGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91cHV0UGFyc2Vk
KQoreworICAgIC8vIFJlbW92ZSBhbnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhl
IHJlbGF0aXZlIFVSTCwgcG9zc2libHkKKyAgICAvLyBjb3B5aW5nIHRvIHRoZSBuZXcgYnVmZmVy
LgorICAgIFJhd1VSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNlQnVmZmVyOworICAg
IGludCBzcGVjTGVuZ3RoOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMgPSBVUkxDYW5v
bmljYWxpemVyOjpyZW1vdmVVUkxXaGl0ZXNwYWNlKGluU3BlYywgaW5TcGVjTGVuZ3RoLCB3aGl0
ZXNwYWNlQnVmZmVyLCAmc3BlY0xlbmd0aCk7CisKKyAgICBVUkxTZWdtZW50cyBwYXJzZWRJbnB1
dDsKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIEZvciBXaW5kb3dzLCB3ZSBhbGxvdyB0aGluZ3Mg
dGhhdCBsb29rIGxpa2UgYWJzb2x1dGUgV2luZG93cyBwYXRocyB0byBiZQorICAgIC8vIGZpeGVk
IHVwIG1hZ2ljYWxseSB0byBmaWxlIFVSTHMuIFRoaXMgaXMgZG9uZSBmb3IgSUUgY29tcGF0YWJp
bGl0eS4gRm9yCisgICAgLy8gZXhhbXBsZSwgdGhpcyB3aWxsIGNoYW5nZSAiYzovZm9vIiBpbnRv
IGEgZmlsZSBVUkwgcmF0aGVyIHRoYW4gdHJlYXRpbmcKKyAgICAvLyBpdCBhcyBhIFVSTCB3aXRo
IHRoZSBwcm90b2NvbCAiYyIuIEl0IGFsc28gd29ya3MgZm9yIFVOQyAoIlxcZm9vXGJhci50eHQi
KS4KKyAgICAvLyBUaGVyZSBpcyBzaW1pbGFyIGxvZ2ljIGluIFVSTENhbm9uaWNhbGl6ZXJfcmVs
YXRpdmUuY2MgZm9yCisgICAgLy8KKyAgICAvLyBGb3IgTWF4ICYgVW5peCwgd2UgZG9uJ3QgZG8g
dGhpcyAodGhlIGVxdWl2YWxlbnQgd291bGQgYmUgIi9mb28vYmFyIiB3aGljaAorICAgIC8vIGhh
cyBubyBtZWFuaW5nIGFzIGFuIGFic29sdXRlIHBhdGggbmFtZS4gVGhpcyBpcyBiZWNhdXNlIGJy
b3dzZXJzIG9uIE1hYworICAgIC8vICYgVW5peCBkb24ndCBnZW5lcmFsbHkgZG8gdGhpcywgc28g
dGhlcmUgaXMgbm8gY29tcGF0aWJpbGl0eSByZWFzb24gZm9yCisgICAgLy8gZG9pbmcgc28uCisg
ICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luVU5DUGF0aChzcGVjLCAwLCBzcGVjTGVuZ3RoLCBm
YWxzZSkKKyAgICAgICAgfHwgVVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNw
ZWMsIDAsIHNwZWNMZW5ndGgpKSB7CisgICAgICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJMKHNw
ZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHJldHVybiBVUkxDYW5vbmlj
YWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZElucHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQsIG91cHV0UGFyc2VkKTsKKyAgICB9CisjZW5kaWYKKworICAg
IFVSTENvbXBvbmVudCBzY2hlbWU7CisgICAgaWYgKCFVUkxQYXJzZXI6OkV4dHJhY3RTY2hlbWUo
c3BlYywgc3BlY0xlbmd0aCwgJnNjaGVtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFRoaXMgaXMgdGhlIHBhcnNlZCB2ZXJzaW9uIG9mIHRoZSBpbnB1dCBVUkwsIHdlIGhhdmUg
dG8gY2Fub25pY2FsaXplIGl0CisgICAgLy8gYmVmb3JlIHN0b3JpbmcgaXQgaW4gb3VyIG9iamVj
dC4KKyAgICBib29sIHN1Y2Nlc3M7CisgICAgaWYgKERvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChz
cGVjLCBzY2hlbWUsIGtGaWxlU2NoZW1lKSkgeworICAgICAgICAvLyBGaWxlIFVSTHMgYXJlIHNw
ZWNpYWwuCisgICAgICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgs
ICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5v
bmljYWxpemVGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZElucHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29u
dmVydGVyLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91cHV0UGFyc2VkKTsKKyAgICB9IGVsc2UgaWYgKERvQ29tcGFyZVNj
aGVtZUNvbXBvbmVudChzcGVjLCBzY2hlbWUsIGtGaWxlU3lzdGVtU2NoZW1lKSkgeworICAgICAg
ICAvLyBGaWxlc3lzdGVtIFVSTHMgYXJlIHNwZWNpYWwuCisgICAgICAgIFVSTFBhcnNlcjo6UGFy
c2VGaWxlU3lzdGVtVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAgICAg
IHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKHNw
ZWMsIHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQsIG91cHV0UGFyc2VkKTsKKworICAgIH0gZWxzZSBpZiAoZG9Jc1N0YW5k
YXJkKHNwZWMsIHNjaGVtZSkpIHsKKyAgICAgICAgLy8gQWxsICJub3JtYWwiIFVSTHMuCisgICAg
ICAgIFVSTFBhcnNlcjo6UGFyc2VTdGFuZGFyZFVSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2Vk
SW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXpl
U3RhbmRhcmRVUkwoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkSW5wdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29u
dmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LCBvdXB1dFBhcnNlZCk7CisKKyAgICB9IGVsc2UgaWYgKERvQ29t
cGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBzY2hlbWUsIGtNYWlsdG9TY2hlbWUpKSB7CisgICAg
ICAgIC8vIE1haWx0byBhcmUgdHJlYXRlZCBsaWtlIGEgc3RhbmRhcmQgdXJsIHdpdGggb25seSBh
IHNjaGVtZSwgcGF0aCwgcXVlcnkKKyAgICAgICAgVVJMUGFyc2VyOjpQYXJzZU1haWx0b1VSTChz
cGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fu
b25pY2FsaXplcjo6Q2Fub25pY2FsaXplTWFpbHRvVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNl
ZElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gIldlaXJkIiBVUkxzIGxpa2UgZGF0YTogYW5kIGphdmFzY3JpcHQ6CisgICAgICAgIFVSTFBh
cnNlcjo6UGFyc2VQYXRoVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAg
ICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVQYXRoVVJMKHNwZWMs
IHBhcnNlZElucHV0LCBvdXRwdXQsICpvdXB1dFBhcnNlZCk7CisgICAgfQorICAgIHJldHVybiBz
dWNjZXNzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBkb1Jl
c29sdmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJh
c2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGlu
UmVsYXRpdmUsIGludCBpblJlbGF0aXZlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBV
UkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMq
IG91cHV0UGFyc2VkKQoreworICAgIC8vIFJlbW92ZSBhbnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBt
aWRkbGUgb2YgdGhlIHJlbGF0aXZlIFVSTCwgcG9zc2libHkKKyAgICAvLyBjb3B5aW5nIHRvIHRo
ZSBuZXcgYnVmZmVyLgorICAgIFJhd1VSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNl
QnVmZmVyOworICAgIGludCByZWxhdGl2ZUxlbmd0aDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiByZWxhdGl2ZSA9IFVSTENhbm9uaWNhbGl6ZXI6OnJlbW92ZVVSTFdoaXRlc3BhY2UoaW5SZWxh
dGl2ZSwgaW5SZWxhdGl2ZUxlbmd0aCwgd2hpdGVzcGFjZUJ1ZmZlciwgJnJlbGF0aXZlTGVuZ3Ro
KTsKKworICAgIC8vIFNlZSBpZiBvdXIgYmFzZSBVUkwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgInN0
YW5kYXJkIi4KKyAgICBib29sIHN0YW5kYXJkQmFzZVNjaGVtZSA9IGJhc2VQYXJzZWQuc2NoZW1l
LmlzTm9uRW1wdHkoKSAmJiBkb0lzU3RhbmRhcmQoYmFzZVNwZWMsIGJhc2VQYXJzZWQuc2NoZW1l
KTsKKworICAgIGJvb2wgaXNSZWxhdGl2ZTsKKyAgICBVUkxDb21wb25lbnQgcmVsYXRpdmVDb21w
b25lbnQ7CisgICAgaWYgKCFVUkxDYW5vbmljYWxpemVyOjppc1JlbGF0aXZlVVJMKGJhc2VTcGVj
LCBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWxhdGl2ZSwgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YW5kYXJkQmFzZVNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmlzUmVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZyZWxhdGl2ZUNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gRXJyb3IgcmVzb2x2aW5nLgorCisgICAgaWYgKGlzUmVsYXRpdmUpIHsKKyAgICAgICAgLy8g
UmVsYXRpdmUsIHJlc29sdmUgYW5kIGNhbm9uaWNhbGl6ZS4KKyAgICAgICAgYm9vbCBmaWxlQmFz
ZVNjaGVtZSA9IGJhc2VQYXJzZWQuc2NoZW1lLmlzTm9uRW1wdHkoKSAmJiBEb0NvbXBhcmVTY2hl
bWVDb21wb25lbnQoYmFzZVNwZWMsIGJhc2VQYXJzZWQuc2NoZW1lLCBrRmlsZVNjaGVtZSk7Cisg
ICAgICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpyZXNvbHZlUmVsYXRpdmVVUkwoYmFzZVNw
ZWMsIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsZUJhc2VTY2hlbWUsIHJlbGF0aXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LCBjaGFy
c2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIE5vdCByZWxh
dGl2ZSwgY2Fub25pY2FsaXplIHRoZSBpbnB1dC4KKyAgICByZXR1cm4gRG9DYW5vbmljYWxpemUo
cmVsYXRpdmUsIHJlbGF0aXZlTGVuZ3RoLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91cHV0
UGFyc2VkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgRG9S
ZXBsYWNlQ29tcG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzcGVjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNl
Z21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZW1lbnRzPENoYXJhY3RlclR5cGU+JiByZXBsYWNlbWVudHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciog
Y2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0
UGFyc2VkKQoreworICAgIC8vIElmIHRoZSBzY2hlbWUgaXMgb3ZlcnJpZGRlbiwganVzdCBkbyBh
IHNpbXBsZSBzdHJpbmcgc3Vic3RpdHV0aW9uIGFuZAorICAgIC8vIHJlcGFyc2UgdGhlIHdob2xl
IHRoaW5nLiBUaGVyZSBhcmUgbG90cyBvZiBlZGdlIGNhc2VzIHRoYXQgd2UgcmVhbGx5IGRvbid0
CisgICAgLy8gd2FudCB0byBkZWFsIHdpdGguIExpa2Ugd2hhdCBoYXBwZW5zIGlmIEkgcmVwbGFj
ZSAiaHR0cDovL2U6ODA4MC9mb28iCisgICAgLy8gd2l0aCBhIGZpbGUuIERvZXMgaXQgYmVjb21l
ICJmaWxlOi8vL0U6LzgwODAvZm9vIiB3aGVyZSB0aGUgcG9ydCBudW1iZXIKKyAgICAvLyBiZWNv
bWVzIHBhcnQgb2YgdGhlIHBhdGg/IFBhcnNpbmcgdGhhdCBzdHJpbmcgYXMgYSBmaWxlIFVSTCBz
YXlzICJ5ZXMiCisgICAgLy8gYnV0IGFsbW9zdCBubyBzYW5lIHJ1bGUgZm9yIGRlYWxpbmcgd2l0
aCB0aGUgY29tcG9uZW50cyBpbmRpdmlkdWFsbHkgd291bGQKKyAgICAvLyBjb21lIHVwIHdpdGgg
dGhhdC4KKyAgICAvLworICAgIC8vIFdoeSBhbGxvdyB0aGVzZSBjcmF6eSBjYXNlcyBhdCBhbGw/
IFByb2dyYW1hdGljYWxseSwgdGhlcmUgaXMgYWxtb3N0IG5vCisgICAgLy8gY2FzZSBmb3IgcmVw
bGFjaW5nIHRoZSBzY2hlbWUuIFRoZSBtb3N0IGNvbW1vbiBjYXNlIGZvciBoaXR0aW5nIHRoaXMg
aXMKKyAgICAvLyBpbiBKUyB3aGVuIGJ1aWxkaW5nIHVwIGEgVVJMIHVzaW5nIHRoZSBsb2NhdGlv
biBvYmplY3QuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgLy8gSlMgY29kZSBleHBlY3RzIHRoZSBz
dHJpbmcgc3Vic3RpdHV0aW9uIGJlaGF2aW9yOgorICAgIC8vICAgaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwOC9XRC1odG1sNS0yMDA4MDYxMC9zdHJ1Y3R1cmVkLmh0bWwjY29tbW9uMworICAgIGlm
IChyZXBsYWNlbWVudHMuSXNTY2hlbWVPdmVycmlkZGVuKCkpIHsKKyAgICAgICAgLy8gQ2Fub25p
Y2FsaXplIHRoZSBuZXcgc2NoZW1lIHNvIGl0IGlzIDgtYml0IGFuZCBjYW4gYmUgY29uY2F0ZW5h
dGVkIHdpdGgKKyAgICAgICAgLy8gdGhlIGV4aXN0aW5nIHNwZWMuCisgICAgICAgIFJhd1VSTEJ1
ZmZlcjxjaGFyLCAxMjg+IHNjaGVtZV9yZXBsYWNlZDsKKyAgICAgICAgVVJMQ29tcG9uZW50IHNj
aGVtZVJlcGxhY2VkUGFyc2VkOworICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxp
emVTY2hlbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlbWVudHMuc291cmNlcygpLnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5jb21wb25lbnRzKCkuc2NoZW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lX3JlcGxhY2Vk
LCAmc2NoZW1lUmVwbGFjZWRQYXJzZWQpOworCisgICAgICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhh
dCB0aGUgaW5wdXQgaXMgY2Fub25pY2FsaXplZCwgd2hpY2ggbWVhbnMgaXQgYWx3YXlzIGhhcwor
ICAgICAgICAvLyBhIGNvbG9uIGFmdGVyIHRoZSBzY2hlbWUgKG9yIHdoZXJlIHRoZSBzY2hlbWUg
d291bGQgYmUpLgorICAgICAgICBpbnQgc3BlY0FmdGVyQ29sb24gPSBwYXJzZWQuc2NoZW1lLmlz
VmFsaWQoKSA/IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxCisgICAgICAgIDogMTsKKyAgICAgICAg
aWYgKHNwZWNMZW5ndGggLSBzcGVjQWZ0ZXJDb2xvbiA+IDApIHsKKyAgICAgICAgICAgIHNjaGVt
ZV9yZXBsYWNlZC5hcHBlbmQoJnNwZWNbc3BlY0FmdGVyQ29sb25dLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGVjTGVuZ3RoIC0gc3BlY0FmdGVyQ29sb24pOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gY29tcGxldGVseSByZS1wYXJzZSB0aGUg
cmVzdWx0aW5nIHN0cmluZyBzaW5jZSBpdHMgbWVhbmluZworICAgICAgICAvLyBtYXkgaGF2ZSBj
aGFuZ2VkIHdpdGggdGhlIGRpZmZlcmVudCBzY2hlbWUuCisgICAgICAgIFJhd1VSTEJ1ZmZlcjxj
aGFyLCAxMjg+IHJlY2Fub25pY2FsaXplZDsKKyAgICAgICAgVVJMU2VnbWVudHMgcmVjYW5vbmlj
YWxpemVkUGFyc2VkOworICAgICAgICBEb0Nhbm9uaWNhbGl6ZShzY2hlbWVfcmVwbGFjZWQuZGF0
YSgpLCBzY2hlbWVfcmVwbGFjZWQubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHJlY2Fub25pY2FsaXplZCwg
JnJlY2Fub25pY2FsaXplZFBhcnNlZCk7CisKKyAgICAgICAgLy8gUmVjdXJzZSB1c2luZyB0aGUg
dmVyc2lvbiB3aXRoIHRoZSBzY2hlbWUgYWxyZWFkeSByZXBsYWNlZC4gVGhpcyB3aWxsIG5vdwor
ICAgICAgICAvLyB1c2UgdGhlIHJlcGxhY2VtZW50IHJ1bGVzIGZvciB0aGUgbmV3IHNjaGVtZS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gV2FybmluZzogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBS
ZXBsYWNlQ29tcG9uZW50cyB3aWxsIHJlLWNoZWNrIGFsbAorICAgICAgICAvLyBjb21wb25lbnRz
IGZvciB2YWxpZGl0eS4gVGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0IGZhaWwgaWYgRG9DYW5vbmlj
YWxpemUKKyAgICAgICAgLy8gZmFpbGVkIGFib3ZlIHNpbmNlIHRoZW9yZXRpY2FsbHkgdGhlIHRo
aW5nIG1ha2luZyBpdCBmYWlsIGNvdWxkIGJlCisgICAgICAgIC8vIGdldHRpbmcgcmVwbGFjZWQg
aGVyZS4gSWYgUmVwbGFjZUNvbXBvbmVudHMgZGlkbid0IHJlLWNoZWNrIGV2ZXJ5dGhpbmcsCisg
ICAgICAgIC8vIHdlIHdvdWxkbid0IGtub3cgaWYgc29tZXRoaW5nICpub3QqIGdldHRpbmcgcmVw
bGFjZWQgaXMgYSBwcm9ibGVtLgorICAgICAgICAvLyBJZiB0aGUgc2NoZW1lLXNwZWNpZmljIHJl
cGxhY2VycyBhcmUgbWFkZSBtb3JlIGludGVsbGlnZW50IHNvIHRoZXkgZG9uJ3QKKyAgICAgICAg
Ly8gcmUtY2hlY2sgZXZlcnl0aGluZywgd2Ugc2hvdWxkIGluc3RlYWQgcmVjYW5vbmljYWxpemUg
dGhlIHdob2xlIHRoaW5nCisgICAgICAgIC8vIGFmdGVyIHRoaXMgY2FsbCB0byBjaGVjayB2YWxp
ZGl0eSAodGhpcyBhc3N1bWVzIHJlcGxhY2luZyB0aGUgc2NoZW1lIGlzCisgICAgICAgIC8vIG11
Y2ggbXVjaCBsZXNzIGNvbW1vbiB0aGFuIG90aGVyIHR5cGVzIG9mIHJlcGxhY2VtZW50cywgbGlr
ZSBjbGVhcmluZyB0aGUKKyAgICAgICAgLy8gcmVmKS4KKyAgICAgICAgVVJMQ2Fub25pY2FsaXpl
cjo6UmVwbGFjZW1lbnRzPENoYXJhY3RlclR5cGU+IHJlcGxhY2VtZW50c05vU2NoZW1lID0gcmVw
bGFjZW1lbnRzOworICAgICAgICByZXBsYWNlbWVudHNOb1NjaGVtZS5TZXRTY2hlbWUoMCwgVVJM
Q29tcG9uZW50KCkpOworICAgICAgICByZXR1cm4gRG9SZXBsYWNlQ29tcG9uZW50cyhyZWNhbm9u
aWNhbGl6ZWQuZGF0YSgpLCByZWNhbm9uaWNhbGl6ZWQubGVuZ3RoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY2Fub25pY2FsaXplZFBhcnNlZCwgcmVwbGFjZW1lbnRz
Tm9TY2hlbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252
ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgdGhlbiB3ZSBrbm93IHRoZSBzY2hlbWUgZG9lc24ndCBuZWVkIHRvIGJlIHJlcGxhY2Vk
LCBzbyBjYW4KKyAgICAvLyBqdXN0IGtleSBvZmYgdGhlIHNjaGVtZSBpbiB0aGUgc3BlYyB0byBr
bm93IGhvdyB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorICAgIGlmIChEb0NvbXBhcmVTY2hlbWVD
b21wb25lbnQoc3BlYywgcGFyc2VkLnNjaGVtZSwga0ZpbGVTY2hlbWUpKSB7CisgICAgICAgIHJl
dHVybiBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlRmlsZVVSTChzcGVjLCBwYXJzZWQsIHJlcGxh
Y2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYg
KERvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBwYXJzZWQuc2NoZW1lLCBrRmlsZVN5c3Rl
bVNjaGVtZSkpIHsKKyAgICAgICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VGaWxl
U3lzdGVtVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0
cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYgKGRvSXNTdGFuZGFyZChzcGVjLCBwYXJz
ZWQuc2NoZW1lKSkgeworICAgICAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVN0
YW5kYXJkVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1
dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYgKERvQ29tcGFyZVNjaGVtZUNvbXBvbmVu
dChzcGVjLCBwYXJzZWQuc2NoZW1lLCBrTWFpbHRvU2NoZW1lKSkgeworICAgICAgICByZXR1cm4g
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZU1haWx0b1VSTChzcGVjLCBwYXJzZWQsIHJlcGxhY2Vt
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIERlZmF1bHQgaXMgYSBwYXRo
IFVSTC4KKyAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVBhdGhVUkwoc3BlYywg
cGFyc2VkLCByZXBsYWNlbWVudHMsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBu
YW1lc3BhY2UKKworYm9vbCBJc1N0YW5kYXJkKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgc2NoZW1lKQoreworICAgIHJldHVybiBkb0lzU3RhbmRhcmQoc3BlYywgc2NoZW1l
KTsKK30KKworYm9vbCBJc1N0YW5kYXJkKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIHNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9Jc1N0YW5kYXJkKHNwZWMsIHNjaGVtZSk7
Cit9CisKK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgY2hhciogc3RyLCBpbnQgc3Ry
TGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKQor
eworICAgIHJldHVybiBEb0ZpbmRBbmRDb21wYXJlU2NoZW1lKHN0ciwgc3RyTGVuZ3RoLCBjb21w
YXJlLCBmb3VuZFNjaGVtZSk7Cit9CisKK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3Qg
VUNoYXIqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ckxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcGFyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSkKK3sKKyAgICByZXR1cm4g
RG9GaW5kQW5kQ29tcGFyZVNjaGVtZShzdHIsIHN0ckxlbmd0aCwgY29tcGFyZSwgZm91bmRTY2hl
bWUpOworfQorCitib29sIENhbm9uaWNhbGl6ZShjb25zdCBjaGFyKiBzcGVjLAorICAgICAgICAg
ICAgICAgICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxp
emVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3VwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIERvQ2Fub25pY2FsaXplKHNwZWMsIHNwZWNM
ZW5ndGgsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQpOworfQorCitib29s
IENhbm9uaWNhbGl6ZShjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgIGludCBz
cGVjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENv
bnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91cHV0UGFyc2Vk
KQoreworICAgIHJldHVybiBEb0Nhbm9uaWNhbGl6ZShzcGVjLCBzcGVjTGVuZ3RoLCBjaGFyc2V0
Q29udmVydGVyLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKworYm9vbCByZXNvbHZlUmVsYXRp
dmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2ZUxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252
ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQoreworICAgIHJldHVybiBk
b1Jlc29sdmVSZWxhdGl2ZShiYXNlU3BlYywgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0aXZlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKwor
Ym9vbCByZXNvbHZlUmVsYXRpdmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21l
bnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0
aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmlj
YWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNl
ZCkKK3sKKyAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmUoYmFzZVNwZWMsIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLCByZWxhdGl2ZUxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBv
dXB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgUmVwbGFjZUNvbXBvbmVudHMoY29uc3QgY2hhciogc3Bl
YywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1l
bnRzLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29u
dmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gRG9SZXBsYWNlQ29tcG9uZW50cyhzcGVjLCBzcGVj
TGVuZ3RoLCBwYXJzZWQsIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK2Jvb2wg
UmVwbGFjZUNvbXBvbmVudHMoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6
ZXI6OlJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0
dXJuIERvUmVwbGFjZUNvbXBvbmVudHMoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkLCByZXBsYWNl
bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwg
b3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCisvLyBGcm9udC1lbmRzIGZvciBMb3dlckNhc2VF
cXVhbHNBU0NJSS4KK2Jvb2wgTG93ZXJDYXNlRXF1YWxzQVNDSUkoY29uc3QgY2hhciogYUJlZ2lu
LCBjb25zdCBjaGFyKiBhRW5kLCBjb25zdCBjaGFyKiBiKQoreworICAgIHJldHVybiBEb0xvd2Vy
Q2FzZUVxdWFsc0FTQ0lJKGFCZWdpbiwgYUVuZCwgYik7Cit9CisKK2Jvb2wgTG93ZXJDYXNlRXF1
YWxzQVNDSUkoY29uc3QgY2hhciogYUJlZ2luLCBjb25zdCBjaGFyKiBhRW5kLCBjb25zdCBjaGFy
KiBiQmVnaW4sIGNvbnN0IGNoYXIqIGJFbmQpCit7CisgICAgd2hpbGUgKGFCZWdpbiAhPSBhRW5k
ICYmIGJCZWdpbiAhPSBiRW5kICYmIFRvTG93ZXJBU0NJSSgqYUJlZ2luKSA9PSAqYkJlZ2luKSB7
CisgICAgICAgIGFCZWdpbisrOworICAgICAgICBiQmVnaW4rKzsKKyAgICB9CisgICAgcmV0dXJu
IGFCZWdpbiA9PSBhRW5kICYmIGJCZWdpbiA9PSBiRW5kOworfQorCitib29sIExvd2VyQ2FzZUVx
dWFsc0FTQ0lJKGNvbnN0IFVDaGFyKiBhQmVnaW4sIGNvbnN0IFVDaGFyKiBhRW5kLCBjb25zdCBj
aGFyKiBiKQoreworICAgIHJldHVybiBEb0xvd2VyQ2FzZUVxdWFsc0FTQ0lJKGFCZWdpbiwgYUVu
ZCwgYik7Cit9CisKK3ZvaWQgRGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IGNoYXIqIGlu
cHV0LCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpCit7CisgICAgUmF3VVJM
QnVmZmVyPGNoYXI+IHVuZXNjYXBlZENoYXJzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlucHV0W2ldID09ICclJykgeworICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBjaDsKKyAgICAgICAgICAgIGlmIChVUkxDYW5vbmljYWxpemVyOjpEZWNv
ZGVFc2NhcGVkKGlucHV0LCAmaSwgbGVuZ3RoLCAmY2gpKQorICAgICAgICAgICAgICAgIHVuZXNj
YXBlZENoYXJzLmFwcGVuZChjaCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSwgY29weSB0aGUgcGVyY2VudCBsaXRlcmFsLgor
ICAgICAgICAgICAgICAgIHVuZXNjYXBlZENoYXJzLmFwcGVuZCgnJScpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUmVndWxhciBub24tZXNjYXBlZCA4
LWJpdCBjaGFyYWN0ZXIuCisgICAgICAgICAgICB1bmVzY2FwZWRDaGFycy5hcHBlbmQoaW5wdXRb
aV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29udmVydCB0aGF0IDgtYml0IHRvIFVU
Ri0xNi4gSXQncyBub3QgY2xlYXIgSUUgZG9lcyB0aGlzIGF0IGFsbCB0bworICAgIC8vIEphdmFT
Y3JpcHQgVVJMcywgYnV0IEZpcmVmb3ggYW5kIFNhZmFyaSBkby4KKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IHVuZXNjYXBlZENoYXJzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciB1Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmVzY2FwZWRDaGFycy5hdChp
KSk7CisgICAgICAgIGlmICh1Y2ggPCAweDgwKSB7CisgICAgICAgICAgICAvLyBOb24tVVRGLTgs
IGp1c3QgYXBwZW5kIGRpcmVjdGx5CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVjaCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBuZXh0X2NoIHdpbGwgcG9pbnQgdG8gdGhl
IGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBkZWNvZGVkCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXIu
CisgICAgICAgICAgICBpbnQgbmV4dENoYXJhY3RlciA9IGk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBjb2RlUG9pbnQ7CisgICAgICAgICAgICBpZiAoVVJMQ2Fub25pY2FsaXplcjo6cmVhZFVURkNo
YXIodW5lc2NhcGVkQ2hhcnMuZGF0YSgpLCAmbmV4dENoYXJhY3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWRDaGFycy5sZW5ndGgoKSwg
JmNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgICAgICAvLyBWYWxpZCBVVEYtOCBjaGFyYWN0ZXIs
IGNvbnZlcnQgdG8gVVRGLTE2LgorICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkFw
cGVuZFVURjE2VmFsdWUoY29kZVBvaW50LCBvdXRwdXQpOworICAgICAgICAgICAgICAgIGkgPSBu
ZXh0Q2hhcmFjdGVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IHNlcXVlbmNlcyB0aGF0IGFyZSBub3QgdmFsaWQgVVRGLTgsIHdlIGtl
ZXAKKyAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNvZGUgcG9pbnRzIGFuZCBwcm9tb3RlIHRv
IFVURi0xNi4gV2UgY29weSBhbGwgY2hhcmFjdGVycworICAgICAgICAgICAgICAgIC8vIGZyb20g
dGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgaWRlbnRpZmllZCBzZXF1ZW5j
ZS4KKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG5leHRDaGFyYWN0ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmVz
Y2FwZWRDaGFycy5hdChpKSkpOworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4odW5lc2NhcGVkQ2hhcnMuYXQoaSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBFbmNvZGVVUklDb21wb25lbnQoY29uc3QgY2hhciogaW5wdXQs
IGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oaW5wdXRbaV0pOworICAgICAgICBpZiAoVVJMQ2hhcmFjdGVy
VHlwZXM6OmlzQ29tcG9uZW50Q2hhcihjKSkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoYyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OmFwcGVuZFVSTEVz
Y2FwZWRDaGFyYWN0ZXIoYywgb3V0cHV0KTsKKyAgICB9Cit9CisKK2Jvb2wgQ29tcGFyZVNjaGVt
ZUNvbXBvbmVudChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXBvbmVu
dCwgY29uc3QgY2hhciogY29tcGFyZVRvKQoreworICAgIHJldHVybiBEb0NvbXBhcmVTY2hlbWVD
b21wb25lbnQoc3BlYywgY29tcG9uZW50LCBjb21wYXJlVG8pOworfQorCitib29sIENvbXBhcmVT
Y2hlbWVDb21wb25lbnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29t
cG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCit7CisgICAgcmV0dXJuIERvQ29tcGFyZVNj
aGVtZUNvbXBvbmVudChzcGVjLCBjb21wb25lbnQsIGNvbXBhcmVUbyk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFVSTFV0aWxpdGllcworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVT
RShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuaCBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwMTllNTYxZWVj
MWFiNWQ0YjgxZDNhM2Q3NWVmYWZlNjNkOTRhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuaApAQCAtMCwwICsxLDEzMyBAQAorLy8gQ29weXJpZ2h0
IDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAx
MiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIFVSTFV0aWxfaAorI2RlZmluZSBVUkxV
dGlsX2gKKworI2luY2x1ZGUgIlVSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgiCisj
aW5jbHVkZSAiVVJMUGFyc2UuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisK
KyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFV0aWxp
dGllcyB7CisKKy8vIExvY2F0ZXMgdGhlIHNjaGVtZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBw
bGFjZXMgaXQgaW50byB8Zm91bmRTY2hlbWV8LAorLy8gd2hpY2ggbWF5IGJlIDAgdG8gaW5kaWNh
dGUgdGhlIGNhbGxlciBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSByYW5nZS4KKy8vCisvLyBSZXR1
cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHxjb21wYXJlfCBzY2hlbWUgbWF0Y2hlcyB0aGUgc2NoZW1l
IGZvdW5kIGluIHRoZQorLy8gaW5wdXQgKGlmIGFueSkuIFRoZSB8Y29tcGFyZXwgc2NoZW1lIG11
c3QgYmUgYSB2YWxpZCBjYW5vbmljYWwgc2NoZW1lIG9yCisvLyB0aGUgcmVzdWx0IG9mIHRoZSBj
b21wYXJpc29uIGlzIHVuZGVmaW5lZC4KK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3Qg
Y2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25l
bnQqIGZvdW5kU2NoZW1lKTsKK2Jvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgVUNoYXIq
IHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBm
b3VuZFNjaGVtZSk7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIHJlcHJl
c2VudHMgYSBzdGFuZGFyZCBVUkwuIFRoaXMgbWVhbnMgdGhhdAorLy8gZWl0aGVyIHRoZSBzY2hl
bWUgaXMgaW4gdGhlIGxpc3Qgb2Yga25vd24gc3RhbmRhcmQgc2NoZW1lcy4KK2Jvb2wgSXNTdGFu
ZGFyZChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSk7Citib29s
IElzU3RhbmRhcmQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1l
KTsKKworLy8gVVJMIGxpYnJhcnkgd3JhcHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBQYXJzZXMgdGhlIGdpdmVuIHNwZWMg
YWNjb3JkaW5nIHRvIHRoZSBleHRyYWN0ZWQgc2NoZW1lIHR5cGUuIE5vcm1hbCB1c2VycworLy8g
c2hvdWxkIHVzZSB0aGUgVVJMIG9iamVjdCwgYWx0aG91Z2ggdGhpcyBtYXkgYmUgdXNlZnVsIGlm
IHBlcmZvcm1hbmNlIGlzCisvLyBjcml0aWNhbCBhbmQgeW91IGRvbid0IHdhbnQgdG8gZG8gdGhl
IGhlYXAgYWxsb2NhdGlvbiBmb3IgdGhlIHN0ZDo6c3RyaW5nLgorLy8KKy8vIEFzIHdpdGggdGhl
IFVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZSogZnVuY3Rpb25zLCB0aGUgY2hhcnNldCBj
b252ZXJ0ZXIgY2FuCisvLyBiZSAwIHRvIHVzZSBVVEYtOCAoaXQgd2lsbCBiZSBmYXN0ZXIgaW4g
dGhpcyBjYXNlKS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgYSB2YWxpZCBVUkwgd2FzIHByb2R1
Y2VkLCBmYWxzZSBpZiBub3QuIE9uIGZhaWx1cmUsIHRoZQorLy8gb3V0cHV0IGFuZCBwYXJzZWQg
c3RydWN0dXJlcyB3aWxsIHN0aWxsIGJlIGZpbGxlZCBhbmQgd2lsbCBiZSBjb25zaXN0ZW50LAor
Ly8gYnV0IHRoZXkgd2lsbCBub3QgcmVwcmVzZW50IGEgbG9hZGFibGUgVVJMLgorYm9vbCBDYW5v
bmljYWxpemUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIFVSTENhbm9uaWNhbGl6
ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKTsKK2Jvb2wgQ2Fub25pY2FsaXplKGNvbnN0IFVD
aGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZl
cnRlciosCisgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyog
b3VwdXRQYXJzZWQpOworCisvLyBSZXNvbHZlcyBhIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCBy
ZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGFyc2VkIGJhc2UgVVJMLgorLy8gVGhlIGJhc2UgTVVTVCBi
ZSB2YWxpZC4gVGhlIHJlc3VsdGluZyBjYW5vbmljYWwgVVJMIGFuZCBwYXJzZWQgaW5mb3JtYXRp
b24KKy8vIHdpbGwgYmUgcGxhY2VkIGluIHRvIHRoZSBnaXZlbiBvdXQgdmFyaWFibGVzLgorLy8K
Ky8vIFRoZSByZWxhdGl2ZSBuZWVkIG5vdCBiZSByZWxhdGl2ZS4gSWYgd2UgZGlzY292ZXIgdGhh
dCBpdCdzIGFic29sdXRlLCB0aGlzCisvLyB3aWxsIHByb2R1Y2UgYSBjYW5vbmljYWwgdmVyc2lv
biBvZiB0aGF0IFVSTC4gU2VlIENhbm9uaWNhbGl6ZSgpIGZvciBtb3JlCisvLyBhYm91dCB0aGUg
Y2hhcnNldENvbnZlcnRlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG91dHB1dCBpcyB2
YWxpZCwgZmFsc2UgaWYgdGhlIGlucHV0IGNvdWxkIG5vdCBwcm9kdWNlCisvLyBhIHZhbGlkIFVS
TC4KK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJl
bGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBVUkxDYW5v
bmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNlZCk7Citib29sIHJlc29sdmVSZWxh
dGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2
ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRD
b252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMqIG91cHV0UGFyc2VkKTsKKworLy8gUmVwbGFjZXMgY29tcG9uZW50cyBpbiB0aGUgZ2l2
ZW4gVkFMSUQgaW5wdXQgdXJsLiBUaGUgbmV3IGNhbm9uaWNhbCBVUkwgaW5mbworLy8gaXMgd3Jp
dHRlbiB0byBvdXRwdXQgYW5kIG91dHB1dFBhcnNlZC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHJlc3VsdGluZyBVUkwgaXMgdmFsaWQuCitib29sIFJlcGxhY2VDb21wb25lbnRzKGNvbnN0
IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVu
dHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFy
c2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+Jiwg
VVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxhY2VDb21wb25lbnRzKGNvbnN0
IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVu
dHM8VUNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2hh
cnNldENvbnZlcnRlciosCisgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYs
IFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBTdHJpbmcgaGVscGVyIGZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
Ky8vIENvbXBhcmUgdGhlIGxvd2VyLWNhc2UgZm9ybSBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGFnYWlu
c3QgdGhlIGdpdmVuIEFTQ0lJCisvLyBzdHJpbmcuIFRoaXMgaXMgdXNlZnVsIGZvciBkb2luZyBj
aGVja2luZyBpZiBhbiBpbnB1dCBzdHJpbmcgbWF0Y2hlcyBzb21lCisvLyB0b2tlbiwgYW5kIGl0
IGlzIG9wdGltaXplZCB0byBhdm9pZCBpbnRlcm1lZGlhdGUgc3RyaW5nIGNvcGllcy4KKy8vCisv
LyBUaGUgdmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbiB0aGF0IGRvbid0IHRha2UgYSBiRW5kIGFz
c3VtZSB0aGF0IHRoZSBiCisvLyBzdHJpbmcgaXMgemVybyB0ZXJtaW5hdGVkLgorYm9vbCBMb3dl
ckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNv
bnN0IGNoYXIqIGIpOworYm9vbCBMb3dlckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVn
aW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGJCZWdpbiwgY29uc3QgY2hhciogYkVu
ZCk7Citib29sIExvd2VyQ2FzZUVxdWFsc0FTQ0lJKGNvbnN0IFVDaGFyKiBhQmVnaW4sIGNvbnN0
IFVDaGFyKiBhRW5kLCBjb25zdCBjaGFyKiBiKTsKKworLy8gVW5lc2NhcGVzIHRoZSBnaXZlbiBz
dHJpbmcgdXNpbmcgVVJMIGVzY2FwaW5nIHJ1bGVzLgordm9pZCBEZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXMoY29uc3QgY2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mKTsK
KworLy8gRXNjYXBlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIGRlZmluZWQgYnkgdGhlIEpTIG1ldGhv
ZCBlbmNvZGVVUklDb21wb25lbnQuCisvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v
cmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZW5jb2RlVVJJQ29tcG9u
ZW50Cit2b2lkIEVuY29kZVVSSUNvbXBvbmVudChjb25zdCBjaGFyKiBpbnB1dCwgaW50IGxlbmd0
aCwgVVJMQnVmZmVyPGNoYXI+Jik7CisKKworfSAvLyBuYW1lc3BhY2UgVVJMVXRpbGl0aWVzCisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8v
IFVSTFV0aWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsSW50
ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbEludGVybmFsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDExYjFmMGNlNzZjMzYxNGZjYTVlZjAyNzVhNjMyMzhkYmYwNGU4YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbEludGVybmFsLmgKQEAgLTAs
MCArMSw1NiBAQAorLy8gQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisv
LyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVm
IFVSTFV0aWxJbnRlcm5hbF9oCisjZGVmaW5lIFVSTFV0aWxJbnRlcm5hbF9oCisKKyNpbmNsdWRl
ICJVUkxQYXJzZS5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBVUkxVdGlsaXRpZXMgeworCitleHRlcm4gY29uc3QgY2hhciBrRmlsZVNjaGVtZVtd
OworZXh0ZXJuIGNvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXTsKK2V4dGVybiBjb25zdCBj
aGFyIGtNYWlsdG9TY2hlbWVbXTsKKworLy8gR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcmFuZ2UgaW5z
aWRlIHRoZSBzdHJpbmcsIGNvbXBhcmVzIGl0IHRvIHRoZSBnaXZlbgorLy8gbG93ZXItY2FzZSB8
Y29tcGFyZVRvfCBidWZmZXIuCitib29sIENvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3QgY2hh
ciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiwgY29uc3QgY2hhciogY29tcGFyZVRvKTsKK2Jv
b2wgQ29tcGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiwgY29uc3QgY2hhciogY29tcGFyZVRvKTsKKworfSAvLyBuYW1lc3BhY2UgVVJMVXRp
bGl0aWVzCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKwor
I2VuZGlmIC8vIFVSTFV0aWxJbnRlcm5hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMV1RGVVJMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZV
UkwuY3BwCmluZGV4IGYwMzBiODcxOWNhZDVlODZlYjk0ZDUyYTZjODM1YmJlY2Y1NjQyNTYuLjdm
YjRkNGFhMGVjNjBkZWU5MThmNTVlOTg0ZjZmZDY0NzUwNGVkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkxXVEZVUkwuY3BwCkBAIC03MSw5ICs3MSwxNyBAQCBLVVJMOjpLVVJMKGNvbnN0
IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUpCiAgICAgICAgIG1fdXJsSW1w
bC0+bV9pbnZhbGlkVXJsU3RyaW5nID0gcmVsYXRpdmU7CiB9CiAKLUtVUkw6OktVUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpCitLVVJMOjpLVVJMKGNv
bnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNv
ZGluZyYpCisgICAgOiBtX3VybEltcGwoYWRvcHRSZWYobmV3IEtVUkxXVEZVUkxJbXBsKCkpKQog
ewotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgorICAgIC8vIEZJWE1F
OiBoYW5kbGUgdGhlIGVuY29kaW5nLgorICAgIGlmIChiYXNlVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV91cmxJbXBsLT5tX3BhcnNlZFVSTCA9IFBhcnNlZFVSTChyZWxhdGl2ZSk7CisgICAgZWxz
ZQorICAgICAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKGJhc2VVUkwubV91
cmxJbXBsLT5tX3BhcnNlZFVSTCwgcmVsYXRpdmUpOworCisgICAgaWYgKCFtX3VybEltcGwtPm1f
cGFyc2VkVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgbV91cmxJbXBsLT5tX2ludmFsaWRVcmxTdHJp
bmcgPSByZWxhdGl2ZTsKIH0KIAogS1VSTCBLVVJMOjpjb3B5KCkgY29uc3QKQEAgLTE0MSw3ICsx
NDksMTAgQEAgU3RyaW5nIEtVUkw6Omhvc3QoKSBjb25zdAogCiBib29sIEtVUkw6Omhhc1BvcnQo
KSBjb25zdAogewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIC8vIFRoaXMgc2hvdWxkIGJl
IGFuIEFTU0VSVC4gSFRNTEFuY2hvckVsZW1lbnQ6OnBvcnQoKSBkb2VzIG5vdCBjaGVjayB0aGUg
dmFsaWRpdHkgb2YgdGhlIFVSTC4KKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgcmV0dXJuICFtX3VybEltcGwtPm1fcGFyc2VkVVJMLnBvcnQoKS5pc051
bGwoKTsKIH0KIApAQCAtMTY0LDI1ICsxNzUsMzcgQEAgdW5zaWduZWQgc2hvcnQgS1VSTDo6cG9y
dCgpIGNvbnN0CiAKIFN0cmluZyBLVVJMOjp1c2VyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4gQVNTRVJUKCksIGNhbGwg
c2l0ZSBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2Vk
VVJMLnVzZXJuYW1lKCk7CiB9CiAKIFN0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4gQVNTRVJU
KCksIGNhbGwgc2l0ZSBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVybiBtX3VybEltcGwt
Pm1fcGFyc2VkVVJMLnBhc3N3b3JkKCk7CiB9CiAKIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJl
IGFuIEFTU0VSVElPTiwgY2FsbCBzaXRlIHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KKyAg
ICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuICFw
YXRoKCkuaXNFbXB0eSgpOwogfQogCiBTdHJpbmcgS1VSTDo6cGF0aCgpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFuIEFTU0VS
VElPTiwgSFRNTEFuY2hvckVsZW1lbnQgc2hvdWxkIG5vdCB1c2UgaW52YWxpZCBVUkxzLgorICAg
IGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4g
bV91cmxJbXBsLT5tX3BhcnNlZFVSTC5wYXRoKCk7CiB9CiAKQEAgLTIwMSw3ICsyMjQsMTAgQEAg
U3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKIAogU3RyaW5nIEtVUkw6OnF1
ZXJ5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAvLyBGSVhNRTogdGhp
cyBzaG91bGQgYmUgYW4gQVNTRVJUSU9OLCBIVE1MQW5jaG9yRWxlbWVudCBzaG91bGQgbm90IHVz
ZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKwogICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnF1ZXJ5KCk7CiB9CiAK
QEAgLTIyMSw2ICsyNDcsNyBAQCBTdHJpbmcgS1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKCkgY29u
c3QKICAgICAvLyBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwu
ZnJhZ21lbnQoKTsKIH0KIApAQCAtMjM0LDcgKzI2MSw3IEBAIFN0cmluZyBLVVJMOjpiYXNlQXNT
dHJpbmcoKSBjb25zdAogLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBmdW5jdGlvbiBmcm9tIEtV
UkwuCiBTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nKCk7CiB9CiAKIGJvb2wgS1VSTDo6cHJvdG9jb2xJ
cyhjb25zdCBjaGFyKiB0ZXN0UHJvdG9jb2wpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165294</attachid>
            <date>2012-09-23 15:44:09 -0700</date>
            <delta_ts>2012-09-24 14:30:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97405-20120923154331.patch</filename>
            <type>text/plain</type>
            <size>424823</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkyODdjOTIzNTgwNzIzNmRkMDRkNmJl
MGRiZWFhNmRlOTMzNDM1ZjUuLjcxNTNkNTQ4NDRlNTMxOWE3YjY4NjhmN2I1OWRkZTM3MjhhNDA5
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjE2IEBACisyMDEyLTA5LTIyICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbnRlZ3JhdGUgbW9zdCBvZiBHb29nbGVV
UkwgaW4gV1RGVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzQwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYnJpbmdzIGFsbW9zdCBhbGwgb2YgdGhlIGltcGxlbWVudGF0YXRpb24g
b2YgR29vZ2xlLVVSTCBpbiBXVEZVUkwKKyAgICAgICAgd2l0aCBvbmx5IG1pbm9yIGNoYW5nZXMu
CisKKyAgICAgICAgVGhlIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgY29kZSBhcmUgbW9zdGx5
OgorICAgICAgICAtQ29kZSBjbGVhbmluZy4KKyAgICAgICAgLVJlcGxhY2UgdXJsX3BhcnNlOjpQ
YXJzZWQgYnkgVVJMU2VnbWVudHMuCisgICAgICAgIC1SZXBsYWNlIHVybF9wYXJzZTo6Q29tcG9u
ZW50IGJ5IFVSTENvbXBvbmVudAorICAgICAgICAtTW9yZSBjb2RlIGNsZWFuaW5nLgorICAgICAg
ICAtQWRvcHQgVVJMQnVmZmVyIGFuZCBSYXdVUkxCdWZmZXIgaW5zdGVhZCBvZiB0aGUgQ2Fub25P
dXRwdXRUIGFuZCBSYXdDYW5vbk91dHB1dFQuCisgICAgICAgIC1Vc2UgVVJMQ2hhcmFjdGVyVHlw
ZXMgaW5zdGVhZCBvZiB0aGUgbGl0YW55IG9mIGNoYXJhY3RlcnMgZnVuY3Rpb25zLgorICAgICAg
ICAtU29tZSBtb3JlIGNvZGUgY2xlYW5pbmcuCisgICAgICAgIC1GaXggdGhlIHN0eWxlIHRvIG1h
dGNoIFdlYktpdCBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAtUmVuYW1lIHRoZSBmaWxl
cyB0byBtYXRjaCBXZWJLaXQgc3R5bGUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwOgorICAgICAg
ICAoV1RGOjpQYXJzZWRVUkw6OlBhcnNlZFVSTCk6CisgICAgICAgIChXVEY6OlBhcnNlZFVSTDo6
c2VnbWVudCk6CisgICAgICAgICogd3RmL3VybC9hcGkvUGFyc2VkVVJMLmg6CisgICAgICAgIChX
VEY6OlBhcnNlZFVSTDo6aXNWYWxpZCk6CisgICAgICAgICogd3RmL3VybC9zcmMvUmF3VVJMQnVm
ZmVyLmg6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub24uaDogQWRkZWQuCisgICAgICAg
IChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKENoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAg
ICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyOjpDaGFyc2V0Q29udmVy
dGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlcjo6
fkNoYXJzZXRDb252ZXJ0ZXIpOgorICAgICAgICAoQ2Fub25Ib3N0SW5mbyk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9zdEluZm86OkNhbm9uSG9zdEluZm8pOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbkhvc3RJbmZvOjpJc0lQQWRkcmVzcyk6
CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uSG9zdEluZm86OkFkZHJlc3NM
ZW5ndGgpOgorICAgICAgICAoVVJMQ29tcG9uZW50U291cmNlKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6VVJMQ29tcG9uZW50U291cmNlOjpVUkxDb21wb25lbnRTb3VyY2UpOgor
ICAgICAgICAoUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
UmVwbGFjZW1lbnRzOjpSZXBsYWNlbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OlNldFNjaGVtZSk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6SXNTY2hlbWVPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRVc2VybmFtZSk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJVc2VybmFtZSk6CisgICAg
ICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNVc2VybmFtZU92ZXJy
aWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNl
dFBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRz
OjpDbGVhclBhc3N3b3JkKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFj
ZW1lbnRzOjpJc1Bhc3N3b3JkT3ZlcnJpZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0SG9zdCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VtZW50czo6Q2xlYXJIb3N0KToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZW1lbnRzOjpJc0hvc3RPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpTZXRQb3J0KToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzOjpDbGVhclBvcnQpOgorICAgICAgICAoV1RG
OjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OklzUG9ydE92ZXJyaWRkZW4pOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OlNldFBhdGgpOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNsZWFyUGF0aCk6Cisg
ICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6SXNQYXRoT3ZlcnJp
ZGRlbik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czo6U2V0
UXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6OkNs
ZWFyUXVlcnkpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM6
OklzUXVlcnlPdmVycmlkZGVuKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzOjpTZXRSZWYpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBs
YWNlbWVudHM6OkNsZWFyUmVmKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzOjpJc1JlZk92ZXJyaWRkZW4pOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OnNvdXJjZXMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxp
emVyOjpSZXBsYWNlbWVudHM6OmNvbXBvbmVudHMpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpSZXBsYWNlbWVudHM6OlBsYWNlaG9sZGVyKToKKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxDYW5vbkV0Yy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVy
OjpyZW1vdmVVUkxXaGl0ZXNwYWNlKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAg
ICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxTY2hlbWVDaGFyKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplU2NoZW1lKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplVXNlckluZm8pOgorICAgICAgICAo
V1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVQb3J0KToKKyAgICAgICAgKFdURjo6
VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUmVmKToKKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fu
b25pY2FsaXplcjo6Q2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTCk6CisgICAgICAgIChVUkxDYW5v
bmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZUZpbGVT
eXN0ZW1VUkwpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJM
KToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmlj
YWxpemVyOjpGaWxlQ2Fub25pY2FsaXplUGF0aCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OlJlcGxhY2VGaWxlVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkhv
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2Fs
aXplSG9zdCk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJM
Q2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplSG9zdFZlcmJvc2UpOgorICAgICAgICAqIHd0Zi91
cmwvc3JjL1VSTENhbm9uSUNVLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OklETlRvQVNDSUkpOgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlYWRVVEZDaGFyKToKKyAgICAgICAgKiB3dGYvdXJs
L3NyYy9VUkxDYW5vbklQLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNhbm9uaWNhbGl6ZUlQQWRkcmVzcyk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcDogQWRkZWQuCisgICAg
ICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
QXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6
ZXI6OkNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OkNvbnZlcnRVVEY4VG9VVEYxNik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OlNl
dHVwT3ZlcnJpZGVDb21wb25lbnRzKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6
U2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6Ol9pdG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19z
KToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmg6IEFkZGVkLgorICAg
ICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6
OmhleENoYXJUb1ZhbHVlKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6aXNEb3Qp
OgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjphcHBlbmRVUkxFc2NhcGVkQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6ZG9BcHBlbmRVVEY4KToKKyAg
ICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kQ2hhclRvT3V0cHV0KToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGOFZhbHVlKToKKyAgICAgICAgKFdU
Rjo6VVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGOEVzY2FwZWRWYWx1ZSk6CisgICAgICAgIChX
VEY6OlVSTENhbm9uaWNhbGl6ZXI6OkFwcGVuZFVURjE2VmFsdWUpOgorICAgICAgICAoV1RGOjpV
UkxDYW5vbmljYWxpemVyOjpBcHBlbmRVVEY4RXNjYXBlZENoYXIpOgorICAgICAgICAoV1RGOjpV
UkxDYW5vbmljYWxpemVyOjpJczhCaXRDaGFyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2Fs
aXplcjo6RGVjb2RlRXNjYXBlZCk6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6Ol9p
dG9hX3MpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpfaXRvd19zKToKKyAgICAg
ICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6X3N0cnRvdWk2NCk6CisgICAgICAgICogd3RmL3Vy
bC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6Q2Fub25pY2FsaXplTWFpbHRvVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6
ZXIpOgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlTWFpbHRvVVJMKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplUGF0aCk6CisgICAgICAgIChVUkxD
YW5vbmljYWxpemVyKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2Fs
aXplUGFydGlhbFBhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5j
cHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVQ
YXRoVVJMKToKKyAgICAgICAgKFVSTENhbm9uaWNhbGl6ZXIpOgorICAgICAgICAoV1RGOjpVUkxD
YW5vbmljYWxpemVyOjpSZXBsYWNlUGF0aFVSTCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJM
Q2Fub25RdWVyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpVUkxDYW5vbmljYWxpemVyOjpD
YW5vbmljYWxpemVRdWVyeSk6CisgICAgICAgIChVUkxDYW5vbmljYWxpemVyKToKKyAgICAgICAg
KFdURjo6VVJMQ2Fub25pY2FsaXplcjo6Q29udmVydFVURjE2VG9RdWVyeUVuY29kaW5nKToKKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblJlbGF0aXZlLmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OmlzUmVsYXRpdmVVUkwpOgorICAgICAgICAoVVJMQ2Fu
b25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNhbGl6ZXI6OnJlc29sdmVSZWxh
dGl2ZVVSTCk6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25TdGRVUkwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6VVJMQ2Fub25pY2FsaXplcjo6RGVmYXVsdFBvcnRGb3JTY2hlbWUp
OgorICAgICAgICAoVVJMQ2Fub25pY2FsaXplcik6CisgICAgICAgIChXVEY6OlVSTENhbm9uaWNh
bGl6ZXI6OkNhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKToKKyAgICAgICAgKFdURjo6VVJMQ2Fub25p
Y2FsaXplcjo6UmVwbGFjZVN0YW5kYXJkVVJMKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxD
aGFyYWN0ZXJUeXBlcy5jcHA6CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlw
ZXMuaDoKKyAgICAgICAgKFdURjo6VVJMQ2hhcmFjdGVyVHlwZXM6OmlzQ29tcG9uZW50Q2hhcik6
CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5cGVzOjppc0hleENoYXIpOgorICAgICAgICAo
V1RGOjpVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENo
YXJhY3RlclR5cGVzOjppc1F1ZXJ5Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5
cGVzOjppc0NoYXJhY3Rlck9mVHlwZSk6CisgICAgICAgIChVUkxDaGFyYWN0ZXJUeXBlcyk6Cisg
ICAgICAgICogd3RmL3VybC9zcmMvVVJMRXNjYXBlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxGaWxlLmg6IEFkZGVkLgorICAgICAgICAoVVJMUGFyc2VyKToKKyAgICAg
ICAgKFdURjo6VVJMUGFyc2VyOjppc1dpbmRvd3NEcml2ZVNlcGFyYXRvcik6CisgICAgICAgIChX
VEY6OlVSTFBhcnNlcjo6aXNXaW5kb3dzRHJpdmVMZXR0ZXIpOgorICAgICAgICAoV1RGOjpVUkxQ
YXJzZXI6OmZpbmROZXh0U2xhc2gpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdp
bldpbmRvd3NEcml2ZVNwZWMpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OmRvZXNCZWdpblVO
Q1BhdGgpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdFNjaGVtZSk6CisgICAgICAgIChVUkxQYXJzZXIp
OgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OklzQXV0aG9yaXR5VGVybWluYXRvcik6CisgICAg
ICAgIChXVEY6OlVSTFBhcnNlcjo6RXh0cmFjdEZpbGVOYW1lKToKKyAgICAgICAgKFdURjo6VVJM
UGFyc2VyOjpFeHRyYWN0UXVlcnlLZXlWYWx1ZSk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6
UGFyc2VBdXRob3JpdHkpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OlBhcnNlUG9ydCk6Cisg
ICAgICAgIChXVEY6OlVSTFBhcnNlcjo6UGFyc2VTdGFuZGFyZFVSTCk6CisgICAgICAgIChXVEY6
OlVSTFBhcnNlcjo6UGFyc2VQYXRoVVJMKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpQYXJz
ZUZpbGVTeXN0ZW1VUkwpOgorICAgICAgICAoV1RGOjpVUkxQYXJzZXI6OlBhcnNlTWFpbHRvVVJM
KToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjpwYXJzZVBhdGhJbnRlcm5hbCk6CisgICAgICAg
IChXVEY6OlVSTFBhcnNlcjo6UGFyc2VBZnRlclNjaGVtZSk6CisgICAgICAgICogd3RmL3VybC9z
cmMvVVJMUGFyc2UuaDogQWRkZWQuCisgICAgICAgIChVUkxQYXJzZXIpOgorICAgICAgICAqIHd0
Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6VVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwpOgorICAgICAgICAoVVJMUGFyc2VyKToK
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxQYXJzZUludGVybmFsLmg6IEFkZGVkLgorICAgICAg
ICAoVVJMUGFyc2VyKToKKyAgICAgICAgKFdURjo6VVJMUGFyc2VyOjppc1VSTFNsYXNoKToKKyAg
ICAgICAgKFdURjo6VVJMUGFyc2VyOjpzaG91bGRUcmltRnJvbVVSTCk6CisgICAgICAgIChXVEY6
OlVSTFBhcnNlcjo6dHJpbVVSTCk6CisgICAgICAgIChXVEY6OlVSTFBhcnNlcjo6Y291bnRDb25z
ZWN1dGl2ZVNsYXNoZXMpOgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFF1ZXJ5Q2Fub25pY2FsaXplci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcDoKKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6VVJM
U2VnbWVudHMpOgorICAgICAgICAoVVJMU2VnbWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdt
ZW50czo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6VVJMU2VnbWVudHM6OmlubmVyVVJMU2Vn
bWVudHMpOgorICAgICAgICAoV1RGOjpVUkxTZWdtZW50czo6c2V0SW5uZXJVUkxTZWdtZW50cyk6
CisgICAgICAgIChXVEY6OlVSTFNlZ21lbnRzOjpjbGVhcklubmVyVVJMU2VnbWVudHMpOgorICAg
ICAgICAqIHd0Zi91cmwvc3JjL1VSTFV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFVSTFV0aWxp
dGllcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6SXNTdGFuZGFyZCk6CisgICAgICAg
IChXVEY6OlVSTFV0aWxpdGllczo6RmluZEFuZENvbXBhcmVTY2hlbWUpOgorICAgICAgICAoV1RG
OjpVUkxVdGlsaXRpZXM6OkNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGll
czo6cmVzb2x2ZVJlbGF0aXZlKToKKyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpSZXBsYWNl
Q29tcG9uZW50cyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6TG93ZXJDYXNlRXF1YWxz
QVNDSUkpOgorICAgICAgICAoV1RGOjpVUkxVdGlsaXRpZXM6OkRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyk6CisgICAgICAgIChXVEY6OlVSTFV0aWxpdGllczo6RW5jb2RlVVJJQ29tcG9uZW50KToK
KyAgICAgICAgKFdURjo6VVJMVXRpbGl0aWVzOjpDb21wYXJlU2NoZW1lQ29tcG9uZW50KToKKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsLmg6IEFkZGVkLgorICAgICAgICAoVVJMVXRpbGl0
aWVzKToKKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmguCisgICAgICAgIChVUkxVdGls
aXRpZXMpOgorCiAyMDEyLTA5LTIxICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRp
Z2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVycm9yIG91dCBlYXJseSBpZiB3ZSBkb24ndCBoYXZl
IElDVSBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNTczMjYzY2NkODkzZjNkZDk4ZDljNmRkZmRk
OWM0ODlmMTM0NzcxLi5mZWZhYzg5M2RhOTJjMzJjYjE4MjMzOWU3NmE3ODM0Mzk2MDBmODRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDktMjIgIEJlbmphbWluIFBvdWxhaW4g
IDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIEludGVncmF0ZSBtb3N0IG9mIEdvb2ds
ZVVSTCBpbiBXVEZVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk3NDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTG9vc2VuIEtVUkxXVEZVUkwgdG8gYmUgYWJsZSB0byBydW4gbW9zdCB0ZXN0cyBpbiBE
ZWJ1Zy4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkxXVEZVUkwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S1VSTDo6S1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cGFz
cyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OktVUkw6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cXVlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6S1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OmZpbGVTeXN0ZW1QYXRoKToKKwogMjAxMi0wOS0yMiAgRG9taW5pYyBNYXp6b25pICA8ZG1h
enpvbmlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBWDogTGF5b3V0IHRlc3RzIHdvdWxkIGJlIGVh
c2llciB0byB3cml0ZSBpZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBjb3VsZCBmaW5kIGFuIGVs
ZW1lbnQgYnkgaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDUyYWY3YjljZWNjNWQxYTUyYWUwOGQ5N2I0MjJiM2U1YWFiZDAwNzYuLjgyZjcyMWMyMDgxODlh
YmIxZmE1ODk5YTZlZTRlMmFmM2YwMWVkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTIsNiArMTIsMjkgQEAKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRGM0IwRjcxNUU0NUU0NjAw
MjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
MTQ3QjA4MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi87
IH07CisJCTI2RTZDMUVFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkV0Yy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFDRTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwICovOyB9OworCQkyNkU2QzFFRjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbkZpbGVzeXN0ZW11cmwuY3BwICovOyB9OworCQkyNkU2QzFGMDE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25GaWxldXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwu
Y3BwICovOyB9OworCQkyNkU2QzFGMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQx
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovOyB9OworCQkyNkU2QzFGMjE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uSUNVLmNwcCAqLzsgfTsKKwkJMjZFNkMxRjUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SW50ZXJuYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovOyB9
OworCQkyNkU2QzFGNjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDYxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJMjZFNkMxRjcxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAu
Y3BwICovOyB9OworCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMx
RDkxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCAqLzsgfTsKKwkJMjZFNkMx
RkExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25QYXRoLmNwcCAqLzsgfTsKKwkJMjZFNkMxRkIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TENhbm9uUGF0aHVybC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFEQjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAq
LzsgfTsKKwkJMjZFNkMxRkMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxREMxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwICovOyB9OworCQkyNkU2QzFGRDE2MDkw
MzczMDBDQTZBRjQgLyogVVJMQ2Fub25SZWxhdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFERDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25SZWxhdGl2ZS5jcHAgKi87IH07CisJCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vblN0ZFVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICov
OyB9OworCQkyNkU2QzIwMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUUxMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbi5oICovOyB9OworCQkyNkU2QzIwMzE2MDkwMzczMDBDQTZBRjQgLyog
VVJMRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZpbGUuaCAqLzsgfTsKKwkJMjZFNkMyMDQx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
UGFyc2VGaWxlLmNwcCAqLzsgfTsKKwkJMjZFNkMyMDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBh
cnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2RTZDMUU1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi87IH07
CisJCTI2RTZDMjA3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNzE2MDkwMzczMDBDQTZB
RjQgLyogVVJMUGFyc2UuY3BwICovOyB9OworCQkyNkU2QzIwODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUU4MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5oICovOyB9OworCQkyNkU2QzIw
QTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFQTE2MDkwMzczMDBDQTZBRjQgLyog
VVJMVXRpbEludGVybmFsLmggKi87IH07CisJCTI2RTZDMjBDMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxVdGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNwcCAqLzsgfTsKKwkJMjZFNkMy
MEQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGls
LmggKi87IH07CiAJCTJDMDUzODU0MTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGlt
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkMwNTM4
NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmggKi87IH07CiAJCTJDQ0Q4
OTJBMTVDMDM5MDIwMDI4NTA4MyAvKiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0NEODkyOTE1QzAzOTAyMDAyODUw
ODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovOyB9OwogCQk0MzMwRjM4RjE1NzQ1QjA1MDBB
QUZBOEYgLyogVVJMU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzMzBGMzhFMTU3NDVCMDUwMEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICov
OyB9OwpAQCAtMjM3LDEwICsyNjAsNiBAQAogCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThBNDczNjYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVz
LmNwcCAqLzsgfTsKIAkJQThBNDc0NzUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM2NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCAqLzsgfTsKIAkJQThB
NDc0NzYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8q
IFVSTENvbXBvbmVudC5oICovOyB9OwotCQlBOEE0NzQ3NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
RXNjYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwICovOyB9OwotCQlBOEE0
NzQ3ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
RXNjYXBlLmggKi87IH07Ci0JCUE4QTQ3NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzZC
MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCAqLzsgfTsKLQkJQThBNDc0N0ExNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNkMxNTFBODI1QjAwNDEyM0ZGIC8qIFVS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oICovOyB9OwogCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYg
LyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczNkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCAqLzsg
fTsKIAkJQThBNDc0N0MxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2RTE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMU2VnbWVudHMuaCAqLzsgfTsKIAkJQThBNDc0N0QxNTFBODI1QjAwNDEyM0ZG
IC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi87IH07CkBA
IC0yNjAsNiArMjc5LDI5IEBACiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRl
ZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2F0dXJhdGVk
QXJpdGhtZXRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERD
Q0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkV0Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkV0
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUNGMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRDAxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVy
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkZpbGV1
cmwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEMTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2RTZDMUQ1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSW50ZXJu
YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFENjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVUkxDYW5vbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
RTZDMUQ3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklQLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSVAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyNkU2QzFEOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25NYWlsdG8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25QYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVSTENhbm9uUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMURC
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGh1cmwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25QYXRodXJsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25RdWVyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uUmVsYXRpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25TdGRVUkwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fu
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMQ2Fub24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFy
c2VGaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNl
RmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUU1MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVSTFBhcnNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFBhcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMjZFNkMxRTgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFBhcnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTI2RTZDMUVBMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsSW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMVXRpbEludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RTZDMUVDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxV
dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFV0aWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkU2QzFFRDE2MDkwMzczMDBDQTZBRjQg
LyogVVJMVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxVdGlsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDMDUzODUzMTVCQzgxOTAwMEYyMUI5NiAv
KiBHcmVnb3JpYW5EYXRlVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmVnb3JpYW5EYXRlVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQ0NEODky
OTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JlZ29yaWFuRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzMwRjM4RTE1NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFN0cmluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTQsMTAgKzUzNiw2IEBACiAJCUE4QTQ3
MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDaGFyYWN0ZXJUeXBlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzY3MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFy
YWN0ZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxDaGFyYWN0
ZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM2ODE1MUE4MjVC
MDA0MTIzRkYgLyogVVJMQ29tcG9uZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVSTENvbXBvbmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2
OTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVSTEVzY2FwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMRXNjYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4QTQ3MzZCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4QTQ3MzZDMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxRdWVyeUNhbm9uaWNhbGl6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUXVlcnlDYW5vbmljYWxp
emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzZEMTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVUkxTZWdtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3
MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVUkxTZWdtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEE0NzM2RjE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04NzMsMTUgKzkxMSwzNCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDczNjQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oICovLAogCQkJCUE4QTQ3MzY1MTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxCdWZmZXIuaCAqLywKKwkJCQkyNkU2QzFFMTE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub24uaCAqLywKKwkJCQkyNkU2QzFDRTE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25FdGMuY3BwICovLAorCQkJCTI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkZpbGVzeXN0ZW11cmwuY3BwICovLAorCQkJCTI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbkZpbGV1cmwuY3BwICovLAorCQkJCTI2RTZDMUQxMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbkhvc3QuY3BwICovLAorCQkJCTI2RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbklDVS5jcHAgKi8sCisJCQkJMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SW50ZXJuYWwuY3BwICovLAorCQkJCTI2RTZDMUQ2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
bkludGVybmFsLmggKi8sCisJCQkJMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
SVAuY3BwICovLAorCQkJCTI2RTZDMUQ5MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbk1haWx0
by5jcHAgKi8sCisJCQkJMjZFNkMxREExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5j
cHAgKi8sCisJCQkJMjZFNkMxREIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5j
cHAgKi8sCisJCQkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3Bw
ICovLAorCQkJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNw
cCAqLywKKwkJCQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3Bw
ICovLAogCQkJCUE4QTQ3MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5j
cHAgKi8sCiAJCQkJQThBNDczNjcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVz
LmggKi8sCiAJCQkJQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oICov
LAotCQkJCUE4QTQ3MzY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwICovLAotCQkJ
CUE4QTQ3MzZBMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuaCAqLywKLQkJCQlBOEE0NzM2
QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMUGFyc2VyLmggKi8sCi0JCQkJQThBNDczNkMxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFF1ZXJ5Q2Fub25pY2FsaXplci5oICovLAorCQkJCTI2RTZDMUUzMTYw
OTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggKi8sCisJCQkJMjZFNkMxRTcxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTFBhcnNlLmNwcCAqLywKKwkJCQkyNkU2QzFFODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCAqLywKKwkJCQkyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VG
aWxlLmNwcCAqLywKKwkJCQkyNkU2QzFFNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRl
cm5hbC5oICovLAogCQkJCUE4QTQ3MzZEMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5j
cHAgKi8sCiAJCQkJQThBNDczNkUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggKi8s
CisJCQkJMjZFNkMxRUMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuY3BwICovLAorCQkJCTI2
RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggKi8sCisJCQkJMjZFNkMxRUExNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRlcm5hbC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBz
cmM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA2Miw5ICsxMTE5LDYgQEAKIAkJ
CQlBOEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ3NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDc2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDb21wb25lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc4MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2Nh
cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc5MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDdBMTUxQTgyNUIwMDQxMjNGRiAvKiBV
UkxRdWVyeUNhbm9uaWNhbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdDMTUxQTgy
NUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFVSTFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLApAQCAtMTA3Niw2ICsx
MTMwLDEzIEBACiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1v
cnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZDMUY2MTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2QzIw
MTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2RTZD
MjAzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkU2
QzIwNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMjZFNkMyMDgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyNkU2QzIwQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyNkU2QzIwRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xMjE5LDEwICsxMjgwLDI1IEBACiAJCQkJQThBNDc0NEExNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NTgxNTFBODI1QjAwNDEyM0ZGIC8qIFR5cGVUcmFpdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMjZFNkMxRUUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRXRjLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTI2RTZDMUVGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRjAxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uRmlsZXVybC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGMTE2MDkw
MzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZD
MUYyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyNkU2QzFGNTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyNkU2QzFGNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JUC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25N
YWlsdG8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZFNkMxRkExNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzFGQjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMUZD
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTI2RTZDMUZEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblJlbGF0aXZlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblN0ZFVSTC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hh
cmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThBNDc0NzcxNTFBODI1QjAwNDEy
M0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkU2QzIwNDE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2RTZDMjA3
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDMzMEYzOEYxNTc0NUIwNTAwQUFGQThGIC8qIFVSTFN0cmluZy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkyNkU2QzIwQzE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ2OTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9Q
YXJzZWRVUkwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwCmluZGV4
IDBiMTVmY2JjYTJkYzkzMjA0ZGY4YTFhNThhNzBlYWU1MDQ1OGFjYzQuLjUwNDYzMTk2MjE0YjQ4
MjgyYWQyMTk0N2VkM2I2MmVlNmE3YzUxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9hcGkvUGFyc2VkVVJMLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVS
TC5jcHAKQEAgLTMzLDIzICszMywzOCBAQAogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUmF3VVJMQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL1VS
TENvbXBvbmVudC5oPgotI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMVXRpbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewot
ICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3BlYyA9IFVSTFN0cmlu
ZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHVuc2lnbmVkIHVybFN0cmluZ0xlbmd0
aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAoIXVybFN0cmluZ0xlbmd0aCkKKyAgICAg
ICAgcmV0dXJuOyAvLyBGSVhNRTogd2Ugc2hvdWxkIEFTU0VSVCBvbiB0aGlzLCBidXQgcGVvcGxl
IHVzZSBLVVJMIGluY29ycmVjdGx5IHdpdGggUGFyc2VkVVJMU3RyaW5nVGFnIDooLgorCisgICAg
UmF3VVJMQnVmZmVyPGNoYXI+IG91dHB1dEJ1ZmZlcjsKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBj
b25zdCBDU3RyaW5nJiBiYXNlU3RyID0gYmFzZS51dGY4KCk7CisgICAgYm9vbCBpc1ZhbGlkID0g
ZmFsc2U7CisgICAgVVJMU2VnbWVudHMgYmFzZVNlZ21lbnRzOwogCi0gICAgLy8gRklYTUU6IGhh
bmRsZSBpbnZhbGlkIHVybFN0cmluZy4KLSAgICBtX3NwZWMgPSBVUkxTdHJpbmcodXJsU3RyaW5n
KTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHRha2Ugc2hvcnRjdXRzIGhlcmUhIFdlIGRvIG5v
dCBoYXZlIHRvIHJlc29sdmUgdGhlIHJlbGF0aXZlIHBhcnQuCiAgICAgaWYgKHVybFN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgVVJMUGFyc2VyPExDaGFyPjo6cGFyc2VTdGFuZGFyZFVSTCh1cmxT
dHJpbmcuY2hhcmFjdGVyczgoKSwgdXJsU3RyaW5nLmxlbmd0aCgpLCBtX3NlZ21lbnRzKTsKKyAg
ICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0
YSgpLCBiYXNlU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmxTdHJpbmcuY2hhcmFj
dGVyczgoKSksIHVybFN0cmluZ0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGNoYXJzZXRDb252ZXJ0ZXIgKi8gMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2Vn
bWVudHMpOwogICAgIGVsc2UKLSAgICAgICAgVVJMUGFyc2VyPFVDaGFyPjo6cGFyc2VTdGFuZGFy
ZFVSTCh1cmxTdHJpbmcuY2hhcmFjdGVyczE2KCksIHVybFN0cmluZy5sZW5ndGgoKSwgbV9zZWdt
ZW50cyk7CisgICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShi
YXNlU3RyLmRhdGEoKSwgYmFzZVNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nLmNoYXJhY3RlcnMxNigpLCB1cmxTdHJpbmdM
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKworICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgQVNTRVJUIG9uIGlzVmFsaWQsIGJ1dCBwZW9wbGUgdXNlIEtVUkwgaW5j
b3JyZWN0bHkgd2l0aCBQYXJzZWRVUkxTdHJpbmdUYWcgOiguCisgICAgaWYgKGlzVmFsaWQpCisg
ICAgICAgIG1fc3BlYyA9IFVSTFN0cmluZyhTdHJpbmcob3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0
cHV0QnVmZmVyLmxlbmd0aCgpKSk7CiB9CiAKIFBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFBh
cnNlZFVSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSkKQEAgLTU3LDM2ICs3MiwyOSBA
QCBQYXJzZWRVUkw6OlBhcnNlZFVSTChjb25zdCBQYXJzZWRVUkwmIGJhc2UsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmUpCiAgICAgaWYgKCFiYXNlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHJlbGF0aXZlLmlzRW1wdHkoKSkgeworICAgIHVuc2lnbmVkIHJlbGF0aXZlTGVu
Z3RoID0gcmVsYXRpdmUubGVuZ3RoKCk7CisgICAgaWYgKCFyZWxhdGl2ZUxlbmd0aCkgewogICAg
ICAgICAqdGhpcyA9IGJhc2Uud2l0aG91dEZyYWdtZW50KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogaGFuZGxlIGludmFsaWQgVVJMcy4KLSAgICBjb25zdCBTdHJp
bmcmIGJhc2VTdHJpbmcgPSBiYXNlLm1fc3BlYy5zdHJpbmcoKTsKLSAgICBSYXdVUkxCdWZmZXI8
Y2hhciwgMTAyND4gb3V0cHV0QnVmZmVyOwotICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkgewot
ICAgICAgICBpZiAoYmFzZVN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2Vy
PExDaGFyLCBMQ2hhcj46OnBhcnNlVVJMV2l0aEJhc2UocmVsYXRpdmUuY2hhcmFjdGVyczgoKSwg
cmVsYXRpdmUubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nLmNoYXJhY3RlcnM4KCksIGJhc2VTdHJpbmcubGVu
Z3RoKCksIGJhc2UubV9zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXI8TENoYXIsIFVDaGFyPjo6cGFyc2VVUkxX
aXRoQmFzZShyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpLCByZWxhdGl2ZS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJp
bmcuY2hhcmFjdGVyczE2KCksIGJhc2VTdHJpbmcubGVuZ3RoKCksIGJhc2UubV9zZWdtZW50cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dEJ1ZmZlciwgbV9zZWdtZW50cyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoYmFzZVN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2VyPFVDaGFy
LCBMQ2hhcj46OnBhcnNlVVJMV2l0aEJhc2UocmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0
aXZlLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBiYXNlU3RyaW5nLmxlbmd0aCgp
LCBiYXNlLm1fc2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsIG1fc2VnbWVudHMpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgVVJMUGFyc2VyPFVDaGFyLCBVQ2hhcj46OnBhcnNlVVJMV2l0aEJh
c2UocmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZlLmxlbmd0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgYmFzZVN0cmluZy5sZW5ndGgoKSwgYmFzZS5tX3NlZ21lbnRzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
QnVmZmVyLCBtX3NlZ21lbnRzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3NwZWMgPSBVUkxT
dHJpbmcoU3RyaW5nKG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5sZW5ndGgoKSkp
OworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiBvdXRwdXRCdWZmZXI7CisgICAgY29uc3QgQ1N0cmlu
ZyYgYmFzZVN0ciA9IGJhc2UubV9zcGVjLm1fc3RyaW5nLnV0ZjgoKTsKKyAgICBib29sIGlzVmFs
aWQgPSBmYWxzZTsKKworICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkKKyAgICAgICAgaXNWYWxp
ZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlLm1f
c2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpKSwg
cmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBjaGFyc2V0Q29udmVydGVyICovIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKKyAg
ICBlbHNlCisgICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShi
YXNlU3RyLmRhdGEoKSwgYmFzZS5tX3NlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZl
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogY2hhcnNldENvbnZlcnRlciAqLyAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7CisKKyAgICBpZiAo
aXNWYWxpZCkKKyAgICAgICAgbV9zcGVjID0gVVJMU3RyaW5nKFN0cmluZyhvdXRwdXRCdWZmZXIu
ZGF0YSgpLCBvdXRwdXRCdWZmZXIubGVuZ3RoKCkpKTsKIH0KIAogUGFyc2VkVVJMIFBhcnNlZFVS
TDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKQEAgLTE3MSw3ICsxNzksOSBAQCBTdHJpbmcgUGFyc2Vk
VVJMOjpzZWdtZW50KGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50KSBjb25zdAogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBTdHJpbmcgc2VnbWVudCA9IG1fc3BlYy5zdHJpbmco
KS5zdWJzdHJpbmcoY29tcG9uZW50LmJlZ2luKCksIGNvbXBvbmVudC5sZW5ndGgoKSk7Ci0gICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghc2VnbWVudC5pc0VtcHR5KCksICJBIHZhbGlkIFVSTCBjb21w
b25lbnQgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKTsKKworICAgIC8vIEZJWE1FOiBHb29nbGVVUkwg
Y3JlYXRlIGVtcHR5IHNlZ21lbnRzLiBUaGlzIGhhcHBlbiBmb3IgdGhlIGZyYWdtZW50IGZvciB0
aGUgdGVzdCBmYXN0L3VybC9zZWdtZW50cy5odG1sCisgICAgLy8gQVNTRVJUX1dJVEhfTUVTU0FH
RSghc2VnbWVudC5pc0VtcHR5KCksICJBIHZhbGlkIFVSTCBjb21wb25lbnQgc2hvdWxkIG5vdCBi
ZSBlbXB0eS4iKTsKICAgICByZXR1cm4gc2VnbWVudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFy
c2VkVVJMLmgKaW5kZXggMDYwM2NmMTE2N2NmOGI5MDRhYThjNmFkNzYyMzcwYTc3YWU1MTRjYy4u
MDE0ZTI5MzY3YTgwMmNkMDgyNWNiYjZmNmY3ZTcyMTAzOTNlY2IwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
YXBpL1BhcnNlZFVSTC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBP
UlRfUFJJVkFURSBQYXJzZWRVUkwgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9zcGVjLnN0cmluZygpLmlzRW1wdHkoKTsgfQorICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3NwZWMuc3RyaW5nKCkuaXNOdWxsKCk7
IH0KIAogICAgIC8vIFJldHVybiBhIFVSTCBjb21wb25lbnQgb3IgYSBudWxsIFN0cmluZyBpZiB0
aGUgY29tcG9uZW50IGlzIHVuZGVmaW5lZCBmb3IgdGhlIFVSTC4KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIHNjaGVtZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9SYXdVUkxCdWZmZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvUmF3VVJMQnVm
ZmVyLmgKaW5kZXggNTlhN2YxOGFmNDViMjkzY2RiNTM0MjRkNTA1ZTE0ZmQ3OThmMjkyOS4uZTZm
MjM4YzI5ZjAzZmQzODY1MGIzNDgwNDJiZmMzOGMyYjQ4NmJlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdXJsL3NyYy9SYXdVUkxCdWZmZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1Jhd1VSTEJ1ZmZlci5oCkBAIC0xLDMwICsxLDMyIEBACi0vLyBDb3B5cmlnaHQgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBB
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
REFNQUdFLgorICovCiAKICNpZm5kZWYgUmF3VVJMQnVmZmVyX2gKICNkZWZpbmUgUmF3VVJMQnVm
ZmVyX2gKQEAgLTMyLDYgKzM0LDcgQEAKICNpZiBVU0UoV1RGVVJMKQogCiAjaW5jbHVkZSAiVVJM
QnVmZmVyLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEJ1ZmZlci5oIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxCdWZmZXIuaAppbmRleCA4NGE0Zjg1YzI2ZGFhMjIwMDZlNGJkNjc2NjI4
NWFhNjAyNzQ4NTljLi42ZWNjZDA0ZmE1Y2ZmMzI2NjdkZTA1YzI3MDQ3Zjg5Y2NhMmY2YTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMQnVmZmVyLmgKQEAgLTEsMzAgKzEsMzIgQEAKLS8vIENvcHly
aWdodCAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLyoKKyAqIENvcHlyaWdodCAyMDEwIEdv
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
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KIAogI2lmbmRlZiBVUkxCdWZmZXJfaAogI2RlZmluZSBV
UkxCdWZmZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbi5o
IGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2NjY0OWMw
MWJiOGY4NTU5MTE5MzI3NWJkMzkzZjlhY2FmMmEyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmgKQEAgLTAsMCArMSw2NDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
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
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFVSTENhbm9uX2gKKyNk
ZWZpbmUgVVJMQ2Fub25faAorCisjaW5jbHVkZSAiVVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJM
UGFyc2UuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNl
IFVSTENhbm9uaWNhbGl6ZXIgeworCisvLyBDaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gQ29u
dmVydHMgcXVlcnkgc3RyaW5ncyBpbnRvIGEgY3VzdG9tIGVuY29kaW5nLiBUaGUgZW1iZWRkZXIg
Y2FuIHN1cHBseSBhbgorLy8gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyB0byBpbnRlcmZh
Y2Ugd2l0aCB0aGVpciBvd24gY2hhcmFjdGVyIHNldAorLy8gY29udmVyc2lvbiBsaWJyYXJpZXMu
CisvLworLy8gRW1iZWRkZXJzIHdpbGwgd2FudCB0byBzZWUgdGhlIHVuaXQgdGVzdCBmb3IgdGhl
IElDVSB2ZXJzaW9uLgorCitjbGFzcyBDaGFyc2V0Q29udmVydGVyIHsKK3B1YmxpYzoKKyAgICBD
aGFyc2V0Q29udmVydGVyKCkgeyB9CisgICAgdmlydHVhbCB+Q2hhcnNldENvbnZlcnRlcigpIHsg
fQorCisgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGlucHV0IHN0cmluZyBmcm9tIFVURi0xNiB0
byB3aGF0ZXZlciBvdXRwdXQgZm9ybWF0IHRoZQorICAgIC8vIGNvbnZlcnRlciBzdXBwb3J0cy4g
VGhpcyBpcyB1c2VkIG9ubHkgZm9yIHRoZSBxdWVyeSBlbmNvZGluZyBjb252ZXJzaW9uLAorICAg
IC8vIHdoaWNoIGRvZXMgbm90IGZhaWwuIEluc3RlYWQsIHRoZSBjb252ZXJ0ZXIgc2hvdWxkIGlu
c2VydCAiaW52YWxpZAorICAgIC8vIGNoYXJhY3RlciIgY2hhcmFjdGVycyBpbiB0aGUgb3V0cHV0
IGZvciBpbnZhbGlkIHNlcXVlbmNlcywgYW5kIGRvIHRoZQorICAgIC8vIGJlc3QgaXQgY2FuLgor
ICAgIC8vCisgICAgLy8gSWYgdGhlIGlucHV0IGNvbnRhaW5zIGEgY2hhcmFjdGVyIG5vdCByZXBy
ZXNlbnRhYmxlIGluIHRoZSBvdXRwdXQKKyAgICAvLyBjaGFyYWN0ZXIgc2V0LCB0aGUgY29udmVy
dGVyIHNob3VsZCBhcHBlbmQgdGhlIEhUTUwgZW50aXR5IHNlcXVlbmNlIGluCisgICAgLy8gZGVj
aW1hbCwgKHN1Y2ggYXMgIiYjMjAzMjA7Iikgd2l0aCBlc2NhcGluZyBvZiB0aGUgYW1wZXJzYW5k
LCBudW1iZXIKKyAgICAvLyBzaWduLCBhbmQgc2VtaWNvbG9uIChpbiB0aGUgcHJldmlvdXMgZXhh
bXBsZSBpdCB3b3VsZCBiZQorICAgIC8vICIlMjYlMjMyMDMyMCUzQiIpLiBUaGlzIHJ1bGUgaXMg
YmFzZWQgb24gd2hhdCBJRSBkb2VzIGluIHRoaXMgc2l0dWF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCBDb252ZXJ0RnJvbVVURjE2KGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkgPSAwOworfTsKKworLy8gV2hpdGVzcGFjZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisvLyBTZWFyY2hlcyBmb3Igd2hpdGVzcGFjZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZy
b20gdGhlIG1pZGRsZSBvZiBVUkxzLCBhbmQKKy8vIHJlbW92ZXMgaXQuIFJlbW92ZWQgd2hpdGVz
cGFjZSBhcmUgdGFicyBhbmQgbmV3bGluZXMsIGJ1dCBOT1Qgc3BhY2VzLiBTcGFjZXMKKy8vIGFy
ZSBwcmVzZXJ2ZWQsIHdoaWNoIGlzIHdoYXQgbW9zdCBicm93c2VycyBkby4gQSBwb2ludGVyIHRv
IHRoZSBvdXRwdXQgd2lsbAorLy8gYmUgcmV0dXJuZWQsIGFuZCB0aGUgbGVuZ3RoIG9mIHRoYXQg
b3V0cHV0IHdpbGwgYmUgaW4gfG91dHB1dExlbmd0aHwuCisvLworLy8gVGhpcyBzaG91bGQgYmUg
Y2FsbGVkIGJlZm9yZSBwYXJzaW5nIGlmIHdoaXRlc3BhY2UgcmVtb3ZhbCBpcyBkZXNpcmVkICh3
aGljaAorLy8gaXQgbm9ybWFsbHkgaXMgd2hlbiB5b3UgYXJlIGNhbm9uaWNhbGl6aW5nKS4KKy8v
CisvLyBJZiBubyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBub3Qg
dXNlIHRoZSBidWZmZXIgYW5kIHdpbGwKKy8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGlucHV0
LCB0byBhdm9pZCB0aGUgZXh0cmEgY29weS4gSWYgbW9kaWZpY2F0aW9uIGlzCisvLyByZXF1aXJl
ZCwgdGhlIGdpdmVuIHxidWZmZXJ8IHdpbGwgYmUgdXNlZCBhbmQgdGhlIHJldHVybmVkIHBvaW50
ZXIgd2lsbAorLy8gcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLgorLy8KKy8v
IFRoZXJlZm9yZSwgY2FsbGVycyBzaG91bGQgbm90IHVzZSB0aGUgYnVmZmVyLCBzaW5jZSBpdCBt
YXkgYWN0dWFsbCBiZSBlbXB0eSwKKy8vIHVzZSB0aGUgY29tcHV0ZWQgcG9pbnRlciBhbmQgfG91
dHB1dExlbmd0aHwgaW5zdGVhZC4KK2NvbnN0IGNoYXIqIHJlbW92ZVVSTFdoaXRlc3BhY2UoY29u
c3QgY2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiwgaW50JiBv
dXRwdXRMZW5ndGgpOworY29uc3QgVUNoYXIqIHJlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgVUNo
YXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mLCBpbnQmIG91dHB1
dExlbmd0aCk7CisKKy8vIElETiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ29udmVydHMgdGhlIFVu
aWNvZGUgaW5wdXQgcmVwcmVzZW50aW5nIGEgaG9zdG5hbWUgdG8gQVNDSUkgdXNpbmcgSUROIHJ1
bGVzLgorLy8gVGhlIG91dHB1dCBtdXN0IGZhbGwgaW4gdGhlIEFTQ0lJIHJhbmdlLCBidXQgd2ls
bCBiZSBlbmNvZGVkIGluIFVURi0xNi4KKy8vCisvLyBPbiBzdWNjZXNzLCB0aGUgb3V0cHV0IHdp
bGwgYmUgZmlsbGVkIHdpdGggdGhlIEFTQ0lJIGhvc3QgbmFtZSBhbmQgaXQgd2lsbAorLy8gcmV0
dXJuIHRydWUuIFVubGlrZSBtb3N0IG90aGVyIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zLCB0
aGlzIGFzc3VtZXMgdGhhdAorLy8gdGhlIG91dHB1dCBpcyBlbXB0eS4gVGhlIGJlZ2lubmluZyBv
ZiB0aGUgaG9zdCB3aWxsIGJlIGF0IG9mZnNldCAwLCBhbmQKKy8vIHRoZSBsZW5ndGggb2YgdGhl
IG91dHB1dCB3aWxsIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgaG9zdCBuYW1lLgor
Ly8KKy8vIE9uIGVycm9yLCByZXR1cm5zIGZhbHNlLiBUaGUgb3V0cHV0IGluIHRoaXMgY2FzZSBp
cyB1bmRlZmluZWQuCitib29sIElETlRvQVNDSUkoY29uc3QgVUNoYXIqIHNyYywgaW50IHNvdXJj
ZUxlbmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KTsKKworLy8gUGllY2UtYnktcGllY2Ug
Y2Fub25pY2FsaXplcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8KKy8vIFRoZXNlIGluZGl2aWR1YWwgY2Fub25pY2FsaXplcnMgYXBwZW5kIHRoZSBj
YW5vbmljYWxpemVkIHZlcnNpb25zIG9mIHRoZQorLy8gY29ycmVzcG9uZGluZyBVUkwgY29tcG9u
ZW50IHRvIHRoZSBnaXZlbiBzdGQ6OnN0cmluZy4gVGhlIHNwZWMgYW5kIHRoZQorLy8gcHJldmlv
dXNseS1pZGVudGlmaWVkIHJhbmdlIG9mIHRoYXQgY29tcG9uZW50IGFyZSB0aGUgaW5wdXQuIFRo
ZSByYW5nZSBvZgorLy8gdGhlIGNhbm9uaWNhbGl6ZWQgY29tcG9uZW50IHdpbGwgYmUgd3JpdHRl
biB0byB0aGUgb3V0cHV0IGNvbXBvbmVudC4KKy8vCisvLyBUaGVzZSBmdW5jdGlvbnMgYWxsIGFw
cGVuZCB0byB0aGUgb3V0cHV0IHNvIHRoZXkgY2FuIGJlIGNoYWluZWQuIE1ha2Ugc3VyZQorLy8g
dGhlIG91dHB1dCBpcyBlbXB0eSB3aGVuIHlvdSBzdGFydC4KKy8vCisvLyBUaGVzZSBmdW5jdGlv
bnMgcmV0dXJucyBib29sZWFuIHZhbHVlcyBpbmRpY2F0aW5nIHN1Y2Nlc3MuIE9uIGZhaWx1cmUs
IHRoZXkKKy8vIHdpbGwgYXR0ZW1wdCB0byB3cml0ZSBzb21ldGhpbmcgcmVhc29uYWJsZSB0byB0
aGUgb3V0cHV0IHNvIHRoYXQsIGlmCisvLyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIHRoZXkgd2ls
bCByZWNvZ25pc2UgaXQgYXMgc29tZXRoaW5nIHRoYXQncyBtZXNzZWQgdXAuCisvLyBOb3RoaW5n
IG1vcmUgc2hvdWxkIGV2ZXIgYmUgZG9uZSB3aXRoIHRoZXNlIGludmFsaWQgVVJMcywgaG93ZXZl
ci4KKworLy8gU2NoZW1lOiBBcHBlbmRzIHRoZSBzY2hlbWUgYW5kIGNvbG9uIHRvIHRoZSBVUkwu
IFRoZSBvdXRwdXQgY29tcG9uZW50IHdpbGwKKy8vIGluZGljYXRlIHRoZSByYW5nZSBvZiBjaGFy
YWN0ZXJzIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBjb2xvbi4KKy8vCisvLyBDYW5vbmlj
YWwgVVJMcyBhbHdheXMgaGF2ZSBhIHNjaGVtZS4gSWYgdGhlIHNjaGVtZSBpcyBub3QgcHJlc2Vu
dCBpbiB0aGUKKy8vIGlucHV0LCB0aGlzIHdpbGwganVzdCB3cml0ZSB0aGUgY29sb24gdG8gaW5k
aWNhdGUgYW4gZW1wdHkgc2NoZW1lLiBEb2VzIG5vdAorLy8gYXBwZW5kIHNsYXNoZXMgd2hpY2gg
d2lsbCBiZSBuZWVkZWQgYmVmb3JlIGFueSBhdXRob3JpdHkgY29tcG9uZW50cyBmb3IgbW9zdAor
Ly8gVVJMcy4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGlu
Zy4KK2Jvb2wgY2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgc2NoZW1lLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91cHV0U2No
ZW1lKTsKK2Jvb2wgY2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXB1
dFNjaGVtZSk7CisKKy8vIFVzZXIgaW5mbzogdXNlcm5hbWUvcGFzc3dvcmQuIElmIHByZXNlbnQs
IHRoaXMgd2lsbCBhZGQgdGhlIGRlbGltaXRlcnMgc28KKy8vIHRoZSBvdXRwdXQgd2lsbCBiZSAi
PHVzZXJuYW1lPjo8cGFzc3dvcmQ+QCIgb3IgIjx1c2VybmFtZT5AIi4gRW1wdHkKKy8vIHVzZXJu
YW1lL3Bhc3N3b3JkIHBhaXJzLCBvciBlbXB0eSBwYXNzd29yZHMsIHdpbGwgZ2V0IGNvbnZlcnRl
ZCB0bworLy8gbm9uZXhpc3RhbnQgaW4gdGhlIGNhbm9uaWNhbCB2ZXJzaW9uLgorLy8KKy8vIFRo
ZSBjb21wb25lbnRzIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHJlZmVyIHRvIHJhbmdl
cyBpbiB0aGUKKy8vIHJlc3BlY3RpdmUgc291cmNlIHN0cmluZ3MuIFVzdWFsbHksIHRoZXNlIHdp
bGwgYmUgdGhlIHNhbWUgc3RyaW5nLCB3aGljaAorLy8gaXMgbGVnYWwgYXMgbG9uZyBhcyB0aGUg
dHdvIGNvbXBvbmVudHMgZG9uJ3Qgb3ZlcmxhcC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiBy
ZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4KK2Jvb2wgY2Fub25pY2FsaXplVXNlckluZm8oY29uc3Qg
Y2hhciogdXNlcm5hbWVTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIGNvbnN0
IGNoYXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91
dHB1dFVzZXJuYW1lLCBVUkxDb21wb25lbnQmIG91dHB1dFBhc3N3b3JkKTsKK2Jvb2wgY2Fub25p
Y2FsaXplVXNlckluZm8oY29uc3QgVUNoYXIqIHVzZXJuYW1lU291cmNlLCBjb25zdCBVUkxDb21w
b25lbnQmIHVzZXJuYW1lLCBjb25zdCBVQ2hhciogcGFzc3dvcmRTb3VyY2UsIGNvbnN0IFVSTENv
bXBvbmVudCYgcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTENvbXBvbmVudCYgb3V0cHV0VXNlcm5hbWUsIFVSTENvbXBvbmVudCYgb3V0cHV0
UGFzc3dvcmQpOworCisKKy8vIFRoaXMgc3RydWN0dXJlIGhvbGRzIGRldGFpbGVkIHN0YXRlIGV4
cG9ydGVkIGZyb20gdGhlIElQL0hvc3QgY2Fub25pY2FsaXplcnMuCisvLyBBZGRpdGlvbmFsIGZp
ZWxkcyBtYXkgYmUgYWRkZWQgYXMgY2FsbGVycyByZXF1aXJlIHRoZW0uCitzdHJ1Y3QgQ2Fub25I
b3N0SW5mbyB7CisgICAgQ2Fub25Ib3N0SW5mbygpCisgICAgICAgIDogZmFtaWx5KE5FVVRSQUwp
CisgICAgICAgICwgaXB2NENvbXBvbmVudHNDb3VudCgwKQorICAgICAgICAsIG91cHV0SG9zdCgp
CisgICAgeworICAgIH0KKworICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHRlc3QgaWYg
ZmFtaWx5IGlzIGFuIElQIGFkZHJlc3MuCisgICAgYm9vbCBJc0lQQWRkcmVzcygpIGNvbnN0IHsg
cmV0dXJuIGZhbWlseSA9PSBJUFY0IHx8IGZhbWlseSA9PSBJUFY2OyB9CisKKyAgICAvLyBUaGlz
IGZpZWxkIHN1bW1hcml6ZXMgaG93IHRoZSBpbnB1dCB3YXMgY2xhc3NpZmllZCBieSB0aGUgY2Fu
b25pY2FsaXplci4KKyAgICBlbnVtIEZhbWlseSB7CisgICAgICAgIC8vIC0gRG9lc24ndCByZXNl
bWJsZSBhbiBJUCBhZGRyZXNzLiBBcyBmYXIgYXMgdGhlIElQCisgICAgICAgIC8vIGNhbm9uaWNh
bGl6ZXIgaXMgY29uY2VybmVkLCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhCisgICAgICAgIC8v
ICAgaG9zdG5hbWUuCisgICAgICAgIE5FVVRSQUwsCisKKyAgICAgICAgLy8gLSBBbG1vc3QgYW4g
SVAsIGJ1dCB3YXMgbm90IGNhbm9uaWNhbGl6ZWQuIFRoaXMgY291bGQgYmUgYW4KKyAgICAgICAg
Ly8gSVB2NCBhZGRyZXNzIHdoZXJlIHRydW5jYXRpb24gb2NjdXJyZWQsIG9yIHNvbWV0aGluZwor
ICAgICAgICAvLyBjb250YWluaW5nIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgOltdIHdoaWNoIGRp
ZCBub3QgcGFyc2UKKyAgICAgICAgLy8gYXMgYW4gSVB2NiBhZGRyZXNzLiBOZXZlciBhdHRlbXB0
IHRvIGNvbm5lY3QgdG8gdGhpcworICAgICAgICAvLyBhZGRyZXNzLCBiZWNhdXNlIGl0IG1pZ2h0
IGFjdHVhbGx5IHN1Y2NlZWQhCisgICAgICAgIEJST0tFTiwKKworICAgICAgICBJUFY0LCAvLyAt
IFN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIGFzIGFuIElQdjQgYWRkcmVzcy4KKyAgICAgICAg
SVBWNiwgLy8gLSBTdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCBhcyBhbiBJUHY2IGFkZHJlc3Mu
CisgICAgfTsKKyAgICBGYW1pbHkgZmFtaWx5OworCisgICAgLy8gSWYgfGZhbWlseXwgaXMgSVBW
NCwgdGhlbiB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygbm9uZW1wdHkgZG90LXNlcGFyYXRlZAorICAg
IC8vIGNvbXBvbmVudHMgaW4gdGhlIGlucHV0IHRleHQsIGZyb20gMSB0byA0LiBJZiB8ZmFtaWx5
fCBpcyBub3QgSVBWNCwKKyAgICAvLyB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAgICBpbnQg
aXB2NENvbXBvbmVudHNDb3VudDsKKworICAgIC8vIExvY2F0aW9uIG9mIGhvc3Qgd2l0aGluIHRo
ZSBjYW5vbmljYWxpemVkIG91dHB1dC4KKyAgICAvLyBjYW5vbmljYWxpemVJUEFkZHJlc3MoKSBv
bmx5IHNldHMgdGhpcyBmaWVsZCBpZiB8ZmFtaWx5fCBpcyBJUFY0IG9yIElQVjYuCisgICAgVVJM
Q29tcG9uZW50IG91cHV0SG9zdDsKKworICAgIC8vIHxhZGRyZXNzfCBjb250YWlucyB0aGUgcGFy
c2VkIElQIEFkZHJlc3MgKGlmIGFueSkgaW4gaXRzIGZpcnN0CisgICAgLy8gQWRkcmVzc0xlbmd0
aCgpIGJ5dGVzLCBpbiBuZXR3b3JrIG9yZGVyLiBJZiBJc0lQQWRkcmVzcygpIGlzIGZhbHNlCisg
ICAgLy8gQWRkcmVzc0xlbmd0aCgpIHdpbGwgcmV0dXJuIHplcm8gYW5kIHRoZSBjb250ZW50IG9m
IHxhZGRyZXNzfCBpcyB1bmRlZmluZWQuCisgICAgdW5zaWduZWQgY2hhciBhZGRyZXNzWzE2XTsK
KworICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9m
IGFuIElQIGFkZHJlc3MgY29ycmVzcG9uZGluZworICAgIC8vIHRvIHRoZSBjdXJyZW50IElQIHZl
cnNpb24gaW4gfGZhbWlseXwsIGlmIGFueS4gRm9yIHVzZSB3aXRoIHxhZGRyZXNzfC4KKyAgICBp
bnQgQWRkcmVzc0xlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFtaWx5ID09
IElQVjQgPyA0IDogKGZhbWlseSA9PSBJUFY2ID8gMTYgOiAwKTsKKyAgICB9Cit9OworCisvLyBI
b3N0LgorLy8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIFVURi04IGVuY29kaW5nLiBV
c2UgdGhpcyB2ZXJzaW9uIHdoZW4geW91IG9ubHkKKy8vIG5lZWQgdG8ga25vdyB3aGV0aGVyIGNh
bm9uaWNhbGl6YXRpb24gc3VjY2VlZGVkLgorYm9vbCBjYW5vbmljYWxpemVIb3N0KGNvbnN0IGNo
YXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJM
Q29tcG9uZW50JiBvdXB1dEhvc3QpOworYm9vbCBjYW5vbmljYWxpemVIb3N0KGNvbnN0IFVDaGFy
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENv
bXBvbmVudCYgb3VwdXRIb3N0KTsKKworLy8gSVAgYWRkcmVzc2VzLgorLy8KKy8vIFRyaWVzIHRv
IGludGVycHJldCB0aGUgZ2l2ZW4gaG9zdCBuYW1lIGFzIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNz
LiBJZiBpdCBpcworLy8gYW4gSVAgYWRkcmVzcywgaXQgd2lsbCBjYW5vbmljYWxpemUgaXQgYXMg
c3VjaCwgYXBwZW5kaW5nIGl0IHRvIHxvdXRwdXR8LgorLy8gQWRkaXRpb25hbCBzdGF0dXMgaW5m
b3JtYXRpb24gaXMgcmV0dXJuZWQgdmlhIHRoZSB8Kmhvc3RJbmZvfCBwYXJhbWV0ZXIuCisvLyBT
ZWUgdGhlIGRlZmluaXRpb24gb2YgQ2Fub25Ib3N0SW5mbyBhYm92ZSBmb3IgZGV0YWlscy4KKy8v
CisvLyBUaGlzIGlzIGNhbGxlZCBBVVRPTUFUSUNBTExZIGZyb20gdGhlIGhvc3QgY2Fub25pY2Fs
aXplciwgd2hpY2ggZW5zdXJlcyB0aGF0CisvLyB0aGUgaW5wdXQgaXMgdW5lc2NhcGVkIGFuZCBu
YW1lLXByZXBwZWQsIGV0Yy4gSXQgc2hvdWxkIG5vdCBub3JtYWxseSBiZQorLy8gbmVjZXNzYXJ5
IG9yIHdpc2UgdG8gY2FsbCB0aGlzIGRpcmVjdGx5Lgordm9pZCBjYW5vbmljYWxpemVJUEFkZHJl
c3MoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8
Y2hhcj4mLCBDYW5vbkhvc3RJbmZvJik7Cit2b2lkIGNhbm9uaWNhbGl6ZUlQQWRkcmVzcyhjb25z
dCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4m
LCBDYW5vbkhvc3RJbmZvJik7CisKKy8vIFBvcnQ6IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhl
IGNvbG9uIGZvciB0aGUgcG9ydCBpZiBhIHBvcnQgaXMgcHJlc2VudC4KKy8vIFRoZSBjYWxsZXIg
Y2FuIHBhc3MgVVJMUGFyc2VyOjpQT1JUX1VOU1BFQ0lGSUVEIGFzIHRoZQorLy8gZGVmYXVsdFBv
cnRGb3JTY2hlbWUgYXJndW1lbnQgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBwb3J0LgorLy8KKy8v
IFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIFVURi04IGVuY29kaW5nLgorYm9vbCBjYW5vbmlj
YWxpemVQb3J0KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCwgaW50
IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91
cHV0UG9ydCk7Citib29sIGNhbm9uaWNhbGl6ZVBvcnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgcG9ydCwgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLCBVUkxCdWZmZXI8
Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91cHV0UG9ydCk7CisKKy8vIFJldHVybnMgdGhlIGRlZmF1
bHQgcG9ydCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbCBzY2hlbWUsIG9yIFBPUlRfVU5TUEVDSUZJ
RUQKKy8vIGlmIHRoZSBzY2hlbWUgaXMgdW5rbm93bi4KK2ludCBkZWZhdWx0UG9ydEZvclNjaGVt
ZShjb25zdCBjaGFyKiBzY2hlbWUsIGludCBzY2hlbWVMZW5ndGgpOworCisvLyBQYXRoLiBJZiB0
aGUgaW5wdXQgZG9lcyBub3QgYmVnaW4gaW4gYSBzbGFzaCAoaW5jbHVkaW5nIGlmIHRoZSBpbnB1
dCBpcworLy8gZW1wdHkpLCB3ZSdsbCBwcmVwZW5kIGEgc2xhc2ggdG8gdGhlIHBhdGggdG8gbWFr
ZSBpdCBjYW5vbmljYWwuCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gYXNzdW1lcyBVVEYtOCBl
bmNvZGluZywgYnV0IGRvZXMgbm90IHZlcmlmeSB0aGUgdmFsaWRpdHkKKy8vIG9mIHRoZSBVVEYt
OCAoaS5lLiwgeW91IGNhbiBoYXZlIGludmFsaWQgVVRGLTggc2VxdWVuY2VzLCBpbnZhbGlkCisv
LyBjaGFyYWN0ZXJzLCBldGMuKS4gTm9ybWFsbHksIFVSTHMgd2lsbCBjb21lIGluIGFzIFVURi0x
Niwgc28gdGhpcyBpc24ndAorLy8gYW4gaXNzdWUuIFNvbWVib2R5IGdpdmluZyB1cyBhbiA4LWJp
dCBwYXRoIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nCisvLyB0aGUgcGF0aCB0aGF0IHRo
ZSBzZXJ2ZXIgZXhwZWN0cyAod2UnbGwgZXNjYXBlIGhpZ2gtYml0IGNoYXJhY3RlcnMpLCBzbwor
Ly8gaWYgc29tZXRoaW5nIGlzIGludmFsaWQsIGl0J3MgdGhlaXIgcHJvYmxlbS4KK2Jvb2wgQ2Fu
b25pY2FsaXplUGF0aChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgs
IFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCk7Citib29sIENhbm9u
aWNhbGl6ZVBhdGgoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwg
VVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKTsKKworLy8gQ2Fub25p
Y2FsaXplcyB0aGUgaW5wdXQgYXMgYSBmaWxlIHBhdGguIFRoaXMgaXMgbGlrZSBDYW5vbmljYWxp
emVQYXRoIGV4Y2VwdAorLy8gdGhhdCBpdCBhbHNvIGhhbmRsZXMgV2luZG93cyBkcml2ZSBzcGVj
cy4gRm9yIGV4YW1wbGUsIHRoZSBwYXRoIGNhbiBiZWdpbgorLy8gd2l0aCAiY3xcIiBhbmQgaXQg
d2lsbCBnZXQgcHJvcGVybHkgY2Fub25pY2FsaXplZCB0byAiQzovIi4KKy8vIFRoZSBzdHJpbmcg
d2lsbCBiZSBhcHBlbmRlZCB0byB8b3V0cHV0fCBhbmQgfG91dHB1dFBhdGh8IHdpbGwgYmUgdXBk
YXRlZC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4K
K2Jvb2wgRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgp
OworYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0aChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dFBh
dGgpOworCisvLyBRdWVyeTogUHJlcGVuZHMgdGhlID8gaWYgbmVlZGVkLgorLy8KKy8vIFRoZSA4
LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIHRoZSBpbnB1dCB0byBiZSBVVEYtOCBlbmNvZGluZy4gSW5j
b3JyZWN0bHkKKy8vIGVuY29kZWQgY2hhcmFjdGVycyAoaW4gVVRGLTggb3IgVVRGLTE2KSB3aWxs
IGJlIHJlcGxhY2VkIHdpdGggdGhlIFVuaWNvZGUKKy8vICJpbnZhbGlkIGNoYXJhY3Rlci4iIFRo
aXMgZnVuY3Rpb24gY2FuIG5vdCBmYWlsLCB3ZSBhbHdheXMganVzdCB0cnkgdG8gZG8KKy8vIG91
ciBiZXN0IGZvciBjcmF6eSBpbnB1dCBoZXJlIHNpbmNlIHdlYiBwYWdlcyBjYW4gc2V0IGl0IHRo
ZW1zZWx2ZXMuCisvLworLy8gVGhpcyB3aWxsIGNvbnZlcnQgdGhlIGdpdmVuIGlucHV0IGludG8g
dGhlIG91dHB1dCBlbmNvZGluZyB0aGF0IHRoZSBnaXZlbgorLy8gY2hhcmFjdGVyIHNldCBjb252
ZXJ0ZXIgb2JqZWN0IHByb3ZpZGVzLiBUaGUgY29udmVydGVyIHdpbGwgb25seSBiZSBjYWxsZWQK
Ky8vIGlmIG5lY2Vzc2FyeSwgZm9yIEFTQ0lJIGlucHV0LCBubyBjb252ZXJzaW9ucyBhcmUgbmVj
ZXNzYXJ5LgorLy8KKy8vIFRoZSBjb252ZXJ0ZXIgY2FuIGJlIG51bGwuIEluIHRoaXMgY2FzZSwg
dGhlIG91dHB1dCBlbmNvZGluZyB3aWxsIGJlIFVURi04Lgordm9pZCBDYW5vbmljYWxpemVRdWVy
eShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29u
dmVydGVyKiwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeSk7Cit2
b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9u
ZW50KiBvdXRwdXRRdWVyeSk7CisKKy8vIFJlZjogUHJlcGVuZHMgdGhlICMgaWYgbmVlZGVkLiBU
aGUgb3V0cHV0IHdpbGwgYmUgVVRGLTggKHRoaXMgaXMgdGhlIG9ubHkKKy8vIGNhbm9uaWNhbGl6
ZXIgdGhhdCBkb2VzIG5vdCBwcm9kdWNlIEFTQ0lJIG91dHB1dCkuIFRoZSBvdXRwdXQgaXMKKy8v
IGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgVVRGLTguCisvLworLy8gVGhpcyBmdW5jdGlvbiB3aWxs
IG5vdCBmYWlsLiBJZiB0aGUgaW5wdXQgaXMgaW52YWxpZCBVVEYtOC9VVEYtMTYsIHdlJ2xsIHVz
ZQorLy8gdGhlICJVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlciIgZm9yIHRoZSBjb25mdXNp
bmcgYml0cyBhbmQgY29weSB0aGUgcmVzdC4KK3ZvaWQgY2Fub25pY2FsaXplRnJhZ21lbnQoY29u
c3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4m
LCBVUkxDb21wb25lbnQmIG91dHB1dEZyYWdtZW50KTsKK3ZvaWQgY2Fub25pY2FsaXplRnJhZ21l
bnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVy
PGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXRwdXRGcmFnbWVudCk7CisKKy8vIEZ1bGwgY2Fub25p
Y2FsaXplciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vCisvLyBUaGVzZSBmdW5jdGlvbnMgcmVwbGFjZSBhbnkgc3RyaW5nIGNvbnRl
bnRzLCByYXRoZXIgdGhhbiBhcHBlbmQgYXMgYWJvdmUuCisvLyBTZWUgdGhlIGFib3ZlIHBpZWNl
LWJ5LXBpZWNlIGZ1bmN0aW9ucyBmb3IgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8KKy8vIGNhbm9u
aWNhbGl6aW5nIGluZGl2aWR1YWwgY29tcG9uZW50cy4KKy8vCisvLyBUaGUgb3V0cHV0IHdpbGwg
YmUgQVNDSUkgZXhjZXB0IHRoZSByZWZlcmVuY2UgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBVVEYt
OC4KKy8vCisvLyBUaGUgOC1iaXQgdmVyc2lvbnMgcmVxdWlyZSBVVEYtOCBlbmNvZGluZy4KKwor
Ly8gVXNlIGZvciBzdGFuZGFyZCBVUkxzIHdpdGggYXV0aG9yaXRpZXMgYW5kIHBhdGhzLgorYm9v
bCBDYW5vbmljYWxpemVTdGFuZGFyZFVSTChjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0
aCwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252
ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVS
TFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBDYW5vbmljYWxpemVTdGFuZGFyZFVSTChj
b25zdCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJz
ZWQsIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsK
KworLy8gVXNlIGZvciBmaWxlIFVSTHMuCitib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3Qg
Y2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIENo
YXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworYm9vbCBDYW5v
bmljYWxpemVGaWxlVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3Qg
VVJMU2VnbWVudHMmIHBhcnNlZCwgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCk7CisKKy8vIFVzZSBmb3IgZmlsZXN5c3RlbSBVUkxzLgorYm9vbCBjYW5vbmlj
YWxpemVGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJz
ZWQpOworYm9vbCBjYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBj
b25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxT
ZWdtZW50cyYgb3V0cHV0UGFyc2VkKTsKKworLy8gVXNlIGZvciBwYXRoIFVSTHMgc3VjaCBhcyBq
YXZhc2NyaXB0LiBUaGlzIGRvZXMgbm90IG1vZGlmeSB0aGUgcGF0aCBpbiBhbnkKKy8vIHdheSwg
Zm9yIGV4YW1wbGUsIGJ5IGVzY2FwaW5nIGl0LgorYm9vbCBjYW5vbmljYWxpemVQYXRoVVJMKGNv
bnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFy
PiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpOworYm9vbCBjYW5vbmljYWxpemVQ
YXRoVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKTsKKworLy8gVXNl
IGZvciBtYWlsdG8gVVJMcy4gVGhpcyAiY2Fub25pY2FsaXplcyIgdGhlIHVybCBpbnRvIGEgcGF0
aCBhbmQgcXVlcnkKKy8vIGNvbXBvbmVudC4gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBtZXJnZSAi
dG8iIGZpZWxkcy4gSXQgdXNlcyBVVEYtOCBmb3IKKy8vIHRoZSBxdWVyeSBlbmNvZGluZyBpZiB0
aGVyZSBpcyBhIHF1ZXJ5LiBUaGlzIGlzIGJlY2F1c2UgYSBtYWlsdG8gVVJMIGlzCisvLyByZWFs
bHkgaW50ZW5kZWQgZm9yIGFuIGV4dGVybmFsIG1haWwgcHJvZ3JhbSwgYW5kIHRoZSBlbmNvZGlu
ZyBvZiBhIHBhZ2UsCisvLyBldGMuIHdoaWNoIHdvdWxkIGluZmx1ZW5jZSBhIHF1ZXJ5IGVuY29k
aW5nIG5vcm1hbGx5IGFyZSBpcnJlbGV2YW50LgorYm9vbCBjYW5vbmljYWxpemVNYWlsdG9VUkwo
Y29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNo
YXI+JiwgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCk7Citib29sIGNhbm9uaWNhbGl6ZU1haWx0
b1VSTChjb25zdCBVQ2hhciogc3BlYywgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1
ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpOworCisvLyBQYXJ0IHJlcGxh
Y2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKy8vIEludGVybmFsIHN0cnVjdHVyZSB1c2VkIGZvciBzdG9yaW5nIHNlcGFy
YXRlIHN0cmluZ3MgZm9yIGVhY2ggY29tcG9uZW50LgorLy8gVGhlIGJhc2ljIGNhbm9uaWNhbGl6
YXRpb24gZnVuY3Rpb25zIHVzZSB0aGlzIHN0cnVjdHVyZSBpbnRlcm5hbGx5IHNvIHRoYXQKKy8v
IGNvbXBvbmVudCByZXBsYWNlbWVudCAoZGlmZmVyZW50IHN0cmluZ3MgZm9yIGRpZmZlcmVudCBj
b21wb25lbnRzKSBjYW4gYmUKKy8vIHRyZWF0ZWQgb24gdGhlIHNhbWUgY29kZSBwYXRoIGFzIHJl
Z3VsYXIgY2Fub25pY2FsaXphdGlvbiAodGhlIHNhbWUgc3RyaW5nCisvLyBmb3IgZWFjaCBjb21w
b25lbnQpLgorLy8KKy8vIEEgVVJMU2VnbWVudHMgc3RydWN0dXJlIHVzdWFsbHkgZ29lcyBhbG9u
ZyB3aXRoIHRoaXMuIFRob3NlCisvLyBjb21wb25lbnRzIGlkZW50aWZ5IG9mZnNldHMgd2l0aGlu
IHRoZXNlIHN0cmluZ3MsIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlCisvLyBpbiB0aGUgc2FtZSBz
dHJpbmcsIG9yIHNwcmVhZCBhcmJpdHJhcmlseSBhY3Jvc3MgZGlmZmVyZW50IG9uZXMuCisvLwor
Ly8gVGhpcyBzdHJ1Y3R1cmVzIGRvZXMgbm90IG93biBhbnkgZGF0YS4gSXQgaXMgdGhlIGNhbGxl
cidzIHJlc3BvbnNpYmlsaXR5IHRvCisvLyBlbnN1cmUgdGhhdCB0aGUgZGF0YSB0aGUgcG9pbnRl
cnMgcG9pbnQgdG8gc3RheXMgaW4gc2NvcGUgYW5kIGlzIG5vdAorLy8gbW9kaWZpZWQuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RydWN0IFVSTENvbXBvbmVudFNvdXJjZSB7
CisgICAgLy8gQ29uc3RydWN0b3Igbm9ybWFsbHkgdXNlZCBieSBjYWxsZXJzIHdpc2hpbmcgdG8g
cmVwbGFjZSBjb21wb25lbnRzLiBUaGlzCisgICAgLy8gd2lsbCBtYWtlIHRoZW0gYWxsIG51bGws
IHdoaWNoIGlzIG5vIHJlcGxhY2VtZW50LiBUaGUgY2FsbGVyIHdvdWxkIHRoZW4KKyAgICAvLyBv
dmVycmlkZSB0aGUgY29tcG9uZW50cyB0aGV5IHdhbnQgdG8gcmVwbGFjZS4KKyAgICBVUkxDb21w
b25lbnRTb3VyY2UoKQorICAgICAgICA6IHNjaGVtZSgwKQorICAgICAgICAsIHVzZXJuYW1lKDAp
CisgICAgICAgICwgcGFzc3dvcmQoMCkKKyAgICAgICAgLCBob3N0KDApCisgICAgICAgICwgcG9y
dCgwKQorICAgICAgICAsIHBhdGgoMCkKKyAgICAgICAgLCBxdWVyeSgwKQorICAgICAgICAsIHJl
ZigwKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBub3JtYWxseSB1c2VkIGlu
dGVybmFsbHkgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIGNvbXBvbmVudHMgdG8KKyAgICAvLyBwb2lu
dCB0byB0aGUgc2FtZSBzcGVjLgorICAgIGV4cGxpY2l0IFVSTENvbXBvbmVudFNvdXJjZShjb25z
dCBDaGFyYWN0ZXJUeXBlKiBkZWZhdWx0VmFsdWUpCisgICAgICAgIDogc2NoZW1lKGRlZmF1bHRW
YWx1ZSkKKyAgICAgICAgLCB1c2VybmFtZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgcGFzc3dv
cmQoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIGhvc3QoZGVmYXVsdFZhbHVlKQorICAgICAgICAs
IHBvcnQoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIHBhdGgoZGVmYXVsdFZhbHVlKQorICAgICAg
ICAsIHF1ZXJ5KGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgLCByZWYoZGVmYXVsdFZhbHVlKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzY2hlbWU7CisgICAgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogdXNlcm5hbWU7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcGFzc3dv
cmQ7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogaG9zdDsKKyAgICBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBwb3J0OworICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHBhdGg7CisgICAgY29uc3QgQ2hh
cmFjdGVyVHlwZSogcXVlcnk7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcmVmOworfTsKKwor
Ly8gVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIG9uIG1vZGlmeWluZyBh
IFVSTC4gRWFjaCBjb21wb25lbnQKKy8vIG1heSBlaXRoZXIgYmUgbGVmdCB1bmNoYW5nZWQsIHJl
cGxhY2VkLCBvciBkZWxldGVkLgorLy8KKy8vIEJ5IGRlZmF1bHQsIGVhY2ggY29tcG9uZW50IGlz
IHVuY2hhbmdlZC4gRm9yIHRob3NlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUKKy8vIG1vZGlm
aWVkLCBjYWxsIGVpdGhlciBTZXQqIG9yIENsZWFyKiB0byBtb2RpZnkgaXQuCisvLworLy8gVGhl
IHN0cmluZyBwYXNzZWQgdG8gU2V0KiBmdW5jdGlvbnMgRE9FUyBOT1QgR0VUIENPUElFRCBBTkQg
TVVTVCBCRSBLRVBUCisvLyBJTiBTQ09QRSBCWSBUSEUgQ0FMTEVSIGZvciBhcyBsb25nIGFzIHRo
aXMgb2JqZWN0IGV4aXN0cyEKKy8vCisvLyBQcmVmZXIgdGhlIDgtYml0IHJlcGxhY2VtZW50IHZl
cnNpb24gaWYgcG9zc2libGUgc2luY2UgaXQgaXMgbW9yZSBlZmZpY2llbnQuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorY2xhc3MgUmVwbGFjZW1lbnRzIHsKK3B1YmxpYzoKKyAg
ICBSZXBsYWNlbWVudHMoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTY2hlbWUKKyAgICB2b2lk
IFNldFNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQmIGNv
bXApCisgICAgeworICAgICAgICBtX3NvdXJjZXMuc2NoZW1lID0gczsKKyAgICAgICAgbV9zZWdt
ZW50cy5zY2hlbWUgPSBjb21wOworICAgIH0KKyAgICAvLyBOb3RlOiB3ZSBkb24ndCBoYXZlIGEg
Q2xlYXJTY2hlbWUgc2luY2UgdGhpcyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLgorICAgIGJvb2wg
SXNTY2hlbWVPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMuc2NoZW1lOyB9
CisKKyAgICAvLyBVc2VybmFtZQorICAgIHZvaWQgU2V0VXNlcm5hbWUoY29uc3QgQ2hhcmFjdGVy
VHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQorICAgIHsKKyAgICAgICAgbV9zb3Vy
Y2VzLnVzZXJuYW1lID0gczsKKyAgICAgICAgbV9zZWdtZW50cy51c2VybmFtZSA9IGNvbXA7Cisg
ICAgfQorICAgIHZvaWQgQ2xlYXJVc2VybmFtZSgpCisgICAgeworICAgICAgICBtX3NvdXJjZXMu
dXNlcm5hbWUgPSBQbGFjZWhvbGRlcigpOworICAgICAgICBtX3NlZ21lbnRzLnVzZXJuYW1lID0g
VVJMQ29tcG9uZW50KCk7CisgICAgfQorICAgIGJvb2wgSXNVc2VybmFtZU92ZXJyaWRkZW4oKSBj
b25zdCB7IHJldHVybiAhIW1fc291cmNlcy51c2VybmFtZTsgfQorCisgICAgLy8gUGFzc3dvcmQK
KyAgICB2b2lkIFNldFBhc3N3b3JkKGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENv
bXBvbmVudCYgY29tcCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5wYXNzd29yZCA9IHM7Cisg
ICAgICAgIG1fc2VnbWVudHMucGFzc3dvcmQgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFy
UGFzc3dvcmQoKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnBhc3N3b3JkID0gUGxhY2Vob2xk
ZXIoKTsKKyAgICAgICAgbV9zZWdtZW50cy5wYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworICAg
IH0KKyAgICBib29sIElzUGFzc3dvcmRPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3Nv
dXJjZXMucGFzc3dvcmQ7IH0KKworICAgIC8vIEhvc3QKKyAgICB2b2lkIFNldEhvc3QoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQorICAgIHsKKyAgICAg
ICAgbV9zb3VyY2VzLmhvc3QgPSBzOworICAgICAgICBtX3NlZ21lbnRzLmhvc3QgPSBjb21wOwor
ICAgIH0KKyAgICB2b2lkIENsZWFySG9zdCgpCisgICAgeworICAgICAgICBtX3NvdXJjZXMuaG9z
dCA9IFBsYWNlaG9sZGVyKCk7CisgICAgICAgIG1fc2VnbWVudHMuaG9zdCA9IFVSTENvbXBvbmVu
dCgpOworICAgIH0KKyAgICBib29sIElzSG9zdE92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAh
IW1fc291cmNlcy5ob3N0OyB9CisKKyAgICAvLyBQb3J0CisgICAgdm9pZCBTZXRQb3J0KGNvbnN0
IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKKyAgICB7CisgICAg
ICAgIG1fc291cmNlcy5wb3J0ID0gczsKKyAgICAgICAgbV9zZWdtZW50cy5wb3J0ID0gY29tcDsK
KyAgICB9CisgICAgdm9pZCBDbGVhclBvcnQoKQorICAgIHsKKyAgICAgICAgbV9zb3VyY2VzLnBv
cnQgPSBQbGFjZWhvbGRlcigpOworICAgICAgICBtX3NlZ21lbnRzLnBvcnQgPSBVUkxDb21wb25l
bnQoKTsKKyAgICB9CisgICAgYm9vbCBJc1BvcnRPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4g
ISFtX3NvdXJjZXMucG9ydDsgfQorCisgICAgLy8gUGF0aAorICAgIHZvaWQgU2V0UGF0aChjb25z
dCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXApCisgICAgeworICAg
ICAgICBtX3NvdXJjZXMucGF0aCA9IHM7CisgICAgICAgIG1fc2VnbWVudHMucGF0aCA9IGNvbXA7
CisgICAgfQorICAgIHZvaWQgQ2xlYXJQYXRoKCkKKyAgICB7CisgICAgICAgIG1fc291cmNlcy5w
YXRoID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9zZWdtZW50cy5wYXRoID0gVVJMQ29tcG9u
ZW50KCk7CisgICAgfQorICAgIGJvb2wgSXNQYXRoT3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJu
ICFtX3NvdXJjZXMucGF0aDsgfQorCisgICAgLy8gUXVlcnkKKyAgICB2b2lkIFNldFF1ZXJ5KGNv
bnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKKyAgICB7Cisg
ICAgICAgIG1fc291cmNlcy5xdWVyeSA9IHM7CisgICAgICAgIG1fc2VnbWVudHMucXVlcnkgPSBj
b21wOworICAgIH0KKyAgICB2b2lkIENsZWFyUXVlcnkoKQorICAgIHsKKyAgICAgICAgbV9zb3Vy
Y2VzLnF1ZXJ5ID0gUGxhY2Vob2xkZXIoKTsKKyAgICAgICAgbV9zZWdtZW50cy5xdWVyeSA9IFVS
TENvbXBvbmVudCgpOworICAgIH0KKyAgICBib29sIElzUXVlcnlPdmVycmlkZGVuKCkgY29uc3Qg
eyByZXR1cm4gIW1fc291cmNlcy5xdWVyeTsgfQorCisgICAgLy8gUmVmCisgICAgdm9pZCBTZXRS
ZWYoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQorICAg
IHsKKyAgICAgICAgbV9zb3VyY2VzLnJlZiA9IHM7CisgICAgICAgIG1fc2VnbWVudHMuZnJhZ21l
bnQgPSBjb21wOworICAgIH0KKyAgICB2b2lkIENsZWFyUmVmKCkKKyAgICB7CisgICAgICAgIG1f
c291cmNlcy5yZWYgPSBQbGFjZWhvbGRlcigpOworICAgICAgICBtX3NlZ21lbnRzLmZyYWdtZW50
ID0gVVJMQ29tcG9uZW50KCk7CisgICAgfQorICAgIGJvb2wgSXNSZWZPdmVycmlkZGVuKCkgY29u
c3QgeyByZXR1cm4gIW1fc291cmNlcy5yZWY7IH0KKworICAgIC8vIEdldHRlcnMgZm9yIHRoZSBp
dG5lcm5hbCBkYXRhLiBTZWUgdGhlIHZhcmlhYmxlcyBiZWxvdyBmb3IgaG93IHRoZQorICAgIC8v
IGluZm9ybWF0aW9uIGlzIGVuY29kZWQuCisgICAgY29uc3QgVVJMQ29tcG9uZW50U291cmNlPENo
YXJhY3RlclR5cGU+JiBzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VzOyB9CisgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRz
OyB9CisKK3ByaXZhdGU6CisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdGF0aWMgZW1w
dHkgc3RyaW5nIHRoYXQgaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyCisgICAgLy8gdG8gaW5kaWNh
dGUgYSBjb21wb25lbnQgc2hvdWxkIGJlIGRlbGV0ZWQgKHNlZSBiZWxvdykuCisgICAgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogUGxhY2Vob2xkZXIoKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IENoYXJhY3RlclR5cGUgZW1wdHlTdHJpbmcgPSAwOworICAgICAgICByZXR1cm4gJmVtcHR5U3Ry
aW5nOworICAgIH0KKworICAgIC8vIFdlIHN1cHBvcnQgdGhyZWUgc3RhdGVzOgorICAgIC8vCisg
ICAgLy8gQWN0aW9uICAgICAgICAgICAgICAgICB8IFNvdXJjZSAgICAgICAgICAgICAgICBDb21w
b25lbnQKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIERvbid0IGNoYW5nZSBjb21w
b25lbnQgfCBudWxsICAgICAgICAgICAgICAgICAgKHVudXNlZCkKKyAgICAvLyBSZXBsYWNlIGNv
bXBvbmVudCAgICAgIHwgKHJlcGxhY2VtZW50IHN0cmluZykgIChyZXBsYWNlbWVudCBjb21wb25l
bnQpCisgICAgLy8gRGVsZXRlIGNvbXBvbmVudCAgICAgICB8IChub24tbnVsbCkgICAgICAgICAg
ICAoaW52YWxpZCBjb21wb25lbnQ6ICgwLC0xKSkKKyAgICAvLworICAgIC8vIFdlIHVzZSBhIHBv
aW50ZXIgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdGhlIHNvdXJjZSB3aGVuIHRoZSBjb21wb25l
bnQKKyAgICAvLyBzaG91bGQgYmUgZGVsZXRlZC4KKyAgICBVUkxDb21wb25lbnRTb3VyY2U8Q2hh
cmFjdGVyVHlwZT4gbV9zb3VyY2VzOworICAgIFVSTFNlZ21lbnRzIG1fc2VnbWVudHM7Cit9Owor
CisvLyBUaGUgYmFzZSBtdXN0IGJlIGFuIDgtYml0IGNhbm9uaWNhbCBVUkwuCitib29sIFJlcGxh
Y2VTdGFuZGFyZFVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNl
dENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1
dFBhcnNlZCk7Citib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25zdCBjaGFyKiBiYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBGaWxlc3lzdGVtIFVSTHMgY2Fu
IG9ubHkgaGF2ZSB0aGUgcGF0aCwgcXVlcnksIG9yIHJlZiByZXBsYWNlZC4KKy8vIEFsbCBvdGhl
ciBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZC4KK2Jvb2wgUmVwbGFjZUZpbGVTeXN0ZW1VUkwo
Y29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2Vn
bWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxh
Y2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0
ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFy
c2VkKTsKK2Jvb2wgUmVwbGFjZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIFJlcGxhY2luZyBz
b21lIHBhcnRzIG9mIGEgZmlsZSBVUkwgaXMgbm90IHBlcm1pdHRlZC4gRXZlcnl0aGluZyBleGNl
cHQKKy8vIHRoZSBob3N0LCBwYXRoLCBxdWVyeSwgYW5kIHJlZiB3aWxsIGJlIGlnbm9yZWQuCiti
b29sIFJlcGxhY2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiwKKyAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29s
IFJlcGxhY2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXBsYWNlbWVudHM8VUNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRl
ciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYs
CisgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBQ
YXRoIFVSTHMgY2FuIG9ubHkgaGF2ZSB0aGUgc2NoZW1lIGFuZCBwYXRoIHJlcGxhY2VkLiBBbGwg
b3RoZXIgY29tcG9uZW50cworLy8gd2lsbCBiZSBpZ25vcmVkLgorYm9vbCBSZXBsYWNlUGF0aFVS
TChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50
cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNo
YXI+JiwKKyAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAg
ICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxhY2VQYXRoVVJM
KGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRz
JiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNo
YXI+JiwKKyAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKKyAgICAgICAgICAg
ICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7CisKKy8vIE1haWx0byBVUkxzIGNh
biBvbmx5IGhhdmUgdGhlIHNjaGVtZSwgcGF0aCwgYW5kIHF1ZXJ5IHJlcGxhY2VkLgorLy8gQWxs
IG90aGVyIGNvbXBvbmVudHMgd2lsbCBiZSBpZ25vcmVkLgorYm9vbCByZXBsYWNlTWFpbHRvVVJM
KGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCisgICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJz
ZWQpOworYm9vbCByZXBsYWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNl
Z21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2Vt
ZW50czxVQ2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0LCBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKTsKKworLy8gUmVsYXRpdmUgVVJMIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisvLyBHaXZlbiBhbiBpbnB1dCBVUkwgb3IgVVJMIGZyYWdtZW50IHxmcmFnbWVudHwsIGRl
dGVybWluZXMgaWYgaXQgaXMgYQorLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIGFuZCBwbGFj
ZXMgdGhlIHJlc3VsdCBpbnRvIHwqaXNSZWxhdGl2ZXwuIElmIGl0IGlzCisvLyByZWxhdGl2ZSwg
dGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIFVSTCB3aWxsIGJlIHBsYWNlZCBpbnRvCisvLyB8
KnJlbGF0aXZlQ29tcG9uZW50fCAodGhlcmUgbWF5IGhhdmUgYmVlbiB0cmltbWVkIHdoaXRlc3Bh
Y2UsIGZvciBleGFtcGxlKS4KKy8vIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHJlc29sdmVSZWxh
dGl2ZVVSTC4gSWYgdGhlIGlucHV0IGlzIG5vdCByZWxhdGl2ZSwKKy8vIHRoaXMgdmFsdWUgaXMg
VU5ERUZJTkVEIChpdCBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZnVuY3Rpb24pLgorLy8KKy8vIFJl
dHVybnMgdHJ1ZSBvbiBzdWNjZXNzICh3ZSBzdWNjZXNzZnVsbHkgZGV0ZXJtaW5lZCB0aGUgVVJM
IGlzIHJlbGF0aXZlIG9yCisvLyBub3QpLiBGYWlsdXJlIG1lYW5zIHRoYXQgdGhlIGNvbWJpbmF0
aW9uIG9mIFVSTHMgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4KKy8vCisvLyBUaGUgYmFzZSBVUkwg
c2hvdWxkIGFsd2F5cyBiZSBjYW5vbmljYWwsIHRoZXJlZm9yZSBpcyBBU0NJSS4KK2Jvb2wgaXNS
ZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNl
ZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmcmFnbWVudCwgaW50IGZyYWdtZW50
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAg
ICAgICAgICAgICAgICAgIGJvb2wmIGlzUmVsYXRpdmUsIFVSTENvbXBvbmVudCYgcmVsYXRpdmVD
b21wb25lbnQpOworYm9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBm
cmFnbWVudCwgaW50IGZyYWdtZW50TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIGJvb2wgaXNC
YXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgIGJvb2wmIGlzUmVsYXRpdmUsIFVS
TENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQpOworCisvLyBHaXZlbiBhIGNhbm9uaWNhbCBw
YXJzZWQgc291cmNlIFVSTCwgYSBVUkwgZnJhZ21lbnQga25vd24gdG8gYmUgcmVsYXRpdmUsCisv
LyBhbmQgdGhlIGlkZW50aWZpZWQgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgcmVsYXRpdmUgVVJM
IChjb21wdXRlZCBieQorLy8gaXNSZWxhdGl2ZVVSTCksIHRoaXMgcHJvZHVjZXMgYSBuZXcgcGFy
c2VkIGNhbm9uaWNhbCBVUkwgaW4gfG91dHB1dHwgYW5kCisvLyB8b3V0cHV0UGFyc2VkfC4KKy8v
CisvLyBJdCBhbHNvIHJlcXVpcmVzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJhc2Ug
VVJMIGlzIGEgZmlsZTogVVJMCisvLyB3aGljaCB0cmlnZ2VycyBhZGRpdGlvbmFsIGxvZ2ljLgor
Ly8KKy8vIFRoZSBiYXNlIFVSTCBzaG91bGQgYmUgY2Fub25pY2FsIGFuZCBoYXZlIGEgaG9zdCAo
bWF5IGJlIGVtcHR5IGZvciBmaWxlCisvLyBVUkxzKSBhbmQgYSBwYXRoLiBJZiBpdCBkb2Vzbid0
IGhhdmUgdGhlc2UsIHdlIGNhbid0IHJlc29sdmUgcmVsYXRpdmUKKy8vIFVSTHMgb2ZmIG9mIGl0
IGFuZCB3aWxsIHJldHVybiB0aGUgYmFzZSBhcyB0aGUgb3V0cHV0IHdpdGggYW4gZXJyb3IgZmxh
Zy4KKy8vIEJlY2F1c2VlIGl0IGlzIGNhbm9uaWNhbCBpcyBzaG91bGQgYWxzbyBiZSBBU0NJSS4K
Ky8vCisvLyBUaGUgcXVlcnkgY2hhcnNldCBjb252ZXJ0ZXIgZm9sbG93cyB0aGUgc2FtZSBydWxl
cyBhcyBDYW5vbmljYWxpemVRdWVyeS4KKy8vCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4g
T24gZmFpbHVyZSwgdGhlIG91dHB1dCB3aWxsIGJlICJzb21ldGhpbmcKKy8vIHJlYXNvbmFibGUi
IHRoYXQgd2lsbCBiZSBjb25zaXN0ZW50IGFuZCB2YWxpZCwganVzdCBwcm9iYWJseSBub3Qgd2hh
dAorLy8gd2FzIGludGVuZGVkIGJ5IHRoZSB3ZWIgcGFnZSBhdXRob3Igb3IgY2FsbGVyLgorYm9v
bCByZXNvbHZlUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwgY29uc3QgVVJMU2VnbWVu
dHMmIGJhc2VQYXJzZWQsIGJvb2wgYmFzZUlzRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMLCBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29t
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlD
b252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxT
ZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNo
YXIqIGJhc2VVUkwsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBib29sIGJhc2VJc0Zp
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmVVUkwsIGNv
bnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCit9
IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVSTENhbm9uX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbkV0Yy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVkNmQxOGU4ZjhmM2Y4NWJiZTNk
NmE0OGVhNGYxMTBjMTkwZjk5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMQ2Fub25FdGMuY3BwCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogQ29weXJpZ2h0
IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
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
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBDYW5vbmljYWxpemVycyBmb3IgcmFuZG9t
IGJpdHMgdGhhdCBhcmVuJ3QgYmlnIGVub3VnaCBmb3IgdGhlaXIgb3duIGZpbGVzLgorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlVSTENh
bm9uSW50ZXJuYWwuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCisjaWYgVVNFKFdU
RlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsK
KworbmFtZXNwYWNlIHsKKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIg
c2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgbWlkZGxlIG9mIGEKKy8vIFVSTC4KK2lubGluZSBi
b29sIGlzUmVtb3ZhYmxlVVJMV2hpdGVzcGFjZShpbnQgY2hhcmFjdGVyKQoreworICAgIHJldHVy
biBjaGFyYWN0ZXIgPT0gJ1xyJyB8fCBjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0g
J1x0JzsKK30KKworLy8gQmFja2VuZCBmb3IgcmVtb3ZlVVJMV2hpdGVzcGFjZSAoc2VlIGRlY2xh
cmF0aW9uIGluIFVSTENhbm9uLmgpLgorLy8gSXQgc3Vja3MgdGhhdCB3ZSBoYXZlIHRvIGRvIHRo
aXMsIHNpbmNlIHRoaXMgdGFrZXMgYWJvdXQgMTMlIG9mIHRoZSB0b3RhbCBVUkwKKy8vIGNhbm9u
aWNhbGl6YXRpb24gdGltZS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citjb25z
dCBDaGFyYWN0ZXJUeXBlKiBkb1JlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZm
ZXIsIGludCYgb3V0cHV0TGVuZ3RoKQoreworICAgIC8vIEZhc3QgdmVyaWZpY2F0aW9uIHRoYXQg
dGhlcmUncyBub3RoaW5nIHRoYXQgbmVlZHMgcmVtb3ZhbC4gVGhpcyBpcyB0aGUgOTklCisgICAg
Ly8gY2FzZSwgc28gd2Ugd2FudCBpdCB0byBiZSBmYXN0IGFuZCBkb24ndCBjYXJlIGFib3V0IGlt
cGFjdGluZyB0aGUgc3BlZWQKKyAgICAvLyB3aGVuIHdlIGRvIGZpbmQgd2hpdGVzcGFjZS4KKyAg
ICBib29sIGZvdW5kV2hpdGVzcGFjZSA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5wdXRMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWlzUmVtb3ZhYmxlVVJMV2hpdGVzcGFj
ZShpbnB1dFtpXSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm91bmRXaGl0ZXNw
YWNlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFmb3VuZFdoaXRl
c3BhY2UpIHsKKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55IHdoaXRlc3BhY2UsIHdlIGRvbid0
IG5lZWQgdG8gZG8gYW55dGhpbmcuIFdlIGNhbiBqdXN0CisgICAgICAgIC8vIHJldHVybiB0aGUg
aW5wdXQgYXMgdGhlIG91dHB1dC4KKyAgICAgICAgb3V0cHV0TGVuZ3RoID0gaW5wdXRMZW5ndGg7
CisgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIHdoaXRl
c3BhY2UgaW50byB0aGUgbmV3IGJ1ZmZlciBhbmQgcmV0dXJuIGl0LgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIWlzUmVtb3ZhYmxlVVJM
V2hpdGVzcGFjZShpbnB1dFtpXSkpCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGlucHV0W2ld
KTsKKyAgICB9CisgICAgb3V0cHV0TGVuZ3RoID0gYnVmZmVyLmxlbmd0aCgpOworICAgIHJldHVy
biBidWZmZXIuZGF0YSgpOworfQorCisvLyBDb250YWlucyB0aGUgY2Fub25pY2FsIHZlcnNpb24g
b2YgZWFjaCBwb3NzaWJsZSBpbnB1dCBsZXR0ZXIgaW4gdGhlIHNjaGVtZQorLy8gKGJhc2ljYWxs
eSwgbG93ZXItY2FzZWQpLiBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSB3aWxsIGJlIDAgaWYgdGhl
IGxldHRlcgorLy8gaXMgbm90IGFsbG93ZWQgaW4gYSBzY2hlbWUuCitjb25zdCBjaGFyIGtTY2hl
bWVDYW5vbmljYWxbMHg4MF0gPSB7CisvLyAwMC0xZjogYWxsIGFyZSBpbnZhbGlkCisgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsCisgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisvLyAgJyAnICAg
ISAgICAiICAgICMgICAgJCAgICAlICAgICYgICAgJyAgICAoICAgICkgICAgKiAgICArICAgICwg
ICAgLSAgICAuICAgIC8KKyAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgJysnLCAgMCwgICctJywgJy4nLCAgMCwKKy8vICAgMCAgICAxICAg
IDIgICAgMyAgICA0ICAgIDUgICAgNiAgICA3ICAgIDggICAgOSAgICA6ICAgIDsgICAgPCAgICA9
ICAgID4gICAgPworICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAn
OCcsICc5JywgIDAgLCAgMCAsICAwICwgIDAgLCAgMCAsICAwICwKKy8vICAgQCAgICBBICAgIEIg
ICAgQyAgICBEICAgIEUgICAgRiAgICBHICAgIEggICAgSSAgICBKICAgIEsgICAgTCAgICBNICAg
IE4gICAgTworICAgICAwICwgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcs
ICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywKKy8vICAgUCAgICBRICAgIFIgICAg
UyAgICBUICAgIFUgICAgViAgICBXICAgIFggICAgWSAgICBaICAgIFsgICAgXCAgICBdICAgIF4g
ICAgXworICAgICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5
JywgJ3onLCAgMCwgICAwICwgIDAsICAgMCAsICAwLAorLy8gICBgICAgIGEgICAgYiAgICBjICAg
IGQgICAgZSAgICBmICAgIGcgICAgaCAgICBpICAgIGogICAgayAgICBsICAgIG0gICAgbiAgICBv
CisgICAgIDAgLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAn
aicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLAorLy8gICBwICAgIHEgICAgciAgICBzICAgIHQg
ICAgdSAgICB2ICAgIHcgICAgeCAgICB5ICAgIHogICAgeyAgICB8ICAgIH0gICAgfgorICAgICdw
JywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAgMCAs
ICAwICwgIDAgLCAgMCAsICAwIH07CisKKy8vIFRoaXMgY291bGQgYmUgYSB0YWJsZSBsb29rdXAg
YXMgd2VsbCBieSBzZXR0aW5nIHRoZSBoaWdoIGJpdCBmb3IgZWFjaAorLy8gdmFsaWQgY2hhcmFj
dGVyLCBidXQgaXQncyBvbmx5IGNhbGxlZCBvbmNlIHBlciBVUkwsIGFuZCBpdCBtYWtlcyB0aGUg
bG9va3VwCisvLyB0YWJsZSBlYXNpZXIgdG8gcmVhZCBub3QgaGF2aW5nIGV4dHJhIHN0dWZmIGlu
IGl0LgoraW5saW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIodW5zaWduZWQgY2hhciBjaGFyYWN0
ZXIpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9TY2hlbWUo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFNjaGVtZSkKK3sKKyAg
ICBpZiAoc2NoZW1lLmxlbmd0aCgpIDw9IDApIHsKKyAgICAgICAgLy8gU2NoZW1lIGlzIHVuc3Bl
Y2lmaWVkIG9yIGVtcHR5LCBjb252ZXJ0IHRvIGVtcHR5IGJ5IGFwcGVuZGluZyBhIGNvbG9uLgor
ICAgICAgICBvdXRwdXRTY2hlbWUgPSBVUkxDb21wb25lbnQob3V0cHV0Lmxlbmd0aCgpLCAwKTsK
KyAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBUaGUgb3V0cHV0IHNjaGVtZSBzdGFydHMgZnJvbSB0aGUgY3VycmVudCBwb3Np
dGlvbi4KKyAgICBvdXRwdXRTY2hlbWUuc2V0QmVnaW4ob3V0cHV0U2NoZW1lLmJlZ2luKCkgKyBv
dXRwdXQubGVuZ3RoKCkpOworCisgICAgLy8gRGFuZ2VyOiBpdCdzIGltcG9ydGFudCB0aGF0IHRo
aXMgY29kZSBkb2VzIG5vdCBzdHJpcCBhbnkgY2hhcmFjdGVyczogaXQKKyAgICAvLyBvbmx5IGVt
aXRzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiAoYmUgaXQgdmFsaWQgb3IgZXNjYXBlZCkgb2YgZWFj
aCBvZgorICAgIC8vIHRoZSBpbnB1dCBjaGFyYWN0ZXJzLiBTdHJpcHBpbmcgd291bGQgcHV0IGl0
IG91dCBvZiBzeW5jIHdpdGgKKyAgICAvLyBVUkxVdGlsaXRpZXM6OkZpbmRBbmRDb21wYXJlU2No
ZW1lLCB3aGljaCBjb3VsZCBjYXVzZSBzb21lIHNlY3VyaXR5IGNoZWNrcyBvbgorICAgIC8vIHNj
aGVtZXMgdG8gYmUgaW5jb3JyZWN0LgorICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgaW50
IGVuZCA9IHNjaGVtZS5lbmQoKTsKKyAgICBmb3IgKGludCBpID0gc2NoZW1lLmJlZ2luKCk7IGkg
PCBlbmQ7ICsraSkgeworICAgICAgICBVQ0hBUiBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ0hB
Uj4oc3BlY1tpXSk7CisgICAgICAgIGNoYXIgcmVwbGFjZW1lbnQgPSAwOworICAgICAgICBpZiAo
Y2hhcmFjdGVyIDwgMHg4MCkgeworICAgICAgICAgICAgaWYgKGkgPT0gc2NoZW1lLmJlZ2luKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGEgc3BlY2lhbCBjaGVjayBmb3IgdGhl
IGZpcnN0IGxldHRlciBvZiB0aGUgc2NoZW1lLgorICAgICAgICAgICAgICAgIGlmIChpc1NjaGVt
ZUZpcnN0Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaGFyYWN0ZXIpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBrU2NoZW1lQ2Fub25pY2FsW2NoYXJhY3Rlcl07
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IGtTY2hl
bWVDYW5vbmljYWxbY2hhcmFjdGVyXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXBsYWNl
bWVudCkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQocmVwbGFjZW1lbnQpOworICAgICAgICBl
bHNlIGlmIChjaGFyYWN0ZXIgPT0gJyUnKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemlu
ZyB0aGUgc2NoZW1lIG11bHRpcGxlIHRpbWVzIHNob3VsZCBsZWFkIHRvIHRoZSBzYW1lCisgICAg
ICAgICAgICAvLyByZXN1bHQuIFNpbmNlIGludmFsaWQgY2hhcmFjdGVycyB3aWxsIGJlIGVzY2Fw
ZWQsIHdlIG5lZWQgdG8gcHJlc2VydmUKKyAgICAgICAgICAgIC8vIHRoZSBwZXJjZW50IHRvIGF2
b2lkIG11bHRpcGxlIGVzY2FwaW5nLiBUaGUgc2NoZW1lIHdpbGwgYmUgaW52YWxpZC4KKyAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyUnKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyLCBzdG9y
ZSBpdCBidXQgbWFyayB0aGlzIHNjaGVtZSBhcyBpbnZhbGlkLgorICAgICAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgZXNjYXBlIHRoZSBvdXRwdXQg
YW5kIGFsc28gaGFuZGxlIGVuY29kaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgIC8vIElnbm9yZSB0
aGUgcmV0dXJuIHZhbHVlIHNpbmNlIHdlIGFscmVhZHkgZmFpbGVkLgorICAgICAgICAgICAgQXBw
ZW5kVVRGOEVzY2FwZWRDaGFyKHNwZWMsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBUaGUgb3V0cHV0IHNjaGVtZSBlbmRzIHdpdGggdGhlIHRoZSBjdXJyZW50
IHBvc2l0aW9uLCBiZWZvcmUgYXBwZW5kaW5nCisgICAgLy8gdGhlIGNvbG9uLgorICAgIG91dHB1
dFNjaGVtZS5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0U2NoZW1lLmJlZ2luKCkp
OworICAgIG91dHB1dC5hcHBlbmQoJzonKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworLy8g
VGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBjb21wb25lbnRzIHJlZmVyZW5jZSByYW5nZXMgaW4g
dGhlIGNvcnJlc3BvbmRpbmcKKy8vICpfc3BlYyBzdHJpbmdzLiBUeXBpY2FsbHksIHRoZXNlIHNw
ZWNzIHdpbGwgYmUgdGhlIHNhbWUgKHdlJ3JlCisvLyBjYW5vbmljYWxpemluZyBhIHNpbmdsZSBz
b3VyY2Ugc3RyaW5nKSwgYnV0IG1heSBiZSBkaWZmZXJlbnQgd2hlbgorLy8gcmVwbGFjaW5nIGNv
bXBvbmVudHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hB
Uj4KK2Jvb2wgZG9Vc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiB1c2VybmFtZVNwZWMsCisg
ICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwKKyAgICAgICAgICAg
ICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwYXNzd29yZFNwZWMsCisgICAgICAgICAgICAgICAg
Y29uc3QgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJu
YW1lLAorICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCYgb3V0cHV0UGFzc3dvcmQpCit7Cisg
ICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIDw9IDAgJiYgcGFzc3dvcmQubGVuZ3RoKCkgPD0gMCkg
eworICAgICAgICAvLyBDb21tb24gY2FzZTogbm8gdXNlciBpbmZvLiBXZSBzdHJpcCBlbXB0eSB1
c2VybmFtZS9wYXNzd29yZHMuCisgICAgICAgIG91dHB1dFVzZXJuYW1lID0gVVJMQ29tcG9uZW50
KCk7CisgICAgICAgIG91dHB1dFBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSB1c2VybmFtZS4KKyAgICBvdXRw
dXRVc2VybmFtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIGlmICh1c2VybmFtZS5s
ZW5ndGgoKSA+IDApIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGVzY2FwZSBjaGFyYWN0ZXJzIG5v
dCB2YWxpZCBmb3IgdGhlIHVzZXJuYW1lLgorICAgICAgICBhcHBlbmRTdHJpbmdPZlR5cGUoJnVz
ZXJuYW1lU3BlY1t1c2VybmFtZS5iZWdpbigpXSwgdXNlcm5hbWUubGVuZ3RoKCksIFVSTENoYXJh
Y3RlclR5cGVzOjpVc2VySW5mb0NoYXJhY3Rlciwgb3V0cHV0KTsKKyAgICB9CisgICAgb3V0cHV0
VXNlcm5hbWUuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFVzZXJuYW1lLmJlZ2lu
KCkpOworCisgICAgLy8gV2hlbiB0aGVyZSBpcyBhIHBhc3N3b3JkLCB3ZSBuZWVkIHRoZSBzZXBh
cmF0b3IuIE5vdGUgdGhhdCB3ZSBzdHJpcAorICAgIC8vIGVtcHR5IGJ1dCBzcGVjaWZpZWQgcGFz
c3dvcmRzLgorICAgIGlmIChwYXNzd29yZC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgb3V0cHV0
LmFwcGVuZCgnOicpOworICAgICAgICBvdXRwdXRQYXNzd29yZC5zZXRCZWdpbihvdXRwdXQubGVu
Z3RoKCkpOworICAgICAgICBhcHBlbmRTdHJpbmdPZlR5cGUoJnBhc3N3b3JkU3BlY1twYXNzd29y
ZC5iZWdpbigpXSwgcGFzc3dvcmQubGVuZ3RoKCksIFVSTENoYXJhY3RlclR5cGVzOjpVc2VySW5m
b0NoYXJhY3Rlciwgb3V0cHV0KTsKKyAgICAgICAgb3V0cHV0UGFzc3dvcmQuc2V0TGVuZ3RoKG91
dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBhc3N3b3JkLmJlZ2luKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBvdXRwdXRQYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworCisgICAgb3V0cHV0LmFwcGVu
ZCgnQCcpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBj
b252ZXJ0aW5nIHBvcnQgaW50ZWdlcnMgdG8gc3RyaW5ncy4KK2lubGluZSB2b2lkIHdyaXRlUG9y
dEludChjaGFyKiBvdXRwdXQsIGludCBvdXRwdXRMZW5ndGgsIGludCBwb3J0KQoreworICAgIF9p
dG9hX3MocG9ydCwgb3V0cHV0LCBvdXRwdXRMZW5ndGgsIDEwKTsKK30KKworLy8gVGhpcyBmdW5j
dGlvbiB3aWxsIHByZXBlbmQgdGhlIGNvbG9uIGlmIHRoZXJlIHdpbGwgYmUgYSBwb3J0LgordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Citib29sIGRvUG9y
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLAorICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9u
ZW50JiBwb3J0LAorICAgICAgICAgICAgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAg
ICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICBVUkxDb21wb25lbnQm
IG91dHB1dFBvcnRDb21wb25lbnQpCit7CisgICAgaW50IHBvcnROdW1iZXIgPSBVUkxQYXJzZXI6
OlBhcnNlUG9ydChzcGVjLCBwb3J0KTsKKyAgICBpZiAocG9ydE51bWJlciA9PSBVUkxQYXJzZXI6
OlBPUlRfVU5TUEVDSUZJRUQgfHwgcG9ydE51bWJlciA9PSBkZWZhdWx0UG9ydEZvclNjaGVtZSkg
eworICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAg
IHJldHVybiB0cnVlOyAvLyBMZWF2ZSBwb3J0IGVtcHR5LgorICAgIH0KKworICAgIGlmIChwb3J0
TnVtYmVyID09IFVSTFBhcnNlcjo6UE9SVF9JTlZBTElEKSB7CisgICAgICAgIC8vIEludmFsaWQg
cG9ydDogV2UnbGwgY29weSB0aGUgdGV4dCBmcm9tIHRoZSBpbnB1dCBzbyB0aGUgdXNlciBjYW4g
c2VlCisgICAgICAgIC8vIHdoYXQgdGhlIGVycm9yIHdhcywgYW5kIG1hcmsgdGhlIFVSTCBhcyBp
bnZhbGlkIGJ5IHJldHVybmluZyBmYWxzZS4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOwor
ICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Cisg
ICAgICAgIEFwcGVuZEludmFsaWROYXJyb3dTdHJpbmcoc3BlYywgcG9ydC5iZWdpbigpLCBwb3J0
LmVuZCgpLCBvdXRwdXQpOworICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50LnNldExlbmd0aChv
dXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQb3J0Q29tcG9uZW50LmJlZ2luKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ29udmVydCBwb3J0IG51bWJlciBiYWNrIHRv
IGFuIGludGVnZXIuIE1heCBwb3J0IHZhbHVlIGlzIDUgZGlnaXRzLCBhbmQKKyAgICAvLyB0aGUg
UGFyc2VkOjpFeHRyYWN0UG9ydCB3aWxsIGhhdmUgbWFkZSBzdXJlIHRoZSBpbnRlZ2VyIGlzIGlu
IHJhbmdlLgorICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gNjsKKyAgICBjaGFyIGJ1ZmZlclti
dWZmZXJTaXplXTsKKyAgICB3cml0ZVBvcnRJbnQoYnVmZmVyLCBidWZmZXJTaXplLCBwb3J0TnVt
YmVyKTsKKworICAgIC8vIEFwcGVuZCB0aGUgcG9ydCBudW1iZXIgdG8gdGhlIG91dHB1dCwgcHJl
Y2VlZGVkIGJ5IGEgY29sb24uCisgICAgb3V0cHV0LmFwcGVuZCgnOicpOworICAgIG91dHB1dFBv
cnRDb21wb25lbnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGJ1ZmZlclNpemUgJiYgYnVmZmVyW2ldOyArK2kpCisgICAgICAgIG91dHB1dC5hcHBl
bmQoYnVmZmVyW2ldKTsKKworICAgIG91dHB1dFBvcnRDb21wb25lbnQuc2V0TGVuZ3RoKG91dHB1
dC5sZW5ndGgoKSAtIG91dHB1dFBvcnRDb21wb25lbnQuYmVnaW4oKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFS
Pgordm9pZCBkb0Nhbm9uaWNhbGl6ZUZyYWdtZW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgZnJhZ21lbnQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBV
UkxDb21wb25lbnQmIG91dHB1dEZyYWdtZW50KQoreworICAgIGlmIChmcmFnbWVudC5sZW5ndGgo
KSA8IDApIHsKKyAgICAgICAgLy8gQ29tbW9uIGNhc2Ugb2Ygbm8gZnJhZ21lbnQuCisgICAgICAg
IG91dHB1dEZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBBcHBlbmQgdGhlIGZyYWdtZW50IHNlcGFyYXRvci4gTm90ZSB0aGF0IHdlIG5l
ZWQgdG8gZG8gdGhpcyBldmVuIHdoZW4gdGhlIGZyYWdtZW50CisgICAgLy8gaXMgZW1wdHkgYnV0
IHByZXNlbnQuCisgICAgb3V0cHV0LmFwcGVuZCgnIycpOworICAgIG91dHB1dEZyYWdtZW50LnNl
dEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisKKyAgICAvLyBOb3cgaXRlcmF0ZSB0aHJvdWdoIGFs
bCB0aGUgY2hhcmFjdGVycywgY29udmVydGluZyB0byBVVEYtOCBhbmQgdmFsaWRhdGluZy4KKyAg
ICBpbnQgZW5kID0gZnJhZ21lbnQuZW5kKCk7CisgICAgZm9yIChpbnQgaSA9IGZyYWdtZW50LmJl
Z2luKCk7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBpZiAoIXNwZWNbaV0pIHsKKyAgICAgICAg
ICAgIC8vIElFIGp1c3Qgc3RyaXBzIE5VTExzLCBzbyB3ZSBkbyB0b28uCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNb
aV0pIDwgMHgyMCkgeworICAgICAgICAgICAgLy8gVW5saW5lIElFIHNlZW1zIHRvLCB3ZSBlc2Nh
cGUgY29udHJvbCBjaGFyYWN0ZXJzLiBUaGlzIHdpbGwgcHJvYmFibHkKKyAgICAgICAgICAgIC8v
IG1ha2UgdGhlIHJlZmVyZW5jZSBmcmFnbWVudCB1bnVzYWJsZSBvbiBhIHdlYiBwYWdlLCBidXQg
cGVvcGxlCisgICAgICAgICAgICAvLyBzaG91bGRuJ3QgYmUgdXNpbmcgY29udHJvbCBjaGFyYWN0
ZXJzIGluIHRoZWlyIGFuY2hvciBuYW1lcy4KKyAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRD
aGFyYWN0ZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSksIG91dHB1dCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pIDwgMHg4MCkgewor
ICAgICAgICAgICAgLy8gTm9ybWFsIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGp1c3QgYXBwZW5kZWQu
CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaV0pKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFy
ZSBhcHBlbmRlZCB1bmVzY2FwZWQsIGJ1dCBvbmx5IHdoZW4gdGhleSBhcmUKKyAgICAgICAgICAg
IC8vIHZhbGlkLiBJbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgd2l0aCB0
aGUgImludmFsaWQKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciIgYXMgSUUgc2VlbXMgdG8gKHJl
YWRVVEZDaGFyIHB1dHMgdGhlIHVuaWNvZGUgcmVwbGFjZW1lbnQKKyAgICAgICAgICAgIC8vIGNo
YXJhY3RlciBpbiB0aGUgb3V0cHV0IG9uIGZhaWx1cmUgZm9yIHVzKS4KKyAgICAgICAgICAgIHVu
c2lnbmVkIGNvZGVQb2ludDsKKyAgICAgICAgICAgIHJlYWRVVEZDaGFyKHNwZWMsICZpLCBlbmQs
ICZjb2RlUG9pbnQpOworICAgICAgICAgICAgQXBwZW5kVVRGOFZhbHVlKGNvZGVQb2ludCwgb3V0
cHV0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG91dHB1dEZyYWdtZW50LnNldExlbmd0aChv
dXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRGcmFnbWVudC5iZWdpbigpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UKKworY29uc3QgY2hhciogcmVtb3ZlVVJMV2hpdGVzcGFjZShjb25zdCBjaGFyKiBpbnB1
dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIGJ1ZmZlciwgaW50JiBvdXRwdXRM
ZW5ndGgpCit7CisgICAgcmV0dXJuIGRvUmVtb3ZlVVJMV2hpdGVzcGFjZShpbnB1dCwgaW5wdXRM
ZW5ndGgsIGJ1ZmZlciwgb3V0cHV0TGVuZ3RoKTsKK30KKworY29uc3QgVUNoYXIqIHJlbW92ZVVS
TFdoaXRlc3BhY2UoY29uc3QgVUNoYXIqIGlucHV0LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZl
cjxVQ2hhcj4mIGJ1ZmZlciwgaW50JiBvdXRwdXRMZW5ndGgpCit7CisgICAgcmV0dXJuIGRvUmVt
b3ZlVVJMV2hpdGVzcGFjZShpbnB1dCwgaW5wdXRMZW5ndGgsIGJ1ZmZlciwgb3V0cHV0TGVuZ3Ro
KTsKK30KKworY2hhciBjYW5vbmljYWxTY2hlbWVDaGFyKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAg
ICBpZiAoY2hhcmFjdGVyID49IDB4ODApCisgICAgICAgIHJldHVybiAwOyAvLyBOb24tQVNDSUkg
aXMgbm90IHN1cHBvcnRlZCBieSBzY2hlbWVzLgorICAgIHJldHVybiBrU2NoZW1lQ2Fub25pY2Fs
W2NoYXJhY3Rlcl07Cit9CisKK2Jvb2wgY2Fub25pY2FsaXplU2NoZW1lKGNvbnN0IGNoYXIqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1lLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwg
VVJMQ29tcG9uZW50JiBvdXRwdXRTY2hlbWUpCit7CisgICAgcmV0dXJuIGRvU2NoZW1lPGNoYXIs
IHVuc2lnbmVkIGNoYXI+KHNwZWMsIHNjaGVtZSwgb3V0cHV0LCBvdXRwdXRTY2hlbWUpOworfQor
Citib29sIGNhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91
dHB1dFNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9TY2hlbWU8VUNoYXIsIFVDaGFyPihzcGVjLCBz
Y2hlbWUsIG91dHB1dCwgb3V0cHV0U2NoZW1lKTsKK30KKworYm9vbCBjYW5vbmljYWxpemVVc2Vy
SW5mbyhjb25zdCBjaGFyKiB1c2VybmFtZVNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiB1c2Vy
bmFtZSwgY29uc3QgY2hhciogcGFzc3dvcmRTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVudCYgcGFz
c3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LCBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1lLCBVUkxDb21wb25lbnQmIG91dHB1dFBhc3N3
b3JkKQoreworICAgIHJldHVybiBkb1VzZXJJbmZvPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHVzZXJu
YW1lU291cmNlLCB1c2VybmFtZSwgcGFzc3dvcmRTb3VyY2UsIHBhc3N3b3JkLCBvdXRwdXQsIG91
dHB1dFVzZXJuYW1lLCBvdXRwdXRQYXNzd29yZCk7Cit9CisKK2Jvb2wgY2Fub25pY2FsaXplVXNl
ckluZm8oY29uc3QgVUNoYXIqIHVzZXJuYW1lU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHVz
ZXJuYW1lLCBjb25zdCBVQ2hhciogcGFzc3dvcmRTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVudCYg
cGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1lLCBVUkxDb21wb25lbnQmIG91dHB1dFBh
c3N3b3JkKQoreworICAgIHJldHVybiBkb1VzZXJJbmZvPFVDaGFyLCBVQ2hhcj4odXNlcm5hbWVT
b3VyY2UsIHVzZXJuYW1lLCBwYXNzd29yZFNvdXJjZSwgcGFzc3dvcmQsIG91dHB1dCwgb3V0cHV0
VXNlcm5hbWUsIG91dHB1dFBhc3N3b3JkKTsKK30KKworYm9vbCBjYW5vbmljYWxpemVQb3J0KGNv
bnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCwgaW50IGRlZmF1bHRQb3J0
Rm9yU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LCBVUkxDb21wb25lbnQmIG91dHB1dFBvcnRDb21wb25lbnQpCit7CisgICAgcmV0dXJuIGRvUG9y
dDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdFBvcnRGb3JTY2hlbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dFBvcnRDb21wb25lbnQpOworfQor
Citib29sIGNhbm9uaWNhbGl6ZVBvcnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcG9ydCwgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFBvcnRDb21w
b25lbnQpCit7CisgICAgcmV0dXJuIGRvUG9ydDxVQ2hhciwgVUNoYXI+KHNwZWMsIHBvcnQsIGRl
ZmF1bHRQb3J0Rm9yU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsIG91dHB1dFBvcnRDb21wb25lbnQpOworfQorCit2b2lkIGNhbm9uaWNhbGl6ZUZyYWdtZW50
KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcmVmLCBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRGcmFnbWVudCkKK3sKKyAgICBkb0Nhbm9u
aWNhbGl6ZUZyYWdtZW50PGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIHJlZiwgb3V0cHV0LCBv
dXRwdXRGcmFnbWVudCk7Cit9CisKK3ZvaWQgY2Fub25pY2FsaXplRnJhZ21lbnQoY29uc3QgVUNo
YXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcmVmLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRGcmFnbWVudCkKK3sKKyAgICBkb0Nhbm9uaWNhbGl6ZUZy
YWdtZW50PFVDaGFyLCBVQ2hhcj4oc3BlYywgcmVmLCBvdXRwdXQsIG91dHB1dEZyYWdtZW50KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTcwMThmN2E0NjcwYjQxZjA2
MDIwMjc4ZDFmY2I3OThlMDdkYTk3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
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
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRnVuY3Rpb25zIGZv
ciBjYW5vbmljYWxpemluZyAiZmlsZXN5c3RlbTpmaWxlOiIgVVJMcy4KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIu
aCIKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgor
I2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxVdGlsLmgiCisjaW5j
bHVkZSAiVVJMVXRpbEludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2Ug
V1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCisv
LyBXZSB1c2UgdGhlIFVSTENvbXBvbmVudFNvdXJjZSBmb3IgdGhlIG91dGVyIFVSTCwgYXMgaXQg
Y2FuIGhhdmUgcmVwbGFjZW1lbnRzLAorLy8gd2hlcmVhcyB0aGUgaW5uZXJfdXJsIGNhbid0LCBz
byBpdCB1c2VzIHNwZWMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBVQ0hBUj4KK2Jvb2wgZG9DYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKGNvbnN0IENoYXJhY3Rl
clR5cGUqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxD
b21wb25lbnRTb3VyY2U8Q2hhcmFjdGVyVHlwZT4mIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyYgb3V0cHV0UGFy
c2VkKQoreworICAgIC8vIGZpbGVzeXN0ZW0gb25seSB1c2VzIHtzY2hlbWUsIHBhdGgsIHF1ZXJ5
LCByZWZ9IC0tIGNsZWFyIHRoZSByZXN0LgorICAgIG91dHB1dFBhcnNlZC51c2VybmFtZSA9IFVS
TENvbXBvbmVudCgpOworICAgIG91dHB1dFBhcnNlZC5wYXNzd29yZCA9IFVSTENvbXBvbmVudCgp
OworICAgIG91dHB1dFBhcnNlZC5ob3N0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFy
c2VkLnBvcnQgPSBVUkxDb21wb25lbnQoKTsKKworICAgIGNvbnN0IFVSTFNlZ21lbnRzKiBpbm5l
clBhcnNlZCA9IHBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCk7CisgICAgVVJMU2VnbWVudHMgbmV3
SW5uZXJQYXJzZWQ7CisKKyAgICAvLyBTY2hlbWUgKGtub3duLCBzbyB3ZSBkb24ndCBib3RoZXIg
cnVubmluZyBpdCB0aHJvdWdoIHRoZSBtb3JlCisgICAgLy8gY29tcGxpY2F0ZWQgc2NoZW1lIGNh
bm9uaWNhbGl6ZXIpLgorICAgIG91dHB1dFBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ob3V0cHV0Lmxl
bmd0aCgpKTsKKyAgICBvdXRwdXQuYXBwZW5kKCJmaWxlc3lzdGVtOiIsIDExKTsKKyAgICBvdXRw
dXRQYXJzZWQuc2NoZW1lLnNldExlbmd0aCgxMCk7CisKKyAgICBpZiAoIXBhcnNlZC5pbm5lclVS
TFNlZ21lbnRzKCkgfHwgIXBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCktPnNjaGVtZS5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Cisg
ICAgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBpbm5lclBh
cnNlZC0+c2NoZW1lLCBVUkxVdGlsaXRpZXM6OmtGaWxlU2NoZW1lKSkgeworICAgICAgICBuZXdJ
bm5lclBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICAgICAgb3V0
cHV0LmFwcGVuZCgiZmlsZTovLyIsIDcpOworICAgICAgICBuZXdJbm5lclBhcnNlZC5zY2hlbWUu
c2V0TGVuZ3RoKDQpOworICAgICAgICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgoc3BlYywg
aW5uZXJQYXJzZWQtPnBhdGgsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZuZXdJbm5lclBhcnNlZC5wYXRoKTsKKyAgICB9IGVsc2UgaWYgKFVSTFV0aWxpdGll
czo6aXNTdGFuZGFyZChzcGVjLCBpbm5lclBhcnNlZC0+c2NoZW1lKSkgeworICAgICAgICBzdWNj
ZXNzID0KKyAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplU3RhbmRhcmRVUkwo
c3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VkLmlubmVyVVJMU2VnbWVudHMoKS0+bGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
c2V0Q29udmVydGVyLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZuZXdJbm5lclBhcnNlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gVE9ETyhlcmljdSk6IFRoZSBVUkwgaXMgd3JvbmcsIGJ1dCBzaG91bGQgd2UgdHJ5IHRvIG91
dHB1dCBtb3JlIG9mIHdoYXQKKyAgICAgICAgLy8gd2Ugd2VyZSBnaXZlbj8gRWNob2luZyBiYWNr
IGZpbGVzeXN0ZW06bWFpbHRvIGV0Yy4gZG9lc24ndCBzZWVtIGFsbCB0aGF0IHVzZWZ1bC4KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUaGUgZmlsZXN5c3RlbSB0eXBlIG11
c3QgYmUgbW9yZSB0aGFuIGp1c3QgYSBsZWFkaW5nIHNsYXNoIGZvciB2YWxpZGl0eS4KKyAgICBz
dWNjZXNzICY9IHBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCktPnBhdGgubGVuZ3RoKCkgPiAxOwor
CisgICAgc3VjY2VzcyAmPSBDYW5vbmljYWxpemVQYXRoKHNvdXJjZS5wYXRoLCBwYXJzZWQucGF0
aCwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLnBhdGgpOworCisgICAgLy8gSWdub3JlIGZhaWx1cmVz
IGZvciBxdWVyeS9yZWYgc2luY2UgdGhlIFVSTCBjYW4gcHJvYmFibHkgc3RpbGwgYmUgbG9hZGVk
LgorICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHNvdXJjZS5xdWVyeSwgcGFyc2VkLnF1ZXJ5LCBjaGFy
c2V0Q29udmVydGVyLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQucXVlcnkpOworICAgIGNhbm9uaWNh
bGl6ZUZyYWdtZW50KHNvdXJjZS5yZWYsIHBhcnNlZC5mcmFnbWVudCwgb3V0cHV0LCBvdXRwdXRQ
YXJzZWQuZnJhZ21lbnQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBvdXRwdXRQYXJzZWQu
c2V0SW5uZXJVUkxTZWdtZW50cyhuZXdJbm5lclBhcnNlZCk7CisKKyAgICByZXR1cm4gc3VjY2Vz
czsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBjYW5vbmljYWxpemVGaWxlU3lzdGVtVVJM
KGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFy
c2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIGRvQ2Fub25p
Y2FsaXplRmlsZVN5c3RlbVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBVUkxDb21wb25l
bnRTb3VyY2U8Y2hhcj4oc3BlYyksIHBhcnNlZCwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBv
dXRwdXRQYXJzZWQpOworfQorCitib29sIGNhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3Qg
VUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2Vn
bWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29u
dmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIGRvQ2Fub25pY2FsaXpl
RmlsZVN5c3RlbVVSTDxVQ2hhciwgVUNoYXI+KHNwZWMsIFVSTENvbXBvbmVudFNvdXJjZTxVQ2hh
cj4oc3BlYyksIHBhcnNlZCwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQp
OworfQorCitib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxhY2Vt
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogY2hhcnNl
dENvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJz
ZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBV
UkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNvbXBvbmVu
dHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gZG9D
YW5vbmljYWxpemVGaWxlU3lzdGVtVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KGJhc2UsIHNvdXJj
ZSwgcGFyc2VkLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOworfQor
Citib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252
ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQor
eworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OworICAgIFVSTENvbXBvbmVudFNvdXJjZTxj
aGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOwor
ICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCB1dGY4
LCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1cm4gZG9DYW5vbmljYWxpemVGaWxlU3lzdGVt
VVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KGJhc2UsIHNvdXJjZSwgcGFyc2VkLCBjaGFyc2V0Q29u
dmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxD
YW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVS
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNGY4NDEyODc4N2EzMjk3OWIxMTQ5MGRkNzZiMTBhNmM3OTIxMzQwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGV1cmwuY3BwCkBAIC0wLDAg
KzEsMjI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
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
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBGdW5jdGlvbnMgZm9yIGNhbm9uaWNhbGl6aW5nICJmaWxlOiIgVVJMcy4KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZm
ZXIuaCIKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5o
IgorI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwuaCIKKworI2lmIFVTRShXVEZVUkwpCisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFj
ZSB7CisKKyNpZiBPUyhXSU5ET1dTKQorCisvLyBHaXZlbiBhIHBvaW50ZXIgaW50byB0aGUgc3Bl
YywgdGhpcyBjb3BpZXMgYW5kIGNhbm9uaWNhbGl6ZXMgdGhlIGRyaXZlCisvLyBsZXR0ZXIgYW5k
IGNvbG9uIHRvIHRoZSBvdXRwdXQsIGlmIG9uZSBpcyBmb3VuZC4gSWYgdGhlcmUgaXMgbm90IGEg
ZHJpdmUKKy8vIHNwZWMsIGl0IHdvbid0IGRvIGFueXRoaW5nLiBUaGUgaW5kZXggb2YgdGhlIG5l
eHQgY2hhcmFjdGVyIGluIHRoZSBpbnB1dAorLy8gc3BlYyBpcyByZXR1cm5lZCAoYWZ0ZXIgdGhl
IGNvbG9uIHdoZW4gYSBkcml2ZSBzcGVjIGlzIGZvdW5kLCB0aGUgYmVnaW4KKy8vIG9mZnNldCBp
ZiBvbmUgaXMgbm90KS4KK3RlbXBsYXRlPHR5cGVuYW1lIENIQVI+CitpbnQgRmlsZURvRHJpdmVT
cGVjKGNvbnN0IENIQVIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQpCit7CisgICAgLy8gVGhlIHBhdGggY291bGQgYmUgb25lIG9mIHNldmVyYWwgdGhp
bmdzOiAvZm9vL2JhciwgYzovZm9vL2JhciwgL2M6L2ZvbywKKyAgICAvLyAod2l0aCBiYWNrc2xh
c2hlcyBpbnN0ZWFkIG9mIHNsYXNoZXMgYXMgd2VsbCkuCisgICAgaW50IG51bVNsYXNoZXMgPSBV
UkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGJlZ2luLCBlbmQpOworICAg
IGludCBhZnRlclNsYXNoZXMgPSBiZWdpbiArIG51bVNsYXNoZXM7CisKKyAgICBpZiAoIVVSTFBh
cnNlcjo6ZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBhZnRlclNsYXNoZXMsIGVuZCkp
CisgICAgICAgIHJldHVybiBiZWdpbjsgLy8gSGF2ZW4ndCBjb25zdW1lZCBhbnkgY2hhcmFjdGVy
cworCisgICAgLy8gQSBkcml2ZSBzcGVjIGlzIHRoZSBzdGFydCBvZiBhIHBhdGgsIHNvIHdlIG5l
ZWQgdG8gYWRkIGEgc2xhc2ggZm9yIHRoZQorICAgIC8vIGF1dGhvcml0eSB0ZXJtaW5hdG9yICh0
eXBpY2FsbHkgdGhlIHRoaXJkIHNsYXNoKS4KKyAgICBvdXRwdXQuYXBwZW5kKCcvJyk7CisKKyAg
ICAvLyBkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGRyaXZl
IGxldHRlciBpcyB2YWxpZAorICAgIC8vIGFuZCB0aGF0IGl0IGlzIGZvbGxvd2VkIGJ5IGEgY29s
b24vcGlwZS4KKworICAgIC8vIE5vcm1hbGl6ZSBXaW5kb3dzIGRyaXZlIGxldHRlcnMgdG8gdXBw
ZXJjYXNlCisgICAgaWYgKHNwZWNbYWZ0ZXJTbGFzaGVzXSA+PSAnYScgJiYgc3BlY1thZnRlclNs
YXNoZXNdIDw9ICd6JykKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzcGVjW2FmdGVyU2xhc2hlc10g
LSAnYScgKyAnQScpOworICAgIGVsc2UKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2Fz
dDxjaGFyPihzcGVjW2FmdGVyU2xhc2hlc10pKTsKKworICAgIC8vIE5vcm1hbGl6ZSB0aGUgY2hh
cmFjdGVyIGZvbGxvd2luZyBpdCB0byBhIGNvbG9uIHJhdGhlciB0aGFuIHBpcGUuCisgICAgb3V0
cHV0LmFwcGVuZCgnOicpOworICAgIHJldHVybiBhZnRlclNsYXNoZXMgKyAyOworfQorCisjZW5k
aWYgLy8gT1MoV0lORE9XUykKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hbWUgVUNIQVI+Citib29sIGRvRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25l
bnQmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50JiBvdXRwdXRQ
YXRoKQoreworICAgIC8vIENvcGllcyBhbmQgbm9ybWFsaXplcyB0aGUgImM6IiBhdCB0aGUgYmVn
aW5uaW5nLCBpZiBwcmVzZW50LgorICAgIG91dHB1dFBhdGguc2V0QmVnaW4ob3V0cHV0Lmxlbmd0
aCgpKTsKKyAgICBpbnQgYWZ0ZXJEcml2ZTsKKyNpZiBPUyhXSU5ET1dTKQorICAgIGFmdGVyRHJp
dmUgPSBGaWxlRG9Ecml2ZVNwZWMoc3BlYywgcGF0aC5iZWdpbiwgcGF0aC5lbmQoKSwgb3V0cHV0
KTsKKyNlbHNlCisgICAgYWZ0ZXJEcml2ZSA9IHBhdGguYmVnaW4oKTsKKyNlbmRpZgorCisgICAg
Ly8gQ29waWVzIHRoZSByZXN0IG9mIHRoZSBwYXRoLCBzdGFydGluZyBmcm9tIHRoZSBzbGFzaCBm
b2xsb3dpbmcgdGhlCisgICAgLy8gZHJpdmUgY29sb24gKGlmIGFueSwgV2luZG93cyBvbmx5KSwg
b3IgdGhlIGZpcnN0IHNsYXNoIG9mIHRoZSBwYXRoLgorICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
CisgICAgaWYgKGFmdGVyRHJpdmUgPCBwYXRoLmVuZCgpKSB7CisgICAgICAgIC8vIFVzZSB0aGUg
cmVndWxhciBwYXRoIGNhbm9uaWNhbGl6ZXIgdG8gY2Fub25pY2FsaXplIHRoZSByZXN0IG9mIHRo
ZQorICAgICAgICAvLyBwYXRoLiBHaXZlIGl0IGEgZmFrZSBvdXRwdXQgY29tcG9uZW50IHRvIHdy
aXRlIGludG8uIERvQ2Fub25pY2FsaXplRmlsZQorICAgICAgICAvLyB3aWxsIGNvbXB1dGUgdGhl
IGZ1bGwgcGF0aCBjb21wb25lbnQuCisgICAgICAgIFVSTENvbXBvbmVudCBzdWJQYXRoID0gVVJM
Q29tcG9uZW50Ojpmcm9tUmFuZ2UoYWZ0ZXJEcml2ZSwgcGF0aC5lbmQoKSk7CisgICAgICAgIFVS
TENvbXBvbmVudCBmYWtlT3V0cHV0UGF0aDsKKyAgICAgICAgc3VjY2VzcyA9IENhbm9uaWNhbGl6
ZVBhdGgoc3BlYywgc3ViUGF0aCwgb3V0cHV0LCAmZmFrZU91dHB1dFBhdGgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIE5vIGlucHV0IHBhdGgsIGNhbm9uaWNhbGl6ZSB0byBhIHNsYXNoLgor
ICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7CisgICAgfQorCisgICAgb3V0cHV0UGF0aC5zZXRM
ZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGF0aC5iZWdpbigpKTsKKyAgICByZXR1cm4g
c3VjY2VzczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
VUNIQVI+Citib29sIGRvQ2Fub25pY2FsaXplRmlsZVVSTChjb25zdCBVUkxDb21wb25lbnRTb3Vy
Y2U8Q2hhcmFjdGVyVHlwZT4mIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFy
c2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
U2VnbWVudHMmIG91dHB1dFBhcnNlZCkKK3sKKyAgICAvLyBUaGluZ3Mgd2UgZG9uJ3Qgc2V0IGlu
IGZpbGU6IFVSTHMuCisgICAgb3V0cHV0UGFyc2VkLnVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7
CisgICAgb3V0cHV0UGFyc2VkLnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0
UGFyc2VkLnBvcnQgPSBVUkxDb21wb25lbnQoKTsKKworICAgIC8vIFNjaGVtZSAoa25vd24sIHNv
IHdlIGRvbid0IGJvdGhlciBydW5uaW5nIGl0IHRocm91Z2ggdGhlIG1vcmUKKyAgICAvLyBjb21w
bGljYXRlZCBzY2hlbWUgY2Fub25pY2FsaXplcikuCisgICAgb3V0cHV0UGFyc2VkLnNjaGVtZS5z
ZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgIG91dHB1dC5hcHBlbmQoImZpbGU6Ly8iLCA3
KTsKKyAgICBvdXRwdXRQYXJzZWQuc2NoZW1lLnNldExlbmd0aCg0KTsKKworICAgIC8vIEFwcGVu
ZCB0aGUgaG9zdC4gRm9yIG1hbnkgZmlsZSBVUkxzLCB0aGlzIHdpbGwgYmUgZW1wdHkuIEZvciBV
TkMsIHRoaXMKKyAgICAvLyB3aWxsIGJlIHByZXNlbnQuCisgICAgLy8gVE9ETyhicmV0dHcpIFRo
aXMgZG9lc24ndCBkbyBhbnkgY2hlY2tpbmcgZm9yIGhvc3QgbmFtZSB2YWxpZGl0eS4gV2UKKyAg
ICAvLyBzaG91bGQgcHJvYmFibHkgaGFuZGxlIHZhbGlkaXR5IGNoZWNraW5nIG9mIFVOQyBob3N0
cyBkaWZmZXJlbnRseSB0aGFuCisgICAgLy8gZm9yIHJlZ3VsYXIgSVAgaG9zdHMuCisgICAgYm9v
bCBzdWNjZXNzID0gY2Fub25pY2FsaXplSG9zdChzb3VyY2UuaG9zdCwgcGFyc2VkLmhvc3QsIG91
dHB1dCwgb3V0cHV0UGFyc2VkLmhvc3QpOworICAgIHN1Y2Nlc3MgJj0gZG9GaWxlQ2Fub25pY2Fs
aXplUGF0aDxDaGFyYWN0ZXJUeXBlLCBVQ0hBUj4oc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLCBv
dXRwdXQsIG91dHB1dFBhcnNlZC5wYXRoKTsKKyAgICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2Uu
cXVlcnksIHBhcnNlZC5xdWVyeSwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgJm91dHB1dFBhcnNl
ZC5xdWVyeSk7CisKKyAgICAvLyBJZ25vcmUgZmFpbHVyZSBmb3IgcmVmcyBzaW5jZSB0aGUgVVJM
IGNhbiBwcm9iYWJseSBzdGlsbCBiZSBsb2FkZWQuCisgICAgY2Fub25pY2FsaXplRnJhZ21lbnQo
c291cmNlLnJlZiwgcGFyc2VkLmZyYWdtZW50LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5mcmFnbWVu
dCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBD
YW5vbmljYWxpemVGaWxlVVJMKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8Y2hh
ciwgdW5zaWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQs
IHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOworfQorCitib29sIENhbm9u
aWNhbGl6ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IC8qIHNwZWNMZW5ndGggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29u
dmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyog
b3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8VUNoYXIs
IFVDaGFyPihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29u
dmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOworfQorCitib29sIEZpbGVDYW5vbmljYWxp
emVQYXRoKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTENvbXBvbmVudCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCog
b3V0cHV0UGF0aCkKK3sKKyAgICByZXR1cm4gZG9GaWxlQ2Fub25pY2FsaXplUGF0aDxjaGFyLCB1
bnNpZ25lZCBjaGFyPihzcGVjLCBwYXRoLCBvdXRwdXQsICpvdXRwdXRQYXRoKTsKK30KKworYm9v
bCBGaWxlQ2Fub25pY2FsaXplUGF0aChjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQoreworICAgIHJldHVybiBkb0ZpbGVDYW5vbmlj
YWxpemVQYXRoPFVDaGFyLCBVQ2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCAqb3V0cHV0UGF0aCk7
Cit9CisKK2Jvb2wgUmVwbGFjZUZpbGVVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAg
ICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIFVSTFNl
Z21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNv
dXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0
dXBPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2Vk
KTsKKyAgICByZXR1cm4gZG9DYW5vbmljYWxpemVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+
KHNvdXJjZSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsK
K30KKworYm9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFyKiBiYXNlLAorICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAg
ICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIFVSTFNl
Z21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7Cisg
ICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAgICBVUkxTZWdtZW50
cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhi
YXNlLCByZXBsYWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOworICAgIHJldHVybiBk
b0Nhbm9uaWNhbGl6ZUZpbGVVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQs
IHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOworfQorCit9IC8vIG5hbWVz
cGFjZSBVUkxDYW5vbmljYWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
VVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25I
b3N0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25Ib3N0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZWEyZjk5MDZkNjRmMWFlNDQ0ZWQwZDI5NzkzMWM2MzA2ODRlYjljCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwCkBAIC0wLDAg
KzEsMzgzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
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
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2Fub24uaCIKKworI2luY2x1ZGUgIlJh
d1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKKworI2lmIFVTRShX
VEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7
CisKK25hbWVzcGFjZSB7CisKKy8vIEZvciByZWZlcmVuY2UsIGhlcmUncyB3aGF0IElFIHN1cHBv
cnRzOgorLy8gS2V5OiAwIChkaXNhbGxvd2VkOiBmYWlsdXJlIGlmIHByZXNlbnQgaW4gdGhlIGlu
cHV0KQorLy8gICAgICArIChhbGxvd2VkIGVpdGhlciBlc2NhcGVkIG9yIHVuZXNjYXBlZCwgYW5k
IHVubW9kaWZpZWQpCisvLyAgICAgIFUgKGFsbG93ZWQgZXNjYXBlZCBvciB1bmVzY2FwZWQgYnV0
IGFsd2F5cyB1bmVzY2FwZWQgaWYgcHJlc2VudCBpbgorLy8gICAgICAgICBlc2NhcGVkIGZvcm0p
CisvLyAgICAgIEUgKGFsbG93ZWQgZXNjYXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyBlc2Nh
cGVkIGlmIHByZXNlbnQgaW4KKy8vICAgICAgICAgdW5lc2NhcGVkIGZvcm0pCisvLyAgICAgICUg
KG9ubHkgYWxsb3dlZCBlc2NhcGVkIGluIHRoZSBpbnB1dCwgd2lsbCBiZSB1bm1vZGlmaWVkKS4K
Ky8vICAgICAgSSBsZWZ0IGJsYW5rIGFscGhhIG51bWVyaWMgY2hhcmFjdGVycy4KKy8vCisvLyAg
ICAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZgorLy8gICAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIDAgICAw
ICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFCisvLyAxICAgRSAg
RSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRQorLy8gMiAgIEUgICsg
IEUgIEUgICsgIEUgICsgICsgICsgICsgICsgICsgICsgIFUgIFUgIDAKKy8vIDMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAlICAlICBFICArICBFICAwICA8LS0gVGhvc2UgYXJlICA6
IDsgPCA9ID4gPworLy8gNCAgICUKKy8vIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVICAwICBVICBVICBVICA8LS0gVGhvc2UgYXJlICBbIFwgXSBeIF8KKy8vIDYgICBFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LS0gVGhhdCdzICBg
CisvLyA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSAgRSAgRSAgVSAgRSAg
PC0tIFRob3NlIGFyZSB7IHwgfSB+IChVTlBSSU5UQUJMRSkKKy8vCisvLyBOT1RFOiBJIGRpZG4n
dCBhY3R1YWxseSB0ZXN0IGFsbCB0aGUgY29udHJvbCBjaGFyYWN0ZXJzLiBTb21lIG1heSBiZQor
Ly8gZGlzYWxsb3dlZCBpbiB0aGUgaW5wdXQsIGJ1dCB0aGV5IGFyZSBhbGwgYWNjZXB0ZWQgZXNj
YXBlZCBleGNlcHQgZm9yIDAuCisvLyBJIGFsc28gZGlkbid0IHRlc3QgaWYgY2hhcmFjdGVycyBh
ZmZlY3RpbmcgSFRNTCBwYXJzaW5nIGFyZSBhbGxvd2VkCisvLyB1bmVzY2FwZWQsIGVnLiAoIikg
b3IgKCMpLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgor
Ly8gU3VycHJpc2luZ2x5LCBzcGFjZSBpcyBhY2NlcHRlZCBpbiB0aGUgaW5wdXQgYW5kIGFsd2F5
cyBlc2NhcGVkLgorCisvLyBUaGlzIHRhYmxlIGxpc3RzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBv
ZiBhbGwgY2hhcmFjdGVycyB3ZSBhbGxvdyBpbiB0aGUKKy8vIGlucHV0LCB3aXRoIDAgaW5kaWNh
dGluZyBpdCBpcyBkaXNhbGxvd2VkLiBXZSB1c2UgdGhlIG1hZ2ljIGtFc2NhcGVkSG9zdENoYXIK
Ky8vIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGVzY2Fw
ZWQuIFdlIGFyZSBhIGxpdHRsZSBtb3JlCisvLyByZXN0cmljdGl2ZSB0aGFuIElFLCBidXQgbGVz
cyByZXN0cmljdGl2ZSB0aGFuIEZpcmVmb3guCisvLworLy8gTm90ZSB0aGF0IHdlIGRpc2FsbG93
IHRoZSAlIGNoYXJhY3Rlci4gV2Ugd2lsbCBhbGxvdyBpdCB3aGVuIHBhcnQgb2YgYW4KKy8vIGVz
Y2FwZSBzZXF1ZW5jZSwgb2YgY291cnNlLCBidXQgdGhpcyBkaXNhbGxvd3MgIiUyNSIuIEV2ZW4g
dGhvdWdoIElFIGFsbG93cworLy8gaXQsIGFsbG93aW5nIGl0IHdvdWxkIHB1dCB1cyBpbiBhIGZ1
bm55IHN0YXRlLiBJZiB0aGVyZSB3YXMgYW4gaW52YWxpZAorLy8gZXNjYXBlIHNlcXVlbmNlIGxp
a2UgIiV6eiIsIHdlJ2xsIGFkZCAiJTI1enoiIHRvIHRoZSBvdXRwdXQgYW5kIGZhaWwuCisvLyBB
bGxvd2luZyBwZXJjZW50cyBtZWFucyB3ZSdsbCBzdWNjZWVkIGEgc2Vjb25kIHRpbWUsIHNvIHZh
bGlkaXR5IHdvdWxkIGNoYW5nZQorLy8gYmFzZWQgb24gaG93IG1hbnkgdGltZXMgeW91IHJ1biB0
aGUgY2Fub25pY2FsaXplci4gV2UgcHJlZmVyIHRvIGFsd2F5cyByZXBvcnQKKy8vIHRoZSBzYW1l
IHZhaWxpZGl0eSwgc28gcmVqZWN0IHRoaXMuCitjb25zdCB1bnNpZ25lZCBjaGFyIGtFc2MgPSAw
eGZmOworY29uc3QgdW5zaWduZWQgY2hhciBrSG9zdENoYXJMb29rdXBbMHg4MF0gPSB7CisgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorLy8gICcgJyAgICEgICAgICIgICAgICMgICAgICQgICAgICUg
ICAgICYgICAgICcgICAgICggICAgICkgICAgICogICAgICsgICAgICwgICAgIC0gICAgIC4gICAg
IC8KKyAgICBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCAgIDAsICBrRXNjLCBrRXNjLCBr
RXNjLCBrRXNjLCBrRXNjLCAgJysnLCBrRXNjLCAgJy0nLCAgJy4nLCAgIDAsCisvLyAgIDAgICAg
MSAgICAyICAgIDMgICAgNCAgICA1ICAgIDYgICAgNyAgICA4ICAgIDkgICAgOiAgICA7ICAgIDwg
ICAgPSAgICA+ICAgID8KKyAgICAnMCcsICAnMScsICAnMicsICAnMycsICAnNCcsICAnNScsICAn
NicsICAnNycsICAnOCcsICAnOScsICAnOicsICAgMCAsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCAs
CisvLyAgIEAgICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICAgICBI
ICAgICBJICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPCisgICAga0VzYywgICdh
JywgICdiJywgICdjJywgICdkJywgICdlJywgICdmJywgICdnJywgICdoJywgICdpJywgICdqJywg
ICdrJywgICdsJywgICdtJywgICduJywgICdvJywKKy8vICAgUCAgICAgUSAgICAgUiAgICAgUyAg
ICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAg
XSAgICAgXiAgICAgXworICAgICdwJywgICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2
JywgICd3JywgICd4JywgICd5JywgICd6JywgICdbJywgICAwICwgICddJywgICAwICwgICdfJywK
Ky8vICAgYCAgICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgICAgIGgg
ICAgIGkgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8KKyAgICBrRXNjLCAgJ2En
LCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLCAgJ2gnLCAgJ2knLCAgJ2onLCAg
J2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAgJ28nLAorLy8gICBwICAgICBxICAgICByICAgICBzICAg
ICB0ICAgICB1ICAgICB2ICAgICB3ICAgICB4ICAgICB5ICAgICB6ICAgICB7ICAgICB8ICAgICB9
ICAgICB+CisgICAgJ3AnLCAgJ3EnLCAgJ3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cn
LCAgJ3gnLCAgJ3knLCAgJ3onLCBrRXNjLCBrRXNjLCBrRXNjLCAgIDAgLCAgIDAgfTsKKwordHlw
ZWRlZiBSYXdVUkxCdWZmZXI8Y2hhcj4gU3RhY2tCdWZmZXI7Cit0eXBlZGVmIFJhd1VSTEJ1ZmZl
cjxVQ2hhcj4gU3RhY2tCdWZmZXJXOworCisvLyBTY2FucyBhIGhvc3QgbmFtZSBhbmQgZmlsbHMg
aW4gdGhlIG91dHB1dCBmbGFncyBhY2NvcmRpbmcgdG8gd2hhdCB3ZSBmaW5kLgorLy8gfGhhc05v
bkFTQ0lJfCB3aWxsIGJlIHRydWUgaWYgdGhlcmUgYXJlIGFueSBub24tNy1iaXQgY2hhcmFjdGVy
cywgYW5kCisvLyB8aGFzRXNjYXBlZHwgd2lsbCBiZSB0cnVlIGlmIHRoZXJlIGlzIGEgcGVyY2Vu
dCBzaWduLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+
Cit2b2lkIHNjYW5Ib3N0bmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIGhvc3QsIGJvb2wmIGhhc05vbkFTQ0lJLCBib29sJiBoYXNFc2NhcGVkKQorewor
ICAgIGludCBlbmQgPSBob3N0LmVuZCgpOworICAgIGhhc05vbkFTQ0lJID0gZmFsc2U7CisgICAg
aGFzRXNjYXBlZCA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSBob3N0LmJlZ2luKCk7IGkgPCBl
bmQ7ICsraSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pID49IDB4
ODApCisgICAgICAgICAgICBoYXNOb25BU0NJSSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHNw
ZWNbaV0gPT0gJyUnKQorICAgICAgICAgICAgaGFzRXNjYXBlZCA9IHRydWU7CisgICAgfQorfQor
CisvLyBDYW5vbmljYWxpemVzIGEgaG9zdCBuYW1lIHRoYXQgaXMgZW50aXJlbHkgOC1iaXQgY2hh
cmFjdGVycyAoZXZlbiB0aG91Z2gKKy8vIHRoZSB0eXBlIGhvbGRpbmcgdGhlbSBtYXkgYmUgMTYg
Yml0cy4gRXNjYXBlZCBjaGFyYWN0ZXJzIHdpbGwgYmUgdW5lc2NhcGVkLgorLy8gTm9uLTctYml0
IGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBVVEYtOCkgd2lsbCBiZSBwYXNzZWQgdW5jaGFuZ2Vk
LgorLy8KKy8vIFRoZSB8Kmhhc05vbkFTQ0lJfCBmbGFnIHdpbGwgYmUgdHJ1ZSBpZiB0aGVyZSBh
cmUgbm9uLTctYml0IGNoYXJhY3RlcnMgaW4KKy8vIHRoZSBvdXRwdXQuCisvLworLy8gVGhpcyBm
dW5jdGlvbiBpcyB1c2VkIGluIHR3byBzaXR1YXRpb25zOgorLy8KKy8vICAqIFdoZW4gdGhlIGNh
bGxlciBrbm93cyB0aGVyZSBpcyBubyBub24tQVNDSUkgb3IgcGVyY2VudCBlc2NhcGVkCisvLyAg
ICBjaGFyYWN0ZXJzLiBUaGlzIGlzIHdoYXQgRG9Ib3N0IGRvZXMuIFRoZSByZXN1bHQgd2lsbCBi
ZSBhIGNvbXBsZXRlbHkKKy8vICAgIGNhbm9uaWNhbGl6ZWQgaG9zdCBzaW5jZSB3ZSBrbm93IG5v
dGhpbmcgd2VpcmQgY2FuIGhhcHBlbiAoZXNjYXBlZAorLy8gICAgY2hhcmFjdGVycyBjb3VsZCBi
ZSB1bmVzY2FwZWQgdG8gbm9uLTctYml0LCBzbyB0aGV5IGhhdmUgdG8gYmUgdHJlYXRlZAorLy8g
ICAgd2l0aCBzdXNwaWNpb24gYXQgdGhpcyBwb2ludCkuIEl0IGRvZXMgbm90IHVzZSB0aGUgfGhh
c05vbkFTQ0lJfCBmbGFnLgorLy8KKy8vICAqIFdoZW4gdGhlIGNhbGxlciBoYXMgYW4gOC1iaXQg
c3RyaW5nIHRoYXQgbWF5IG5lZWQgdW5lc2NhcGluZy4KKy8vICAgIGRvQ29tcGxleEhvc3QgY2Fs
bHMgdXMgdGhpcyBzaXR1YXRpb24gdG8gZG8gdW5lc2NhcGluZyBhbmQgdmFsaWRhdGlvbi4KKy8v
ICAgIEFmdGVyIHRoaXMsIGl0IG1heSBkbyBvdGhlciBJRE4gb3BlcmF0aW9ucyBkZXBlbmRpbmcg
b24gdGhlIHZhbHVlIG9mIHRoZQorLy8gICAgfCpoYXNOb25BU0NJSXwgZmxhZy4KKy8vCisvLyBU
aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGUgb3V0cHV0IGlzIGEgcG90ZW50aWFsbHkg
dmFsaWQgaG9zdCBuYW1lLgordGVtcGxhdGU8dHlwZW5hbWUgSU5DSEFSLCB0eXBlbmFtZSBPVVRD
SEFSPgorYm9vbCBkb1NpbXBsZUhvc3QoY29uc3QgSU5DSEFSKiBob3N0LCBpbnQgaG9zdExlbmd0
aCwgVVJMQnVmZmVyPE9VVENIQVI+JiBvdXRwdXQsIGJvb2wmIGhhc05vbkFTQ0lJKQoreworICAg
IGhhc05vbkFTQ0lJID0gZmFsc2U7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgaG9zdExlbmd0aDsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIHNv
dXJjZSA9IGhvc3RbaV07CisgICAgICAgIGlmIChzb3VyY2UgPT0gJyUnKSB7CisgICAgICAgICAg
ICAvLyBVbmVzY2FwZSBmaXJzdCwgaWYgcG9zc2libGUuCisgICAgICAgICAgICAvLyBTb3VyY2Ug
d2lsbCBiZSB1c2VkIG9ubHkgaWYgZGVjb2RlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgICAgIGlmICghRGVjb2RlRXNjYXBlZChob3N0LCAmaSwgaG9zdExlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
Pigmc291cmNlKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZWQgY2hhcmFj
dGVyLiBUaGVyZSBpcyBub3RoaW5nIHRoYXQgY2FuIG1ha2UgdGhpcworICAgICAgICAgICAgICAg
IC8vIGhvc3QgdmFsaWQuIFdlIGFwcGVuZCBhbiBlc2NhcGVkIHBlcmNlbnQgc28gdGhlIFVSTCBs
b29rcyByZWFzb25hYmxlCisgICAgICAgICAgICAgICAgLy8gYW5kIG1hcmsgYXMgZmFpbGVkLgor
ICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoJyUnLCBvdXRwdXQpOwor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzb3VyY2UgPCAweDgw
KSB7CisgICAgICAgICAgICAvLyBXZSBoYXZlIEFTQ0lJIGlucHV0LCB3ZSBjYW4gdXNlIG91ciBs
b29rdXAgdGFibGUuCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlcGxhY2VtZW50ID0ga0hv
c3RDaGFyTG9va3VwW3NvdXJjZV07CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50KSB7Cisg
ICAgICAgICAgICAgICAgLy8gSW52YWxpZCBjaGFyYWN0ZXIsIGFkZCBpdCBhcyBwZXJjZW50LWVz
Y2FwZWQgYW5kIG1hcmsgYXMgZmFpbGVkLgorICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2Fw
ZWRDaGFyYWN0ZXIoc291cmNlLCBvdXRwdXQpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQgPT0ga0VzYykgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY2hhcmFjdGVyIGlzIHZhbGlkIGJ1dCBzaG91bGQgYmUgZXNj
YXBlZC4KKyAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHNvdXJjZSwg
b3V0cHV0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQ29tbW9u
IGNhc2UsIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgdmFsaWQgaW4gYSBob3N0bmFtZSwgdGhlIGxv
b2t1cAorICAgICAgICAgICAgICAgIC8vIHRhYmxlIHRlbGxzIHVzIHRoZSBjYW5vbmljYWwgcmVw
cmVzZW50YXRpb24gb2YgdGhhdCBjaGFyYWN0ZXIgKGxvd2VyCisgICAgICAgICAgICAgICAgLy8g
Y2FzZWQpLgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQocmVwbGFjZW1lbnQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSXQncyBhIG5vbi1h
c2NpaSBjaGFyLiBKdXN0IHB1c2ggaXQgdG8gdGhlIG91dHB1dC4KKyAgICAgICAgICAgIC8vIElu
IGNhc2Ugd2hlcmUgd2UgaGF2ZSBVQ2hhciBpbnB1dCwgYW5kIGNoYXIgb3V0cHV0IGl0J3Mgc2Fm
ZSB0bworICAgICAgICAgICAgLy8gY2FzdCBVQ2hhci0+Y2hhciBvbmx5IGlmIGlucHV0IHN0cmlu
ZyB3YXMgY29udmVydGVkIHRvIEFTQ0lJLgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0
aWNfY2FzdDxPVVRDSEFSPihzb3VyY2UpKTsKKyAgICAgICAgICAgIGhhc05vbkFTQ0lJID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBDYW5v
bmljYWxpemVzIGEgaG9zdCB0aGF0IHJlcXVpcmVzIElETiBjb252ZXJzaW9uLiBSZXR1cm5zIHRy
dWUgb24gc3VjY2VzcworYm9vbCBkb0lETkhvc3QoY29uc3QgVUNoYXIqIHNyYywgaW50IHNvdXJj
ZUxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgLy8gV2UgbmVlZCB0byBl
c2NhcGUgVVJMIGJlZm9yZSBkb2luZyBJRE4gY29udmVyc2lvbiwgc2luY2UgcHVuaWNvZGUgc3Ry
aW5ncworICAgIC8vIGNhbm5vdCBiZSBlc2NhcGVkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuCisg
ICAgUmF3VVJMQnVmZmVyPFVDaGFyPiB1cmxFc2NhcGVkSG9zdDsKKyAgICBib29sIGhhc05vbkFT
Q0lJOworICAgIGRvU2ltcGxlSG9zdChzcmMsIHNvdXJjZUxlbmd0aCwgdXJsRXNjYXBlZEhvc3Qs
IGhhc05vbkFTQ0lJKTsKKworICAgIFN0YWNrQnVmZmVyVyB3aWRlT3V0cHV0OworICAgIGlmICgh
SUROVG9BU0NJSSh1cmxFc2NhcGVkSG9zdC5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgIHVy
bEVzY2FwZWRIb3N0Lmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICB3aWRlT3V0cHV0KSkg
eworICAgICAgICAvLyBTb21lIGVycm9yLCBnaXZlIHVwLiBUaGlzIHdpbGwgd3JpdGUgc29tZSBy
ZWFzb25hYmxlIGxvb2tpbmcKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmlu
ZyB0byB0aGUgb3V0cHV0LgorICAgICAgICBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKHNyYywg
MCwgc291cmNlTGVuZ3RoLCBvdXRwdXQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gTm93IHdlIGNoZWNrIHRoZSBBU0NJSSBvdXRwdXQgbGlrZSBhIG5vcm1hbCBob3N0
LiBJdCB3aWxsIGFsc28gaGFuZGxlCisgICAgLy8gdW5lc2NhcGluZy4gQWx0aG91Z2ggd2UgdW5l
c2NhcGVkIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FsbCwgaWYKKyAgICAvLyBz
b21lYm9keSBkb2VzICUwMCBhcyBmdWxsd2lkdGgsIElDVSB3aWxsIGNvbnZlcnQgdGhpcyB0byBB
U0NJSS4KKyAgICBib29sIHN1Y2Nlc3MgPSBkb1NpbXBsZUhvc3Qod2lkZU91dHB1dC5kYXRhKCks
IHdpZGVPdXRwdXQubGVuZ3RoKCksIG91dHB1dCwgaGFzTm9uQVNDSUkpOworICAgIEFTU0VSVCgh
aGFzTm9uQVNDSUkpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyA4LWJpdCBjb252ZXJ0
IGhvc3QgdG8gaXRzIEFTQ0lJIHZlcnNpb246IHRoaXMgY29udmVydHMgdGhlIFVURi04IGlucHV0
IHRvCisvLyBVVEYtMTYuIFRoZSBoYXNFc2NhcGVkIGZsYWcgc2hvdWxkIGJlIHNldCBpZiB0aGUg
aW5wdXQgc3RyaW5nIHJlcXVpcmVzCisvLyB1bmVzY2FwaW5nLgorYm9vbCBkb0NvbXBsZXhIb3N0
KGNvbnN0IGNoYXIqIGhvc3QsIGludCBob3N0TGVuZ3RoLCBib29sIGhhc05vbkFTQ0lJLCBib29s
IGhhc0VzY2FwZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIFNhdmUgdGhl
IGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIG91dHB1dC4gV2UgbWF5IHdyaXRlIHN0dWZmIGFuZCBy
ZXdpbmQgaXQKKyAgICAvLyBiZWxvdywgc28gd2UgbmVlZCB0byBrbm93IHdoZXJlIHRvIHJld2lu
ZCB0by4KKyAgICBpbnQgYmVnaW5MZW5ndGggPSBvdXRwdXQubGVuZ3RoKCk7CisKKyAgICAvLyBQ
b2ludHMgdG8gdGhlIFVURi04IGRhdGEgd2Ugd2FudCB0byBjb252ZXJ0LiBUaGlzIHdpbGwgZWl0
aGVyIGJlIHRoZQorICAgIC8vIGlucHV0IG9yIHRoZSB1bmVzY2FwZWQgdmVyc2lvbiB3cml0dGVu
IHRvIHxvdXRwdXR8IGlmIG5lY2Vzc2FyeS4KKyAgICBjb25zdCBjaGFyKiB1dGY4U291cmNlOwor
ICAgIGludCB1dGY4U291cmNlTGVuZ3RoOworICAgIGlmIChoYXNFc2NhcGVkKSB7CisgICAgICAg
IC8vIFVuZXNjYXBlIGJlZm9yZSBjb252ZXJ0aW5nIHRvIFVURi0xNiBmb3IgSUROLiBXZSB3cml0
ZSB0aGlzIGludG8gdGhlCisgICAgICAgIC8vIG91dHB1dCBiZWNhdXNlIGl0IG1vc3QgbGlrZWx5
IGRvZXMgbm90IHJlcXVpcmUgSUROaXphdGlvbiwgYW5kIHdlIGNhbgorICAgICAgICAvLyBzYXZl
IGFub3RoZXIgaHVnZSBzdGFjayBidWZmZXIuIEl0IHdpbGwgYmUgcmVwbGFjZWQgYmVsb3cgaWYg
aXQgcmVxdWlyZXMKKyAgICAgICAgLy8gSUROLiBUaGlzIHdpbGwgYWxzbyB1cGRhdGUgb3VyIG5v
bi1BU0NJSSBmbGFnIHNvIHdlIGtub3cgd2hldGhlciB0aGUKKyAgICAgICAgLy8gdW5lc2NhcGVk
IGlucHV0IHJlcXVpcmVzIElETi4KKyAgICAgICAgaWYgKCFkb1NpbXBsZUhvc3QoaG9zdCwgaG9z
dExlbmd0aCwgb3V0cHV0LCBoYXNOb25BU0NJSSkpIHsKKyAgICAgICAgICAgIC8vIEVycm9yIHdp
dGggc29tZSBlc2NhcGUgc2VxdWVuY2UuIFdlJ2xsIGNhbGwgdGhlIGN1cnJlbnQgb3V0cHV0Cisg
ICAgICAgICAgICAvLyBjb21wbGV0ZS4gZG9TaW1wbGVIb3N0IHdpbGwgaGF2ZSB3cml0dGVuIHNv
bWUgInJlYXNvbmFibGUiIG91dHB1dC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFVuZXNjYXBpbmcgbWF5IGhhdmUgbGVmdCB1cyB3aXRoIEFTQ0lJ
IGlucHV0LCBpbiB3aGljaCBjYXNlIHRoZQorICAgICAgICAvLyB1bmVzY2FwZWQgdmVyc2lvbiB3
ZSB3cm90ZSB0byBvdXRwdXQgaXMgY29tcGxldGUuCisgICAgICAgIGlmICghaGFzTm9uQVNDSUkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBTYXZlIHRoZSBwb2ludGVy
IGludG8gdGhlIGRhdGEgd2FzIGp1c3QgY29udmVydGVkIChpdCBtYXkgYmUgYXBwZW5kZWQgdG8K
KyAgICAgICAgLy8gb3RoZXIgZGF0YSBpbiB0aGUgb3V0cHV0IGJ1ZmZlcikuCisgICAgICAgIHV0
ZjhTb3VyY2UgPSAmb3V0cHV0LmRhdGEoKVtiZWdpbkxlbmd0aF07CisgICAgICAgIHV0ZjhTb3Vy
Y2VMZW5ndGggPSBvdXRwdXQubGVuZ3RoKCkgLSBiZWdpbkxlbmd0aDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHVuZXNjYXBlLCB1c2UgaW5wdXQgZm9yIElETml6
YXRpb24gbGF0ZXIuIChXZSBrbm93IHRoZQorICAgICAgICAvLyBpbnB1dCBoYXMgbm9uLUFTQ0lJ
LCBvciB0aGUgc2ltcGxlIHZlcnNpb24gd291bGQgaGF2ZSBiZWVuIGNhbGxlZAorICAgICAgICAv
LyBpbnN0ZWFkIG9mIHVzLikKKyAgICAgICAgdXRmOFNvdXJjZSA9IGhvc3Q7CisgICAgICAgIHV0
ZjhTb3VyY2VMZW5ndGggPSBob3N0TGVuZ3RoOworICAgIH0KKworICAgIC8vIE5vbi1BU0NJSSBp
bnB1dCByZXF1aXJlcyBJRE4sIGNvbnZlcnQgdG8gVVRGLTE2IGFuZCBkbyB0aGUgSUROIGNvbnZl
cnNpb24uCisgICAgLy8gQWJvdmUsIHdlIG1heSBoYXZlIHVzZWQgdGhlIG91dHB1dCB0byB3cml0
ZSB0aGUgdW5lc2NhcGVkIHZhbHVlcyB0bywgc28KKyAgICAvLyB3ZSBoYXZlIHRvIHJld2luZCBp
dCB0byB3aGVyZSB3ZSBzdGFydGVkIGFmdGVyIHdlIGNvbnZlcnQgaXQgdG8gVVRGLTE2LgorICAg
IFN0YWNrQnVmZmVyVyB1dGYxNjsKKyAgICBpZiAoIUNvbnZlcnRVVEY4VG9VVEYxNih1dGY4U291
cmNlLCB1dGY4U291cmNlTGVuZ3RoLCB1dGYxNikpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBlcnJv
ciBjYXNlLCB0aGUgaW5wdXQgbWF5IG9yIG1heSBub3QgYmUgdGhlIG91dHB1dC4KKyAgICAgICAg
U3RhY2tCdWZmZXIgdXRmODsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1dGY4U291cmNl
TGVuZ3RoOyBpKyspCisgICAgICAgICAgICB1dGY4LmFwcGVuZCh1dGY4U291cmNlW2ldKTsKKyAg
ICAgICAgb3V0cHV0LnNldExlbmd0aChiZWdpbkxlbmd0aCk7CisgICAgICAgIEFwcGVuZEludmFs
aWROYXJyb3dTdHJpbmcodXRmOC5kYXRhKCksIDAsIHV0ZjgubGVuZ3RoKCksIG91dHB1dCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgb3V0cHV0LnNldExlbmd0aChiZWdpbkxl
bmd0aCk7CisKKyAgICAvLyBUaGlzIHdpbGwgY2FsbCBkb1NpbXBsZUhvc3Qgd2hpY2ggd2lsbCBk
byBub3JtYWwgQVNDSUkgY2Fub25pY2FsaXphdGlvbgorICAgIC8vIGFuZCBhbHNvIGNoZWNrIGZv
ciBJUCBhZGRyZXNzZXMgaW4gdGhlIG91dHB0LgorICAgIHJldHVybiBkb0lETkhvc3QodXRmMTYu
ZGF0YSgpLCB1dGYxNi5sZW5ndGgoKSwgb3V0cHV0KTsKK30KKworLy8gVVRGLTE2IGNvbnZlcnQg
aG9zdCB0byBpdHMgQVNDSUkgdmVyc2lvbi4gVGhlIHNldCB1cCBpcyBhbHJlYWR5IHJlYWR5IGZv
cgorLy8gdGhlIGJhY2tlbmQsIHNvIHdlIGp1c3QgcGFzcyB0aHJvdWdoLiBUaGUgaGFzRXNjYXBl
ZCBmbGFnIHNob3VsZCBiZSBzZXQgaWYKKy8vIHRoZSBpbnB1dCBzdHJpbmcgcmVxdWlyZXMgdW5l
c2NhcGluZy4KK2Jvb2wgZG9Db21wbGV4SG9zdChjb25zdCBVQ2hhciogaG9zdCwgaW50IGhvc3RM
ZW5ndGgsIGJvb2wgaGFzTm9uQVNDSUksIGJvb2wgaGFzRXNjYXBlZCwgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQpCit7CisgICAgaWYgKGhhc0VzY2FwZWQpIHsKKyAgICAgICAgLy8gWWlrZXMsIHdl
IGhhdmUgZXNjYXBlZCBjaGFyYWN0ZXJzIHdpdGggd2lkZSBpbnB1dC4gVGhlIGVzY2FwZWQKKyAg
ICAgICAgLy8gY2hhcmFjdGVycyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgVVRGLTguIFRvIHNv
bHZlIHRoaXMgcHJvYmxlbSwKKyAgICAgICAgLy8gd2UgY29udmVydCB0byBVVEYtOCwgdW5lc2Nh
cGUsIHRoZW4gY29udmVydCBiYWNrIHRvIFVURi0xNiBmb3IgSUROLgorICAgICAgICAvLworICAg
ICAgICAvLyBXZSBkb24ndCBib3RoZXIgdG8gb3B0aW1pemUgdGhlIGNvbnZlcnNpb24gaW4gdGhl
IEFTQ0lJIGNhc2UgKHdoaWNoCisgICAgICAgIC8vICpjb3VsZCoganVzdCBiZSBhIGNvcHkpIGFu
ZCB1c2UgdGhlIFVURi04IHBhdGgsIGJlY2F1c2UgaXQgc2hvdWxkIGJlCisgICAgICAgIC8vIHZl
cnkgcmFyZSB0aGF0IGhvc3QgbmFtZXMgaGF2ZSBlc2NhcGVkIGNoYXJhY3RlcnMsIGFuZCBpdCBp
cyByZWxhdGl2ZWx5CisgICAgICAgIC8vIGZhc3QgdG8gZG8gdGhlIGNvbnZlcnNpb24gYW55d2F5
LgorICAgICAgICBTdGFja0J1ZmZlciB1dGY4OworICAgICAgICBpZiAoIUNvbnZlcnRVVEYxNlRv
VVRGOChob3N0LCBob3N0TGVuZ3RoLCB1dGY4KSkgeworICAgICAgICAgICAgQXBwZW5kSW52YWxp
ZE5hcnJvd1N0cmluZyhob3N0LCAwLCBob3N0TGVuZ3RoLCBvdXRwdXQpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25jZSB3ZSBjb252ZXJ0IHRv
IFVURi04LCB3ZSBjYW4gdXNlIHRoZSA4LWJpdCB2ZXJzaW9uIG9mIHRoZSBjb21wbGV4CisgICAg
ICAgIC8vIGhvc3QgaGFuZGxpbmcgY29kZSBhYm92ZS4KKyAgICAgICAgcmV0dXJuIGRvQ29tcGxl
eEhvc3QodXRmOC5kYXRhKCksIHV0ZjgubGVuZ3RoKCksIGhhc05vbkFTQ0lJLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNFc2NhcGVkLCBvdXRwdXQpOworICAgIH0KKworICAgIC8v
IE5vIHVuZXNjYXBpbmcgbmVjZXNzYXJ5LCB3ZSBjYW4gc2FmZWx5IHBhc3MgdGhlIGlucHV0IHRv
IElDVS4gVGhpcworICAgIC8vIGZ1bmN0aW9uIHdpbGwgb25seSBnZXQgY2FsbGVkIGlmIHdlIGVp
dGhlciBoYXZlIGVzY2FwZWQgb3Igbm9uLWFzY2lpCisgICAgLy8gaW5wdXQsIHNvIGl0J3Mgc2Fm
ZSB0byBqdXN0IHVzZSBJQ1Ugbm93LiBFdmVuIGlmIHRoZSBpbnB1dCBpcyBBU0NJSSwKKyAgICAv
LyB0aGlzIGZ1bmN0aW9uIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIChqdXN0IHNsb3dlciB0aGFu
IHdlIGNvdWxkKS4KKyAgICByZXR1cm4gZG9JRE5Ib3N0KGhvc3QsIGhvc3RMZW5ndGgsIG91dHB1
dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFS
Pgordm9pZCBkb0hvc3QoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgQ2Fub25Ib3N0SW5mbyYgaG9zdElu
Zm8pCit7CisgICAgaWYgKGhvc3QubGVuZ3RoKCkgPD0gMCkgeworICAgICAgICAvLyBFbXB0eSBo
b3N0cyBkb24ndCBuZWVkIGFueXRoaW5nLgorICAgICAgICBob3N0SW5mby5mYW1pbHkgPSBDYW5v
bkhvc3RJbmZvOjpORVVUUkFMOworICAgICAgICBob3N0SW5mby5vdXB1dEhvc3QgPSBVUkxDb21w
b25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgaGFzTm9uQVNDSUk7
CisgICAgYm9vbCBoYXNFc2NhcGVkOworICAgIHNjYW5Ib3N0bmFtZTxDaGFyYWN0ZXJUeXBlLCBV
Q0hBUj4oc3BlYywgaG9zdCwgaGFzTm9uQVNDSUksIGhhc0VzY2FwZWQpOworCisgICAgLy8gS2Vl
cCB0cmFjayBvZiBvdXRwdXQncyBpbml0aWFsIGxlbmd0aCwgc28gd2UgY2FuIHJld2luZCBsYXRl
ci4KKyAgICBjb25zdCBpbnQgb3V0cHV0QmVnaW4gPSBvdXRwdXQubGVuZ3RoKCk7CisKKyAgICBi
b29sIHN1Y2Nlc3M7CisgICAgaWYgKCFoYXNOb25BU0NJSSAmJiAhaGFzRXNjYXBlZCkgeworICAg
ICAgICBzdWNjZXNzID0gZG9TaW1wbGVIb3N0KCZzcGVjW2hvc3QuYmVnaW4oKV0sIGhvc3QubGVu
Z3RoKCksIG91dHB1dCwgaGFzTm9uQVNDSUkpOworICAgICAgICBBU1NFUlQoIWhhc05vbkFTQ0lJ
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IGRvQ29tcGxleEhvc3QoJnNwZWNbaG9z
dC5iZWdpbigpXSwgaG9zdC5sZW5ndGgoKSwgaGFzTm9uQVNDSUksIGhhc0VzY2FwZWQsIG91dHB1
dCk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgLy8gQ2Fub25pY2FsaXphdGlvbiBm
YWlsZWQuIFNldCBCUk9LRU4gdG8gbm90aWZ5IHRoZSBjYWxsZXIuCisgICAgICAgIGhvc3RJbmZv
LmZhbWlseSA9IENhbm9uSG9zdEluZm86OkJST0tFTjsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBBZnRlciBhbGwgdGhlIG90aGVyIGNhbm9uaWNhbGl6YXRpb24sIGNoZWNrIGlmIHdlIGVuZGVk
IHVwIHdpdGggYW4gSVAKKyAgICAgICAgLy8gYWRkcmVzcy4gSVAgYWRkcmVzc2VzIGFyZSBzbWFs
bCwgc28gd3JpdGluZyBpbnRvIHRoaXMgdGVtcG9yYXJ5IGJ1ZmZlcgorICAgICAgICAvLyBzaG91
bGQgbm90IGNhdXNlIGFuIGFsbG9jYXRpb24uCisgICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyLCA2
ND4gY2Fub25faXA7CisgICAgICAgIGNhbm9uaWNhbGl6ZUlQQWRkcmVzcyhvdXRwdXQuZGF0YSgp
LCBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShvdXRwdXRCZWdpbiwgb3V0cHV0Lmxlbmd0aCgpKSwg
Y2Fub25faXAsIGhvc3RJbmZvKTsKKworICAgICAgICAvLyBJZiB3ZSBnb3QgYW4gSVB2NC9JUHY2
IGFkZHJlc3MsIGNvcHkgdGhlIGNhbm9uaWNhbCBmb3JtIGJhY2sgdG8gdGhlCisgICAgICAgIC8v
IHJlYWwgYnVmZmVyLiBPdGhlcndpc2UsIGl0J3MgYSBob3N0bmFtZSBvciBicm9rZW4gSVAsIGlu
IHdoaWNoIGNhc2UKKyAgICAgICAgLy8gd2UganVzdCBsZWF2ZSBpdCBpbiBwbGFjZS4KKyAgICAg
ICAgaWYgKGhvc3RJbmZvLklzSVBBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgIG91dHB1dC5zZXRM
ZW5ndGgob3V0cHV0QmVnaW4pOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjYW5vbl9pcC5k
YXRhKCksIGNhbm9uX2lwLmxlbmd0aCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGhvc3RJ
bmZvLm91cHV0SG9zdCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKG91dHB1dEJlZ2luLCBvdXRw
dXQubGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIGNhbm9uaWNhbGl6ZUhv
c3QoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXB1dEhvc3QpCit7CisgICAgQ2Fub25Ib3N0
SW5mbyBob3N0SW5mbzsKKyAgICBkb0hvc3Q8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgaG9z
dCwgb3V0cHV0LCBob3N0SW5mbyk7CisgICAgb3VwdXRIb3N0ID0gaG9zdEluZm8ub3VwdXRIb3N0
OworICAgIHJldHVybiAoaG9zdEluZm8uZmFtaWx5ICE9IENhbm9uSG9zdEluZm86OkJST0tFTik7
Cit9CisKK2Jvb2wgY2Fub25pY2FsaXplSG9zdChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBv
dXB1dEhvc3QpCit7CisgICAgQ2Fub25Ib3N0SW5mbyBob3N0SW5mbzsKKyAgICBkb0hvc3Q8VUNo
YXIsIFVDaGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKTsKKyAgICBvdXB1dEhvc3Qg
PSBob3N0SW5mby5vdXB1dEhvc3Q7CisgICAgcmV0dXJuIChob3N0SW5mby5mYW1pbHkgIT0gQ2Fu
b25Ib3N0SW5mbzo6QlJPS0VOKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
cgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2MWZhNzA3YWFkNTczZDFj
NjE0ZWZlMTY2YjAxMDlkNzg4MTgzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHly
aWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gSUNVIGludGVncmF0aW9uIGZ1bmN0
aW9ucy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFdURlVSTCkKKworI2luY2x1
ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIgLy8gZm9yIF9pdG9hX3MKKyNpbmNsdWRlIDxzdGRsaWIu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNs
dWRlIDx1bmljb2RlL3VjbnZfY2IuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VpZG5hLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIENhbGxlZCB3aGVuIGNvbnZlcnRpbmcgYSBjaGFyYWN0ZXIgdGhhdCBjYW4gbm90
IGJlIHJlcHJlc2VudGVkLCB0aGlzIHdpbGwKKy8vIGFwcGVuZCBhbiBlc2NhcGVkIHZlcnNpb24g
b2YgdGhlIG51bWVyaWNhbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIGZvciB0aGF0IGNvZGUKKy8vIHBv
aW50LiBJdCBpcyBvZiB0aGUgZm9ybSAiJiMxMjM0OyIgYW5kIHdlIHdpbGwgZXNjYXBlIHRoZSBu
b24tZGlnaXRzIHRvCisvLyAiJTI2JTIzMTIzNCUzQiIuIFdoeT8gVGhpcyBpcyB3aGF0IE5ldHNj
YXBlIGRpZCBiYWNrIGluIHRoZSBvbGRlbiBkYXlzLgordm9pZCBhcHBlbmRVUkxFc2NhcGVkQ2hh
cihjb25zdCB2b2lkKiAvKiBjb250ZXh0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICBV
Q29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tQXJncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVUNoYXIqIC8qIGNvZGVfdW5pdHMgKi8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgLyogbGVuZ3RoICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICBV
Q2hhcjMyIGNvZGVQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlckNh
bGxiYWNrUmVhc29uIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSogZXJyKQoreworICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7CisgICAgICAg
ICplcnIgPSBVX1pFUk9fRVJST1I7CisKKyAgICAgICAgY29uc3Qgc3RhdGljIGludCBwcmVmaXhM
ZW5ndGggPSA2OworICAgICAgICBjb25zdCBzdGF0aWMgY2hhciBwcmVmaXhbcHJlZml4TGVuZ3Ro
ICsgMV0gPSAiJTI2JTIzIjsgLy8gIiYjIiBwZXJjZW50LWVzY2FwZWQKKyAgICAgICAgdWNudl9j
YkZyb21VV3JpdGVCeXRlcyhmcm9tQXJncywgcHJlZml4LCBwcmVmaXhMZW5ndGgsIDAsIGVycik7
CisKKyAgICAgICAgQVNTRVJUKGNvZGVQb2ludCA8IDB4MTEwMDAwKTsKKyAgICAgICAgY2hhciBu
dW1iZXJbOF07IC8vIE1heCBVbmljb2RlIGNvZGUgcG9pbnQgaXMgNyBkaWdpdHMuCisgICAgICAg
IF9pdG9hX3MoY29kZVBvaW50LCBudW1iZXIsIDEwKTsKKyAgICAgICAgaW50IG51bWJlckxlbmd0
aCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKG51bWJlcikpOworICAgICAgICB1Y252X2NiRnJv
bVVXcml0ZUJ5dGVzKGZyb21BcmdzLCBudW1iZXIsIG51bWJlckxlbmd0aCwgMCwgZXJyKTsKKwor
ICAgICAgICBjb25zdCBzdGF0aWMgaW50IHBvc3RmaXhMZW5ndGggPSAzOworICAgICAgICBjb25z
dCBzdGF0aWMgY2hhciBwb3N0Zml4W3Bvc3RmaXhMZW5ndGggKyAxXSA9ICIlM0IiOyAvLyAiOyIg
cGVyY2VudC1lc2NhcGVkCisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMoZnJvbUFyZ3Ms
IHBvc3RmaXgsIHBvc3RmaXhMZW5ndGgsIDAsIGVycik7CisgICAgfQorfQorCisvLyBBIGNsYXNz
IGZvciBzY29waW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgdGhlIGludmFsaWQgY2hhcmFjdGVyIGNh
bGxiYWNrLgorY2xhc3MgQXBwZW5kSGFuZGxlckluc3RhbGxlciB7CitwdWJsaWM6CisgICAgLy8g
VGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0IG11c3QgZW5zdXJlIHRoYXQgdGhlIGNvbnZlcnRlciBp
cyBhbGl2ZSBmb3IgdGhlCisgICAgLy8gZHVyYXRpb24gb2YgdGhpcyBvYmplY3QncyBsaWZldGlt
ZS4KKyAgICBBcHBlbmRIYW5kbGVySW5zdGFsbGVyKFVDb252ZXJ0ZXIqIGNvbnZlcnRlcikKKyAg
ICAgICAgOiBtX2NvbnZlcnRlcihjb252ZXJ0ZXIpCisgICAgeworICAgICAgICBVRXJyb3JDb2Rl
IGVyciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29u
dmVydGVyLCBhcHBlbmRVUkxFc2NhcGVkQ2hhciwgMCwgJm1fb2xkQ2FsbGJhY2ssICZtX29sZENv
bnRleHQsICZlcnIpOworICAgIH0KKworICAgIH5BcHBlbmRIYW5kbGVySW5zdGFsbGVyKCkKKyAg
ICB7CisgICAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252
X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXIsIG1fb2xkQ2FsbGJhY2ssIG1fb2xkQ29udGV4
dCwgMCwgMCwgJmVycik7CisgICAgfQorCitwcml2YXRlOgorICAgIFVDb252ZXJ0ZXIqIG1fY29u
dmVydGVyOworCisgICAgVUNvbnZlcnRlckZyb21VQ2FsbGJhY2sgbV9vbGRDYWxsYmFjazsKKyAg
ICBjb25zdCB2b2lkKiBtX29sZENvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisvLyBD
b252ZXJ0cyB0aGUgVW5pY29kZSBpbnB1dCByZXByZXNlbnRpbmcgYSBob3N0bmFtZSB0byBBU0NJ
SSB1c2luZyBJRE4gcnVsZXMuCisvLyBUaGUgb3V0cHV0IG11c3QgYmUgQVNDSUksIGJ1dCBpcyBy
ZXByZXNlbnRlZCBhcyB3aWRlIGNoYXJhY3RlcnMuCisvLworLy8gT24gc3VjY2VzcywgdGhlIG91
dHB1dCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBBU0NJSSBob3N0IG5hbWUgYW5kIGl0IHdpbGwK
Ky8vIHJldHVybiB0cnVlLiBVbmxpa2UgbW9zdCBvdGhlciBjYW5vbmljYWxpemF0aW9uIGZ1bmN0
aW9ucywgdGhpcyBhc3N1bWVzIHRoYXQKKy8vIHRoZSBvdXRwdXQgaXMgZW1wdHkuIFRoZSBiZWdp
bm5pbmcgb2YgdGhlIGhvc3Qgd2lsbCBiZSBhdCBvZmZzZXQgMCwgYW5kCisvLyB0aGUgbGVuZ3Ro
IG9mIHRoZSBvdXRwdXQgd2lsbCBiZSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbmV3IGhvc3Qg
bmFtZS4KKy8vCisvLyBPbiBlcnJvciwgdGhpcyB3aWxsIHJldHVybiBmYWxzZS4gVGhlIG91dHB1
dCBpbiB0aGlzIGNhc2UgaXMgdW5kZWZpbmVkLgorYm9vbCBJRE5Ub0FTQ0lJKGNvbnN0IFVDaGFy
KiBzcmMsIGludCBzb3VyY2VMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCkKK3sKKyAg
ICBBU1NFUlQoIW91dHB1dC5sZW5ndGgoKSk7IC8vIE91dHB1dCBidWZmZXIgaXMgYXNzdW1lZCBl
bXB0eS4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAvLyBVc2UgQUxMT1dfVU5BU1NJR05F
RCB0byBiZSBtb3JlIHRvbGVyYW50IG9mIGhvc3RuYW1lcyB0aGF0IHZpb2xhdGUKKyAgICAgICAg
Ly8gdGhlIHNwZWMgKHdoaWNoIGRvIGV4aXN0KS4gVGhpcyBkb2VzIG5vdCBwcmVzZW50IGFueSBy
aXNrIGFuZCBpcyBhCisgICAgICAgIC8vIGxpdHRsZSBtb3JlIGZ1dHVyZSBwcm9vZi4KKyAgICAg
ICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIGludCBudW1Db252ZXJ0
ZWQgPSB1aWRuYV9JRE5Ub0FTQ0lJKHNyYywgc291cmNlTGVuZ3RoLCBvdXRwdXQuZGF0YSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmNhcGFj
aXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSURO
QV9BTExPV19VTkFTU0lHTkVELCAwLCAmZXJyKTsKKyAgICAgICAgaWYgKGVyciA9PSBVX1pFUk9f
RVJST1IpIHsKKyAgICAgICAgICAgIG91dHB1dC5zZXRMZW5ndGgobnVtQ29udmVydGVkKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChlcnIgIT0gVV9C
VUZGRVJfT1ZFUkZMT1dfRVJST1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFVua25v
d24gZXJyb3IsIGdpdmUgdXAuCisKKyAgICAgICAgLy8gTm90IGVub3VnaCByb29tIGluIG91ciBi
dWZmZXIsIGV4cGFuZC4KKyAgICAgICAgb3V0cHV0LnJlc2l6ZShvdXRwdXQuY2FwYWNpdHkoKSAq
IDIpOworICAgIH0KK30KKworYm9vbCByZWFkVVRGQ2hhcihjb25zdCBjaGFyKiBzdHIsIGludCog
YmVnaW4sIGludCBsZW5ndGgsIHVuc2lnbmVkKiBjb2RlUG9pbnRPdXQpCit7CisgICAgaW50IGNv
ZGVQb2ludDsgLy8gQXZvaWRzIHdhcm5pbmcgd2hlbiBVOF9ORVhUIHdyaXRlcyAtMSB0byBpdC4K
KyAgICBVOF9ORVhUKHN0ciwgKmJlZ2luLCBsZW5ndGgsIGNvZGVQb2ludCk7CisgICAgKmNvZGVQ
b2ludE91dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlUG9pbnQpOworCisgICAgLy8gVGhl
IElDVSBtYWNybyBhYm92ZSBtb3ZlcyB0byB0aGUgbmV4dCBjaGFyLCB3ZSB3YW50IHRvIHBvaW50
IHRvIHRoZSBsYXN0CisgICAgLy8gY2hhciBjb25zdW1lZC4KKyAgICAoKmJlZ2luKS0tOworCisg
ICAgLy8gVmFsaWRhdGUgdGhlIGRlY29kZWQgdmFsdWUuCisgICAgaWYgKFVfSVNfVU5JQ09ERV9D
SEFSKGNvZGVQb2ludCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICpjb2RlUG9pbnRPdXQg
PSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCByZWFkVVRGQ2hhcihjb25zdCBVQ2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3Ro
LCB1bnNpZ25lZCogY29kZVBvaW50KQoreworICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKHN0clsq
YmVnaW5dKSkgeworICAgICAgICBpZiAoIVUxNl9JU19TVVJST0dBVEVfTEVBRChzdHJbKmJlZ2lu
XSkgfHwgKmJlZ2luICsgMSA+PSBsZW5ndGggfHwgIVUxNl9JU19UUkFJTChzdHJbKmJlZ2luICsg
MV0pKSB7CisgICAgICAgICAgICAvLyBJbnZhbGlkIHN1cnJvZ2F0ZSBwYWlyLgorICAgICAgICAg
ICAgKmNvZGVQb2ludCA9IGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBWYWxpZCBzdXJyb2dhdGUg
cGFpci4KKyAgICAgICAgKmNvZGVQb2ludCA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShzdHJbKmJl
Z2luXSwgc3RyWypiZWdpbiArIDFdKTsKKyAgICAgICAgKCpiZWdpbikrKzsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBOb3QgYSBzdXJyb2dhdGUsIGp1c3Qgb25lIDE2LWJpdCB3b3JkLgorICAg
ICAgICAqY29kZVBvaW50ID0gc3RyWypiZWdpbl07CisgICAgfQorCisgICAgaWYgKFVfSVNfVU5J
Q09ERV9DSEFSKCpjb2RlUG9pbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElu
dmFsaWQgY29kZSBwb2ludC4KKyAgICAqY29kZVBvaW50ID0ga1VuaWNvZGVSZXBsYWNlbWVudENo
YXJhY3RlcjsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9u
aWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ2MjM1M2NiYzVj
NTZiNzMxZWE1ZTc2MzQwZmM5MzI3NjRmZTQ5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
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
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxDaGFyYWN0ZXJU
eXBlcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKworI2lmIFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1l
c3BhY2UgVVJMQ2Fub25pY2FsaXplciB7CisKK25hbWVzcGFjZSB7CisKKy8vIENvbnZlcnRzIG9u
ZSBvZiB0aGUgY2hhcmFjdGVyIHR5cGVzIHRoYXQgcmVwcmVzZW50IGEgbnVtZXJpY2FsIGJhc2Ug
dG8gdGhlCisvLyBjb3JyZXNwb25kaW5nIGJhc2UuCitzdGF0aWMgaW5saW5lIGludCBiYXNlRm9y
VHlwZShVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFVSTENoYXJhY3RlclR5cGVzOjpIZXhhZGVjaW1hbENoYXJh
Y3RlcjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgVVJMQ2hhcmFjdGVyVHlwZXM6OkRl
Y2ltYWxDaGFyYWN0ZXI6CisgICAgICAgIHJldHVybiAxMDsKKyAgICBjYXNlIFVSTENoYXJhY3Rl
clR5cGVzOjpPY3RhbENoYXJhY3RlcjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBDb252ZXJ0cyBhbiBJUHY0IGNvbXBv
bmVudCB0byBhIDMyLWJpdCBudW1iZXIsIHdoaWxlIGNoZWNraW5nIGZvciBvdmVyZmxvdy4KKy8v
CisvLyBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgorLy8gLSBJUFY0ICAgIC0gVGhlIG51bWJlciB3
YXMgdmFsaWQsIGFuZCBkaWQgbm90IG92ZXJmbG93LgorLy8gLSBCUk9LRU4gIC0gVGhlIGlucHV0
IHdhcyBudW1lcmljLCBidXQgdG9vIGxhcmdlIGZvciBhIDMyLWJpdCBmaWVsZC4KKy8vIC0gTkVV
VFJBTCAtIElucHV0IHdhcyBub3QgbnVtZXJpYy4KKy8vCisvLyBUaGUgaW5wdXQgaXMgYXNzdW1l
ZCB0byBiZSBBU0NJSS4gRmluZElQdjRDb21wb25lbnRzIHNob3VsZCBoYXZlIHN0cmlwcGVkCisv
LyBvdXQgYW55IGlucHV0IHRoYXQgaXMgZ3JlYXRlciB0aGFuIDcgYml0cy4gVGhlIGNvbXBvbmVu
dHMgYXJlIGFzc3VtZWQKKy8vIHRvIGJlIG5vbi1lbXB0eS4KK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+CitDYW5vbkhvc3RJbmZvOjpGYW1pbHkgSVB2NENvbXBvbmVudFRvTnVtYmVy
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50
LCB1aW50MzJfdCogbnVtYmVyKQoreworICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGJhc2UKKyAgICBV
UkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgYmFzZTsKKyAgICBpbnQgYmFzZVByZWZp
eExlbmd0aCA9IDA7IC8vIFNpemUgb2YgdGhlIHByZWZpeCBmb3IgdGhpcyBiYXNlLgorICAgIGlm
IChzcGVjW2NvbXBvbmVudC5iZWdpbigpXSA9PSAnMCcpIHsKKyAgICAgICAgLy8gRWl0aGVyIGhl
eCBvciBkZWMsIG9yIGEgc3RhbmRhbG9uZSB6ZXJvLgorICAgICAgICBpZiAoY29tcG9uZW50Lmxl
bmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgIGJhc2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6RGVj
aW1hbENoYXJhY3RlcjsKKyAgICAgICAgfSBlbHNlIGlmIChzcGVjW2NvbXBvbmVudC5iZWdpbigp
ICsgMV0gPT0gJ1gnIHx8IHNwZWNbY29tcG9uZW50LmJlZ2luKCkgKyAxXSA9PSAneCcpIHsKKyAg
ICAgICAgICAgIGJhc2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6SGV4YWRlY2ltYWxDaGFyYWN0ZXI7
CisgICAgICAgICAgICBiYXNlUHJlZml4TGVuZ3RoID0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGJhc2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6T2N0YWxDaGFyYWN0ZXI7CisgICAg
ICAgICAgICBiYXNlUHJlZml4TGVuZ3RoID0gMTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICBiYXNlID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkRlY2ltYWxDaGFyYWN0ZXI7CisKKyAgICAv
LyBFeHRlbmQgdGhlIHByZWZpeCB0byBjb25zdW1lIGFsbCBsZWFkaW5nIHplcm9zLgorICAgIHdo
aWxlIChiYXNlUHJlZml4TGVuZ3RoIDwgY29tcG9uZW50Lmxlbmd0aCgpICYmIHNwZWNbY29tcG9u
ZW50LmJlZ2luKCkgKyBiYXNlUHJlZml4TGVuZ3RoXSA9PSAnMCcpCisgICAgICAgICsrYmFzZVBy
ZWZpeExlbmd0aDsKKworICAgIC8vIFB1dCB0aGUgY29tcG9uZW50LCBtaW51cyBhbnkgYmFzZSBw
cmVmaXgsIGludG8gYSB6ZXJvLXRlcm1pbmF0ZWQgYnVmZmVyIHNvCisgICAgLy8gd2UgY2FuIGNh
bGwgdGhlIHN0YW5kYXJkIGxpYnJhcnkuIEJlY2F1c2UgbGVhZGluZyB6ZXJvcyBoYXZlIGFscmVh
ZHkgYmVlbgorICAgIC8vIGRpc2NhcmRlZCwgZmlsbGluZyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBn
dWFyYW50ZWVkIHRvIHRyaWdnZXIgdGhlIDMyLWJpdAorICAgIC8vIG92ZXJmbG93IGNoZWNrLgor
ICAgIGNvbnN0IGludCBrTWF4Q29tcG9uZW50TGVuID0gMTY7CisgICAgY2hhciBidWZba01heENv
bXBvbmVudExlbiArIDFdOyAvLyBkaWdpdHMgKyAnXDAnCisgICAgaW50IGRlc3RJID0gMDsKKyAg
ICBmb3IgKGludCBpID0gY29tcG9uZW50LmJlZ2luKCkgKyBiYXNlUHJlZml4TGVuZ3RoOyBpIDwg
Y29tcG9uZW50LmVuZCgpOyBpKyspIHsKKyAgICAgICAgLy8gV2Uga25vdyB0aGUgaW5wdXQgaXMg
Ny1iaXQsIHNvIGNvbnZlcnQgdG8gbmFycm93IChpZiB0aGlzIGlzIHRoZSB3aWRlCisgICAgICAg
IC8vIHZlcnNpb24gb2YgdGhlIHRlbXBsYXRlKSBieSBjYXN0aW5nLgorICAgICAgICBjaGFyIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSk7CisKKyAgICAgICAgLy8gVmFsaWRhdGUg
dGhhdCB0aGlzIGNoYXJhY3RlciBpcyBPSyBmb3IgdGhlIGdpdmVuIGJhc2UuCisgICAgICAgIGlm
ICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzQ2hhcmFjdGVyT2ZUeXBlKGlucHV0LCBiYXNlKSkKKyAg
ICAgICAgICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpORVVUUkFMOworCisgICAgICAgIC8vIEZp
bGwgdGhlIGJ1ZmZlciwgaWYgdGhlcmUncyBzcGFjZSByZW1haW5pbmcuIFRoaXMgY2hlY2sgYWxs
b3dzIHVzIHRvCisgICAgICAgIC8vIHZlcmlmeSB0aGF0IGFsbCBjaGFyYWN0ZXJzIGFyZSBudW1l
cmljLCBldmVuIHRob3NlIHRoYXQgZG9uJ3QgZml0LgorICAgICAgICBpZiAoZGVzdEkgPCBrTWF4
Q29tcG9uZW50TGVuKQorICAgICAgICAgICAgYnVmW2Rlc3RJKytdID0gaW5wdXQ7CisgICAgfQor
CisgICAgYnVmW2Rlc3RJXSA9ICdcMCc7CisKKyAgICAvLyBVc2UgdGhlIDY0LWJpdCBzdHJ0b2kg
c28gd2UgZ2V0IGEgYmlnIG51bWJlciAobm8gaGV4LCBkZWNpbWFsLCBvciBvY3RhbAorICAgIC8v
IG51bWJlciBjYW4gb3ZlcmZsb3cgYSA2NC1iaXQgbnVtYmVyIGluIDw9IDE2IGNoYXJhY3RlcnMp
LgorICAgIHVpbnQ2NF90IG51bSA9IF9zdHJ0b3VpNjQoYnVmLCAwLCBiYXNlRm9yVHlwZShiYXNl
KSk7CisKKyAgICAvLyBDaGVjayBmb3IgMzItYml0IG92ZXJmbG93LgorICAgIGlmIChudW0gPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBDYW5v
bkhvc3RJbmZvOjpCUk9LRU47CisKKyAgICAvLyBObyBvdmVyZmxvdy4gU3VjY2VzcyEKKyAgICAq
bnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bSk7CisgICAgcmV0dXJuIENhbm9uSG9z
dEluZm86OklQVjQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVu
YW1lIFVDSEFSPgorYm9vbCBkb0ZpbmRJUHY0Q29tcG9uZW50cyhjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTENvbXBvbmVudCBjb21wb25lbnRz
WzRdKQoreworICAgIGlmICghaG9zdC5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGludCBjdXJyZW50Q29tcG9uZW50ID0gMDsgLy8gSW5kZXggb2YgdGhlIGNvbXBv
bmVudCB3ZSdyZSB3b3JraW5nIG9uLgorICAgIGludCBjdXJyZW50Q29tcG9uZW50QmVnaW4gPSBo
b3N0LmJlZ2luKCk7IC8vIFN0YXJ0IG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudC4KKyAgICBpbnQg
ZW5kID0gaG9zdC5lbmQoKTsKKyAgICBmb3IgKGludCBpID0gaG9zdC5iZWdpbigpOyAvKiBub3Ro
aW5nICovOyArK2kpIHsKKyAgICAgICAgaWYgKGkgPj0gZW5kIHx8IHNwZWNbaV0gPT0gJy4nKSB7
CisgICAgICAgICAgICAvLyBGb3VuZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudC4K
KyAgICAgICAgICAgIGludCBjb21wb25lbnRMZW5ndGggPSBpIC0gY3VycmVudENvbXBvbmVudEJl
Z2luOworICAgICAgICAgICAgY29tcG9uZW50c1tjdXJyZW50Q29tcG9uZW50XSA9IFVSTENvbXBv
bmVudChjdXJyZW50Q29tcG9uZW50QmVnaW4sIGNvbXBvbmVudExlbmd0aCk7CisKKyAgICAgICAg
ICAgIC8vIFRoZSBuZXh0IGNvbXBvbmVudCBzdGFydHMgYWZ0ZXIgdGhlIGRvdC4KKyAgICAgICAg
ICAgIGN1cnJlbnRDb21wb25lbnRCZWdpbiA9IGkgKyAxOworICAgICAgICAgICAgY3VycmVudENv
bXBvbmVudCsrOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBlbXB0eSBjb21wb25lbnRz
ICh0d28gZG90cyBpbiBhIHJvdyksIGV4Y2VwdCB3ZSBtYXkKKyAgICAgICAgICAgIC8vIGFsbG93
IGFuIGVtcHR5IGNvbXBvbmVudCBhdCB0aGUgZW5kICh0aGlzIHdvdWxkIGluZGljYXRlIHRoYXQg
dGhlCisgICAgICAgICAgICAvLyBpbnB1dCBlbmRzIGluIGEgZG90KS4gV2UgYWxzbyB3YW50IHRv
IGVycm9yIGlmIHRoZSBjb21wb25lbnQgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5IGFuZCBpdCdz
IHRoZSBvbmx5IGNvbXBvbmVudCAoY3VycmVudENvbXBvbmVudCA9PSAxKS4KKyAgICAgICAgICAg
IGlmICghY29tcG9uZW50TGVuZ3RoICYmIChpIDwgZW5kIHx8IGN1cnJlbnRDb21wb25lbnQgPT0g
MSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoaSA+
PSBlbmQpCisgICAgICAgICAgICAgICAgYnJlYWs7IC8vIEVuZCBvZiB0aGUgaW5wdXQuCisKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50Q29tcG9uZW50ID09IDQpIHsKKyAgICAgICAgICAgICAgICAv
LyBBbnl0aGluZyBlbHNlIGFmdGVyIHRoZSA0dGggY29tcG9uZW50IGlzIGFuIGVycm9yIHVubGVz
cyBpdCBpcyBhCisgICAgICAgICAgICAgICAgLy8gZG90IHRoYXQgd291bGQgb3RoZXJ3aXNlIGJl
IHRyZWF0ZWQgYXMgdGhlIGVuZCBvZiBpbnB1dC4KKyAgICAgICAgICAgICAgICBpZiAoc3BlY1tp
XSA9PSAnLicgJiYgaSArIDEgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pID49IDB4ODAgfHwgIVVSTENoYXJhY3Rl
clR5cGVzOjppc0lQdjRDaGFyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbaV0pKSkg
eworICAgICAgICAgICAgLy8gSW52YWxpZCBjaGFyYWN0ZXIgZm9yIGFuIElQdjQgYWRkcmVzcy4K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZp
bGwgaW4gYW55IHVudXNlZCBjb21wb25lbnRzLgorICAgIHdoaWxlIChjdXJyZW50Q29tcG9uZW50
IDwgNCkKKyAgICAgICAgY29tcG9uZW50c1tjdXJyZW50Q29tcG9uZW50KytdID0gVVJMQ29tcG9u
ZW50KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIEZpbmRJUHY0Q29tcG9u
ZW50cyhjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTENvbXBv
bmVudCBjb21wb25lbnRzWzRdKQoreworICAgIHJldHVybiBkb0ZpbmRJUHY0Q29tcG9uZW50czxj
aGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBob3N0LCBjb21wb25lbnRzKTsKK30KKworc3RhdGlj
IGJvb2wgRmluZElQdjRDb21wb25lbnRzKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIGhvc3QsIFVSTENvbXBvbmVudCBjb21wb25lbnRzWzRdKQoreworICAgIHJldHVybiBk
b0ZpbmRJUHY0Q29tcG9uZW50czxVQ2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIGNvbXBvbmVudHMp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorQ2Fub25Ib3N0SW5mbzo6
RmFtaWx5IGRvSVB2NEFkZHJlc3NUb051bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIGhvc3QsIHVuc2lnbmVkIGNoYXIgYWRkcmVzc1s0XSwgaW50JiBp
cHY0Q29tcG9uZW50c0NvdW50KQoreworICAgIC8vIFRoZSBpZGVudGlmaWVkIGNvbXBvbmVudHMu
IE5vdCBhbGwgbWF5IGV4aXN0LgorICAgIFVSTENvbXBvbmVudCBjb21wb25lbnRzWzRdOworICAg
IGlmICghRmluZElQdjRDb21wb25lbnRzKHNwZWMsIGhvc3QsIGNvbXBvbmVudHMpKQorICAgICAg
ICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6TkVVVFJBTDsKKworICAgIC8vIENvbnZlcnQgZXhpc3Rp
bmcgY29tcG9uZW50cyB0byBkaWdpdHMuIFZhbHVlcyB1cCB0bworICAgIC8vIHxleGlzdGluZ0Nv
bXBvbmVudHN8IHdpbGwgYmUgdmFsaWQuCisgICAgdWludDMyX3QgY29tcG9uZW50VmFsdWVzWzRd
OworICAgIGludCBleGlzdGluZ0NvbXBvbmVudHMgPSAwOworCisgICAgLy8gU2V0IHRvIHRydWUg
aWYgb25lIG9yIG1vcmUgY29tcG9uZW50cyBhcmUgQlJPS0VOLiBCUk9LRU4gaXMgb25seQorICAg
IC8vIHJldHVybmVkIGlmIGFsbCBjb21wb25lbnRzIGFyZSBJUFY0IG9yIEJST0tFTiwgc28sIGZv
ciBleGFtcGxlLAorICAgIC8vIDEyMzQ1Njc4OTEyMzQ1LmRlIHJldHVybnMgTkVVVFJBTCByYXRo
ZXIgdGhhbiBicm9rZW4uCisgICAgYm9vbCBicm9rZW4gPSBmYWxzZTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBpZiAoY29tcG9uZW50c1tpXS5sZW5ndGgoKSA8
PSAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENhbm9uSG9zdEluZm86OkZhbWls
eSBmYW1pbHkgPSBJUHY0Q29tcG9uZW50VG9OdW1iZXIoc3BlYywgY29tcG9uZW50c1tpXSwgJmNv
bXBvbmVudFZhbHVlc1tleGlzdGluZ0NvbXBvbmVudHNdKTsKKworICAgICAgICBpZiAoZmFtaWx5
ID09IENhbm9uSG9zdEluZm86OkJST0tFTikKKyAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKGZhbWlseSAhPSBDYW5vbkhvc3RJbmZvOjpJUFY0KSB7CisgICAgICAg
ICAgICAvLyBTdG9wIGlmIHdlIGhpdCBhIG5vbi1CUk9LRU4gaW52YWxpZCBub24tZW1wdHkgY29t
cG9uZW50LgorICAgICAgICAgICAgcmV0dXJuIGZhbWlseTsKKyAgICAgICAgfQorCisgICAgICAg
IGV4aXN0aW5nQ29tcG9uZW50cysrOworICAgIH0KKworICAgIGlmIChicm9rZW4pCisgICAgICAg
IHJldHVybiBDYW5vbkhvc3RJbmZvOjpCUk9LRU47CisKKyAgICAvLyBVc2UgdGhhdCBzZXF1ZW5j
ZSBvZiBudW1iZXJzIHRvIGZpbGwgb3V0IHRoZSA0LWNvbXBvbmVudCBJUCBhZGRyZXNzLgorCisg
ICAgLy8gRmlyc3QsIHByb2Nlc3MgYWxsIGNvbXBvbmVudHMgYnV0IHRoZSBsYXN0LCB3aGlsZSBt
YWtpbmcgc3VyZSBlYWNoIGZpdHMKKyAgICAvLyB3aXRoaW4gYW4gOC1iaXQgZmllbGQuCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBleGlzdGluZ0NvbXBvbmVudHMgLSAxOyBpKyspIHsKKyAgICAg
ICAgaWYgKGNvbXBvbmVudFZhbHVlc1tpXSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46
Om1heCgpKQorICAgICAgICAgICAgcmV0dXJuIENhbm9uSG9zdEluZm86OkJST0tFTjsKKyAgICAg
ICAgYWRkcmVzc1tpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbXBvbmVudFZhbHVl
c1tpXSk7CisgICAgfQorCisgICAgLy8gTmV4dCwgY29uc3VtZSB0aGUgbGFzdCBjb21wb25lbnQg
dG8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIGJ5dGVzLgorICAgIHVpbnQzMl90IGxhc3RWYWx1ZSA9
IGNvbXBvbmVudFZhbHVlc1tleGlzdGluZ0NvbXBvbmVudHMgLSAxXTsKKyAgICBmb3IgKGludCBp
ID0gMzsgaSA+PSBleGlzdGluZ0NvbXBvbmVudHMgLSAxOyBpLS0pIHsKKyAgICAgICAgYWRkcmVz
c1tpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGxhc3RWYWx1ZSk7CisgICAgICAgIGxh
c3RWYWx1ZSA+Pj0gODsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbGFzdCBjb21wb25lbnQgaGFz
IHJlc2lkdWFsIGJpdHMsIHJlcG9ydCBvdmVyZmxvdy4KKyAgICBpZiAobGFzdFZhbHVlKQorICAg
ICAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOworCisgICAgLy8gVGVsbCB0aGUgY2Fs
bGVyIGhvdyBtYW55IGNvbXBvbmVudHMgd2Ugc2F3LgorICAgIGlwdjRDb21wb25lbnRzQ291bnQg
PSBleGlzdGluZ0NvbXBvbmVudHM7CisKKyAgICAvLyBTdWNjZXNzIQorICAgIHJldHVybiBDYW5v
bkhvc3RJbmZvOjpJUFY0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kSVB2NEFkZHJl
c3MoY29uc3QgdW5zaWduZWQgY2hhciBhZGRyZXNzWzRdLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAgICBjaGFyIGJ1
ZmZlclsxNl07CisgICAgICAgIF9pdG9hX3MoYWRkcmVzc1tpXSwgYnVmZmVyLCAxMCk7CisKKyAg
ICAgICAgZm9yIChpbnQgY2ggPSAwOyBidWZmZXJbY2hdOyBjaCsrKQorICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZChidWZmZXJbY2hdKTsKKworICAgICAgICBpZiAoaSAhPSAzKQorICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgnLicpOworICAgIH0KK30KKworLy8gUmV0dXJuIHRydWUgaWYgd2Un
dmUgbWFkZSBhIGZpbmFsIElQVjQvQlJPS0VOIGRlY2lzaW9uLCBmYWxzZSBpZiB0aGUgcmVzdWx0
CisvLyBpcyBORVVUUkFMLCBhbmQgd2UgY291bGQgdXNlIGEgc2Vjb25kIG9waW5pb24uCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9DYW5v
bmljYWxpemVJUHY0QWRkcmVzcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBDYW5vbkhvc3RJbmZvJiBo
b3N0SW5mbykKK3sKKyAgICBob3N0SW5mby5mYW1pbHkgPSBkb0lQdjRBZGRyZXNzVG9OdW1iZXIo
c3BlYywgaG9zdCwgaG9zdEluZm8uYWRkcmVzcywgaG9zdEluZm8uaXB2NENvbXBvbmVudHNDb3Vu
dCk7CisKKyAgICBzd2l0Y2ggKGhvc3RJbmZvLmZhbWlseSkgeworICAgIGNhc2UgQ2Fub25Ib3N0
SW5mbzo6SVBWNDoKKyAgICAgICAgLy8gRGVmaW5pdGVseSBhbiBJUHY0IGFkZHJlc3MuCisgICAg
ICAgIGhvc3RJbmZvLm91cHV0SG9zdC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOworICAgICAg
ICBhcHBlbmRJUHY0QWRkcmVzcyhob3N0SW5mby5hZGRyZXNzLCBvdXRwdXQpOworICAgICAgICBo
b3N0SW5mby5vdXB1dEhvc3Quc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIGhvc3RJbmZvLm91
cHV0SG9zdC5iZWdpbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDYW5vbkhv
c3RJbmZvOjpCUk9LRU46CisgICAgICAgIC8vIERlZmluaXRlbHkgYnJva2VuLgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBDb3VsZCBiZSBJUHY2IG9yIGEg
aG9zdG5hbWUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIEhlbHBlciBj
bGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgbWFpbiBjb21wb25lbnRzIG9mIGFuIElQdjYgaW5wdXQg
c3RyaW5nLgorLy8gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgdG8gdW5kZXJzdGFuZCBob3cg
aXQgYnJlYWtzIHVwIGFuIGlucHV0IHN0cmluZzoKKy8vCisvLyBbRXhhbXBsZSAxXTogaW5wdXQg
PSAiWzo6YWE6YmJdIgorLy8gID09PiBudW1IZXhDb21wb25lbnRzID0gMgorLy8gID09PiBoZXhD
b21wb25lbnRzWzBdID0gQ29tcG9uZW50KDMsMikgImFhIgorLy8gID09PiBoZXhDb21wb25lbnRz
WzFdID0gQ29tcG9uZW50KDYsMikgImJiIgorLy8gID09PiBpbmRleE9mQ29udHJhY3Rpb24gPSAw
CisvLyAgPT0+IGlwdjRDb21wb25lbnQgPSBDb21wb25lbnQoMCwgLTEpCisvLworLy8gW0V4YW1w
bGUgMl06IGlucHV0ID0gIlsxOjI6OjM6NDo1XSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9
IDUKKy8vICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgxLDEpICIxIgorLy8gID09
PiBoZXhDb21wb25lbnRzWzFdID0gQ29tcG9uZW50KDMsMSkgIjIiCisvLyAgPT0+IGhleENvbXBv
bmVudHNbMl0gPSBDb21wb25lbnQoNiwxKSAiMyIKKy8vICA9PT4gaGV4Q29tcG9uZW50c1szXSA9
IENvbXBvbmVudCg4LDEpICI0IgorLy8gID09PiBoZXhDb21wb25lbnRzWzRdID0gQ29tcG9uZW50
KDEwLDEpICI1IgorLy8gID09PiBpbmRleE9mQ29udHJhY3Rpb24gPSAyCisvLyAgPT0+IGlwdjRD
b21wb25lbnQgPSBDb21wb25lbnQoMCwgLTEpCisvLworLy8gW0V4YW1wbGUgM106IGlucHV0ID0g
Ils6OmZmZmY6MTkyLjE2OC4wLjFdIgorLy8gID09PiBudW1IZXhDb21wb25lbnRzID0gMQorLy8g
ID09PiBoZXhDb21wb25lbnRzWzBdID0gQ29tcG9uZW50KDMsNCkgImZmZmYiCisvLyAgPT0+IGlu
ZGV4T2ZDb250cmFjdGlvbiA9IDAKKy8vICA9PT4gaXB2NENvbXBvbmVudCA9IENvbXBvbmVudCg4
LCAxMSkgIjE5Mi4xNjguMC4xIgorLy8KKy8vIFtFeGFtcGxlIDRdOiBpbnB1dCA9ICJbMTo6XSIK
Ky8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9IDEKKy8vICA9PT4gaGV4Q29tcG9uZW50c1swXSA9
IENvbXBvbmVudCgxLDEpICIxIgorLy8gID09PiBpbmRleE9mQ29udHJhY3Rpb24gPSAxCisvLyAg
PT0+IGlwdjRDb21wb25lbnQgPSBDb21wb25lbnQoMCwgLTEpCisvLworLy8gW0V4YW1wbGUgNV06
IGlucHV0ID0gIls6OjE5Mi4xNjguMC4xXSIKKy8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9IDAK
Ky8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9uID0gMAorLy8gID09PiBpcHY0Q29tcG9uZW50ID0g
Q29tcG9uZW50KDgsIDExKSAiMTkyLjE2OC4wLjEiCisvLworc3RydWN0IElQdjZQYXJzZWQgewor
ICAgIC8vIFplcm8tb3V0IHRoZSBwYXJzZSBpbmZvcm1hdGlvbi4KKyAgICB2b2lkIHJlc2V0KCkK
KyAgICB7CisgICAgICAgIG51bUhleENvbXBvbmVudHMgPSAwOworICAgICAgICBpbmRleE9mQ29u
dHJhY3Rpb24gPSAtMTsKKyAgICAgICAgaXB2NENvbXBvbmVudC5yZXNldCgpOworICAgIH0KKwor
ICAgIC8vIFRoZXJlIGNhbiBiZSB1cCB0byA4IGhleCBjb21wb25lbnRzIChjb2xvbiBzZXBhcmF0
ZWQpIGluIHRoZSBsaXRlcmFsLgorICAgIFVSTENvbXBvbmVudCBoZXhDb21wb25lbnRzWzhdOwor
CisgICAgLy8gVGhlIGNvdW50IG9mIGhleCBjb21wb25lbnRzIHByZXNlbnQuIFJhbmdlcyBmcm9t
IFswLDhdLgorICAgIGludCBudW1IZXhDb21wb25lbnRzOworCisgICAgLy8gVGhlIGluZGV4IG9m
IHRoZSBoZXggY29tcG9uZW50IHRoYXQgdGhlICI6OiIgY29udHJhY3Rpb24gcHJlY2VkZXMsIG9y
CisgICAgLy8gLTEgaWYgdGhlcmUgaXMgbm8gY29udHJhY3Rpb24uCisgICAgaW50IGluZGV4T2ZD
b250cmFjdGlvbjsKKworICAgIC8vIFRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBh
biBJUHY0IGxpdGVyYWwuCisgICAgVVJMQ29tcG9uZW50IGlwdjRDb21wb25lbnQ7Cit9OworCisv
LyBQYXJzZSB0aGUgSVB2NiBpbnB1dCBzdHJpbmcuIElmIHBhcnNpbmcgc3VjY2VlZGVkIHJldHVy
bnMgdHJ1ZSBhbmQgZmlsbHMKKy8vIHxwYXJzZWR8IHdpdGggdGhlIGluZm9ybWF0aW9uLiBJZiBw
YXJzaW5nIGZhaWxlZCAoYmVjYXVzZSB0aGUgaW5wdXQgaXMKKy8vIGludmFsaWQpIHJldHVybnMg
ZmFsc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4K
K2Jvb2wgZG9QYXJzZUlQdjYoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBob3N0LCBJUHY2UGFyc2VkJiBwYXJzZWQpCit7CisgICAgLy8gWmVyby1vdXQgdGhl
IGluZm8uCisgICAgcGFyc2VkLnJlc2V0KCk7CisKKyAgICBpZiAoIWhvc3QuaXNOb25FbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgaW5kZXggZm9yIHN0YXJ0IGFu
ZCBlbmQgb2YgYWRkcmVzcyByYW5nZSAobm8gYnJhY2tldHMpLgorICAgIGludCBiZWdpbiA9IGhv
c3QuYmVnaW4oKTsKKyAgICBpbnQgZW5kID0gaG9zdC5lbmQoKTsKKworICAgIGludCBjdXJyZW50
Q29tcG9uZW50QmVnaW4gPSBiZWdpbjsgLy8gU3RhcnQgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50
LgorCisgICAgLy8gU2NhbiB0aHJvdWdoIHRoZSBpbnB1dCwgc2VhcmNoaW5nIGZvciBoZXggY29t
cG9uZW50cywgIjo6IiBjb250cmFjdGlvbnMsCisgICAgLy8gYW5kIElQdjQgY29tcG9uZW50cy4K
KyAgICBmb3IgKGludCBpID0gYmVnaW47IC8qIGkgPD0gZW5kICovOyBpKyspIHsKKyAgICAgICAg
Ym9vbCBpc0NvbG9uID0gc3BlY1tpXSA9PSAnOic7CisgICAgICAgIGJvb2wgaXNDb250cmFjdGlv
biA9IGlzQ29sb24gJiYgaSA8IGVuZCAtIDEgJiYgc3BlY1tpICsgMV0gPT0gJzonOworCisgICAg
ICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQgaWYgd2Ug
ZW5jb3VudGVyIGEgY29sb24KKyAgICAgICAgLy8gKHNlcGFyYXRvciBiZXR3ZWVuIGhleCBjb21w
b25lbnRzLCBvciBzdGFydCBvZiBhIGNvbnRyYWN0aW9uKSwgb3IgZW5kIG9mCisgICAgICAgIC8v
IGlucHV0LgorICAgICAgICBpZiAoaXNDb2xvbiB8fCBpID09IGVuZCkgeworICAgICAgICAgICAg
aW50IGNvbXBvbmVudExlbmd0aCA9IGkgLSBjdXJyZW50Q29tcG9uZW50QmVnaW47CisKKyAgICAg
ICAgICAgIC8vIEEgY29tcG9uZW50IHNob3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4gNCBoZXggZGln
aXRzLgorICAgICAgICAgICAgaWYgKGNvbXBvbmVudExlbmd0aCA+IDQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBlbXB0eSBjb21w
b25lbnRzLgorICAgICAgICAgICAgaWYgKCFjb21wb25lbnRMZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGUgZXhjZXB0aW9uIGlzIHdoZW4gY29udHJhY3Rpb25zIGFwcGVhciBhdCBiZWdp
bm5pbmcgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gaW5wdXQgb3IgYXQgdGhlIGVuZCBvZiB0
aGUgaW5wdXQuCisgICAgICAgICAgICAgICAgaWYgKCEoKGlzQ29udHJhY3Rpb24gJiYgaSA9PSBi
ZWdpbikgfHwgKGkgPT0gZW5kICYmIHBhcnNlZC5pbmRleE9mQ29udHJhY3Rpb24gPT0gcGFyc2Vk
Lm51bUhleENvbXBvbmVudHMpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgdGhlIGhleCBjb21wb25lbnQgd2Ug
anVzdCBmb3VuZCB0byBydW5uaW5nIGxpc3QuCisgICAgICAgICAgICBpZiAoY29tcG9uZW50TGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgIC8vIENhbid0IGhhdmUgbW9yZSB0aGFuIDggY29t
cG9uZW50cyEKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkLm51bUhleENvbXBvbmVudHMgPj0g
OCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAg
cGFyc2VkLmhleENvbXBvbmVudHNbcGFyc2VkLm51bUhleENvbXBvbmVudHMrK10gPQorICAgICAg
ICAgICAgICAgIFVSTENvbXBvbmVudChjdXJyZW50Q29tcG9uZW50QmVnaW4sIGNvbXBvbmVudExl
bmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA9PSBlbmQp
CisgICAgICAgICAgICBicmVhazsgLy8gUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgRE9O
RS4KKworICAgICAgICAvLyBXZSBmb3VuZCBhICI6OiIgY29udHJhY3Rpb24uCisgICAgICAgIGlm
IChpc0NvbnRyYWN0aW9uKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBjYW4gYmUgYXQgbW9zdCBv
bmUgY29udHJhY3Rpb24gaW4gdGhlIGxpdGVyYWwuCisgICAgICAgICAgICBpZiAocGFyc2VkLmlu
ZGV4T2ZDb250cmFjdGlvbiAhPSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBwYXJzZWQuaW5kZXhPZkNvbnRyYWN0aW9uID0gcGFyc2VkLm51bUhleENvbXBv
bmVudHM7CisgICAgICAgICAgICArK2k7IC8vIENvbnN1bWUgdGhlIGNvbG9uIHdlIHBlZWtlZC4K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0NvbG9uKSB7CisgICAgICAgICAgICAvLyBDb2xv
bnMgYXJlIHNlcGFyYXRvcnMgYmV0d2VlbiBjb21wb25lbnRzLCBrZWVwIHRyYWNrIG9mIHdoZXJl
IHRoZQorICAgICAgICAgICAgLy8gY3VycmVudCBjb21wb25lbnQgc3RhcnRlZCAoYWZ0ZXIgdGhp
cyBjb2xvbikuCisgICAgICAgICAgICBjdXJyZW50Q29tcG9uZW50QmVnaW4gPSBpICsgMTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tp
XSkgPj0gMHg4MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBBU0NJSS4K
KworICAgICAgICAgICAgaWYgKCFVUkxDaGFyYWN0ZXJUeXBlczo6aXNIZXhDaGFyKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbaV0pKSkgeworICAgICAgICAgICAgICAgIC8vIFJlZ3Vs
YXIgY29tcG9uZW50cyBhcmUgaGV4IG51bWJlcnMuIEl0IGlzIGFsc28gcG9zc2libGUgZm9yCisg
ICAgICAgICAgICAgICAgLy8gYSBjb21wb25lbnQgdG8gYmUgYW4gSVB2NCBhZGRyZXNzIGluIGRv
dHRlZCBmb3JtLgorICAgICAgICAgICAgICAgIGlmIChVUkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0
Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gU2luY2UgSVB2NCBhZGRyZXNzIGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgZW5k
LCBhc3N1bWUgdGhlIHJlc3QKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHN0cmluZyBp
cyBhbiBJUHY0IGFkZHJlc3MuIChXZSB3aWxsIHBhcnNlIHRoaXMgc2VwYXJhdGVseQorICAgICAg
ICAgICAgICAgICAgICAvLyBsYXRlcikuCisgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5pcHY0
Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY3VycmVudENvbXBvbmVudEJlZ2lu
LCBlbmQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIGNoYXJhY3RlciB3YXMgbmVpdGhlciBhIGhleCBkaWdpdCwg
bm9yIGFuIElQdjQgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisv
LyBWZXJpZmllcyB0aGUgcGFyc2VkIElQdjYgaW5mb3JtYXRpb24sIGNoZWNraW5nIHRoYXQgdGhl
IHZhcmlvdXMgY29tcG9uZW50cworLy8gYWRkIHVwIHRvIHRoZSByaWdodCBudW1iZXIgb2YgYml0
cyAoaGV4IGNvbXBvbmVudHMgYXJlIDE2IGJpdHMsIHdoaWxlCisvLyBlbWJlZGRlZCBJUHY0IGZv
cm1hdHMgYXJlIDMyIGJpdHMsIGFuZCBjb250cmFjdGlvbnMgYXJlIHBsYWNlaG9sZGVzIGZvcgor
Ly8gMTYgb3IgbW9yZSBiaXRzKS4gUmV0dXJucyB0cnVlIGlmIHNpemVzIG1hdGNoIHVwLCBmYWxz
ZSBvdGhlcndpc2UuIE9uCisvLyBzdWNjZXNzIHdyaXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb250
cmFjdGlvbiAoaWYgYW55KSB0bworLy8gfG91dE51bUJ5dGVzT2ZDb250cmFjdGlvbnwuCitib29s
IENoZWNrSVB2NkNvbXBvbmVudHNTaXplKGNvbnN0IElQdjZQYXJzZWQmIHBhcnNlZCwgaW50KiBv
dXROdW1CeXRlc09mQ29udHJhY3Rpb24pCit7CisgICAgLy8gRWFjaCBncm91cCBvZiBmb3VyIGhl
eCBkaWdpdHMgY29udHJpYnV0ZXMgMTYgYml0cy4KKyAgICBpbnQgbnVtQnl0ZXNXaXRob3V0Q29u
dHJhY3Rpb24gPSBwYXJzZWQubnVtSGV4Q29tcG9uZW50cyAqIDI7CisKKyAgICAvLyBJZiBhbiBJ
UHY0IGFkZHJlc3Mgd2FzIGVtYmVkZGVkIGF0IHRoZSBlbmQsIGl0IGNvbnRyaWJ1dGVzIDMyIGJp
dHMuCisgICAgaWYgKHBhcnNlZC5pcHY0Q29tcG9uZW50LmlzVmFsaWQoKSkKKyAgICAgICAgbnVt
Qnl0ZXNXaXRob3V0Q29udHJhY3Rpb24gKz0gNDsKKworICAgIC8vIElmIHRoZXJlIHdhcyBhICI6
OiIgY29udHJhY3Rpb24sIGl0cyBzaXplIGlzIGdvaW5nIHRvIGJlOgorICAgIC8vIE1BWChbMTZi
aXRzXSwgWzEyOGJpdHNdIC0gbnVtQnl0ZXNXaXRob3V0Q29udHJhY3Rpb24pLgorICAgIGludCBu
dW1CeXRlc09mQ29udHJhY3Rpb24gPSAwOworICAgIGlmIChwYXJzZWQuaW5kZXhPZkNvbnRyYWN0
aW9uICE9IC0xKSB7CisgICAgICAgIG51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IDE2IC0gbnVtQnl0
ZXNXaXRob3V0Q29udHJhY3Rpb247CisgICAgICAgIGlmIChudW1CeXRlc09mQ29udHJhY3Rpb24g
PCAyKQorICAgICAgICAgICAgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0gMjsKKyAgICB9CisKKyAg
ICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXJzIGFkZCB1cC4KKyAgICBpZiAobnVtQnl0ZXNXaXRo
b3V0Q29udHJhY3Rpb24gKyBudW1CeXRlc09mQ29udHJhY3Rpb24gIT0gMTYpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICpvdXROdW1CeXRlc09mQ29udHJhY3Rpb24gPSBudW1CeXRlc09m
Q29udHJhY3Rpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIENvbnZlcnRzIGEgaGV4IGNv
bW9uZW50IGludG8gYSBudW1iZXIuIFRoaXMgY2Fubm90IGZhaWwgc2luY2UgdGhlIGNhbGxlciBo
YXMKKy8vIGFscmVhZHkgdmVyaWZpZWQgdGhhdCBlYWNoIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5n
IHdhcyBhIGhleCBkaWdpdCwgYW5kCisvLyB0aGF0IHRoZXJlIHdlcmUgbm8gbW9yZSB0aGFuIDQg
Y2hhcmFjdGVycy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit1aW50MTZfdCBJ
UHY2SGV4Q29tcG9uZW50VG9OdW1iZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBjb21wb25lbnQpCit7CisgICAgQVNTRVJUKGNvbXBvbmVudC5sZW5ndGgo
KSA8PSA0KTsKKworICAgIC8vIENvcHkgdGhlIGhleCBzdHJpbmcgaW50byBhIEMtc3RyaW5nLgor
ICAgIGNoYXIgYnVmWzVdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50Lmxlbmd0
aCgpOyArK2kpCisgICAgICAgIGJ1ZltpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbY29tcG9u
ZW50LmJlZ2luKCkgKyBpXSk7CisgICAgYnVmW2NvbXBvbmVudC5sZW5ndGgoKV0gPSAnXDAnOwor
CisgICAgLy8gQ29udmVydCBpdCB0byBhIG51bWJlciAob3ZlcmZsb3cgaXMgbm90IHBvc3NpYmxl
LCBzaW5jZSB3aXRoIDQgaGV4CisgICAgLy8gY2hhcmFjdGVycyB3ZSBjYW4gYXQgbW9zdCBoYXZl
IGEgMTYgYml0IG51bWJlcikuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pihfc3Ry
dG91aTY0KGJ1ZiwgMCwgMTYpKTsKK30KKworLy8gQ29udmVydHMgYW4gSVB2NiBhZGRyZXNzIHRv
IGEgMTI4LWJpdCBudW1iZXIgKG5ldHdvcmsgYnl0ZSBvcmRlciksIHJldHVybmluZworLy8gdHJ1
ZSBvbiBzdWNjZXNzLiBGYWxzZSBtZWFucyB0aGF0IHRoZSBpbnB1dCB3YXMgbm90IGEgdmFsaWQg
SVB2NiBhZGRyZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
VUNIQVI+Citib29sIGRvSVB2NkFkZHJlc3NUb051bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBz
cGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhZGRyZXNzWzE2XSkK
K3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbXBvbmVudCBpcyBib3VuZGVkIGJ5ICdbJyBhbmQg
J10nLgorICAgIGludCBlbmQgPSBob3N0LmVuZCgpOworICAgIGlmICghaG9zdC5pc05vbkVtcHR5
KCkgfHwgc3BlY1tob3N0LmJlZ2luKCldICE9ICdbJyB8fCBzcGVjW2VuZCAtIDFdICE9ICddJykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRXhjbHVkZSB0aGUgc3F1YXJlIGJyYWNr
ZXRzLgorICAgIFVSTENvbXBvbmVudCBpcHY2Q29tcG9uZW50KGhvc3QuYmVnaW4oKSArIDEsIGhv
c3QubGVuZ3RoKCkgLSAyKTsKKworICAgIC8vIFBhcnNlIHRoZSBJUHY2IGFkZHJlc3MgLS0gaWRl
bnRpZnkgd2hlcmUgYWxsIHRoZSBjb2xvbiBzZXBhcmF0ZWQgaGV4CisgICAgLy8gY29tcG9uZW50
cyBhcmUsIHRoZSAiOjoiIGNvbnRyYWN0aW9uLCBhbmQgdGhlIGVtYmVkZGVkIElQdjQgYWRkcmVz
cy4KKyAgICBJUHY2UGFyc2VkIGlwdjZQYXJzZWQ7CisgICAgaWYgKCFkb1BhcnNlSVB2NjxDaGFy
YWN0ZXJUeXBlLCBVQ0hBUj4oc3BlYywgaXB2NkNvbXBvbmVudCwgaXB2NlBhcnNlZCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERvIHNvbWUgYmFzaWMgc2l6ZSBjaGVja3MgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgZG9lc24ndAorICAgIC8vIHNwZWNpZnkgbW9yZSB0
aGFuIDEyOCBiaXRzIG9yIGZld2VyIHRoYW4gMTI4IGJpdHMuIFRoaXMgYWxzbyByZXNvbHZlcwor
ICAgIC8vIGhvdyBtYXkgemVybyBieXRlcyB0aGUgIjo6IiBjb250cmFjdGlvbiByZXByZXNlbnRz
LgorICAgIGludCBudW1CeXRlc09mQ29udHJhY3Rpb247CisgICAgaWYgKCFDaGVja0lQdjZDb21w
b25lbnRzU2l6ZShpcHY2UGFyc2VkLCAmbnVtQnl0ZXNPZkNvbnRyYWN0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaW50IGN1cnJlbnRJbmRleEluQWRkcmVzcyA9IDA7CisKKyAg
ICAvLyBMb29wIHRocm91Z2ggZWFjaCBoZXggY29tcG9uZW50cywgYW5kIGNvbnRyYWN0aW9uIGlu
IG9yZGVyLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGlwdjZQYXJzZWQubnVtSGV4Q29tcG9u
ZW50czsgKytpKSB7CisgICAgICAgIC8vIEFwcGVuZCB0aGUgY29udHJhY3Rpb24gaWYgaXQgYXBw
ZWFycyBiZWZvcmUgdGhpcyBjb21wb25lbnQuCisgICAgICAgIGlmIChpID09IGlwdjZQYXJzZWQu
aW5kZXhPZkNvbnRyYWN0aW9uKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51
bUJ5dGVzT2ZDb250cmFjdGlvbjsgKytqKQorICAgICAgICAgICAgICAgIGFkZHJlc3NbY3VycmVu
dEluZGV4SW5BZGRyZXNzKytdID0gMDsKKyAgICAgICAgfQorICAgICAgICAvLyBBcHBlbmQgdGhl
IGhleCBjb21wb25lbnQncyB2YWx1ZS4KKyAgICAgICAgaWYgKGkgIT0gaXB2NlBhcnNlZC5udW1I
ZXhDb21wb25lbnRzKSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIDE2LWJpdCB2YWx1ZSBmb3Ig
dGhpcyBoZXggY29tcG9uZW50LgorICAgICAgICAgICAgdWludDE2X3QgbnVtYmVyID0gSVB2Nkhl
eENvbXBvbmVudFRvTnVtYmVyPENoYXJhY3RlclR5cGU+KHNwZWMsIGlwdjZQYXJzZWQuaGV4Q29t
cG9uZW50c1tpXSk7CisgICAgICAgICAgICAvLyBBcHBlbmQgdG8gfGFkZHJlc3N8LCBpbiBuZXR3
b3JrIGJ5dGUgb3JkZXIuCisgICAgICAgICAgICBhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVz
cysrXSA9IChudW1iZXIgJiAweEZGMDApID4+IDg7CisgICAgICAgICAgICBhZGRyZXNzW2N1cnJl
bnRJbmRleEluQWRkcmVzcysrXSA9IChudW1iZXIgJiAweDAwRkYpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gSWYgdGhlcmUgd2FzIGFuIElQdjQgc2VjdGlvbiwgY29udmVydCBpdCBpbnRv
IGEgMzItYml0IG51bWJlciBhbmQgYXBwZW5kCisgICAgLy8gaXQgdG8gfGFkZHJlc3N8LgorICAg
IGlmIChpcHY2UGFyc2VkLmlwdjRDb21wb25lbnQuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEFw
cGVuZCB0aGUgMzItYml0IG51bWJlciB0byB8YWRkcmVzc3wuCisgICAgICAgIGludCBpZ25vcmVk
SVB2NENvbXBvbmVudHNDb3VudDsKKyAgICAgICAgaWYgKENhbm9uSG9zdEluZm86OklQVjQgIT0K
KyAgICAgICAgICAgIGRvSVB2NEFkZHJlc3NUb051bWJlcihzcGVjLCBpcHY2UGFyc2VkLmlwdjRD
b21wb25lbnQsICZhZGRyZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzc10sIGlnbm9yZWRJUHY0Q29t
cG9uZW50c0NvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gU2VhcmNoZXMgZm9yIHRoZSBsb25nZXN0IHNlcXVlbmNlIG9m
IHplcm9zIGluIHxhZGRyZXNzfCwgYW5kIHdyaXRlcyB0aGUKKy8vIHJhbmdlIGludG8gfGNvbnRy
YWN0aW9uUmFuZ2V8LiBUaGUgcnVuIG9mIHplcm9zIG11c3QgYmUgYXQgbGVhc3QgMTYgYml0cywK
Ky8vIGFuZCBpZiB0aGVyZSBpcyBhIHRpZSB0aGUgZmlyc3QgaXMgY2hvc2VuLgordm9pZCBDaG9v
c2VJUHY2Q29udHJhY3Rpb25SYW5nZShjb25zdCB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdLCBV
UkxDb21wb25lbnQqIGNvbnRyYWN0aW9uUmFuZ2UpCit7CisgICAgLy8gVGhlIGxvbmdlc3QgcnVu
IG9mIHplcm9zIGluIHxhZGRyZXNzfCBzZWVuIHNvIGZhci4KKyAgICBVUkxDb21wb25lbnQgbWF4
UmFuZ2U7CisKKyAgICAvLyBUaGUgY3VycmVudCBydW4gb2YgemVyb3MgaW4gfGFkZHJlc3N8IGJl
aW5nIGl0ZXJhdGVkIG92ZXIuCisgICAgVVJMQ29tcG9uZW50IGN1cnJlbnRSYW5nZTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkgKz0gMikgeworICAgICAgICAvLyBUZXN0IGZvciAx
NiBiaXRzIHdvcnRoIG9mIHplcm8uCisgICAgICAgIGJvb2wgaXNaZXJvID0gKCFhZGRyZXNzW2ld
ICYmICFhZGRyZXNzW2kgKyAxXSk7CisKKyAgICAgICAgaWYgKGlzWmVybykgeworICAgICAgICAg
ICAgLy8gQWRkIHRoZSB6ZXJvIHRvIHRoZSBjdXJyZW50IHJhbmdlIChvciBzdGFydCBhIG5ldyBv
bmUpLgorICAgICAgICAgICAgaWYgKCFjdXJyZW50UmFuZ2UuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIGN1cnJlbnRSYW5nZSA9IFVSTENvbXBvbmVudChpLCAwKTsKKyAgICAgICAgICAgIGN1
cnJlbnRSYW5nZS5zZXRMZW5ndGgoY3VycmVudFJhbmdlLmxlbmd0aCgpICsgMik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIWlzWmVybyB8fCBpID09IDE0KSB7CisgICAgICAgICAgICAvLyBK
dXN0IGNvbXBsZXRlZCBhIHJ1biBvZiB6ZXJvcy4gSWYgdGhlIHJ1biBpcyBncmVhdGVyIHRoYW4g
MTYgYml0cywKKyAgICAgICAgICAgIC8vIGl0IGlzIGEgY2FuZGlkYXRlIGZvciB0aGUgY29udHJh
Y3Rpb24uCisgICAgICAgICAgICBpZiAoY3VycmVudFJhbmdlLmxlbmd0aCgpID4gMiAmJiBjdXJy
ZW50UmFuZ2UubGVuZ3RoKCkgPiBtYXhSYW5nZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBt
YXhSYW5nZSA9IGN1cnJlbnRSYW5nZTsKKworICAgICAgICAgICAgY3VycmVudFJhbmdlLnJlc2V0
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgKmNvbnRyYWN0aW9uUmFuZ2UgPSBtYXhSYW5nZTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZElQdjZBZGRyZXNzKGNvbnN0IHVuc2lnbmVk
IGNoYXIgYWRkcmVzc1sxNl0sIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIFdl
IHdpbGwgb3V0cHV0IHRoZSBhZGRyZXNzIGFjY29yZGluZyB0byB0aGUgcnVsZXMgaW46CisgICAg
Ly8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQta2F3YW11cmEtaXB2Ni10ZXh0LXJl
cHJlc2VudGF0aW9uLTAxI3NlY3Rpb24tNAorCisgICAgLy8gU3RhcnQgYnkgZmluZGluZyB3aGVy
ZSB0byBwbGFjZSB0aGUgIjo6IiBjb250cmFjdGlvbiAoaWYgYW55KS4KKyAgICBVUkxDb21wb25l
bnQgY29udHJhY3Rpb25SYW5nZTsKKyAgICBDaG9vc2VJUHY2Q29udHJhY3Rpb25SYW5nZShhZGRy
ZXNzLCAmY29udHJhY3Rpb25SYW5nZSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSAxNDsp
IHsKKyAgICAgICAgLy8gV2UgY2hlY2sgMiBieXRlcyBhdCBhIHRpbWUsIGZyb20gYnl0ZXMgKDAs
IDEpIHRvICgxNCwgMTUpLCBpbmNsdXNpdmUuCisgICAgICAgIEFTU0VSVCghKGkgJSAyKSk7Cisg
ICAgICAgIGlmIChpID09IGNvbnRyYWN0aW9uUmFuZ2UuYmVnaW4oKSAmJiBjb250cmFjdGlvblJh
bmdlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgLy8gSnVtcCBvdmVyIHRoZSBjb250cmFj
dGlvbi4KKyAgICAgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCc6Jyk7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICBpID0g
Y29udHJhY3Rpb25SYW5nZS5lbmQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IENvbnN1bWUgdGhlIG5leHQgMTYgYml0cyBmcm9tIHxhZGRyZXNzfC4KKyAgICAgICAgICAgIGlu
dCB4ID0gYWRkcmVzc1tpXSA8PCA4IHwgYWRkcmVzc1tpICsgMV07CisKKyAgICAgICAgICAgIGkg
Kz0gMjsKKworICAgICAgICAgICAgLy8gU3RyaW5naWZ5IHRoZSAxNiBiaXQgbnVtYmVyIChhdCBt
b3N0IHJlcXVpcmVzIDQgaGV4IGRpZ2l0cykuCisgICAgICAgICAgICBjaGFyIHN0cls1XTsKKyAg
ICAgICAgICAgIF9pdG9hX3MoeCwgc3RyLCAxNik7CisgICAgICAgICAgICBmb3IgKGludCBjaCA9
IDA7IHN0cltjaF07ICsrY2gpCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbY2hd
KTsKKworICAgICAgICAgICAgLy8gUHV0IGEgY29sb24gYWZ0ZXIgZWFjaCBudW1iZXIsIGV4Y2Vw
dCB0aGUgbGFzdC4KKyAgICAgICAgICAgIGlmIChpIDwgMTYpCisgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgnOicpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBSZXR1cm4gdHJ1ZSBp
ZiB3ZSd2ZSBtYWRlIGEgZmluYWwgSVBWNi9CUk9LRU4gZGVjaXNpb24sIGZhbHNlIGlmIHRoZSBy
ZXN1bHQKKy8vIGlzIE5FVVRSQUwsIGFuZCB3ZSBjb3VsZCB1c2UgYSBzZWNvbmQgb3Bpbmlvbi4K
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgorYm9vbCBk
b0Nhbm9uaWNhbGl6ZUlQdjZBZGRyZXNzKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIENhbm9uSG9zdElu
Zm8mIGhvc3RJbmZvKQoreworICAgIC8vIFR1cm4gdGhlIElQIGFkZHJlc3MgaW50byBhIDEyOCBi
aXQgbnVtYmVyLgorICAgIGlmICghZG9JUHY2QWRkcmVzc1RvTnVtYmVyPENoYXJhY3RlclR5cGUs
IFVDSEFSPihzcGVjLCBob3N0LCBob3N0SW5mby5hZGRyZXNzKSkgeworICAgICAgICAvLyBJZiBp
dCdzIG5vdCBhbiBJUHY2IGFkZHJlc3MsIHNjYW4gZm9yIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQg
Km9ubHkqCisgICAgICAgIC8vIGV4aXN0IGluIGFuIElQdjYgYWRkcmVzcy4KKyAgICAgICAgZm9y
IChpbnQgaSA9IGhvc3QuYmVnaW4oKTsgaSA8IGhvc3QuZW5kKCk7IGkrKykgeworICAgICAgICAg
ICAgc3dpdGNoIChzcGVjW2ldKSB7CisgICAgICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAg
IGNhc2UgJ10nOgorICAgICAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICAgICAgaG9zdElu
Zm8uZmFtaWx5ID0gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gaW52YWxp
ZCBjaGFyYWN0ZXJzLiBDb3VsZCBzdGlsbCBiZSBJUHY0IG9yIGEgaG9zdG5hbWUuCisgICAgICAg
IGhvc3RJbmZvLmZhbWlseSA9IENhbm9uSG9zdEluZm86Ok5FVVRSQUw7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBob3N0SW5mby5vdXB1dEhvc3Quc2V0QmVnaW4ob3V0cHV0
Lmxlbmd0aCgpKTsKKyAgICBvdXRwdXQuYXBwZW5kKCdbJyk7CisgICAgYXBwZW5kSVB2NkFkZHJl
c3MoaG9zdEluZm8uYWRkcmVzcywgb3V0cHV0KTsKKyAgICBvdXRwdXQuYXBwZW5kKCddJyk7Cisg
ICAgaG9zdEluZm8ub3VwdXRIb3N0LnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBob3N0SW5m
by5vdXB1dEhvc3QuYmVnaW4oKSk7CisKKyAgICBob3N0SW5mby5mYW1pbHkgPSBDYW5vbkhvc3RJ
bmZvOjpJUFY2OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lk
IGNhbm9uaWNhbGl6ZUlQQWRkcmVzcyhjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBDYW5vbkhvc3RJbmZvJiBob3N0SW5m
bykKK3sKKyAgICBpZiAoZG9DYW5vbmljYWxpemVJUHY0QWRkcmVzczxjaGFyLCB1bnNpZ25lZCBj
aGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChkb0Nhbm9uaWNhbGl6ZUlQdjZBZGRyZXNzPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMs
IGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQorICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgY2Fu
b25pY2FsaXplSVBBZGRyZXNzKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBDYW5vbkhvc3RJbmZvJiBob3N0SW5mbykK
K3sKKyAgICBpZiAoZG9DYW5vbmljYWxpemVJUHY0QWRkcmVzczxVQ2hhciwgVUNoYXI+KHNwZWMs
IGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRvQ2Fu
b25pY2FsaXplSVB2NkFkZHJlc3M8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhv
c3RJbmZvKSkKKyAgICAgICAgcmV0dXJuOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JbnRlcm5hbC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3
YWUwOTgxNGU4ODRjZWVlNGJiYjU3NWRiOWJjOTY0NDVjNDNiMjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuY3BwCkBAIC0wLDAgKzEs
MzEwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
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
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorCisjaW5jbHVk
ZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RyaW5nPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Cit2b2lkIGRvQXBwZW5kU3RyaW5n
T2ZUeXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFj
dGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQor
eworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0
YXRpY19jYXN0PFVDSEFSPihzb3VyY2VbaV0pID49IDB4ODApIHsKKyAgICAgICAgICAgIC8vIFJl
YWRDaGFyIHdpbGwgZmlsbCB0aGUgY29kZSBwb2ludCB3aXRoIGtVbmljb2RlUmVwbGFjZW1lbnRD
aGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhlIGlucHV0IGlzIGludmFsaWQsIHdoaWNo
IGlzIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKKyAgICAg
ICAgICAgIHJlYWRVVEZDaGFyKHNvdXJjZSwgJmksIGxlbmd0aCwgJmNvZGVQb2ludCk7CisgICAg
ICAgICAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNvZGVQb2ludCwgb3V0cHV0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEp1c3QgYXBwZW5kIHRoZSA3LWJpdCBjaGFyYWN0
ZXIsIHBvc3NpYmx5IGVzY2FwaW5nIGl0LgorICAgICAgICAgICAgdW5zaWduZWQgY2hhciB1Y2gg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pOworICAgICAgICAgICAgaWYg
KCFVUkxDaGFyYWN0ZXJUeXBlczo6aXNDaGFyYWN0ZXJPZlR5cGUodWNoLCB0eXBlKSkKKyAgICAg
ICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHVjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVjaCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5wdXQgdmFsdWVz
IGFyZSBhbGwgY29udGFpbmVkIGluIDgtYml0LAorLy8gYWx0aG91Z2ggaXQgYWxsb3dzIGFueSB0
eXBlLiBSZXR1cm5zIHRydWUgaWYgaW5wdXQgaXMgdmFsaWQsIGZhbHNlIGlmIG5vdC4KK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgordm9pZCBkb0FwcGVu
ZEludmFsaWROYXJyb3dTdHJpbmcoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IGJlZ2lu
LCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBmb3IgKGludCBpID0g
YmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxV
Q0hBUj4oc3BlY1tpXSk7CisgICAgICAgIGlmICh1Y2ggPj0gMHg4MCkgeworICAgICAgICAgICAg
Ly8gSGFuZGxlIFVURi04LzE2IGVuY29kaW5ncy4gVGhpcyBjYWxsIHdpbGwgY29ycmVjdGx5IGhh
bmRsZSB0aGUgZXJyb3IKKyAgICAgICAgICAgIC8vIGNhc2UgYnkgYXBwZW5kaW5nIHRoZSBpbnZh
bGlkIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAm
aSwgZW5kLCBvdXRwdXQpOworICAgICAgICB9IGVsc2UgaWYgKHVjaCA8PSAnICcgfHwgdWNoID09
IDB4N2YpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGVycm9yIGhhbmRs
aW5nLCBzbyB3ZSBlc2NhcGUgYWxsIGNvbnRyb2wKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMg
YW5kIHNwYWNlcywgYnV0IG5vdCBhbnl0aGluZyBlbHNlIHNpbmNlIHdlIGxhY2sKKyAgICAgICAg
ICAgIC8vIGNvbnRleHQgdG8gZG8gc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuCisgICAgICAgICAg
ICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHVj
aCksIG91dHB1dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChz
dGF0aWNfY2FzdDxjaGFyPih1Y2gpKTsKKyAgICB9Cit9CisKKy8vIE92ZXJyaWRlcyBvbmUgY29t
cG9uZW50LCBzZWUgdGhlIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50cyBzdHJ1Y3R1cmUg
Zm9yCisvLyB3aGF0IHRoZSB2YXJpb3VzIGNvbWJpb25hdGlvbnMgb2Ygc291cmNlIHBvaW50ZXIg
YW5kIGNvbXBvbmVudCBtZWFuLgordm9pZCBkb092ZXJyaWRlQ29tcG9uZW50KGNvbnN0IGNoYXIq
IG92ZXJyaWRlU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIG92ZXJyaWRlQ29tcG9uZW50LCBj
b25zdCBjaGFyKiYgZGVzdGluYXRpb24sIFVSTENvbXBvbmVudCYgZGVzdGluYXRpb25Db21wb25l
bnQpCit7CisgICAgaWYgKG92ZXJyaWRlU291cmNlKSB7CisgICAgICAgIGRlc3RpbmF0aW9uID0g
b3ZlcnJpZGVTb3VyY2U7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gb3ZlcnJpZGVD
b21wb25lbnQ7CisgICAgfQorfQorCisvLyBTaW1pbGFyIHRvIGRvT3ZlcnJpZGVDb21wb25lbnQg
ZXhjZXB0IHRoYXQgaXQgdGFrZXMgYSBVVEYtMTYgaW5wdXQgYW5kIGRvZXMKKy8vIG5vdCBhY3R1
YWxseSBzZXQgdGhlIG91dHB1dCBjaGFyYWN0ZXIgcG9pbnRlci4KKy8vCisvLyBUaGUgaW5wdXQg
aXMgY29udmVydGVkIHRvIFVURi04IGF0IHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1ZmZlciBhcyBh
IHRlbXBvcmFyeQorLy8gaG9sZGluZyBwbGFjZS4gVGhlIGNvbXBvbmVudCBpbmRlbnRpZnlpbmcg
dGhlIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciB1c2VkIGluCisvLyB0aGUgfHV0ZjhCdWZmZXJ8IHdp
bGwgYmUgc3BlY2lmaWVkIGluIHwqZGVzdGluYXRpb25Db21wb25lbnR8LgorLy8KKy8vIFRoaXMg
d2lsbCBub3QgYWN0dWFsbHkgc2V0IGFueSB8ZGVzdHwgcG9pbnRlciBsaWtlIGRvT3ZlcnJpZGVD
b21wb25lbnQKKy8vIGRvZXMgYmVjYXVzZSBhbGwgb2YgdGhlIHBvaW50ZXJzIHdpbGwgcG9pbnQg
aW50byB0aGUgfHV0ZjhCdWZmZXJ8LCB3aGljaAorLy8gbWF5IGdldCByZXNpemVkIHdoaWxlIHdl
J3JlIG92ZXJyaWRpbmcgYSBzdWJzZXF1ZW50IGNvbXBvbmVudC4gSW5zdGVhZCwgdGhlCisvLyBj
YWxsZXIgc2hvdWxkIHVzZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB8dXRmOEJ1ZmZlcnwgYXMgdGhl
IHN0cmluZyBwb2ludGVyCisvLyBmb3IgYWxsIGNvbXBvbmVudHMgb25jZSBhbGwgb3ZlcnJpZGVz
IGhhdmUgYmVlbiBwcmVwYXJlZC4KK2Jvb2wgUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQo
Y29uc3QgVUNoYXIqIG92ZXJyaWRlU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIG92ZXJyaWRlQ29tcG9uZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIHV0ZjhCdWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZGVzdGluYXRp
b25Db21wb25lbnQpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAob3ZlcnJp
ZGVTb3VyY2UpIHsKKyAgICAgICAgaWYgKCFvdmVycmlkZUNvbXBvbmVudC5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIC8vIE5vbi0idmFsaWQiIGNvbXBvbmVudCAobWVhbnMgZGVsZXRlKSwgc28g
d2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGF0LgorICAgICAgICAgICAgKmRlc3RpbmF0aW9uQ29tcG9u
ZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBD
b252ZXJ0IHRvIFVURi04LgorICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQtPnNldEJl
Z2luKHV0ZjhCdWZmZXIubGVuZ3RoKCkpOworICAgICAgICAgICAgc3VjY2VzcyA9IENvbnZlcnRV
VEYxNlRvVVRGOCgmb3ZlcnJpZGVTb3VyY2Vbb3ZlcnJpZGVDb21wb25lbnQuYmVnaW4oKV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29tcG9uZW50
Lmxlbmd0aCgpLCB1dGY4QnVmZmVyKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
LT5zZXRMZW5ndGgodXRmOEJ1ZmZlci5sZW5ndGgoKSAtIGRlc3RpbmF0aW9uQ29tcG9uZW50LT5i
ZWdpbigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAv
LyBuYW1lc3BhY2UKKworY29uc3QgY2hhciBrQ2hhclRvSGV4TG9va3VwWzhdID0geworICAgIDAs
IC8vIDB4MDAgLSAweDFmCisgICAgJzAnLCAvLyAweDIwIC0gMHgzZjogZGlnaXRzIDAgLSA5IGFy
ZSAweDMwIC0gMHgzOQorICAgICdBJyAtIDEwLCAvLyAweDQwIC0gMHg1ZjogbGV0dGVycyBBIC0g
RiBhcmUgMHg0MSAtIDB4NDYKKyAgICAnYScgLSAxMCwgLy8gMHg2MCAtIDB4N2Y6IGxldHRlcnMg
YSAtIGYgYXJlIDB4NjEgLSAweDY2CisgICAgMCwgLy8gMHg4MCAtIDB4OUYKKyAgICAwLCAvLyAw
eEEwIC0gMHhCRgorICAgIDAsIC8vIDB4QzAgLSAweERGCisgICAgMCwgLy8gMHhFMCAtIDB4RkYK
K307CisKK2NvbnN0IFVDaGFyIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSAweGZmZmQ7
CisKK3ZvaWQgYXBwZW5kU3RyaW5nT2ZUeXBlKGNvbnN0IGNoYXIqIHNvdXJjZSwgaW50IGxlbmd0
aCwgVVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGRvQXBwZW5kU3RyaW5nT2ZUeXBlPGNoYXIs
IHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgbGVuZ3RoLCB1cmxDb21wb25lbnRUeXBlLCBvdXRwdXQp
OworfQorCit2b2lkIGFwcGVuZFN0cmluZ09mVHlwZShjb25zdCBVQ2hhciogc291cmNlLCBpbnQg
bGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlw
ZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZG9BcHBlbmRTdHJpbmdPZlR5cGU8
VUNoYXIsIFVDaGFyPihzb3VyY2UsIGxlbmd0aCwgdXJsQ29tcG9uZW50VHlwZSwgb3V0cHV0KTsK
K30KKwordm9pZCBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKGNvbnN0IGNoYXIqIHNwZWMsIGlu
dCBiZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZG9BcHBl
bmRJbnZhbGlkTmFycm93U3RyaW5nPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIGJlZ2luLCBl
bmQsIG91dHB1dCk7Cit9CisKK3ZvaWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBV
Q2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkK
K3sKKyAgICBkb0FwcGVuZEludmFsaWROYXJyb3dTdHJpbmc8VUNoYXIsIFVDaGFyPihzcGVjLCBi
ZWdpbiwgZW5kLCBvdXRwdXQpOworfQorCitib29sIENvbnZlcnRVVEYxNlRvVVRGOChjb25zdCBV
Q2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7
CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0
TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY29kZVBvaW50OworICAgICAgICBzdWNj
ZXNzICY9IHJlYWRVVEZDaGFyKGlucHV0LCAmaSwgaW5wdXRMZW5ndGgsICZjb2RlUG9pbnQpOwor
ICAgICAgICBBcHBlbmRVVEY4VmFsdWUoY29kZVBvaW50LCBvdXRwdXQpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBDb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgY2hhciog
aW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KQoreworICAg
IGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0
aDsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKKyAgICAgICAgc3VjY2VzcyAm
PSByZWFkVVRGQ2hhcihpbnB1dCwgJmksIGlucHV0TGVuZ3RoLCAmY29kZVBvaW50KTsKKyAgICAg
ICAgQXBwZW5kVVRGMTZWYWx1ZShjb2RlUG9pbnQsIG91dHB1dCk7CisgICAgfQorICAgIHJldHVy
biBzdWNjZXNzOworfQorCit2b2lkIFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIq
IC8qIGJhc2UgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2Vt
ZW50czxjaGFyPiYgcmVwbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50U291cmNlPGNoYXI+KiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgLy8gR2V0IHRoZSBzb3VyY2UgYW5kIHBhcnNlZCBz
dHJ1Y3R1cmVzIG9mIHRoZSB0aGluZ3Mgd2UgYXJlIHJlcGxhY2luZy4KKyAgICBjb25zdCBVUkxD
b21wb25lbnRTb3VyY2U8Y2hhcj4mIHJlcGxTb3VyY2UgPSByZXBsLnNvdXJjZXMoKTsKKyAgICBj
b25zdCBVUkxTZWdtZW50cyYgcmVwbFBhcnNlZCA9IHJlcGwuY29tcG9uZW50cygpOworCisgICAg
ZG9PdmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnNjaGVtZSwgcmVwbFBhcnNlZC5zY2hlbWUs
IHNvdXJjZS0+c2NoZW1lLCBwYXJzZWQtPnNjaGVtZSk7CisgICAgZG9PdmVycmlkZUNvbXBvbmVu
dChyZXBsU291cmNlLnVzZXJuYW1lLCByZXBsUGFyc2VkLnVzZXJuYW1lLCBzb3VyY2UtPnVzZXJu
YW1lLCBwYXJzZWQtPnVzZXJuYW1lKTsKKyAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3Vy
Y2UucGFzc3dvcmQsIHJlcGxQYXJzZWQucGFzc3dvcmQsIHNvdXJjZS0+cGFzc3dvcmQsIHBhcnNl
ZC0+cGFzc3dvcmQpOworCisgICAgLy8gT3VyIGhvc3Qgc2hvdWxkIGJlIGVtcHR5IGlmIG5vdCBw
cmVzZW50LCBzbyBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR1cC4KKyAgICBkb092ZXJyaWRlQ29t
cG9uZW50KHJlcGxTb3VyY2UuaG9zdCwgcmVwbFBhcnNlZC5ob3N0LCBzb3VyY2UtPmhvc3QsIHBh
cnNlZC0+aG9zdCk7CisgICAgaWYgKHBhcnNlZC0+aG9zdC5sZW5ndGgoKSA9PSAtMSkKKyAgICAg
ICAgcGFyc2VkLT5ob3N0LnNldExlbmd0aCgwKTsKKworICAgIGRvT3ZlcnJpZGVDb21wb25lbnQo
cmVwbFNvdXJjZS5wb3J0LCByZXBsUGFyc2VkLnBvcnQsIHNvdXJjZS0+cG9ydCwgcGFyc2VkLT5w
b3J0KTsKKyAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucGF0aCwgcmVwbFBhcnNl
ZC5wYXRoLCBzb3VyY2UtPnBhdGgsIHBhcnNlZC0+cGF0aCk7CisgICAgZG9PdmVycmlkZUNvbXBv
bmVudChyZXBsU291cmNlLnF1ZXJ5LCByZXBsUGFyc2VkLnF1ZXJ5LCBzb3VyY2UtPnF1ZXJ5LCBw
YXJzZWQtPnF1ZXJ5KTsKKyAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucmVmLCBy
ZXBsUGFyc2VkLmZyYWdtZW50LCBzb3VyY2UtPnJlZiwgcGFyc2VkLT5mcmFnbWVudCk7Cit9CisK
K2Jvb2wgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhjb25zdCBjaGFyKiAvKiBiYXNlICov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxV
Q2hhcj4mIHJlcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVy
PGNoYXI+JiB1dGY4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TENvbXBvbmVudFNvdXJjZTxjaGFyPiogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFNlZ21lbnRzKiBwYXJzZWQpCisgICAgeworICAgICAgICBib29sIHN1Y2Nl
c3MgPSB0cnVlOworCisgICAgICAgIC8vIEdldCB0aGUgc291cmNlIGFuZCBwYXJzZWQgc3RydWN0
dXJlcyBvZiB0aGUgdGhpbmdzIHdlIGFyZSByZXBsYWNpbmcuCisgICAgICAgIGNvbnN0IFVSTENv
bXBvbmVudFNvdXJjZTxVQ2hhcj4mIHJlcGxTb3VyY2UgPSByZXBsLnNvdXJjZXMoKTsKKyAgICAg
ICAgY29uc3QgVVJMU2VnbWVudHMmIHJlcGxQYXJzZWQgPSByZXBsLmNvbXBvbmVudHMoKTsKKwor
ICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3Vy
Y2Uuc2NoZW1lLCByZXBsUGFyc2VkLnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5zY2hlbWUpOworICAg
ICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2Uu
dXNlcm5hbWUsIHJlcGxQYXJzZWQudXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+dXNlcm5hbWUpOwor
ICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3Vy
Y2UucGFzc3dvcmQsIHJlcGxQYXJzZWQucGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+cGFzc3dvcmQp
OworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxT
b3VyY2UuaG9zdCwgcmVwbFBhcnNlZC5ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPmhvc3QpOworICAgICAg
ICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucG9y
dCwgcmVwbFBhcnNlZC5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBvcnQpOworICAgICAgICBzdWNjZXNz
ICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucGF0aCwgcmVwbFBh
cnNlZC5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBhdGgpOworICAgICAgICBzdWNjZXNzICY9IFByZXBh
cmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucXVlcnksIHJlcGxQYXJzZWQucXVl
cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRm
OEJ1ZmZlciwgJnBhcnNlZC0+cXVlcnkpOworICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYx
Nk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucmVmLCByZXBsUGFyc2VkLmZyYWdtZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZm
ZXIsICZwYXJzZWQtPmZyYWdtZW50KTsKKworICAgICAgICAvLyBQcmVwYXJlVVRGMTZPdmVycmlk
ZUNvbXBvbmVudCB3aWxsIG5vdCBoYXZlIHNldCB0aGUgZGF0YSBwb2ludGVyIHNpbmNlIHRoZQor
ICAgICAgICAvLyBidWZmZXIgY291bGQgYmUgcmVzaXplZCwgaW52YWxpZGF0aW5nIHRoZSBwb2lu
dGVycy4gV2Ugc2V0IHRoZSBkYXRhCisgICAgICAgIC8vIHBvaW50ZXJzIGZvciBhZmZlY3RlZCBj
b21wb25lbnRzIG5vdyB0aGF0IHRoZSBidWZmZXIgaXMgZmluYWxpemVkLgorICAgICAgICBpZiAo
cmVwbFNvdXJjZS5zY2hlbWUpCisgICAgICAgICAgICBzb3VyY2UtPnNjaGVtZSA9IHV0ZjhCdWZm
ZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNvdXJjZS51c2VybmFtZSkKKyAgICAgICAgICAg
IHNvdXJjZS0+dXNlcm5hbWUgPSB1dGY4QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxT
b3VyY2UucGFzc3dvcmQpCisgICAgICAgICAgICBzb3VyY2UtPnBhc3N3b3JkID0gdXRmOEJ1ZmZl
ci5kYXRhKCk7CisgICAgICAgIGlmIChyZXBsU291cmNlLmhvc3QpCisgICAgICAgICAgICBzb3Vy
Y2UtPmhvc3QgPSB1dGY4QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHJlcGxTb3VyY2UucG9y
dCkKKyAgICAgICAgICAgIHNvdXJjZS0+cG9ydCA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAg
ICBpZiAocmVwbFNvdXJjZS5wYXRoKQorICAgICAgICAgICAgc291cmNlLT5wYXRoID0gdXRmOEJ1
ZmZlci5kYXRhKCk7CisgICAgICAgIGlmIChyZXBsU291cmNlLnF1ZXJ5KQorICAgICAgICAgICAg
c291cmNlLT5xdWVyeSA9IHV0ZjhCdWZmZXIuZGF0YSgpOworICAgICAgICBpZiAocmVwbFNvdXJj
ZS5yZWYpCisgICAgICAgICAgICBzb3VyY2UtPnJlZiA9IHV0ZjhCdWZmZXIuZGF0YSgpOworCisg
ICAgICAgIHJldHVybiBzdWNjZXNzOworfQorCisjaWYgIU9TKFdJTkRPV1MpCitpbnQgX2l0b2Ff
cyhpbnQgdmFsdWUsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJzLCBpbnQgcmFkaXgp
Cit7CisgICAgaW50IHdyaXR0ZW47CisgICAgaWYgKHJhZGl4ID09IDEwKQorICAgICAgICB3cml0
dGVuID0gc25wcmludGYoYnVmZmVyLCBzaXplSW5DaGFycywgIiVkIiwgdmFsdWUpOworICAgIGVs
c2UgaWYgKHJhZGl4ID09IDE2KQorICAgICAgICB3cml0dGVuID0gc25wcmludGYoYnVmZmVyLCBz
aXplSW5DaGFycywgIiV4IiwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEVJTlZB
TDsKKworICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHdyaXR0ZW4pID49IHNpemVJbkNoYXJz
KSB7CisgICAgICAgIC8vIE91dHB1dCB3YXMgdHJ1bmNhdGVkLCBvciB3cml0dGVuIHdhcyBuZWdh
dGl2ZS4KKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K2ludCBfaXRvd19zKGludCB2YWx1ZSwgVUNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJz
LCBpbnQgcmFkaXgpCit7CisgICAgaWYgKHJhZGl4ICE9IDEwKQorICAgICAgICByZXR1cm4gRUlO
VkFMOworCisgICAgLy8gTm8gbW9yZSB0aGFuIDEyIGNoYXJhY3RlcnMgd2lsbCBiZSByZXF1aXJl
ZCBmb3IgYSAzMi1iaXQgaW50ZWdlci4KKyAgICAvLyBBZGQgYW4gZXh0cmEgYnl0ZSBmb3IgdGhl
IHRlcm1pbmF0aW5nIG51bGwuCisgICAgY2hhciB0ZW1wWzEzXTsKKyAgICBpbnQgd3JpdHRlbiA9
IHNucHJpbnRmKHRlbXAsIHNpemVvZih0ZW1wKSwgIiVkIiwgdmFsdWUpOworICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KHdyaXR0ZW4pID49IHNpemVJbkNoYXJzKSB7CisgICAgICAgIC8vIE91
dHB1dCB3YXMgdHJ1bmNhdGVkLCBvciB3cml0dGVuIHdhcyBuZWdhdGl2ZS4KKyAgICAgICAgcmV0
dXJuIEVJTlZBTDsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdyaXR0ZW47ICsr
aSkKKyAgICAgICAgYnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHRlbXBbaV0pOworICAg
IGJ1ZmZlclt3cml0dGVuXSA9ICdcMCc7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvLyAh
T1MoV0lORE9XUykKKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvVVJMQ2Fub25JbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjMTBjM2UzZWM2YWI2MzU1YWExMmI0
YTYzOGU3YWYyYjczMTE5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTENhbm9uSW50ZXJuYWwuaApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
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
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRv
IGJlIGluY2x1ZGVkIGluIGFub3RoZXIgQysrIGZpbGUgd2hlcmUgdGhlIGNoYXJhY3RlcgorLy8g
dHlwZXMgYXJlIGRlZmluZWQuIFRoaXMgYWxsb3dzIHVzIHRvIHdyaXRlIG1vc3RseSBnZW5lcmlj
IGNvZGUsIGJ1dCBub3QgaGF2ZQorLy8gdGVtcGxhY2UgYmxvYXQgYmVjYXVzZSBldmVyeXRoaW5n
IGlzIGlubGluZWQgd2hlbiBhbnlib2R5IGNhbGxzIGFueSBvZiBvdXIKKy8vIGZ1bmN0aW9ucy4K
KworI2lmbmRlZiBVUkxDYW5vbkludGVybmFsX2gKKyNkZWZpbmUgVVJMQ2Fub25JbnRlcm5hbF9o
CisKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorI2luY2x1ZGUgIlVSTENoYXJhY3RlclR5cGVzLmgi
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorCisjaWYg
VVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxp
emVyIHsKKworLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBvdXRwdXQsIGVzY2Fw
aW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QKKy8vIG1hdGNoIHRoZSBnaXZlbiB8dHlwZXwgaW4g
U2hhcmVkQ2hhclR5cGVzLgordm9pZCBhcHBlbmRTdHJpbmdPZlR5cGUoY29uc3QgY2hhciogc291
cmNlLCBpbnQgbGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdXJsQ29t
cG9uZW50VHlwZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwordm9pZCBhcHBlbmRTdHJpbmdP
ZlR5cGUoY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFjdGVyVHlwZXM6
OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
KTsKKworLy8gVGhpcyBsb29rdXAgdGFibGUgYWxsb3dzIGZhc3QgY29udmVyc2lvbiBiZXR3ZWVu
IEFTQ0lJIGhleCBsZXR0ZXJzIGFuZCB0aGVpcgorLy8gY29ycmVzcG9uZGluZyBudW1lcmljYWwg
dmFsdWUuIFRoZSA4LWJpdCByYW5nZSBpcyBkaXZpZGVkIHVwIGludG8gOAorLy8gcmVnaW9ucyBv
ZiAweDIwIGNoYXJhY3RlcnMgZWFjaC4gRWFjaCBvZiB0aGUgdGhyZWUgY2hhcmFjdGVyIHR5cGVz
IChudW1iZXJzLAorLy8gdXBwZXJjYXNlLCBsb3dlcmNhc2UpIGZhbGxzIGludG8gZGlmZmVyZW50
IHJlZ2lvbnMgb2YgdGhpcyByYW5nZS4gVGhlIHRhYmxlCisvLyBjb250YWlucyB0aGUgYW1vdW50
IHRvIHN1YnRyYWN0IGZyb20gY2hhcmFjdGVycyBpbiB0aGF0IHJhbmdlIHRvIGdldCBhdAorLy8g
dGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpY2FsIHZhbHVlLgorLy8KKy8vIFNlZSBIZXhEaWdpdFRv
VmFsdWUgZm9yIHRoZSBsb29rdXAuCitleHRlcm4gY29uc3QgY2hhciBrQ2hhclRvSGV4TG9va3Vw
WzhdOworCisvLyBBc3N1bWVzIHRoZSBpbnB1dCBpcyBhIHZhbGlkIGhleCBkaWdpdCEgQ2FsbCBp
c0hleENoYXIgYmVmb3JlIHVzaW5nIHRoaXMuCitpbmxpbmUgdW5zaWduZWQgY2hhciBoZXhDaGFy
VG9WYWx1ZSh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVy
IC0ga0NoYXJUb0hleExvb2t1cFtjaGFyYWN0ZXIgLyAweDIwXTsKK30KKworLy8gSW5kaWNhdGVz
IGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSBkb3Qgb3IgZG90IGVxdWl2YWxlbnQsIHJldHVy
bmluZyB0aGUKKy8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRha2VuIGJ5IGl0LiBUaGlzIHdpbGwg
YmUgb25lIGZvciBhIGxpdGVyYWwgZG90LCAzIGZvcgorLy8gYW4gZXNjYXBlZCBkb3QuIElmIHRo
ZSBjaGFyYWN0ZXIgaXMgbm90IGEgZG90LCB0aGlzIHdpbGwgcmV0dXJuIDAuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGludCBpc0RvdChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBpbnQgb2Zmc2V0LCBpbnQgZW5kKQoreworICAgIGlmIChzcGVjW29mZnNldF0g
PT0gJy4nKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChzcGVjW29mZnNldF0gPT0gJyUn
ICYmIG9mZnNldCArIDMgPD0gZW5kICYmIHNwZWNbb2Zmc2V0ICsgMV0gPT0gJzInICYmIChzcGVj
W29mZnNldCArIDJdID09ICdlJyB8fCBzcGVjW29mZnNldCArIDJdID09ICdFJykpIHsKKyAgICAg
ICAgLy8gRm91bmQgIiUyZSIKKyAgICAgICAgcmV0dXJuIDM7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCisvLyBSZXR1cm5zIHRoZSBjYW5vbmljYWxpemVkIHZlcnNpb24gb2YgdGhlIGlucHV0
IGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gc2NoZW1lCisvLyBydWxlcy4gVGhpcyBpcyBpbXBsZW1l
bnRlZCBhbG9uZ3NpZGUgdGhlIHNjaGVtZSBjYW5vbmljYWxpemVyLCBhbmQgaXMKKy8vIHJlcXVp
cmVkIGZvciByZWxhdGl2ZSBVUkwgcmVzb2x2aW5nIHRvIHRlc3QgZm9yIHNjaGVtZSBlcXVhbGl0
eS4KKy8vCisvLyBSZXR1cm5zIDAgaWYgdGhlIGlucHV0IGNoYXJhY3RlciBpcyBub3QgYSB2YWxp
ZCBzY2hlbWUgY2hhcmFjdGVyLgorY2hhciBjYW5vbmljYWxTY2hlbWVDaGFyKFVDaGFyKTsKKwor
Ly8gV3JpdGUgYSBzaW5nbGUgY2hhcmFjdGVyLCBlc2NhcGVkLCB0byB0aGUgb3V0cHV0LiBUaGlz
IGFsd2F5cyBlc2NhcGVzOiBpdAorLy8gZG9lcyBubyBjaGVja2luZyB0aGF0IHRoZWUgY2hhcmFj
dGVyIHJlcXVpcmVzIGVzY2FwaW5nLgorLy8gRXNjYXBpbmcgbWFrZXMgc2Vuc2Ugb25seSA4IGJp
dCBjaGFycywgc28gY29kZSB3b3JrcyBpbiBhbGwgY2FzZXMgb2YKKy8vIGlucHV0IHBhcmFtZXRl
cnMgKDgvMTZiaXQpLgordGVtcGxhdGU8dHlwZW5hbWUgSW5DaGFyLCB0eXBlbmFtZSBPdXRDaGFy
PgoraW5saW5lIHZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihJbkNoYXIgY2hhcmFjdGVy
LCBVUkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBidWZmZXIuYXBwZW5kKCclJyk7
CisgICAgYnVmZmVyLmFwcGVuZChXVEY6OkludGVybmFsOjp1cHBlckhleERpZ2l0c1tjaGFyYWN0
ZXIgPj4gNF0pOworICAgIGJ1ZmZlci5hcHBlbmQoV1RGOjpJbnRlcm5hbDo6dXBwZXJIZXhEaWdp
dHNbY2hhcmFjdGVyICYgMHhmXSk7Cit9CisKKy8vIFRoZSBjaGFyYWN0ZXIgd2UnbGwgc3Vic3Rp
dHV0ZSBmb3IgdW5kZWNvZGFibGUgb3IgaW52YWxpZCBjaGFyYWN0ZXJzLgorZXh0ZXJuIGNvbnN0
IFVDaGFyIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CisKKy8vIFVURi04IGZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworLy8gUmVhZHMgb25lIGNoYXJhY3RlciBpbiBVVEYtOCBzdGFydGluZyBhdCB8KmJl
Z2lufCBpbiB8c3RyfCBhbmQgcGxhY2VzCisvLyB0aGUgZGVjb2RlZCB2YWx1ZSBpbnRvIHwqY29k
ZVBvaW50fC4gSWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgd2Ugd2lsbAorLy8gcmV0dXJuIHRy
dWUuIElmIGludmFsaWQsIHdlJ2xsIHJldHVybiBmYWxzZSBhbmQgcHV0IHRoZQorLy8ga1VuaWNv
ZGVSZXBsYWNlbWVudENoYXJhY3RlciBpbnRvIHwqY29kZVBvaW50fC4KKy8vCisvLyB8KmJlZ2lu
fCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGNvbnN1bWVk
IHNvIGl0CisvLyBjYW4gYmUgaW5jcmVtZW50ZWQgaW4gYSBsb29wIGFuZCB3aWxsIGJlIHJlYWR5
IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisvLyAoZm9yIGEgc2luZ2xlLWJ5dGUgQVNDSUkgY2hh
cmFjdGVyLCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkKS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBp
cyBpbiBVUkxDYW5vbmljYWxpemVyX2ljdS5jYy4KK2Jvb2wgcmVhZFVURkNoYXIoY29uc3QgY2hh
ciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCogY29kZVBvaW50T3V0KTsK
KworLy8gR2VuZXJpYyBUby1VVEYtOCBjb252ZXJ0ZXIuIFRoaXMgd2lsbCBjYWxsIHRoZSBnaXZl
biBhcHBlbmQgbWV0aG9kIGZvciBlYWNoCisvLyBjaGFyYWN0ZXIgdGhhdCBzaG91bGQgYmUgYXBw
ZW5kZWQsIHdpdGggdGhlIGdpdmVuIG91dHB1dCBtZXRob2QuIFdyYXBwZXJzCisvLyBhcmUgcHJv
dmlkZWQgYmVsb3cgZm9yIGVzY2FwZWQgYW5kIG5vbi1lc2NhcGVkIHZlcnNpb25zIG9mIHRoaXMu
CisvLworLy8gVGhlIGNoYXJhY3RlcnZhbHVlIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tl
ZCB0aGF0IGl0J3MgYSB2YWxpZCBVbmljb2RlCisvLyBjaGFyYWN0ZXIuCit0ZW1wbGF0ZTxjbGFz
cyBPdXRwdXQsIHZvaWQgYXBwZW5kRnVuY3Rpb24odW5zaWduZWQgY2hhciwgT3V0cHV0Jik+Citp
bmxpbmUgdm9pZCBkb0FwcGVuZFVURjgodW5zaWduZWQgY2hhcmFjdGVydmFsdWUsIE91dHB1dCYg
b3V0cHV0KQoreworICAgIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAweDdmKSB7CisgICAgICAgIGFw
cGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNoYXJhY3RlcnZhbHVlKSwg
b3V0cHV0KTsKKyAgICB9IGVsc2UgaWYgKGNoYXJhY3RlcnZhbHVlIDw9IDB4N2ZmKSB7CisgICAg
ICAgIC8vIDExMHh4eHh4IDEweHh4eHh4CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDB4QzAgfCAoY2hhcmFjdGVydmFsdWUgPj4gNikpLCBvdXRwdXQp
OworICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweDgw
IHwgKGNoYXJhY3RlcnZhbHVlICYgMHgzZikpLCBvdXRwdXQpOworICAgIH0gZWxzZSBpZiAoY2hh
cmFjdGVydmFsdWUgPD0gMHhmZmZmKSB7CisgICAgICAgIC8vIDExMTB4eHh4IDEweHh4eHh4IDEw
eHh4eHh4CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDB4ZTAgfCAoY2hhcmFjdGVydmFsdWUgPj4gMTIpKSwgb3V0cHV0KTsKKyAgICAgICAgYXBwZW5k
RnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8ICgoY2hhcmFjdGVydmFs
dWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVydmFsdWUgJiAweDNmKSksIG91
dHB1dCk7CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAweDEwRkZGRikgeyAvLyBN
YXggdW5pY29kZSBjb2RlIHBvaW50LgorICAgICAgICAvLyAxMTExMHh4eCAxMHh4eHh4eCAxMHh4
eHh4eCAxMHh4eHh4eAorICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPigweGYwIHwgKGNoYXJhY3RlcnZhbHVlID4+IDE4KSksIG91dHB1dCk7CisgICAgICAg
IGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoKGNoYXJh
Y3RlcnZhbHVlID4+IDEyKSAmIDB4M2YpKSwgb3V0cHV0KTsKKyAgICAgICAgYXBwZW5kRnVuY3Rp
b24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8ICgoY2hhcmFjdGVydmFsdWUgPj4g
NikgJiAweDNmKSksIG91dHB1dCk7CisgICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVydmFsdWUgJiAweDNmKSksIG91dHB1dCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW52YWxpZCBVVEYtOCBjaGFyYWN0ZXIgKD4yMCBi
aXRzKS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCisvLyBIZWxw
ZXIgdXNlZCBieSBBcHBlbmRVVEY4VmFsdWUgYmVsb3cuIFdlIHVzZSBhbiB1bnNpZ25lZCBwYXJh
bWV0ZXIgc28gdGhlcmUKKy8vIGFyZSBubyBmdW5ueSBzaWduIHByb2JsZW1zIHdpdGggdGhlIGlu
cHV0LCBidXQgdGhlbiBoYXZlIHRvIGNvbnZlcnQgaXQgdG8KKy8vIGEgcmVndWxhciBjaGFyIGZv
ciBhcHBlbmRpbmcuCitpbmxpbmUgdm9pZCBBcHBlbmRDaGFyVG9PdXRwdXQodW5zaWduZWQgY2hh
ciBjaGFyYWN0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIG91dHB1dC5hcHBl
bmQoc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVyKSk7Cit9CisKKy8vIFdyaXRlcyB0aGUgZ2l2
ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTguIFRoaXMgZG9lcyBOTyBjaGVja2lu
ZworLy8gb2YgdGhlIHZhbGlkaXR5IG9mIHRoZSB1bmljb2RlIGNoYXJhY3RlcnM7IHRoZSBjYWxs
ZXIgc2hvdWxkIGVuc3VyZSB0aGF0CisvLyB0aGUgdmFsdWUgaXQgaXMgYXBwZW5kaW5nIGlzIHZh
bGlkIHRvIGFwcGVuZC4KK2lubGluZSB2b2lkIEFwcGVuZFVURjhWYWx1ZSh1bnNpZ25lZCBjaGFy
YWN0ZXJ2YWx1ZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgZG9BcHBlbmRVVEY4
PFVSTEJ1ZmZlcjxjaGFyPiwgQXBwZW5kQ2hhclRvT3V0cHV0PihjaGFyYWN0ZXJ2YWx1ZSwgb3V0
cHV0KTsKK30KKworLy8gV3JpdGVzIHRoZSBnaXZlbiBjaGFyYWN0ZXIgdG8gdGhlIG91dHB1dCBh
cyBVVEYtOCwgZXNjYXBpbmcgQUxMCisvLyBjaGFyYWN0ZXJzIChldmVuIHdoZW4gdGhleSBhcmUg
QVNDSUkpLiBUaGlzIGRvZXMgTk8gY2hlY2tpbmcgb2YgdGhlCisvLyB2YWxpZGl0eSBvZiB0aGUg
dW5pY29kZSBjaGFyYWN0ZXJzOyB0aGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgdmFs
dWUKKy8vIGl0IGlzIGFwcGVuZGluZyBpcyB2YWxpZCB0byBhcHBlbmQuCitpbmxpbmUgdm9pZCBB
cHBlbmRVVEY4RXNjYXBlZFZhbHVlKHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVlLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBkb0FwcGVuZFVURjg8VVJMQnVmZmVyPGNoYXI+LCBhcHBl
bmRVUkxFc2NhcGVkQ2hhcmFjdGVyPihjaGFyYWN0ZXJ2YWx1ZSwgb3V0cHV0KTsKK30KKworLy8g
VVRGLTE2IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWFkcyBvbmUgY2hhcmFjdGVyIGluIFVURi0xNiBz
dGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2VzCisvLyB0aGUgZGVjb2RlZCB2
YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgd2Ugd2ls
bAorLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJldHVybiBmYWxzZSBhbmQgcHV0
IHRoZQorLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBpbnRvIHwqY29kZVBvaW50fC4K
Ky8vCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hh
cmFjdGVyIGNvbnN1bWVkIHNvIGl0CisvLyBjYW4gYmUgaW5jcmVtZW50ZWQgaW4gYSBsb29wIGFu
ZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisvLyAoZm9yIGEgc2luZ2xl
LTE2LWJpdC13b3JkIGNoYXJhY3RlciwgaXQgd2lsbCBub3QgYmUgY2hhbmdlZCkuCisvLworLy8g
SW1wbGVtZW50YXRpb24gaXMgaW4gVVJMQ2Fub25pY2FsaXplcl9pY3UuY2MuCitib29sIHJlYWRV
VEZDaGFyKGNvbnN0IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGludCBsZW5ndGgsIHVuc2lnbmVk
KiBjb2RlUG9pbnQpOworCisvLyBFcXVpdmFsZW50IHRvIFUxNl9BUFBFTkRfVU5TQUZFIGluIElD
VSBidXQgdXNlcyBvdXIgb3V0cHV0IG1ldGhvZC4KK2lubGluZSB2b2lkIEFwcGVuZFVURjE2VmFs
dWUodW5zaWduZWQgY29kZVBvaW50LCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpCit7CisgICAg
aWYgKGNvZGVQb2ludCA+IDB4ZmZmZikgeworICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19j
YXN0PFVDaGFyPigoY29kZVBvaW50ID4+IDEwKSArIDB4ZDdjMCkpOworICAgICAgICBvdXRwdXQu
YXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ICYgMHgzZmYpIHwgMHhkYzAwKSk7
CisgICAgfSBlbHNlCisgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGNv
ZGVQb2ludCkpOworfQorCisvLyBFc2NhcGluZyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFdyaXRlcyB0aGUg
Z2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTgsIGVzY2FwZWQuIENhbGwgdGhp
cworLy8gZnVuY3Rpb24gb25seSB3aGVuIHRoZSBpbnB1dCBpcyB3aWRlLiBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzcy4gRmFpbHVyZQorLy8gbWVhbnMgdGhlcmUgd2FzIHNvbWUgcHJvYmxlbSB3aXRo
IHRoZSBlbmNvZGluZywgd2UnbGwgc3RpbGwgdHJ5IHRvCisvLyB1cGRhdGUgdGhlIHwqYmVnaW58
IHBvaW50ZXIgYW5kIGFkZCBhIHBsYWNlaG9sZGVyIGNoYXJhY3RlciB0byB0aGUKKy8vIG91dHB1
dCBzbyBwcm9jZXNzaW5nIGNhbiBjb250aW51ZS4KKy8vCisvLyBXZSB3aWxsIGFwcGVuZCB0aGUg
Y2hhcmFjdGVyIHN0YXJ0aW5nIGF0IGNoW2JlZ2luXSB3aXRoIHRoZSBidWZmZXIgY2gKKy8vIGJl
aW5nIHxsZW5ndGh8LiB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxh
c3QgY2hhcmFjdGVyCisvLyBjb25zdW1lZCAod2UgbWF5IGNvbnN1bWUgbW9yZSB0aGFuIG9uZSBm
b3IgVVRGLTE2KSBzbyB0aGF0IGlmIGNhbGxlZCBpbgorLy8gYSBsb29wLCBpbmNyZW1lbnRpbmcg
dGhlIHBvaW50ZXIgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKy8vCisvLyBFdmVy
eSBzaW5nbGUgb3V0cHV0IGNoYXJhY3RlciB3aWxsIGJlIGVzY2FwZWQuIFRoaXMgbWVhbnMgdGhh
dCBpZiB5b3UKKy8vIGdpdmUgaXQgYW4gQVNDSUkgY2hhcmFjdGVyIGFzIGlucHV0LCBpdCB3aWxs
IGJlIGVzY2FwZWQuIFNvbWUgY29kZSB1c2VzCisvLyB0aGlzIHdoZW4gaXQga25vd3MgdGhhdCBh
IGNoYXJhY3RlciBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBpdHMgcnVsZXMKKy8vIGZvciB2YWxp
ZGl0eS4gSWYgeW91IGRvbid0IHdhbnQgZXNjYXBpbmcgZm9yIEFTQ0lJIGNoYXJhY3RlcnMsIHlv
dSB3aWxsCisvLyBoYXZlIHRvIGZpbHRlciB0aGVtIG91dCBwcmlvciB0byBjYWxsaW5nIHRoaXMg
ZnVuY3Rpb24uCisvLworLy8gQXNzdW1lcyB0aGF0IGNoW2JlZ2luXSBpcyB3aXRoaW4gcmFuZ2Ug
aW4gdGhlIGFycmF5LCBidXQgZG9lcyBub3QgYXNzdW1lCisvLyB0aGF0IGFueSBmb2xsb3dpbmcg
Y2hhcmFjdGVycyBhcmUuCitpbmxpbmUgYm9vbCBBcHBlbmRVVEY4RXNjYXBlZENoYXIoY29uc3Qg
VUNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQpCit7CisgICAgLy8gVVRGLTE2IGlucHV0LiBSZWFkVUNoYXIgd2lsbCBoYW5kbGUgaW52YWxp
ZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZQorICAgIC8vIHVzIHRoZSBrVW5pY29kZVJlcGxh
Y2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHNwZWNpYWwKKyAgICAvLyBj
aGVja2luZyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3VnaCB0aGUgZmFpbHVyZSB0byB0
aGUgY2FsbGVyLgorICAgIHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVlOworICAgIGJvb2wgc3VjY2Vz
cyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNoYXJhY3RlcnZhbHVlKTsKKyAg
ICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNoYXJhY3RlcnZhbHVlLCBvdXRwdXQpOworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCisvLyBIYW5kbGVzIFVURi04IGlucHV0LiBTZWUgdGhlIHdpZGUg
dmVyc2lvbiBhYm92ZSBmb3IgdXNhZ2UuCitpbmxpbmUgYm9vbCBBcHBlbmRVVEY4RXNjYXBlZENo
YXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCkKK3sKKyAgICAvLyBSZWFkVVRGOENoYXIgd2lsbCBoYW5kbGUgaW52YWxpZCBj
aGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZSB1cyB0aGUKKyAgICAvLyBrVW5pY29kZVJlcGxhY2Vt
ZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHNwZWNpYWwgY2hlY2tpbmcKKyAg
ICAvLyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3VnaCB0aGUgZmFpbHVyZSB0byB0aGUg
Y2FsbGVyLgorICAgIHVuc2lnbmVkIGNoOworICAgIGJvb2wgc3VjY2VzcyA9IHJlYWRVVEZDaGFy
KHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNoKTsKKyAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNo
LCBvdXRwdXQpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBHaXZlbiBhICclJyBjaGFy
YWN0ZXIgYXQgfCpiZWdpbnwgaW4gdGhlIHN0cmluZyB8c3BlY3wsIHRoaXMgd2lsbCBkZWNvZGUK
Ky8vIHRoZSBlc2NhcGVkIHZhbHVlIGFuZCBwdXQgaXQgaW50byB8KnVuZXNjYXBlZFZhbHVlfCBv
biBzdWNjZXNzIChyZXR1cm5zCisvLyB0cnVlKS4gT24gZmFpbHVyZSwgdGhpcyB3aWxsIHJldHVy
biBmYWxzZSwgYW5kIHdpbGwgbm90IHdyaXRlIGludG8KKy8vIHwqdW5lc2NhcGVkVmFsdWV8Lgor
Ly8KKy8vIHwqYmVnaW58IHdpbGwgYmUgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbGFzdCBjaGFy
YWN0ZXIgb2YgdGhlIGVzY2FwZQorLy8gc2VxdWVuY2Ugc28gdGhhdCB3aGVuIGNhbGxlZCB3aXRo
IHRoZSBpbmRleCBvZiBhIGZvciBsb29wLCB0aGUgbmV4dCB0aW1lCisvLyB0aHJvdWdoIGl0IHdp
bGwgcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnNpZGVyZWQuIE9uIGZhaWx1
cmUsCisvLyB8KmJlZ2lufCB3aWxsIGJlIHVuY2hhbmdlZC4KK2lubGluZSBib29sIElzOEJpdENo
YXIoY2hhcikKK3sKKyAgICByZXR1cm4gdHJ1ZTsgLy8gdGhpcyBjYXNlIGlzIHNwZWNpYWxpemVk
IHRvIGF2b2lkIGEgd2FybmluZworfQoraW5saW5lIGJvb2wgSXM4Qml0Q2hhcihVQ2hhciBjKQor
eworICAgIHJldHVybiBjIDw9IDI1NTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2lu
bGluZSBib29sIERlY29kZUVzY2FwZWQoY29uc3QgQ0hBUiogc3BlYywgaW50KiBiZWdpbiwgaW50
IGVuZCwgdW5zaWduZWQgY2hhciogdW5lc2NhcGVkVmFsdWUpCit7CisgICAgaWYgKCpiZWdpbiAr
IDMgPiBlbmQgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAxXSkgfHwgIUlzOEJpdENoYXIo
c3BlY1sqYmVnaW4gKyAyXSkpIHsKKyAgICAgICAgLy8gSW52YWxpZCBlc2NhcGUgc2VxdWVuY2Ug
YmVjYXVzZSB0aGVyZSdzIG5vdCBlbm91Z2ggcm9vbSwgb3IgdGhlCisgICAgICAgIC8vIGRpZ2l0
cyBhcmUgbm90IEFTQ0lJLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5z
aWduZWQgY2hhciBmaXJzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbKmJlZ2lu
ICsgMV0pOworICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oc3BlY1sqYmVnaW4gKyAyXSk7CisgICAgaWYgKCFVUkxDaGFyYWN0ZXJUeXBlczo6aXNI
ZXhDaGFyKGZpcnN0KSB8fCAhVVJMQ2hhcmFjdGVyVHlwZXM6OmlzSGV4Q2hhcihzZWNvbmQpKSB7
CisgICAgICAgIC8vIEludmFsaWQgaGV4IGRpZ2l0cywgZmFpbC4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFZhbGlkIGVzY2FwZSBzZXF1ZW5jZS4KKyAgICAqdW5lc2Nh
cGVkVmFsdWUgPSAoaGV4Q2hhclRvVmFsdWUoZmlyc3QpIDw8IDQpICsgaGV4Q2hhclRvVmFsdWUo
c2Vjb25kKTsKKyAgICAqYmVnaW4gKz0gMjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQXBw
ZW5kcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIHRvIHRoZSBvdXRwdXQsIGVzY2FwaW5nICJzb21lIiBj
aGFyYWN0ZXJzIHRoYXQKKy8vIGl0IGZlZWxzIG1heSBub3QgYmUgc2FmZS4gSXQgYXNzdW1lcyB0
aGUgaW5wdXQgdmFsdWVzIGFyZSBhbGwgY29udGFpbmVkIGluCisvLyA4LWJpdCBhbHRob3VnaCBp
dCBhbGxvd3MgYW55IHR5cGUuCisvLworLy8gVGhpcyBpcyB1c2VkIGluIGVycm9yIGNhc2VzIHRv
IGFwcGVuZCBpbnZhbGlkIG91dHB1dCBzbyB0aGF0IGl0IGxvb2tzCisvLyBhcHByb3hpbWF0ZWx5
IGNvcnJlY3QuIE5vbi1lcnJvciBjYXNlcyBzaG91bGQgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBz
aW5jZQorLy8gdGhlIGVzY2FwaW5nIHJ1bGVzIGFyZSBub3QgZ3VhcmFudGVlZCEKK3ZvaWQgQXBw
ZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBjaGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBl
bmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKK3ZvaWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0
cmluZyhjb25zdCBVQ2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCk7CisKKy8vIE1pc2MgY2Fub25pY2FsaXphdGlvbiBoZWxwZXJzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ29udmVydHMgYmV0
d2VlbiBVVEYtOCBhbmQgVVRGLTE2LCByZXR1cm5pbmcgdHJ1ZSBvbiBzdWNjZXNzZnVsIGNvbnZl
cnNpb24uCisvLyBUaGUgb3V0cHV0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGdpdmVuIGNhbm9u
aWNhbGl6ZXIgb3V0cHV0IChzbyBtYWtlIHN1cmUKKy8vIGl0J3MgZW1wdHkgaWYgeW91IHdhbnQg
dG8gcmVwbGFjZSkuCisvLworLy8gT24gaW52YWxpZCBpbnB1dCwgdGhpcyB3aWxsIHN0aWxsIHdy
aXRlIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLAorLy8gcmVwbGFjaW5nIHRoZSBpbnZhbGlk
IGNoYXJhY3RlcnMgd2l0aCB0aGUgImludmFsaWQgY2hhcmFjdGVyIi4gSXQgd2lsbAorLy8gcmV0
dXJuIGZhbHNlIGluIHRoZSBmYWlsdXJlIGNhc2UsIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBub3Qg
Y29udGludWUgYXMKKy8vIG5vcm1hbC4KK2Jvb2wgQ29udmVydFVURjE2VG9VVEY4KGNvbnN0IFVD
aGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7Citi
b29sIENvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBjaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3Ro
LCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpOworCisvLyBDb252ZXJ0cyBmcm9tIFVURi0xNiB0
byA4LWJpdCB1c2luZyB0aGUgY2hhcmFjdGVyIHNldCBjb252ZXJ0ZXIuIElmIHRoZQorLy8gY29u
dmVydGVyIGlzIG51bGwsIHRoaXMgd2lsbCB1c2UgVVRGLTguCit2b2lkIENvbnZlcnRVVEYxNlRv
UXVlcnlFbmNvZGluZyhjb25zdCBVQ2hhciogaW5wdXQsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVl
cnksIENoYXJzZXRDb252ZXJ0ZXIqLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7CisKKy8vIEFw
cGxpZXMgdGhlIHJlcGxhY2VtZW50cyB0byB0aGUgZ2l2ZW4gY29tcG9uZW50IHNvdXJjZS4gVGhl
IGNvbXBvbmVudCBzb3VyY2UKKy8vIHNob3VsZCBiZSBwcmUtaW5pdGlhbGl6ZWQgdG8gdGhlICJv
bGQiIGJhc2UuIFRoYXQgaXMsIGFsbCBwb2ludGVycyB3aWxsCisvLyBwb2ludCB0byB0aGUgc3Bl
YyBvZiB0aGUgb2xkIFVSTCwgYW5kIGFsbCBvZiB0aGUgUGFyc2VkIGNvbXBvbmVudHMgd2lsbAor
Ly8gYmUgaW5kaWNlcyBpbnRvIHRoYXQgc3RyaW5nLgorLy8KKy8vIFRoZSBwb2ludGVycyBhbmQg
Y29tcG9uZW50cyBpbiB0aGUgfHNvdXJjZXwgZm9yIGFsbCBub24tbnVsbCBzdHJpbmdzIGluIHRo
ZQorLy8gfHJlcGx8IChyZXBsYWNlbWVudHMpIHdpbGwgYmUgdXBkYXRlZCB0byByZWZlcmVuY2Ug
dGhvc2Ugc3RyaW5ncy4KKy8vIENhbm9uaWNhbGl6aW5nIHdpdGggdGhlIG5ldyB8c291cmNlfCBh
bmQgfHBhcnNlZHwgY2FuIHRoZW4gY29tYmluZSBVUkwKKy8vIGNvbXBvbmVudHMgZnJvbSBtYW55
IGRpZmZlcmVudCBzdHJpbmdzLgordm9pZCBTZXR1cE92ZXJyaWRlQ29tcG9uZW50cyhjb25zdCBj
aGFyKiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVu
dHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnRTb3Vy
Y2U8Y2hhcj4qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogcGFy
c2VkKTsKKworLy8gTGlrZSB0aGUgYWJvdmUgOC1iaXQgdmVyc2lvbiwgZXhjZXB0IHRoYXQgaXQg
YWRkaXRpb25hbGx5IGNvbnZlcnRzIHRoZQorLy8gVVRGLTE2IGlucHV0IHRvIFVURi04IGJlZm9y
ZSBkb2luZyB0aGUgb3ZlcnJpZGVzLgorLy8KKy8vIFRoZSBnaXZlbiB1dGY4QnVmZmVyIGlzIHVz
ZWQgdG8gc3RvcmUgdGhlIGNvbnZlcnRlZCBjb21wb25lbnRzLiBUaGV5IHdpbGwKKy8vIGJlIGFw
cGVuZGVkIG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIHRoZSBwYXJzZWQgc3RydWN0dXJlIGlkZW50
aWZ5aW5nIHRoZQorLy8gYXBwcm9wcmlhdGUgc3Vic3RyaW5ncy4gVGhpcyBidWZmZXIgaXMgYSBw
YXJhbWV0ZXIgYmVjYXVzZSB0aGUgc291cmNlIGhhcworLy8gbm8gc3RvcmFnZSwgc28gdGhlIGJ1
ZmZlciBtdXN0IGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUgYXMgdGhlIHNvdXJjZQorLy8gcGFyYW1l
dGVyIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisvLworLy8gVEhFIENBTExFUiBNVVNUIE5PVCBBREQg
VE8gVEhFIHx1dGY4QnVmZmVyfCBBRlRFUiBUSElTIENBTEwuIE1lbWJlcnMgb2YKKy8vIHxzb3Vy
Y2V8IHdpbGwgcG9pbnQgaW50byB0aGlzIGJ1ZmZlciwgd2hpY2ggY291bGQgYmUgaW52YWxpZGF0
ZWQgaWYKKy8vIGFkZGl0aW9uYWwgZGF0YSBpcyBhZGRlZCBhbmQgdGhlIENhbm9uT3V0cHV0IHJl
c2l6ZXMgaXRzIGJ1ZmZlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gRmFsZXMg
bWVhbnMgdGhhdCB0aGUgaW5wdXQgd2FzIG5vdCB2YWxpZCBVVEYtMTYsCisvLyBhbHRob3VnaCB3
ZSB3aWxsIGhhdmUgc3RpbGwgZG9uZSB0aGUgb3ZlcnJpZGUgd2l0aCAiaW52YWxpZCBjaGFyYWN0
ZXJzIiBpbgorLy8gcGxhY2Ugb2YgZXJyb3JzLgorYm9vbCBTZXR1cFVURjE2T3ZlcnJpZGVDb21w
b25lbnRzKGNvbnN0IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiB1dGY4QnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIHBhcnNlZCk7CisKKy8vIEltcGxlbWVu
dGVkIGluIFVSTENhbm9uaWNhbGl6ZXJfcGF0aC5jYywgdGhlc2UgYXJlIHJlcXVpcmVkIGJ5IHRo
ZSByZWxhdGl2ZSBVUkwKKy8vIHJlc29sdmVyIGFzIHdlbGwsIHNvIHdlIGRlY2xhcmUgdGhlbSBo
ZXJlLgorYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBjaGFyKiBzcGVjLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOworYm9vbCBDYW5v
bmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBVQ2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKKworI2lmICFPUyhXSU5ET1dTKQorLy8g
SW1wbGVtZW50YXRpb25zIG9mIFdpbmRvd3MnIGludC10by1zdHJpbmcgY29udmVyc2lvbnMKK2lu
dCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciogYnVmZmVyLCBzaXplX3Qgc2l6ZUluQ2hhcnMsIGlu
dCByYWRpeCk7CitpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFyKiBidWZmZXIsIHNpemVfdCBz
aXplSW5DaGFycywgaW50IHJhZGl4KTsKKworLy8gU2VjdXJlIHRlbXBsYXRlIG92ZXJsb2FkcyBm
b3IgdGhlc2UgZnVuY3Rpb25zCit0ZW1wbGF0ZTxzaXplX3QgTj4KK2lubGluZSBpbnQgX2l0b2Ff
cyhpbnQgdmFsdWUsIGNoYXIgKCZidWZmZXIpW05dLCBpbnQgcmFkaXgpCit7CisgICAgcmV0dXJu
IF9pdG9hX3ModmFsdWUsIGJ1ZmZlciwgTiwgcmFkaXgpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qg
Tj4KK2lubGluZSBpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFyICgmYnVmZmVyKVtOXSwgaW50
IHJhZGl4KQoreworICAgIHJldHVybiBfaXRvd19zKHZhbHVlLCBidWZmZXIsIE4sIHJhZGl4KTsK
K30KKworLy8gX3N0cnRvdWk2NCBhbmQgc3RydG91bGwgYmVoYXZlIHRoZSBzYW1lCitpbmxpbmUg
dW5zaWduZWQgbG9uZyBsb25nIF9zdHJ0b3VpNjQoY29uc3QgY2hhciogbnB0ciwgY2hhcioqIGVu
ZHB0ciwgaW50IGJhc2UpCit7CisgICAgcmV0dXJuIHN0cnRvdWxsKG5wdHIsIGVuZHB0ciwgYmFz
ZSk7Cit9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25p
Y2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCisK
KyNlbmRpZiAvLyBVUkxDYW5vbkludGVybmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxD
YW5vbk1haWx0by5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmRiMzUzODQ1MzFlMzdiYjQwNmU3NDkzNzRjMWI0
YzhlZDMyNGZhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2Fub25NYWlsdG8uY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBGdW5jdGlvbnMgZm9yIGNhbm9uaWNhbGl6aW5nICJt
YWlsdG86IiBVUkxzLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2Fub24u
aCIKKworI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgorI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJVUkxGaWxlLmgiCisjaW5jbHVkZSAiVVJMUGFyc2VJbnRlcm5hbC5o
IgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxD
YW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9DYW5vbmljYWxpemVNYWlsdG9VUkwo
Y29uc3QgVVJMQ29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+JiBzb3VyY2UsIGNvbnN0IFVS
TFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYg
b3V0cHV0UGFyc2VkKQoreworICAgIC8vIG1haWx0bzogb25seSB1c2VzIHtzY2hlbWUsIHBhdGgs
IHF1ZXJ5fSAtLSBjbGVhciB0aGUgcmVzdC4KKyAgICBvdXRwdXRQYXJzZWQudXNlcm5hbWUgPSBV
UkxDb21wb25lbnQoKTsKKyAgICBvdXRwdXRQYXJzZWQucGFzc3dvcmQgPSBVUkxDb21wb25lbnQo
KTsKKyAgICBvdXRwdXRQYXJzZWQuaG9zdCA9IFVSTENvbXBvbmVudCgpOworICAgIG91dHB1dFBh
cnNlZC5wb3J0ID0gVVJMQ29tcG9uZW50KCk7CisgICAgb3V0cHV0UGFyc2VkLmZyYWdtZW50ID0g
VVJMQ29tcG9uZW50KCk7CisKKyAgICAvLyBTY2hlbWUgKGtub3duLCBzbyB3ZSBkb24ndCBib3Ro
ZXIgcnVubmluZyBpdCB0aHJvdWdoIHRoZSBtb3JlCisgICAgLy8gY29tcGxpY2F0ZWQgc2NoZW1l
IGNhbm9uaWNhbGl6ZXIpLgorICAgIG91dHB1dFBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ob3V0cHV0
Lmxlbmd0aCgpKTsKKyAgICBvdXRwdXQuYXBwZW5kKCJtYWlsdG86IiwgNyk7CisgICAgb3V0cHV0
UGFyc2VkLnNjaGVtZS5zZXRMZW5ndGgoNik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
CisgICAgLy8gUGF0aAorICAgIGlmIChwYXJzZWQucGF0aC5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
b3V0cHV0UGFyc2VkLnBhdGguc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKworICAgICAgICAv
LyBDb3B5IHRoZSBwYXRoIHVzaW5nIHBhdGggVVJMJ3MgbW9yZSBsYXggZXNjYXBpbmcgcnVsZXMu
CisgICAgICAgIC8vIFdlIGNvbnZlcnQgdG8gVVRGLTggYW5kIGVzY2FwZSBub24tQVNDSUksIGJ1
dCBsZWF2ZSBhbGwKKyAgICAgICAgLy8gQVNDSUkgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAg
aW50IGVuZCA9IHBhcnNlZC5wYXRoLmVuZCgpOworICAgICAgICBmb3IgKGludCBpID0gcGFyc2Vk
LnBhdGguYmVnaW4oKTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBVQ0hBUiB1Y2ggPSBz
dGF0aWNfY2FzdDxVQ0hBUj4oc291cmNlLnBhdGhbaV0pOworICAgICAgICAgICAgaWYgKHVjaCA8
IDB4MjAgfHwgdWNoID49IDB4ODApCisgICAgICAgICAgICAgICAgc3VjY2VzcyAmPSBBcHBlbmRV
VEY4RXNjYXBlZENoYXIoc291cmNlLnBhdGgsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih1
Y2gpKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dHB1dFBhcnNlZC5wYXRoLnNldExlbmd0aChv
dXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQYXJzZWQucGF0aC5iZWdpbigpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBObyBwYXRoIGF0IGFsbAorICAgICAgICBvdXRwdXRQYXJzZWQucGF0aC5y
ZXNldCgpOworICAgIH0KKworICAgIC8vIFF1ZXJ5IC0tIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQg
dXRmOCBjaGFyc2V0IGNvbnZlcnRlci4KKyAgICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVl
cnksIHBhcnNlZC5xdWVyeSwgMCwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLnF1ZXJ5KTsKKworICAg
IHJldHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIGNhbm9uaWNhbGl6
ZU1haWx0b1VSTChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCkKK3sKKyAg
ICByZXR1cm4gZG9DYW5vbmljYWxpemVNYWlsdG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJM
Q29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2Vk
KTsKK30KKworYm9vbCBjYW5vbmljYWxpemVNYWlsdG9VUkwoY29uc3QgVUNoYXIqIHNwZWMsIGNv
bnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdt
ZW50cyYgb3V0cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZU1haWx0b1VS
TDxVQ2hhciwgVUNoYXI+KFVSTENvbXBvbmVudFNvdXJjZTxVQ2hhcj4oc3BlYyksIHBhcnNlZCwg
b3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCitib29sIHJlcGxhY2VNYWlsdG9VUkwoY29uc3Qg
Y2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXRw
dXRQYXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsK
KyAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNv
bXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1
cm4gZG9DYW5vbmljYWxpemVNYWlsdG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBw
YXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworYm9vbCByZXBsYWNlTWFpbHRvVVJM
KGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywK
KyAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVu
dHMmIG91dHB1dFBhcnNlZCkKK3sKKyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKKyAgICBV
UkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOworICAgIFVSTFNlZ21lbnRzIHBh
cnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2Us
IHJlcGxhY2VtZW50cywgdXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7CisgICAgcmV0dXJuIGRvQ2Fu
b25pY2FsaXplTWFpbHRvVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBv
dXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6
ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliYzQ0M2ZkN2NkZmJh
NDczOGFkYTQ1NDQ0NjgyYTc4ZjNlMTg5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aC5jcHAKQEAgLTAsMCArMSwzNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
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
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIENhbm9uaWNhbGl6YXRpb24g
ZnVuY3Rpb25zIGZvciB0aGUgcGF0aHMgb2YgVVJMcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCisj
aW5jbHVkZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNw
YWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsK
KworZW51bSBDaGFyYWN0ZXJGbGFncyB7CisgICAgLy8gUGFzcyB0aHJvdWdoIHVuY2hhbmdlZCwg
d2hldGhlciBlc2NhcGVkIG9yIHVuZXNjYXBlZC4gVGhpcyBkb2Vzbid0CisgICAgLy8gYWN0dWFs
bHkgc2V0IGFueXRoaW5nIHNvIHlvdSBjYW4ndCBPUiBpdCB0byBjaGVjaywgaXQncyBqdXN0IHRv
IG1ha2UgdGhlCisgICAgLy8gdGFibGUgYmVsb3cgbW9yZSBjbGVhciB3aGVuIG5laXRoZXIgRVND
QVBFIG9yIFVORVNDQVBFIGlzIHNldC4KKyAgICBQQVNTID0gMCwKKworICAgIC8vIFRoaXMgY2hh
cmFjdGVyIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgaW4gZG9QYXJ0aWFsUGF0aC4gRG9pbmcg
dGhpcyB0ZXN0CisgICAgLy8gZmlyc3QgYWxsb3dzIHVzIHRvIGZpbHRlciBvdXQgdGhlIGNvbW1v
biBjYXNlcyBvZiByZWd1bGFyIGNoYXJhY3RlcnMgdGhhdAorICAgIC8vIGNhbiBiZSBkaXJlY3Rs
eSBjb3BpZWQuCisgICAgU1BFQ0lBTCA9IDEsCisKKyAgICAvLyBUaGlzIGNoYXJhY3RlciBtdXN0
IGJlIGVzY2FwZWQgaW4gdGhlIGNhbm9uaWNhbCBvdXRwdXQuIE5vdGUgdGhhdCBhbGwKKyAgICAv
LyBlc2NhcGVkIGNoYXJzIGFsc28gaGF2ZSB0aGUgInNwZWNpYWwiIGJpdCBzZXQgc28gdGhhdCB0
aGUgY29kZSB0aGF0IGxvb2tzCisgICAgLy8gZm9yIHRoaXMgaXMgdHJpZ2dlcmVkLiBOb3QgdmFs
aWQgd2l0aCBQQVNTIG9yIEVTQ0FQRQorICAgIEVTQ0FQRV9CSVQgPSAyLAorICAgIEVTQ0FQRSA9
IEVTQ0FQRV9CSVQgfCBTUEVDSUFMLAorCisgICAgLy8gVGhpcyBjaGFyYWN0ZXIgbXVzdCBiZSB1
bmVzY2FwZWQgaW4gY2Fub25pY2FsIG91dHB1dC4gTm90IHZhbGlkIHdpdGgKKyAgICAvLyBFU0NB
UEUgb3IgUEFTUy4gV2UgRE9OJ1Qgc2V0IHRoZSBTUEVDSUFMIGZsYWcgc2luY2UgaWYgd2UgZW5j
b3VudGVyIHRoZXNlCisgICAgLy8gY2hhcmFjdGVycyB1bmVzY2FwZWQsIHRoZXkgc2hvdWxkIGp1
c3QgYmUgY29waWVkLgorICAgIFVORVNDQVBFID0gNCwKKworICAgIC8vIFRoaXMgY2hhcmFjdGVy
IGlzIGRpc2FsbG93ZWQgaW4gVVJMcy4gTm90ZSB0aGF0IHRoZSAic3BlY2lhbCIgYml0IGlzIGFs
c28KKyAgICAvLyBzZXQgdG8gdHJpZ2dlciBoYW5kbGluZy4KKyAgICBJTlZBTElEX0JJVCA9IDgs
CisgICAgSU5WQUxJRCA9IElOVkFMSURfQklUIHwgU1BFQ0lBTCwKK307CisKKy8vIFRoaXMgdGFi
bGUgY29udGFpbnMgb25lIG9mIHRoZSBhYm92ZSBmbGFnIHZhbHVlcy4gTm90ZSBzb21lIGZsYWdz
IGFyZSBtb3JlCisvLyB0aGFuIG9uZSBiaXRzIGJlY2F1c2UgdGhleSBhbHNvIHR1cm4gb24gdGhl
ICJzcGVjaWFsIiBmbGFnLiBTcGVjaWFsIGlzIHRoZQorLy8gb25seSBmbGFnIHRoYXQgbWF5IGJl
IGNvbWJpbmVkIHdpdGggb3RoZXJzLgorLy8KKy8vIFRoaXMgdGFibGUgaXMgZGVzaWduZWQgdG8g
bWF0Y2ggZXhhY3RseSB3aGF0IElFIGRvZXMgd2l0aCB0aGUgY2hhcmFjdGVycy4KKy8vCisvLyBE
b3QgaXMgZXZlbiBtb3JlIHNwZWNpYWwsIGFuZCB0aGUgZXNjYXBlZCB2ZXJzaW9uIGlzIGhhbmRs
ZWQgc3BlY2lhbGx5IGJ5CisvLyBpc0RvdC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRoZSAi
ZXNjYXBlIiBmbGFnLCBhbmQgZXZlbiB0aGUgInVuZXNjYXBlIgorLy8gYml0IGlzIG5ldmVyIGhh
bmRsZWQgKHdlIGp1c3QgbmVlZCB0aGUgInNwZWNpYWwiKSBiaXQuCitjb25zdCB1bnNpZ25lZCBj
aGFyIGtQYXRoQ2hhckxvb2t1cFsweDEwMF0gPSB7CisvLyAgIG51bGwgICAgIGNvbnRyb2wgY2hh
cnMuLi4KKyAgICAgSU5WQUxJRCwgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAor
Ly8gICBjb250cm9sIGNoYXJzLi4uCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwKKy8vICAgJyAnICAgICAgICEgICAgICAgICAiICAgICAgICAgIyAgICAg
ICAgICQgICAgICAgICAlICAgICAgICAgJiAgICAgICAgICcgICAgICAgICAoICAgICAgICAgKSAg
ICAgICAgICogICAgICAgICArICAgICAgICAgLCAgICAgICAgIC0gICAgICAgICAuICAgICAgICAg
LworICAgICBFU0NBUEUsICAgUEFTUywgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgUEFTUywgICAg
IEVTQ0FQRSwgICBQQVNTLCAgICAgUEFTUywgICAgIFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywg
ICAgIFBBU1MsICAgICBQQVNTLCAgICAgVU5FU0NBUEUsIFNQRUNJQUwsICBQQVNTLAorLy8gICAw
ICAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAzICAgICAgICAgNCAgICAgICAgIDUgICAgICAg
ICA2ICAgICAgICAgNyAgICAgICAgIDggICAgICAgICA5ICAgICAgICAgOiAgICAgICAgIDsgICAg
ICAgICA8ICAgICAgICAgPSAgICAgICAgICA+ICAgICAgICA/CisgICAgIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBV
TkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBQQVNTLCAgICAgUEFTUywgICAgIEVTQ0FQRSwg
ICBQQVNTLCAgICAgRVNDQVBFLCAgIEVTQ0FQRSwKKy8vICAgQCAgICAgICAgIEEgICAgICAgICBC
ICAgICAgICAgQyAgICAgICAgIEQgICAgICAgICBFICAgICAgICAgRiAgICAgICAgIEcgICAgICAg
ICBIICAgICAgICAgSSAgICAgICAgIEogICAgICAgICBLICAgICAgICAgTCAgICAgICAgIE0gICAg
ICAgICBOICAgICAgICAgTworICAgICBQQVNTLCAgICAgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBV
TkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwKKy8vICAgUCAgICAgICAgIFEgICAgICAgICBSICAgICAgICAgUyAgICAgICAg
IFQgICAgICAgICBVICAgICAgICAgViAgICAgICAgIFcgICAgICAgICBYICAgICAgICAgWSAgICAg
ICAgIFogICAgICAgICBbICAgICAgICAgXCAgICAgICAgIF0gICAgICAgICBeICAgICAgICAgXwor
ICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVO
RVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUs
IFBBU1MsICAgICBFU0NBUEUsICAgUEFTUywgICAgIEVTQ0FQRSwgICBVTkVTQ0FQRSwKKy8vICAg
YCAgICAgICAgIGEgICAgICAgICBiICAgICAgICAgYyAgICAgICAgIGQgICAgICAgICBlICAgICAg
ICAgZiAgICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAgICAgICAgIGogICAgICAgICBrICAg
ICAgICAgbCAgICAgICAgIG0gICAgICAgICBuICAgICAgICAgbworICAgICBFU0NBUEUsICAgVU5F
U0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwKKy8vICAgcCAgICAgICAgIHEgICAgICAg
ICByICAgICAgICAgcyAgICAgICAgIHQgICAgICAgICB1ICAgICAgICAgdiAgICAgICAgIHcgICAg
ICAgICB4ICAgICAgICAgeSAgICAgICAgIHogICAgICAgICB7ICAgICAgICAgfCAgICAgICAgIH0g
ICAgICAgICB+ICAgICAgICAgPE5CU1A+CisgICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5F
U0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
VU5FU0NBUEUsIEVTQ0FQRSwKKy8vICAgLi4uYWxsIHRoZSBoaWdoLWJpdCBjaGFyYWN0ZXJzIGFy
ZSBlc2NhcGVkCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwKKyAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorICAg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAorICAgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCisgICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwKKyAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUs
ICAgRVNDQVBFfTsKKworZW51bSBEb3REaXNwb3NpdGlvbiB7CisgICAgLy8gVGhlIGdpdmVuIGRv
dCBpcyBqdXN0IHBhcnQgb2YgYSBmaWxlbmFtZSBhbmQgaXMgbm90IHNwZWNpYWwuCisgICAgTk9U
X0FfRElSRUNUT1JZLAorCisgICAgLy8gVGhlIGdpdmVuIGRvdCBpcyB0aGUgY3VycmVudCBkaXJl
Y3RvcnkuCisgICAgRElSRUNUT1JZX0NVUiwKKworICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMgdGhl
IGZpcnN0IG9mIGEgZG91YmxlIGRvdCB0aGF0IHNob3VsZCB0YWtlIHVzIHVwIG9uZS4KKyAgICBE
SVJFQ1RPUllfVVAKK307CisKKy8vIFdoZW4gdGhlIHBhdGggcmVzb2x2ZXIgZmluZHMgYSBkb3Qs
IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlCisvLyBjaGFyYWN0ZXIgZm9sbG93aW5n
IHRoYXQgZG90IHRvIHNlZSB3aGF0IGl0IGlzLiBUaGUgcmV0dXJuIHZhbHVlCisvLyBpbmRpY2F0
ZXMgd2hhdCB0eXBlIHRoaXMgZG90IGlzIChzZWUgYWJvdmUpLiBUaGlzIGNvZGUgaGFuZGxlcyB0
aGUgY2FzZQorLy8gd2hlcmUgdGhlIGRvdCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4KKy8v
CisvLyB8KmNvbnN1bWVkTGVuZ3RofCB3aWxsIGNvbnRhaW4gdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGluIHRoZSBpbnB1dCB0aGF0CisvLyBleHByZXNzIHdoYXQgd2UgZm91bmQuCisvLworLy8g
SWYgdGhlIGlucHV0IGlzICIuLi9mb28iLCB8YWZ0ZXJEb3R8ID0gMSwgfGVuZHwgPSA2LCBhbmQK
Ky8vIGF0IHRoZSBlbmQsIHwqY29uc3VtZWRMZW5ndGh8ID0gMiBmb3IgdGhlICIuLyIgdGhpcyBm
dW5jdGlvbiBjb25zdW1lZC4gVGhlCisvLyBvcmlnaW5hbCBkb3QgbGVuZ3RoIHNob3VsZCBiZSBo
YW5kbGVkIGJ5IHRoZSBjYWxsZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorRG90RGlzcG9z
aXRpb24gQ2xhc3NpZnlBZnRlckRvdChjb25zdCBDSEFSKiBzcGVjLCBpbnQgYWZ0ZXJEb3QsIGlu
dCBlbmQsIGludCogY29uc3VtZWRMZW5ndGgpCit7CisgICAgaWYgKGFmdGVyRG90ID09IGVuZCkg
eworICAgICAgICAvLyBTaW5nbGUgZG90IGF0IHRoZSBlbmQuCisgICAgICAgICpjb25zdW1lZExl
bmd0aCA9IDA7CisgICAgICAgIHJldHVybiBESVJFQ1RPUllfQ1VSOworICAgIH0KKyAgICBpZiAo
VVJMUGFyc2VyOjppc1VSTFNsYXNoKHNwZWNbYWZ0ZXJEb3RdKSkgeworICAgICAgICAvLyBTaW5n
bGUgZG90IGZvbGxvd2VkIGJ5IGEgc2xhc2guCisgICAgICAgICpjb25zdW1lZExlbmd0aCA9IDE7
IC8vIENvbnN1bWUgdGhlIHNsYXNoCisgICAgICAgIHJldHVybiBESVJFQ1RPUllfQ1VSOworICAg
IH0KKworICAgIGludCBzZWNvbmREb3RMZW5ndGggPSBpc0RvdChzcGVjLCBhZnRlckRvdCwgZW5k
KTsKKyAgICBpZiAoc2Vjb25kRG90TGVuZ3RoKSB7CisgICAgICAgIGludCBhZnRlclNlY29uZERv
dCA9IGFmdGVyRG90ICsgc2Vjb25kRG90TGVuZ3RoOworICAgICAgICBpZiAoYWZ0ZXJTZWNvbmRE
b3QgPT0gZW5kKSB7CisgICAgICAgICAgICAvLyBEb3VibGUgZG90IGF0IHRoZSBlbmQuCisgICAg
ICAgICAgICAqY29uc3VtZWRMZW5ndGggPSBzZWNvbmREb3RMZW5ndGg7CisgICAgICAgICAgICBy
ZXR1cm4gRElSRUNUT1JZX1VQOworICAgICAgICB9CisgICAgICAgIGlmIChVUkxQYXJzZXI6Omlz
VVJMU2xhc2goc3BlY1thZnRlclNlY29uZERvdF0pKSB7CisgICAgICAgICAgICAvLyBEb3VibGUg
ZG90IGZvbGxvd2VkIGJ5IGEgc2xhc2guCisgICAgICAgICAgICAqY29uc3VtZWRMZW5ndGggPSBz
ZWNvbmREb3RMZW5ndGggKyAxOworICAgICAgICAgICAgcmV0dXJuIERJUkVDVE9SWV9VUDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSBkb3RzIGFyZSBmb2xsb3dlZCBieSBzb21ldGhp
bmcgZWxzZSwgbm90IGEgZGlyZWN0b3J5LgorICAgICpjb25zdW1lZExlbmd0aCA9IDA7CisgICAg
cmV0dXJuIE5PVF9BX0RJUkVDVE9SWTsKK30KKworLy8gUmV3aW5kcyB0aGUgb3V0cHV0IHRvIHRo
ZSBwcmV2aW91cyBzbGFzaC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBvdXRwdXQKKy8vIGVuZHMg
d2l0aCBhIHNsYXNoIGFuZCB0aGlzIGRvZXNuJ3QgY291bnQgKHdlIGNhbGwgdGhpcyB3aGVuIHdl
IGFyZQorLy8gYXBwZW5kaW5nIGRpcmVjdG9yeSBwYXRocywgc28gdGhlIHByZXZpb3VzIHBhdGgg
Y29tcG9uZW50IGhhcyBhbmQgZW5kaW5nCisvLyBzbGFzaCkuCisvLworLy8gVGhpcyB3aWxsIHN0
b3AgYXQgdGhlIGZpcnN0IHNsYXNoIChhc3N1bWVkIHRvIGJlIGF0IHBvc2l0aW9uCisvLyB8cGF0
aEJlZ2luSW5PdXRwdXR8IGFuZCBub3QgZ28gYW55IGhpZ2hlciB0aGFuIHRoYXQuIFNvbWUgd2Vi
IHBhZ2VzCisvLyBkbyAiLi4iIHRvbyBtYW55IHRpbWVzLCBzbyB3ZSBuZWVkIHRvIGhhbmRsZSB0
aGF0IGJyb2tlbm5lc3MuCisvLworLy8gSXQgc2VhcmNoZXMgZm9yIGEgbGl0ZXJhbCBzbGFzaCBy
YXRoZXIgdGhhbiBpbmNsdWRpbmcgYSBiYWNrc2xhc2ggYXMgd2VsbAorLy8gYmVjYXVzZSBpdCBp
cyBydW4gb25seSBvbiB0aGUgY2Fub25pY2FsIG91dHB1dC4KKy8vCisvLyBUaGUgb3V0cHV0IGlz
IGd1YXJhbnRlZWQgdG8gZW5kIGluIGEgc2xhc2ggd2hlbiB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRl
cy4KK3ZvaWQgQmFja1VwVG9QcmV2aW91c1NsYXNoKGludCBwYXRoQmVnaW5Jbk91dHB1dCwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgQVNTRVJUKG91dHB1dC5sZW5ndGgoKSA+IDAp
OworCisgICAgaW50IGkgPSBvdXRwdXQubGVuZ3RoKCkgLSAxOworICAgIEFTU0VSVChvdXRwdXQu
YXQoaSkgPT0gJy8nKTsKKyAgICBpZiAoaSA9PSBwYXRoQmVnaW5Jbk91dHB1dCkKKyAgICAgICAg
cmV0dXJuOyAvLyBXZSdyZSBhdCB0aGUgZmlyc3Qgc2xhc2gsIG5vdGhpbmcgdG8gZG8uCisKKyAg
ICAvLyBOb3cgYmFjayB1cCAoc2tpcHBpbmcgdGhlIHRyYWlsaW5nIHNsYXNoKSB1bnRpbCB3ZSBm
aW5kIGFub3RoZXIgc2xhc2guCisgICAgaS0tOworICAgIHdoaWxlIChvdXRwdXQuYXQoaSkgIT0g
Jy8nICYmIGkgPiBwYXRoQmVnaW5Jbk91dHB1dCkKKyAgICAgICAgaS0tOworCisgICAgLy8gTm93
IHNocmluayB0aGUgb3V0cHV0IHRvIGp1c3QgaW5jbHVkZSB0aGF0IGxhc3Qgc2xhc2ggd2UgZm91
bmQuCisgICAgb3V0cHV0LnNldExlbmd0aChpICsgMSk7Cit9CisKKy8vIEFwcGVuZHMgdGhlIGdp
dmVuIHBhdGggdG8gdGhlIG91dHB1dC4gSXQgYXNzdW1lcyB0aGF0IGlmIHRoZSBpbnB1dCBwYXRo
CisvLyBzdGFydHMgd2l0aCBhIHNsYXNoLCBpdCBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBvdXRw
dXQuIElmIG5vIHBhdGggaGFzCisvLyBhbHJlYWR5IGJlZW4gYXBwZW5kZWQgdG8gdGhlIG91dHB1
dCAodGhlIGNhc2Ugd2hlbiBub3QgcmVzb2x2aW5nCisvLyByZWxhdGl2ZSBVUkxzKSwgdGhlIHBh
dGggc2hvdWxkIGJlZ2luIHdpdGggYSBzbGFzaC4KKy8vCisvLyBJZiB0aGVyZSBhcmUgYWxyZWFk
eSBwYXRoIGNvbXBvbmVudHMgKHRoaXMgbW9kZSBpcyB1c2VkIHdoZW4gYXBwZW5kaW5nCisvLyBy
ZWxhdGl2ZSBwYXRocyBmb3IgcmVzb2x2aW5nKSwgaXQgYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQg
YWxyZWFkeSBoYXMKKy8vIGEgdHJhaWxpbmcgc2xhc2ggYW5kIHRoYXQgaWYgdGhlIGlucHV0IGJl
Z2lucyB3aXRoIGEgc2xhc2gsIGl0IHNob3VsZCBiZQorLy8gY29waWVkIHRvIHRoZSBvdXRwdXQu
CisvLworLy8gV2UgZG8gbm90IGNvbGxhcHNlIG11bHRpcGxlIHNsYXNoZXMgaW4gYSByb3cgdG8g
YSBzaW5nbGUgc2xhc2guIEl0IHNlZW1zCisvLyBubyB3ZWIgYnJvd3NlcnMgZG8gdGhpcywgYW5k
IHdlIGRvbid0IHdhbnQgaW5jb21wYWJhYmlsaXRpZXMsIGV2ZW4gdGhvdWdoCisvLyBpdCB3b3Vs
ZCBiZSBjb3JyZWN0IGZvciBtb3N0IHN5c3RlbXMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9QYXJ0aWFsUGF0aChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIGludCBwYXRoQmVnaW5Jbk91
dHB1dCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgaW50IGVuZCA9IHBhdGguZW5k
KCk7CisKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZvciAoaW50IGkgPSBwYXRoLmJl
Z2luKCk7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxV
Q0hBUj4oc3BlY1tpXSk7CisgICAgICAgIGlmIChzaXplb2YoQ2hhcmFjdGVyVHlwZSkgPiBzaXpl
b2YoY2hhcikgJiYgdWNoID49IDB4ODApIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0
byB0ZXN0IHdpZGUgaW5wdXQgZm9yIGhhdmluZyBub24tQVNDSUkgY2hhcmFjdGVycy4gRm9yCisg
ICAgICAgICAgICAvLyBuYXJyb3cgaW5wdXQsIHdlJ2xsIGFsd2F5cyBqdXN0IHVzZSB0aGUgbG9v
a3VwIHRhYmxlLiBXZSBkb24ndCB0cnkgdG8KKyAgICAgICAgICAgIC8vIGRvIGFueXRoaW5nIHRy
aWNreSB3aXRoIGRlY29kaW5nL3ZhbGlkYXRpbmcgVVRGLTguIFRoaXMgZnVuY3Rpb24gd2lsbAor
ICAgICAgICAgICAgLy8gcmVhZCBvbmUgb3IgdHdvIFVURi0xNiBjaGFyYWN0ZXJzIGFuZCBhcHBl
bmQgdGhlIG91dHB1dCBhcyBVVEYtOC4gVGhpcworICAgICAgICAgICAgLy8gY2FsbCB3aWxsIGJl
IHJlbW92ZWQgaW4gOC1iaXQgbW9kZS4KKyAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRG
OEVzY2FwZWRDaGFyKHNwZWMsICZpLCBlbmQsIG91dHB1dCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBOb3JtYWwgQVNDSUkgY2hhcmFjdGVyIG9yIDgtYml0IGlucHV0LCB1c2Ug
dGhlIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0Q2ggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1Y2gpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBm
bGFncyA9IGtQYXRoQ2hhckxvb2t1cFtvdXRDaF07CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBT
UEVDSUFMKSB7CisgICAgICAgICAgICAgICAgLy8gTmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBz
b21lIHNvcnQuCisgICAgICAgICAgICAgICAgaW50IGRvdGxlbjsKKyAgICAgICAgICAgICAgICBp
ZiAoKGRvdGxlbiA9IGlzRG90KHNwZWMsIGksIGVuZCkpID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgdGhpcyBkb3Qgd2FzIHByZWNlZWRlZCBieSBhIHNsYXNoIGluIHRoZSBv
dXRwdXQuIFdlCisgICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IHdoZW4gY2Fub25p
Y2FsaXppbmcgcGF0aHMsIHRoZXkgd2lsbCBhbHdheXMKKyAgICAgICAgICAgICAgICAgICAgLy8g
c3RhcnQgd2l0aCBhIHNsYXNoIGFuZCBub3QgYSBkb3QsIHNvIHdlIGRvbid0IGhhdmUgdG8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gYm91bmRzIGNoZWNrIHRoZSBvdXRwdXQuCisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjaGVjayB0
aGlzIGluIHRoZSBjYXNlIG9mIGRvdHMgc28gd2UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAgICAg
ICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugc2xhc2hlcy4gU2luY2Ugc2xhc2hlcyBhcmUgbXVjaCBt
b3JlIGNvbW1vbiB0aGFuCisgICAgICAgICAgICAgICAgICAgIC8vIGRvdHMsIHRoaXMgYWN0dWFs
bHkgaW5jcmVhc2VzIHBlcmZvcm1hbmNlIG1lYXN1cmFibHkgKHRob3VnaAorICAgICAgICAgICAg
ICAgICAgICAvLyBzbGlnaHRseSkuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdXRwdXQu
bGVuZ3RoKCkgPiBwYXRoQmVnaW5Jbk91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChv
dXRwdXQubGVuZ3RoKCkgPiBwYXRoQmVnaW5Jbk91dHB1dCAmJiBvdXRwdXQuYXQob3V0cHV0Lmxl
bmd0aCgpIC0gMSkgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTbGFzaCBm
b2xsb3dlZCBieSBhIGRvdCwgY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgbWVhbnMgcmVsYXRpdmUK
KyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25zdW1lZExlbmd0aDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoQ2xhc3NpZnlBZnRlckRvdDxDaGFyYWN0ZXJUeXBlPihzcGVj
LCBpICsgZG90bGVuLCBlbmQsICZjb25zdW1lZExlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgTk9UX0FfRElSRUNUT1JZOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENvcHkgdGhlIGRvdCB0byB0aGUgb3V0cHV0LCBpdCBtZWFucyBub3RoaW5nIHNwZWNpYWwu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLicpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGkgKz0gZG90bGVuIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUT1JZ
X0NVUjogLy8gQ3VycmVudCBkaXJlY3RvcnksIGp1c3Qgc2tpcCB0aGUgaW5wdXQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSArPSBkb3RsZW4gKyBjb25zdW1lZExlbmd0aCAtIDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIERJUkVDVE9SWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrVXBU
b1ByZXZpb3VzU2xhc2gocGF0aEJlZ2luSW5PdXRwdXQsIG91dHB1dCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaSArPSBkb3RsZW4gKyBjb25zdW1lZExlbmd0aCAtIDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGRvdCBpcyBub3QgcHJlY2VlZGVkIGJ5IGEgc2xhc2gsIGl0IGlzIGp1c3QgcGFydCBvZiBz
b21lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlIG5hbWUuCisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ICs9IGRvdGxlbiAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG91dENoID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVy
dCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMKKyAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0Q2ggPT0gJyUn
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBlc2NhcGUgc2VxdWVuY2VzLgorICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHVuZXNjYXBlZFZhbHVlOworICAgICAgICAg
ICAgICAgICAgICBpZiAoRGVjb2RlRXNjYXBlZChzcGVjLCAmaSwgZW5kLCAmdW5lc2NhcGVkVmFs
dWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBlc2NhcGUgc2VxdWVuY2Us
IHNlZSBpZiB3ZSBrZWVwLCByZWplY3QsIG9yIHVuZXNjYXBlIGl0LgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciB1bmVzY2FwZWRGbGFncyA9IGtQYXRoQ2hhckxvb2t1cFt1bmVzY2FwZWRW
YWx1ZV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWRGbGFncyAmIFVO
RVNDQVBFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlc2NhcGVkIHZh
bHVlIHNob3VsZG4ndCBiZSBlc2NhcGVkLCBjb3B5IGl0LgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQodW5lc2NhcGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICh1bmVzY2FwZWRGbGFncyAmIElOVkFMSURfQklUKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGVkIGNoYXJhY3RlciwgY29weSBp
dCBhbmQgcmVtZW1iZXIgdGhlIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoJyUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaSAtIDFdKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVjW2ldKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBl
c2NhcGVkIGNoYXJhY3RlciBidXQgd2Ugc2hvdWxkIGtlZXAgaXQgZXNjYXBlZC4gV2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgY2FzZSBv
ZiBhbnkgaGV4IGxldHRlcnMgaW4gY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBzZXJ2ZXIgaXMgc2Vuc2l0aXZlIHRvIHRoYXQsIHNvIHdlIGp1c3QgY29weSB0aGUgdHdv
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB3aXRob3V0IGNoZWNr
aW5nIChEZWNvZGVFc2NhcGUgd2lsbCBoYXZlIGFkdmFuY2VkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBwYWlyKS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclJyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVjW2kgLSAxXSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8
Y2hhcj4oc3BlY1tpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2Nh
cGUgc2VxdWVuY2UuIElFNyByZWplY3RzIGFueSBVUkxzIHdpdGggc3VjaAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2VxdWVuY2VzLCB3aGlsZSBGaXJlZm94LCBJRTYsIGFuZCBTYWZhcmkg
YWxsIHBhc3MgaXQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5jaGFuZ2Vk
LiBXZSBhcmUgbW9yZSBwZXJtaXNzaXZlIHVubGlrZSBJRTcuIEkgZG9uJ3QgdGhpbmsgdGhpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIGNhdXNlIHNpZ25pZmljYW50IHByb2JsZW1z
LCBpZiBpdCBkb2VzLCB3ZSBzaG91bGQgY2hhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0byBiZSBtb3JlIGxpa2UgSUU3LgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZCgnJScpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGZsYWdzICYgSU5WQUxJRF9CSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9y
IE5VTExzLCBldGMuIGZhaWwuCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRD
aGFyYWN0ZXIob3V0Q2gsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBFU0NBUEVfQklUKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hhcmFjdGVyIHNob3VsZCBiZSBlc2NhcGVk
LgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKG91dENoLCBv
dXRwdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gTm90aGluZyBzcGVjaWFsIGFib3V0IHRoaXMgY2hhcmFjdGVyLCBqdXN0IGFw
cGVuZCBpdC4KKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKG91dENoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Citib29sIGRvUGF0aChj
b25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFBhdGgpCit7CisgICAgYm9v
bCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBvdXRwdXRQYXRoLnNldEJlZ2luKG91dHB1dC5sZW5ndGgo
KSk7CisgICAgaWYgKHBhdGgubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIC8vIFdyaXRlIG91dCBh
biBpbml0aWFsIHNsYXNoIGlmIHRoZSBpbnB1dCBoYXMgbm9uZS4gSWYgd2UganVzdCBwYXJzZSBh
IFVSTAorICAgICAgICAvLyBhbmQgdGhlbiBjYW5vbmljYWxpemUgaXQsIGl0IHdpbGwgb2YgY291
cnNlIGhhdmUgYSBzbGFzaCBhbHJlYWR5LiBUaGlzCisgICAgICAgIC8vIGNoZWNrIGlzIGZvciB0
aGUgcmVwbGFjZW1lbnQgYW5kIHJlbGF0aXZlIFVSTCByZXNvbHZpbmcgY2FzZXMgb2YgZmlsZQor
ICAgICAgICAvLyBVUkxzLgorICAgICAgICBpZiAoIVVSTFBhcnNlcjo6aXNVUkxTbGFzaChzcGVj
W3BhdGguYmVnaW4oKV0pKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOworCisgICAg
ICAgIHN1Y2Nlc3MgPSBkb1BhcnRpYWxQYXRoPENoYXJhY3RlclR5cGUsIFVDSEFSPihzcGVjLCBw
YXRoLCBvdXRwdXRQYXRoLmJlZ2luKCksIG91dHB1dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gTm8gaW5wdXQsIGNhbm9uaWNhbCBwYXRoIGlzIGEgc2xhc2guCisgICAgICAgIG91dHB1dC5h
cHBlbmQoJy8nKTsKKyAgICB9CisgICAgb3V0cHV0UGF0aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0
aCgpIC0gb3V0cHV0UGF0aC5iZWdpbigpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAv
LyBuYW1lc3BhY2UKKworYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IGNoYXIqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBv
bmVudCogb3V0cHV0UGF0aCkKK3sKKyAgICByZXR1cm4gZG9QYXRoPGNoYXIsIHVuc2lnbmVkIGNo
YXI+KHNwZWMsIHBhdGgsIG91dHB1dCwgKm91dHB1dFBhdGgpOworfQorCitib29sIENhbm9uaWNh
bGl6ZVBhdGgoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCkKK3sKKyAgICBy
ZXR1cm4gZG9QYXRoPFVDaGFyLCBVQ2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCAqb3V0cHV0UGF0
aCk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplUGFydGlhbFBhdGgoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0KQoreworICAgIHJldHVybiBkb1BhcnRpYWxQYXRoPGNoYXIsIHVuc2ln
bmVkIGNoYXI+KHNwZWMsIHBhdGgsIHBhdGhCZWdpbkluT3V0cHV0LCBvdXRwdXQpOworfQorCiti
b29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsIGludCBwYXRoQmVnaW5Jbk91dHB1dCwgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpCit7CisgICAgcmV0dXJuIGRvUGFydGlhbFBhdGg8VUNoYXIsIFVDaGFyPihzcGVjLCBw
YXRoLCBwYXRoQmVnaW5Jbk91dHB1dCwgb3V0cHV0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVVJM
Q2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZV
UkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2VhMDM3YzIxNDFkMDJlMWY4MGZkZWM2YjZiY2RlYmM3M2FlNjJhOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRodXJsLmNwcApAQCAtMCww
ICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRnVuY3Rpb25zIGZvciBjYW5vbmljYWxpemluZyAicGF0aCIgVVJMcy4gTm90IHRvIGJlIGNv
bmZ1c2VkIHdpdGggdGhlIHBhdGgKKy8vIG9mIGEgVVJMLCB0aGVzZSBhcmUgVVJMcyB0aGF0IGhh
dmUgbm8gYXV0aG9yaXR5IHNlY3Rpb24sIG9ubHkgYSBwYXRoLiBGb3IKKy8vIGV4YW1wbGUsICJq
YXZhc2NyaXB0OiIgYW5kICJkYXRhOiIuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCisjaW5jbHVkZSAiVVJM
Q2Fub25JbnRlcm5hbC5oIgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisK
K25hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Citib29sIGRvQ2Fub25pY2Fs
aXplUGF0aFVSTChjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q2hhcmFjdGVyVHlwZT4mIHNvdXJj
ZSwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVS
TFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkKK3sKKyAgICAvLyBTY2hlbWU6IHRoaXMgd2lsbCBhcHBl
bmQgdGhlIGNvbG9uLgorICAgIGJvb2wgc3VjY2VzcyA9IGNhbm9uaWNhbGl6ZVNjaGVtZShzb3Vy
Y2Uuc2NoZW1lLCBwYXJzZWQuc2NoZW1lLCBvdXRwdXQsIG91cHV0UGFyc2VkLnNjaGVtZSk7CisK
KyAgICAvLyBXZSBhc3N1bWUgdGhlcmUncyBubyBhdXRob3JpdHkgZm9yIHBhdGggVVJMcy4gTm90
ZSB0aGF0IGhvc3RzIHNob3VsZCBuZXZlcgorICAgIC8vIGhhdmUgLTEgbGVuZ3RoLgorICAgIG91
cHV0UGFyc2VkLnVzZXJuYW1lLnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQucGFzc3dvcmQucmVz
ZXQoKTsKKyAgICBvdXB1dFBhcnNlZC5ob3N0LnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQucG9y
dC5yZXNldCgpOworCisgICAgaWYgKHBhcnNlZC5wYXRoLmlzVmFsaWQoKSkgeworICAgICAgICAv
LyBDb3B5IHRoZSBwYXRoIHVzaW5nIHBhdGggVVJMJ3MgbW9yZSBsYXggZXNjYXBpbmcgcnVsZXMg
KHRoaW5rIGZvcgorICAgICAgICAvLyBqYXZhc2NyaXB0OikuIFdlIGNvbnZlcnQgdG8gVVRGLTgg
YW5kIGVzY2FwZSBub24tQVNDSUksIGJ1dCBsZWF2ZSBhbGwKKyAgICAgICAgLy8gQVNDSUkgY2hh
cmFjdGVycyBhbG9uZS4gVGhpcyBoZWxwcyByZWFkYWJpbGl0eSBvZiBKYXZhU3RyaXB0LgorICAg
ICAgICBvdXB1dFBhcnNlZC5wYXRoLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7CisgICAgICAg
IGludCBlbmQgPSBwYXJzZWQucGF0aC5lbmQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHBhcnNl
ZC5wYXRoLmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgVUNIQVIgdWNoID0g
c3RhdGljX2Nhc3Q8VUNIQVI+KHNvdXJjZS5wYXRoW2ldKTsKKyAgICAgICAgICAgIGlmICh1Y2gg
PCAweDIwIHx8IHVjaCA+PSAweDgwKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQXBwZW5k
VVRGOEVzY2FwZWRDaGFyKHNvdXJjZS5wYXRoLCAmaSwgZW5kLCBvdXRwdXQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4o
dWNoKSk7CisgICAgICAgIH0KKyAgICAgICAgb3VwdXRQYXJzZWQucGF0aC5zZXRMZW5ndGgob3V0
cHV0Lmxlbmd0aCgpIC0gb3VwdXRQYXJzZWQucGF0aC5iZWdpbigpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBFbXB0eSBwYXRoLgorICAgICAgICBvdXB1dFBhcnNlZC5wYXRoLnJlc2V0KCk7
CisgICAgfQorCisgICAgLy8gQXNzdW1lIHRoZXJlJ3Mgbm8gcXVlcnkgb3IgcmVmLgorICAgIG91
cHV0UGFyc2VkLnF1ZXJ5LnJlc2V0KCk7CisgICAgb3VwdXRQYXJzZWQuZnJhZ21lbnQucmVzZXQo
KTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitib29sIGNh
bm9uaWNhbGl6ZVBhdGhVUkwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBh
cnNlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkK
K3sKKyAgICByZXR1cm4gZG9DYW5vbmljYWxpemVQYXRoVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+
KFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPihzcGVjKSwgcGFyc2VkLCBvdXRwdXQsIG91cHV0UGFy
c2VkKTsKK30KKworYm9vbCBjYW5vbmljYWxpemVQYXRoVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBj
b25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2Vn
bWVudHMmIG91cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8
VUNoYXIsIFVDaGFyPihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIG91
dHB1dCwgb3VwdXRQYXJzZWQpOworfQorCitib29sIFJlcGxhY2VQYXRoVVJMKGNvbnN0IGNoYXIq
IGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBjb25zdCBSZXBsYWNlbWVudHM8
Y2hhcj4mIHJlcGxhY2VtZW50cywgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRz
KiBvdXB1dFBhcnNlZCkKK3sKKyAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJh
c2UpOworICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKKyAgICBTZXR1cE92ZXJy
aWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJzZWQpOworICAg
IHJldHVybiBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNl
LCBwYXJzZWQsIG91dHB1dCwgKm91cHV0UGFyc2VkKTsKK30KKworYm9vbCBSZXBsYWNlUGF0aFVS
TChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgY29uc3Qg
UmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQoreworICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1
dGY4OworICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7CisgICAgVVJM
U2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOworICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBv
bmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICBy
ZXR1cm4gZG9DYW5vbmljYWxpemVQYXRoVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwg
cGFyc2VkLCBvdXRwdXQsICpvdXB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTENh
bm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoV1RGVVJM
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblF1ZXJ5LmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI2
NzNmYjM0MGE3NzM3ZjIzZDI5NGFlYjIzMmJlZTc1NGUxMThiMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25RdWVyeS5jcHAKQEAgLTAsMCArMSwxODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxDYW5vbi5oIgorCisjaW5jbHVkZSAiUmF3VVJMQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgorI2luY2x1ZGUgIlVSTENoYXJh
Y3RlclR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oPgorCisvLyBR
dWVyeSBjYW5vbmljYWxpemF0aW9uIGluIElFCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBJRSBpcyB2ZXJ5IHBlcm1pc3NpdmUgZm9yIHF1ZXJ5IHBhcmFtZXRlcnMgc3BlY2lm
aWVkIGluIGxpbmtzIG9uIHRoZSBwYWdlCisvLyAoaW4gY29udHJhc3QgdG8gbGlua3MgdGhhdCBp
dCBjb25zdHJ1Y3RzIGl0c2VsZiBiYXNlZCBvbiBmb3JtIGRhdGEpLiBJdCBkb2VzCisvLyBub3Qg
dW5lc2NhcGUgYW55IGNoYXJhY3Rlci4gSXQgZG9lcyBub3QgcmVqZWN0IGFueSBlc2NhcGUgc2Vx
dWVuY2UgKGJlIHRoZXkKKy8vIGludmFsaWQgbGlrZSAiJTJ5IiBvciBmcmVha3kgbGlrZSAlMDAp
LgorLy8KKy8vIElFIG9ubHkgZXNjYXBlcyBzcGFjZXMgYW5kIG5vdGhpbmcgZWxzZS4gRW1iZWRk
ZWQgTlVMTHMsIHRhYnMgKDB4MDkpLAorLy8gTEYgKDB4MGEpLCBhbmQgQ1IgKDB4MGQpIGFyZSBy
ZW1vdmVkICh0aGlzIHByb2JhYmx5IGhhcHBlbnMgYXQgYW4gZWFybGllcgorLy8gbGF5ZXIgc2lu
Y2UgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGFsbCBwb3J0aW9ucyBvZiB0aGUgVVJMKS4gQWxsIG90
aGVyCisvLyBjaGFyYWN0ZXJzIGFyZSBwYXNzZWQgdW5tb2RpZmllZC4gSW52YWxpZCBVVEYtMTYg
c2VxdWVuY2VzIGFyZSBwcmVzZXJ2ZWQgYXMKKy8vIHdlbGwsIHdpdGggZWFjaCBjaGFyYWN0ZXIg
aW4gdGhlIGlucHV0IGJlaW5nIGNvbnZlcnRlZCB0byBVVEYtOC4gSXQgaXMgdGhlCisvLyBzZXJ2
ZXIncyBqb2IgdG8gbWFrZSBzZW5zZSBvZiB0aGlzIGludmFsaWQgcXVlcnkuCisvLworLy8gSW52
YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2VzIChmb3IgZXhhbXBsZSwgaW52YWxpZCBVVEYtOCBvbiBh
IFVURi04IHBhZ2UpCisvLyBhcmUgY29udmVydGVkIHRvIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBh
bmQgc2VudCBhcyB1bmVzY2FwZWQgVVRGLTggKDB4ZWYsCisvLyAweGJmLCAweGJkKS4gVGhpcyBt
YXkgbm90IGJlIGNhbm9uaWNhbGl6YXRpb24sIHRoZSBwYXJzZXIgbWF5IGdlbmVyYXRlIHRoZXNl
CisvLyBzdHJpbmdzIGJlZm9yZSB0aGUgVVJMIGhhbmRsZXIgZXZlciBzZWVzIHRoZW0uCisvLwor
Ly8gT3VyIHF1ZXJ5IGNhbm9uaWNhbGl6YXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBXZSBlc2NhcGUgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFuZCBjb250cm9sIGNo
YXJhY3RlcnMsIGxpa2UgRmlyZWZveC4KKy8vIFRoaXMgaXMgbW9yZSBjb25mb3JtYW50IHRvIHRo
ZSBVUkwgc3BlYywgYW5kIHRoZXJlIGRvIG5vdCBzZWVtIHRvIGJlIG1hbnkKKy8vIHByb2JsZW1z
IHJlbGF0aW5nIHRvIEZpcmVmb3gncyBiZWhhdmlvci4KKy8vCisvLyBMaWtlIElFLCB3ZSB3aWxs
IG5ldmVyIHVuZXNjYXBlIChhbHRob3VnaCB0aGUgYXBwbGljYXRpb24gbWF5IHdhbnQgdG8gdHJ5
CisvLyB1bmVzY2FwaW5nIHRvIHByZXNlbnQgdGhlIHVzZXIgd2l0aCBhIG1vcmUgdW5kZXJzdGFu
ZGFibGUgVVJMKS4gV2Ugd2lsbAorLy8gcmVwbGFjZSBhbGwgaW52YWxpZCBzZXF1ZW5jZXMgKGlu
Y2x1ZGluZyBpbnZhbGlkIFVURi0xNiBzZXF1ZW5jZXMsIHdoaWNoIElFCisvLyBkb2Vzbid0KSB3
aXRoIHRoZSAiaW52YWxpZCBjaGFyYWN0ZXIsIiBhbmQgd2Ugd2lsbCBlc2NhcGUgaXQuCisKKyNp
ZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTENhbm9uaWNh
bGl6ZXIgeworCituYW1lc3BhY2UgeworCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3Rl
cnMgc3RhcnRpbmcgYXQgfGJlZ2lufCBhbmQgZ29pbmcgdW50aWwgfGVuZHwKKy8vIChub24taW5j
bHVzaXZlKSBhcmUgYWxsIHJlcHJlc2VudGFibGUgaW4gNy1iaXRzLgordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgaXNBbGxBU0NJSShjb25zdCBDaGFyYWN0ZXJUeXBlKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5KQoreworICAgIHJldHVybiBjaGFyYWN0ZXJz
QXJlQWxsQVNDSUkoc3BlYyArIHF1ZXJ5LmJlZ2luKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKK30KKwor
Ly8gRklYTUU6IEJlbmphbWluOiBnZXQgcmlkIG9mIHRoaXMgd2hlbiBldmVyeXRoaW5nIGlzIGJh
c2VkIG9uIExDaGFyLgordGVtcGxhdGU8PgorYm9vbCBpc0FsbEFTQ0lJPGNoYXI+KGNvbnN0IGNo
YXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnkpCit7CisgICAgcmV0dXJuIGNoYXJh
Y3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oc3BlYyArIHF1
ZXJ5LmJlZ2luKCkpLCBxdWVyeS5sZW5ndGgoKSk7Cit9CisKKy8vIEFwcGVuZHMgdGhlIGdpdmVu
IHN0cmluZyB0byB0aGUgb3V0cHV0LCBlc2NhcGluZyBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90Cisv
LyBtYXRjaCB0aGUgZ2l2ZW4gfHR5cGV8IGluIFNoYXJlZENoYXJUeXBlcy4gVGhpcyB2ZXJzaW9u
IHdpbGwgYWNjZXB0IDggb3IgMTYKKy8vIGJpdCBjaGFyYWN0ZXJzLCBidXQgYXNzdW1lcyB0aGF0
IHRoZXkgaGF2ZSBvbmx5IDctYml0IHZhbHVlcy4gSXQgYWxzbyBhc3N1bWVzCisvLyB0aGF0IGFs
bCBVVEYtOCB2YWx1ZXMgYXJlIGNvcnJlY3QsIHNvIGRvZXNuJ3QgYm90aGVyIGNoZWNraW5nCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBhcHBlbmRSYXc4Qml0UXVlcnlT
dHJpbmcoY29uc3QgQ2hhcmFjdGVyVHlwZSogc291cmNlLCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzUXVlcnlDaGFyKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KHNvdXJjZVtpXSkpKQorICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBl
ZENoYXJhY3RlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pLCBvdXRwdXQp
OworICAgICAgICBlbHNlIC8vIERvZXNuJ3QgbmVlZCBlc2NhcGluZy4KKyAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc291cmNlW2ldKSk7CisgICAgfQorfQorCisv
LyBSdW5zIHRoZSBjb252ZXJ0ZXIgb24gdGhlIGdpdmVuIFVURi04IGlucHV0LiBTaW5jZSB0aGUg
Y29udmVydGVyIGV4cGVjdHMKKy8vIFVURi0xNiwgd2UgaGF2ZSB0byBjb252ZXJ0IGZpcnN0LiBU
aGUgY29udmVydGVyIG11c3QgYmUgbm9uLW51bGwuCit2b2lkIHJ1bkNvbnZlcnRlcihjb25zdCBj
aGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiBj
b252ZXJ0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIFRoaXMgZnVuY3Rp
b24gd2lsbCByZXBsYWNlIGFueSBtaXNlbmNvZGVkIHZhbHVlcyB3aXRoIHRoZSBpbnZhbGlkCisg
ICAgLy8gY2hhcmFjdGVyLiBUaGlzIGlzIHdoYXQgd2Ugd2FudCBzbyB3ZSBkb24ndCBoYXZlIHRv
IGNoZWNrIGZvciBlcnJvci4KKyAgICBSYXdVUkxCdWZmZXI8VUNoYXI+IHV0ZjE2OworICAgIENv
bnZlcnRVVEY4VG9VVEYxNigmc3BlY1txdWVyeS5iZWdpbigpXSwgcXVlcnkubGVuZ3RoKCksIHV0
ZjE2KTsKKyAgICBjb252ZXJ0ZXItPkNvbnZlcnRGcm9tVVRGMTYodXRmMTYuZGF0YSgpLCB1dGYx
Ni5sZW5ndGgoKSwgb3V0cHV0KTsKK30KKworLy8gUnVucyB0aGUgY29udmVydGVyIHdpdGggdGhl
IGdpdmVuIFVURi0xNiBpbnB1dC4gV2UgZG9uJ3QgaGF2ZSB0byBkbworLy8gYW55dGhpbmcsIGJ1
dCB0aGlzIG92ZXJyaWRkZGVuIGZ1bmN0aW9uIGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgY29k
ZQorLy8gZm9yIGJvdGggVVRGLTggYW5kIFVURi0xNiBpbnB1dC4KK3ZvaWQgcnVuQ29udmVydGVy
KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29u
dmVydGVyKiBjb252ZXJ0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGNvbnZl
cnRlci0+Q29udmVydEZyb21VVEYxNigmc3BlY1txdWVyeS5iZWdpbigpXSwgcXVlcnkubGVuZ3Ro
KCksIG91dHB1dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lk
IGRvQ29udmVydFRvUXVlcnlFbmNvZGluZyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBDaGFyc2V0Q29udmVydGVyKiBjb252ZXJ0ZXIsIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIGlmIChpc0FsbEFTQ0lJKHNwZWMsIHF1ZXJ5KSkg
eworICAgICAgICAvLyBFYXN5OiB0aGUgaW5wdXQgY2FuIGp1c3QgYXBwZW5kZWQgd2l0aCBubyBj
aGFyYWN0ZXIgc2V0IGNvbnZlcnNpb25zLgorICAgICAgICBhcHBlbmRSYXc4Qml0UXVlcnlTdHJp
bmcoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBvdXRwdXQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEhhcmRlcjogY29udmVydCB0byB0aGUgcHJvcGVyIGVuY29kaW5n
IGZpcnN0LgorICAgICAgICBpZiAoY29udmVydGVyKSB7CisgICAgICAgICAgICAvLyBSdW4gdGhl
IGNvbnZlcnRlciB0byBnZXQgYW4gOC1iaXQgc3RyaW5nLCB0aGVuIGFwcGVuZCBpdCwgZXNjYXBp
bmcKKyAgICAgICAgICAgIC8vIG5lY2Vzc2FyeSB2YWx1ZXMuCisgICAgICAgICAgICBSYXdVUkxC
dWZmZXI8Y2hhcj4gZWlnaHRCaXRRdWVyeVN0cmluZzsKKyAgICAgICAgICAgIHJ1bkNvbnZlcnRl
cihzcGVjLCBxdWVyeSwgY29udmVydGVyLCBlaWdodEJpdFF1ZXJ5U3RyaW5nKTsKKyAgICAgICAg
ICAgIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZyhlaWdodEJpdFF1ZXJ5U3RyaW5nLmRhdGEoKSwg
ZWlnaHRCaXRRdWVyeVN0cmluZy5sZW5ndGgoKSwgb3V0cHV0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE5vIGNvbnZlcnRlciwgZG8gb3VyIG93biBVVEYtOCBjb252ZXJzaW9u
LgorICAgICAgICAgICAgYXBwZW5kU3RyaW5nT2ZUeXBlKCZzcGVjW3F1ZXJ5LmJlZ2luKCldLCBx
dWVyeS5sZW5ndGgoKSwgVVJMQ2hhcmFjdGVyVHlwZXM6OlF1ZXJ5Q2hhcmFjdGVyLCBvdXRwdXQp
OworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgordm9pZCBkb0Nhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9u
ZW50JiBvdXRwdXRRdWVyeUNvbXBvbmVudCkKK3sKKyAgICBpZiAocXVlcnkubGVuZ3RoKCkgPCAw
KSB7CisgICAgICAgIG91dHB1dFF1ZXJ5Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXRwdXQuYXBwZW5kKCc/Jyk7CisgICAgb3V0cHV0
UXVlcnlDb21wb25lbnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKKworICAgIGRvQ29udmVy
dFRvUXVlcnlFbmNvZGluZzxDaGFyYWN0ZXJUeXBlPihzcGVjLCBxdWVyeSwgY29udmVydGVyLCBv
dXRwdXQpOworCisgICAgb3V0cHV0UXVlcnlDb21wb25lbnQuc2V0TGVuZ3RoKG91dHB1dC5sZW5n
dGgoKSAtIG91dHB1dFF1ZXJ5Q29tcG9uZW50LmJlZ2luKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZQorCit2b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgcXVlcnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCogb3V0cHV0
UXVlcnlDb21wb25lbnQpCit7CisgICAgZG9DYW5vbmljYWxpemVRdWVyeShzcGVjLCBxdWVyeSwg
Y29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRRdWVyeUNvbXBvbmVudCk7Cit9CisKK3ZvaWQgQ2Fu
b25pY2FsaXplUXVlcnkoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVl
cnksIENoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCogb3V0cHV0UXVlcnlDb21wb25l
bnQpCit7CisgICAgZG9DYW5vbmljYWxpemVRdWVyeShzcGVjLCBxdWVyeSwgY29udmVydGVyLCBv
dXRwdXQsICpvdXRwdXRRdWVyeUNvbXBvbmVudCk7Cit9CisKK3ZvaWQgQ29udmVydFVURjE2VG9R
dWVyeUVuY29kaW5nKGNvbnN0IFVDaGFyKiBpbnB1dCwgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVy
eSwgQ2hhcnNldENvbnZlcnRlciogY29udmVydGVyLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkK
K3sKKyAgICBkb0NvbnZlcnRUb1F1ZXJ5RW5jb2Rpbmc8VUNoYXI+KGlucHV0LCBxdWVyeSwgY29u
dmVydGVyLCBvdXRwdXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25SZWxhdGl2ZS5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uUmVsYXRpdmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1NjRlYTM5NGY5
YjdhNGFhODNlYTAzZTRjMTllODYxNjJhMWZjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUmVsYXRpdmUuY3BwCkBAIC0wLDAgKzEsNTcyIEBACisv
KgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBDYW5vbmljYWxp
emVyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIGFuZCByZXNvbHZpbmcgcmVsYXRpdmUgVVJM
cy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVSTENhbm9uLmgiCisKKyNpbmNs
dWRlICJVUkxDYW5vbkludGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUg
IlVSTFBhcnNlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJVUkxVdGlsSW50ZXJuYWwuaCIKKworI2lm
IFVTRShXVEZVUkwpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMQ2Fub25pY2Fs
aXplciB7CisKK25hbWVzcGFjZSB7CisKKy8vIEZpcmVmb3ggZG9lcyBhIGNhc2Utc2Vuc2l0aXZl
IGNvbXBhcmUgKHdoaWNoIGlzIHByb2JhYmx5IHdyb25nLS1Nb3ppbGxhIGJ1ZworLy8gMzc5MDM0
KSwgd2hlcmVhcyBJRSBpcyBjYXNlLWluc2Vuc2V0aXZlLgorLy8KKy8vIFdlIGNob29zZSB0byBi
ZSBtb3JlIHBlcm1pc3NpdmUgbGlrZSBJRS4gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dAor
Ly8gdW5lc2NhcGluZyBvciBhbnl0aGluZyBoZXJlOiBuZWl0aGVyIElFIG9yIEZpcmVmb3ggYWxs
b3cgdGhpcy4gV2UgYWxzbworLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbnZhbGlkIHNj
aGVtZSBjaGFyYWN0ZXJzIHNpbmNlIHdlIGFyZSBjb21wYXJpbmcKKy8vIGFnYWluc3QgdGhlIGNh
bm9uaWNhbCBzY2hlbWUgb2YgdGhlIGJhc2UuCisvLworLy8gVGhlIGJhc2UgVVJMIHNob3VsZCBh
bHdheXMgYmUgY2Fub25pY2FsLCB0aGVyZWZvcmUgaXMgQVNDSUkuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDSEFSPgorYm9vbCBBcmVTY2hlbWVzRXF1YWwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgYmFzZVNjaGVtZSwKKyAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENIQVIqIGNtcCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVS
TENvbXBvbmVudCYgY21wU2NoZW1lKQoreworICAgIGlmIChiYXNlU2NoZW1lLmxlbmd0aCgpICE9
IGNtcFNjaGVtZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYmFzZVNjaGVtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIC8vIFdlIGFz
c3VtZSB0aGUgYmFzZSBpcyBhbHJlYWR5IGNhbm9uaWNhbCwgc28gd2UgZG9uJ3QgaGF2ZSB0bwor
ICAgICAgICAvLyBjYW5vbmljYWxpemUgaXQuCisgICAgICAgIGlmIChjYW5vbmljYWxTY2hlbWVD
aGFyKGNtcFtjbXBTY2hlbWUuYmVnaW4oKSArIGldKSAhPQorICAgICAgICAgICAgYmFzZVtiYXNl
U2NoZW1lLmJlZ2luKCkgKyBpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBPUyhXSU5ET1dTKQorLy8gSGVyZSwgd2UgYWxzbyBh
bGxvdyBXaW5kb3dzIHBhdGhzIHRvIGJlIHJlcHJlc2VudGVkIGFzICIvQzovIiBzbyB3ZSBjYW4g
YmUKKy8vIGNvbnNpc3RlbnQgYWJvdXQgVVJMIHBhdGhzIGJlZ2lubmluZyB3aXRoIHNsYXNoZXMu
IFRoaXMgZnVuY3Rpb24gaXMgbGlrZQorLy8gRG9lc0JlZ2luV2luZG93c0RyaXZlUGF0aCBleGNl
cHQgdGhhdCBpdCBhbHNvIHJlcXVpcmVzIGEgc2xhc2ggYXQgdGhlCisvLyBiZWdpbm5pbmcuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgorYm9vbCBkb2VzQmVnaW5TbGFzaFdpbmRvd3NEcml2ZVNw
ZWMoY29uc3QgQ0hBUiogc3BlYywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgc3BlY0xlbmd0aCkKK3sK
KyAgICBpZiAoc3RhcnRPZmZzZXQgPj0gc3BlY0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBVUkxQYXJzZXI6OmlzVVJMU2xhc2goc3BlY1tzdGFydE9mZnNldF0pICYm
IFVSTFBhcnNlcjo6ZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBzdGFydE9mZnNldCAr
IDEsIHNwZWNMZW5ndGgpOworfQorCisjZW5kaWYgLy8gT1MoV0lORE9XUykKKworLy8gU2VlIGlz
UmVsYXRpdmVVUkwgaW4gdGhlIGhlYWRlciBmaWxlIGZvciB1c2FnZS4KK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Citib29sIGRvSXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNl
LCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IENoYXJhY3RlclR5cGUqIHVybCwgaW50IHVybExlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCYg
aXNSZWxhdGl2ZSwgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICBpc1Jl
bGF0aXZlID0gZmFsc2U7IC8vIFNvIHdlIGNhbiBkZWZhdWx0IGxhdGVyIHRvIG5vdCByZWxhdGl2
ZS4KKworICAgIC8vIFRyaW0gd2hpdGVzcGFjZSBhbmQgY29uc3RydWN0IGEgbmV3IHJhbmdlIGZv
ciB0aGUgc3Vic3RyaW5nLgorICAgIGludCBiZWdpbiA9IDA7CisgICAgVVJMUGFyc2VyOjp0cmlt
VVJMKHVybCwgYmVnaW4sIHVybExlbmd0aCk7CisgICAgaWYgKGJlZ2luID49IHVybExlbmd0aCkg
eworICAgICAgICAvLyBFbXB0eSBVUkxzIGFyZSByZWxhdGl2ZSwgYnV0IGRvIG5vdGhpbmcuCisg
ICAgICAgIHJlbGF0aXZlQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50KGJlZ2luLCAwKTsKKyAgICAg
ICAgaXNSZWxhdGl2ZSA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworI2lm
IE9TKFdJTkRPV1MpCisgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHBhdGhzIGxpa2UgIkM6XGZvbyIg
c28gdGhleSBjYW4gbGluayBkaXJlY3RseSB0byB0aGUKKyAgICAvLyBmaWxlIG9uIFdpbmRvd3Mg
KElFIGNvbXBhdGFiaWxpdHkpLiBUaGUgc2VjdXJpdHkgZG9tYWluIHN0dWZmIHNob3VsZAorICAg
IC8vIHByZXZlbnQgYSBsaW5rIGxpa2UgdGhpcyBmcm9tIGFjdHVhbGx5IGJlaW5nIGZvbGxvd2Vk
IGlmIGl0cyBvbiBhCisgICAgLy8gd2ViIHBhZ2UuCisgICAgLy8KKyAgICAvLyBXZSB0cmVhdCAi
QzovZm9vIiBhcyBhbiBhYnNvbHV0ZSBVUkwuIFdlIGNhbiBnbyBhaGVhZCBhbmQgdHJlYXQgIi9j
Oi8iCisgICAgLy8gYXMgcmVsYXRpdmUsIGFzIHRoaXMgd2lsbCBqdXN0IHJlcGxhY2UgdGhlIHBh
dGggd2hlbiB0aGUgYmFzZSBzY2hlbWUKKyAgICAvLyBpcyBhIGZpbGUgYW5kIHRoZSBhbnN3ZXIg
d2lsbCBzdGlsbCBiZSBjb3JyZWN0LgorICAgIC8vCisgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3Qg
YmFja3NsYXNoZXMgd2hlbiBkZXRlY3RpbmcgVU5DIHNpbmNlIHR3byBmb3J3YXJkCisgICAgLy8g
c2hhc2hlcyBzaG91bGQgYmUgdHJlYXRlZCBhIGEgcmVsYXRpdmUgVVJMIHdpdGggYSBob3N0bmFt
ZS4KKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHVybCwgYmVn
aW4sIHVybExlbmd0aCkgfHwgVVJMUGFyc2VyOjpkb2VzQmVnaW5VTkNQYXRoKHVybCwgYmVnaW4s
IHVybExlbmd0aCwgdHJ1ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmIC8vIE9TKFdJ
TkRPV1MpCisKKyAgICAvLyBTZWUgaWYgd2UndmUgZ290IGEgc2NoZW1lLCBpZiBub3QsIHdlIGtu
b3cgdGhpcyBpcyBhIHJlbGF0aXZlIFVSTC4KKyAgICAvLyBCVVQ6IEp1c3QgYmVjYXVzZSB3ZSBo
YXZlIGEgc2NoZW1lLCBkb2Vzbid0IG1ha2UgaXQgYWJzb2x1dGUuCisgICAgLy8gImh0dHA6Zm9v
Lmh0bWwiIGlzIGEgcmVsYXRpdmUgVVJMIHdpdGggcGF0aCAiZm9vLmh0bWwiLiBJZiB0aGUgc2No
ZW1lIGlzCisgICAgLy8gZW1wdHksIHdlIHRyZWF0IGl0IGFzIHJlbGF0aXZlICgiOmZvbyIpIGxp
a2UgSUUgZG9lcy4KKyAgICBVUkxDb21wb25lbnQgc2NoZW1lOworICAgIGlmICghVVJMUGFyc2Vy
OjpFeHRyYWN0U2NoZW1lKHVybCwgdXJsTGVuZ3RoLCAmc2NoZW1lKSB8fCAhc2NoZW1lLmxlbmd0
aCgpKSB7CisgICAgICAgIC8vIERvbid0IGFsbG93IHJlbGF0aXZlIFVSTHMgaWYgdGhlIGJhc2Ug
c2NoZW1lIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKyAgICAgICAgaWYgKCFpc0Jhc2VIaWVyYXJjaGlj
YWwpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVsYXRpdmVDb21wb25l
bnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShiZWdpbiwgdXJsTGVuZ3RoKTsKKyAgICAgICAg
aXNSZWxhdGl2ZSA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8v
IElmIHRoZSBzY2hlbWUgaXNuJ3QgdmFsaWQsIHRoZW4gaXQncyByZWxhdGl2ZS4KKyAgICBpbnQg
c2NoZW1lRW5kID0gc2NoZW1lLmVuZCgpOworICAgIGZvciAoaW50IGkgPSBzY2hlbWUuYmVnaW4o
KTsgaSA8IHNjaGVtZUVuZDsgaSsrKSB7CisgICAgICAgIGlmICghY2Fub25pY2FsU2NoZW1lQ2hh
cih1cmxbaV0pKSB7CisgICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVu
dDo6ZnJvbVJhbmdlKGJlZ2luLCB1cmxMZW5ndGgpOworICAgICAgICAgICAgaXNSZWxhdGl2ZSA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIElmIHRoZSBzY2hlbWUgaXMgbm90IHRoZSBzYW1lLCB0aGVuIHdlIGNhbid0IGNvdW50IGl0
IGFzIHJlbGF0aXZlLgorICAgIGlmICghQXJlU2NoZW1lc0VxdWFsKGJhc2UsIGJhc2VQYXJzZWQu
c2NoZW1lLCB1cmwsIHNjaGVtZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2hl
biB0aGUgc2NoZW1lIHRoYXQgdGhleSBib3RoIHNoYXJlIGlzIG5vdCBoaWVyYXJjaGljYWwsIHRy
ZWF0IHRoZQorICAgIC8vIGluY29taW5nIHNjaGVtZSBhcyBhYnNvbHV0ZSAodGhpcyB3YXkgd2l0
aCB0aGUgYmFzZSBvZiAiZGF0YTpmb28iLAorICAgIC8vICJkYXRhOmJhciIgd2lsbCBiZSByZXBv
cnRlZCBhcyBhYnNvbHV0ZS4KKyAgICBpZiAoIWlzQmFzZUhpZXJhcmNoaWNhbCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpbnQgY29sb25PZmZzZXQgPSBzY2hlbWUuZW5kKCk7CisKKyAg
ICAvLyBJZiBpdCdzIGEgZmlsZXN5c3RlbSBVUkwsIHRoZSBvbmx5IHZhbGlkIHdheSB0byBtYWtl
IGl0IHJlbGF0aXZlIGlzIG5vdCB0bworICAgIC8vIHN1cHBseSBhIHNjaGVtZS4gVGhlcmUncyBu
byBlcXVpdmFsZW50IHRvIGUuZy4gaHR0cDppbmRleC5odG1sLgorICAgIGlmIChVUkxVdGlsaXRp
ZXM6OkNvbXBhcmVTY2hlbWVDb21wb25lbnQodXJsLCBzY2hlbWUsICJmaWxlc3lzdGVtIikpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRXh0cmFjdFNjaGVtZSBndWFyYW50ZWVzIHRo
YXQgdGhlIGNvbG9uIGltbWVkaWF0ZWx5IGZvbGxvd3Mgd2hhdCBpdAorICAgIC8vIGNvbnNpZGVy
cyB0byBiZSB0aGUgc2NoZW1lLiBjb3VudENvbnNlY3V0aXZlU2xhc2hlcyB3aWxsIGhhbmRsZSB0
aGUKKyAgICAvLyBjYXNlIHdoZXJlIHRoZSBiZWdpbiBvZmZzZXQgaXMgdGhlIGVuZCBvZiB0aGUg
aW5wdXQuCisgICAgaW50IG51bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVT
bGFzaGVzKHVybCwgY29sb25PZmZzZXQgKyAxLCB1cmxMZW5ndGgpOworCisgICAgaWYgKCFudW1T
bGFzaGVzIHx8IG51bVNsYXNoZXMgPT0gMSkgeworICAgICAgICAvLyBObyBzbGFzaGVzIG1lYW5z
IGl0J3MgYSByZWxhdGl2ZSBwYXRoIGxpa2UgImh0dHA6Zm9vLmh0bWwiLiBPbmUgc2xhc2gKKyAg
ICAgICAgLy8gaXMgYW4gYWJzb2x1dGUgcGF0aC4gImh0dHA6L2hvbWUvZm9vLmh0bWwiCisgICAg
ICAgIGlzUmVsYXRpdmUgPSB0cnVlOworICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENv
bXBvbmVudDo6ZnJvbVJhbmdlKGNvbG9uT2Zmc2V0ICsgMSwgdXJsTGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gVHdvIG9yIG1vcmUgc2xhc2hlcyBhZnRlciB0
aGUgc2NoZW1lIHdlIHRyZWF0IGFzIGFic29sdXRlLgorICAgIHJldHVybiB0cnVlOworfQorCisv
LyBDb3BpZXMgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtiZWdpbiwgZW5kKSBvZiB8c3Bl
Y3wgdG8gdGhlIG91dHB1dCwKKy8vIHVwIHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3Qgc2xh
c2guIFRoZXJlIHNob3VsZCBiZSBhIHNsYXNoIGluIHRoZQorLy8gcmFuZ2UsIGlmIG5vdCwgbm90
aGluZyB3aWxsIGJlIGNvcGllZC4KKy8vCisvLyBUaGUgaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBj
YW5vbmljYWwsIHNvIHdlIHNlYXJjaCBvbmx5IGZvciBleGFjdCBzbGFzaGVzCisvLyBhbmQgbm90
IGJhY2tzbGFzaGVzIGFzIHdlbGwuIFdlIGFsc28ga25vdyB0aGF0IGl0J3MgQVNDSUkuCit2b2lk
IENvcHlUb0xhc3RTbGFzaChjb25zdCBjaGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQoreworICAgIC8vIEZpbmQgdGhlIGxhc3Qgc2xhc2guCisg
ICAgaW50IGxhc3RTbGFzaCA9IC0xOworICAgIGZvciAoaW50IGkgPSBlbmQgLSAxOyBpID49IGJl
Z2luOyAtLWkpIHsKKyAgICAgICAgaWYgKHNwZWNbaV0gPT0gJy8nKSB7CisgICAgICAgICAgICBs
YXN0U2xhc2ggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKGxhc3RTbGFzaCA8IDApCisgICAgICAgIHJldHVybjsgLy8gTm8gc2xhc2guCisKKyAgICAv
LyBDb3B5LgorICAgIGZvciAoaW50IGkgPSBiZWdpbjsgaSA8PSBsYXN0U2xhc2g7ICsraSkKKyAg
ICAgICAgb3V0cHV0LmFwcGVuZChzcGVjW2ldKTsKK30KKworLy8gQ29waWVzIGEgc2luZ2xlIGNv
bXBvbmVudCBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIG91dHB1dC4gVGhpcyBpcyB1c2VkCisvLyB3
aGVuIHJlc29sdmluZyByZWxhdGl2ZSBVUkxzIGFuZCBhIGdpdmVuIGNvbXBvbmVudCBpcyB1bmNo
YW5nZWQuIFNpbmNlIHRoZQorLy8gc291cmNlIHNob3VsZCBhbHJlYWR5IGJlIGNhbm9uaWNhbCwg
d2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLAorLy8gYW5kIHRoZSBpbnB1dCBp
cyBBU0NJSS4KK3ZvaWQgQ29weU9uZUNvbXBvbmVudChjb25zdCBjaGFyKiBzb3VyY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBzb3VyY2VDb21wb25lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBvdXRwdXRDb21wb25lbnQpCit7CisgICAgaWYgKHNv
dXJjZUNvbXBvbmVudC5sZW5ndGgoKSA8IDApIHsKKyAgICAgICAgLy8gVGhpcyBjb21wb25lbnQg
aXMgbm90IHByZXNlbnQuCisgICAgICAgICpvdXRwdXRDb21wb25lbnQgPSBVUkxDb21wb25lbnQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dHB1dENvbXBvbmVudC0+c2V0QmVn
aW4ob3V0cHV0Lmxlbmd0aCgpKTsKKyAgICBpbnQgc291cmNlRW5kID0gc291cmNlQ29tcG9uZW50
LmVuZCgpOworICAgIGZvciAoaW50IGkgPSBzb3VyY2VDb21wb25lbnQuYmVnaW4oKTsgaSA8IHNv
dXJjZUVuZDsgaSsrKQorICAgICAgICBvdXRwdXQuYXBwZW5kKHNvdXJjZVtpXSk7CisgICAgb3V0
cHV0Q29tcG9uZW50LT5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0Q29tcG9uZW50
LT5iZWdpbigpKTsKK30KKworI2lmIE9TKFdJTkRPV1MpCisKKy8vIENhbGxlZCBvbiBXaW5kb3dz
IHdoZW4gdGhlIGJhc2UgVVJMIGlzIGEgZmlsZSBVUkwsIHRoaXMgd2lsbCBjb3B5IHRoZSAiQzoi
CisvLyB0byB0aGUgb3V0cHV0LCBpZiB0aGVyZSBpcyBhIGRyaXZlIGxldHRlciBhbmQgaWYgdGhh
dCBkcml2ZSBsZXR0ZXIgaXMgbm90CisvLyBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSByZWxhdGl2
ZSBVUkwuIE90aGVyd2lzZSwgZG8gbm90aGluZy4KKy8vCisvLyBJdCB3aWxsIHJldHVybiB0aGUg
aW5kZXggb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlCisvLyBi
YXNlIHRvIGJlIHByb2Nlc3NlZDogaWYgdGhlcmUgaXMgYSAiQzoiLCB0aGUgc2xhc2ggYWZ0ZXIg
aXQsIG9yIGlmCisvLyB0aGVyZSBpcyBubyBkcml2ZSBsZXR0ZXIsIHRoZSBzbGFzaCBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBwYXRoLCBvcgorLy8gdGhlIGVuZCBvZiB0aGUgYmFzZS4gVGhpcyBj
YW4gYmUgdXNlZCBhcyB0aGUgc3RhcnRpbmcgb2Zmc2V0IGZvciBmdXJ0aGVyCisvLyBwYXRoIHBy
b2Nlc3NpbmcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgoraW50IENvcHlCYXNlRHJpdmVTcGVj
SWZOZWNlc3NhcnkoY29uc3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBiYXNlUGF0aEJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGJhc2VQYXRoRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ0hBUiogcmVsYXRpdmVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgcGF0aFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJl
bGF0aXZlVXJsTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAgaWYgKGJhc2VQYXRoQmVnaW4gPj0gYmFzZVBhdGhF
bmQpCisgICAgICAgIHJldHVybiBiYXNlUGF0aEJlZ2luOyAvLyBObyBwYXRoLgorCisgICAgLy8g
SWYgdGhlIHJlbGF0aXZlIGJlZ2lucyB3aXRoIGEgZHJpdmUgc3BlYywgZG9uJ3QgZG8gYW55dGhp
bmcuIFRoZSBleGlzdGluZworICAgIC8vIGRyaXZlIHNwZWMgaW4gdGhlIGJhc2Ugd2lsbCBiZSBy
ZXBsYWNlZC4KKyAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJl
bGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGF0aFN0YXJ0LCByZWxhdGl2ZVVybExlbmd0aCkpIHsKKyAgICAgICAgcmV0dXJuIGJhc2VQYXRo
QmVnaW47IC8vIFJlbGF0aXZlIFVSTCBwYXRoIGlzICJDOi9mb28iCisgICAgfQorCisgICAgLy8g
VGhlIHBhdGggc2hvdWxkIGJlZ2luIHdpdGggYSBzbGFzaCAoYXMgYWxsIGNhbm9uaWNhbCBwYXRo
cyBkbykuIFdlIGNoZWNrCisgICAgLy8gaWYgaXQgaXMgZm9sbG93ZWQgYnkgYSBkcml2ZSBsZXR0
ZXIgYW5kIGNvcHkgaXQuCisgICAgaWYgKGRvZXNCZWdpblNsYXNoV2luZG93c0RyaXZlU3BlYyhi
YXNlVVJMLCBiYXNlUGF0aEJlZ2luLCBiYXNlUGF0aEVuZCkpIHsKKyAgICAgICAgLy8gQ29weSB0
aGUgdHdvLWNoYXJhY3RlciBkcml2ZSBzcGVjIHRvIHRoZSBvdXRwdXQuIEl0IHdpbGwgbm93IGxv
b2sgbGlrZQorICAgICAgICAvLyAiZmlsZTovLy9DOiIgc28gdGhlIHJlc3Qgb2YgaXQgY2FuIGJl
IHRyZWF0ZWQgbGlrZSBhIHN0YW5kYXJkIHBhdGguCisgICAgICAgIG91dHB1dC5hcHBlbmQoJy8n
KTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZChiYXNlVVJMW2Jhc2VQYXRoQmVnaW4gKyAxXSk7Cisg
ICAgICAgIG91dHB1dC5hcHBlbmQoYmFzZVVSTFtiYXNlUGF0aEJlZ2luICsgMl0pOworICAgICAg
ICByZXR1cm4gYmFzZVBhdGhCZWdpbiArIDM7CisgICAgfQorCisgICAgcmV0dXJuIGJhc2VQYXRo
QmVnaW47Cit9CisKKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQorCisvLyBBIHN1YnJvdXRpbmUgb2Yg
ZG9SZXNvbHZlUmVsYXRpdmVVUkwsIHRoaXMgcmVzb2x2ZXMgdGhlIFVSTCBrbm93bmluZyB0aGF0
CisvLyB0aGUgaW5wdXQgaXMgYSByZWxhdGl2ZSBwYXRoIG9yIGxlc3MgKHF5dWVyeSBvciByZWYp
LgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgZG9SZXNvbHZlUmVsYXRpdmVQYXRoKGNv
bnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLyog
YmFzZUlzRmlsZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJl
bGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRD
b252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICAv
LyBXZSBrbm93IHRoZSBhdXRob3JpdHkgc2VjdGlvbiBkaWRuJ3QgY2hhbmdlLCBjb3B5IGl0IHRv
IHRoZSBvdXRwdXQuIFdlCisgICAgLy8gYWxzbyBrbm93IHdlIGhhdmUgYSBwYXRoIHNvIGNhbiBj
b3B5IHVwIHRvIHRoZXJlLgorICAgIFVSTENvbXBvbmVudCBwYXRoLCBxdWVyeSwgcmVmOworICAg
IFVSTFBhcnNlcjo6cGFyc2VQYXRoSW50ZXJuYWwocmVsYXRpdmVVUkwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlZik7CisgICAgLy8g
Q2Fub25pY2FsIFVSTHMgYWx3YXlzIGhhdmUgYSBwYXRoLCBzbyB3ZSBjYW4gdXNlIHRoYXQgb2Zm
c2V0LgorICAgIG91dHB1dC5hcHBlbmQoYmFzZVVSTCwgYmFzZVBhcnNlZC5wYXRoLmJlZ2luKCkp
OworCisgICAgaWYgKHBhdGgubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIC8vIFRoZSBwYXRoIGlz
IHJlcGxhY2VkIG9yIG1vZGlmaWVkLgorICAgICAgICBpbnQgdHJ1ZVBhdGhCZWdpbiA9IG91dHB1
dC5sZW5ndGgoKTsKKworICAgICAgICAvLyBGb3IgZmlsZTogVVJMcyBvbiBXaW5kb3dzLCB3ZSBk
b24ndCB3YW50IHRvIHRyZWF0IHRoZSBkcml2ZSBsZXR0ZXIgYW5kCisgICAgICAgIC8vIGNvbG9u
IGFzIHBhcnQgb2YgdGhlIHBhdGggZm9yIHJlbGF0aXZlIGZpbGUgcmVzb2x1dGlvbiB3aGVuIHRo
ZQorICAgICAgICAvLyBpbmNvbWluZyBVUkwgZG9lcyBub3QgcHJvdmlkZSBhIGRyaXZlIHNwZWMu
IFdlIHNhdmUgdGhlIHRydWUgcGF0aAorICAgICAgICAvLyBiZWdpbm5pbmcgc28gd2UgY2FuIGZp
eCBpdCB1cCBhZnRlciB3ZSBhcmUgZG9uZS4KKyAgICAgICAgaW50IGJhc2VQYXRoQmVnaW4gPSBi
YXNlUGFyc2VkLnBhdGguYmVnaW4oKTsKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICBpZiAoYmFz
ZUlzRmlsZSkgeworICAgICAgICAgICAgYmFzZVBhdGhCZWdpbiA9IENvcHlCYXNlRHJpdmVTcGVj
SWZOZWNlc3NhcnkoYmFzZVVSTCwgYmFzZVBhcnNlZC5wYXRoLmJlZ2luKCksIGJhc2VQYXJzZWQu
cGF0aC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxh
dGl2ZUNvbXBvbmVudC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisgICAgICAgICAgICAvLyBOb3cgdGhlIG91
dHB1dCBsb29rcyBsaWtlIGVpdGhlciAiZmlsZTovLyIgb3IgImZpbGU6Ly8vQzoiCisgICAgICAg
ICAgICAvLyBhbmQgd2UgY2FuIHN0YXJ0IGFwcGVuZGluZyB0aGUgcmVzdCBvZiB0aGUgcGF0aC4g
fGJhc2VQYXRoQmVnaW58CisgICAgICAgICAgICAvLyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciBp
biB0aGUgYmFzZSB0aGF0IGNvbWVzIG5leHQuCisgICAgICAgIH0KKyNlbmRpZiAvLyBPUyhXSU5E
T1dTKQorCisgICAgICAgIGlmIChVUkxQYXJzZXI6OmlzVVJMU2xhc2gocmVsYXRpdmVVUkxbcGF0
aC5iZWdpbigpXSkpIHsKKyAgICAgICAgICAgIC8vIEVhc3kgY2FzZTogdGhlIHBhdGggaXMgYW4g
YWJzb2x1dGUgcGF0aCBvbiB0aGUgc2VydmVyLCBzbyB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGp1
c3QgcmVwbGFjZSBldmVyeXRoaW5nIGZyb20gdGhlIHBhdGggb24gd2l0aCB0aGUgbmV3IHZlcnNp
b25zLgorICAgICAgICAgICAgLy8gU2luY2UgdGhlIGlucHV0IHNob3VsZCBiZSBjYW5vbmljYWwg
aGllcmFyY2hpY2FsIFVSTCwgd2Ugc2hvdWxkCisgICAgICAgICAgICAvLyBhbHdheXMgaGF2ZSBh
IHBhdGguCisgICAgICAgICAgICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgocmVsYXRpdmVV
UkwsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LCAmb3V0cHV0UGFyc2VkLT5wYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFJlbGF0aXZlIHBhdGgsIHJlcGxhY2UgdGhlIHF1ZXJ5LCBhbmQgcmVmZXJlbmNlLiBXZSB0YWtl
IHRoZQorICAgICAgICAgICAgLy8gb3JpZ2luYWwgcGF0aCB3aXRoIHRoZSBmaWxlIHBhcnQgc3Ry
aXBwZWQsIGFuZCBhcHBlbmQgdGhlIG5ldyBwYXRoLgorICAgICAgICAgICAgLy8gVGhlIGNhbm9u
aWNhbGl6ZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzb2x2aW5nICIuLiIgYW5kICIuIgorICAgICAg
ICAgICAgaW50IHBhdGhCZWdpbiA9IG91dHB1dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIENvcHlU
b0xhc3RTbGFzaChiYXNlVVJMLCBiYXNlUGF0aEJlZ2luLCBiYXNlUGFyc2VkLnBhdGguZW5kKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KTsKKyAgICAgICAgICAgIHN1Y2Nl
c3MgJj0gQ2Fub25pY2FsaXplUGFydGlhbFBhdGgocmVsYXRpdmVVUkwsIHBhdGgsIHBhdGhCZWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
KTsKKyAgICAgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKHBhdGhCZWdpbiwgb3V0cHV0Lmxlbmd0aCgpKTsKKworICAgICAgICAgICAgLy8gQ29weSB0
aGUgcmVzdCBvZiB0aGUgc3R1ZmYgYWZ0ZXIgdGhlIHBhdGggZnJvbSB0aGUgcmVsYXRpdmUgcGF0
aC4KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmlzaCB3aXRoIHRoZSBxdWVyeSBhbmQgcmVm
ZXJlbmNlIHBhcnQgKHRoZXNlIGNhbid0IGZhaWwpLgorICAgICAgICBDYW5vbmljYWxpemVRdWVy
eShyZWxhdGl2ZVVSTCwgcXVlcnksIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICZvdXRwdXRQYXJz
ZWQtPnF1ZXJ5KTsKKyAgICAgICAgY2Fub25pY2FsaXplRnJhZ21lbnQocmVsYXRpdmVVUkwsIHJl
Ziwgb3V0cHV0LCBvdXRwdXRQYXJzZWQtPmZyYWdtZW50KTsKKworICAgICAgICAvLyBGaXggdGhl
IHBhdGggYmVnaW5uaW5nIHRvIGFkZCBiYWNrIHRoZSAiQzoiIHdlIG1heSBoYXZlIHdyaXR0ZW4g
YWJvdmUuCisgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKHRydWVQYXRoQmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dFBhcnNlZC0+cGF0aC5lbmQoKSk7CisgICAgICAgIHJldHVy
biBzdWNjZXNzOworICAgIH0KKworICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGUgcGF0aCBpcyB1
bmNoYW5nZWQ6IGNvcHkgdG8gb3V0cHV0LgorICAgIENvcHlPbmVDb21wb25lbnQoYmFzZVVSTCwg
YmFzZVBhcnNlZC5wYXRoLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnBhdGgpOworCisgICAgaWYg
KHF1ZXJ5LmlzVmFsaWQoKSkgeworICAgICAgICAvLyBKdXN0IHRoZSBxdWVyeSBzcGVjaWZpZWQs
IHJlcGxhY2UgdGhlIHF1ZXJ5IGFuZCByZWZlcmVuY2UgKGlnbm9yZQorICAgICAgICAvLyBmYWls
dXJlcyBmb3IgcmVmcykKKyAgICAgICAgQ2Fub25pY2FsaXplUXVlcnkocmVsYXRpdmVVUkwsIHF1
ZXJ5LCBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAm
b3V0cHV0UGFyc2VkLT5xdWVyeSk7CisgICAgICAgIGNhbm9uaWNhbGl6ZUZyYWdtZW50KHJlbGF0
aXZlVVJMLCByZWYsIG91dHB1dCwgb3V0cHV0UGFyc2VkLT5mcmFnbWVudCk7CisgICAgICAgIHJl
dHVybiBzdWNjZXNzOworICAgIH0KKworICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGUgcXVlcnkg
aXMgdW5jaGFuZ2VkOiBjb3B5IHRvIG91dHB1dC4gTm90ZSB0aGF0IHRoZQorICAgIC8vIHJhbmdl
IG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgZG9lc24ndCBpbmNsdWRlIHRoZSBxdWVzdGlvbiBtYXJr
LCBzbyB3ZQorICAgIC8vIGhhdmUgdG8gYWRkIGl0IG1hbnVhbGx5IGlmIHRoZXJlIGlzIGEgY29t
cG9uZW50LgorICAgIGlmIChiYXNlUGFyc2VkLnF1ZXJ5LmlzVmFsaWQoKSkKKyAgICAgICAgb3V0
cHV0LmFwcGVuZCgnPycpOworICAgIENvcHlPbmVDb21wb25lbnQoYmFzZVVSTCwgYmFzZVBhcnNl
ZC5xdWVyeSwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7CisKKyAgICBpZiAocmVmLmlz
VmFsaWQoKSkgeworICAgICAgICAvLyBKdXN0IHRoZSByZWZlcmVuY2Ugc3BlY2lmaWVkOiByZXBs
YWNlIGl0IChpZ25vcmluZyBmYWlsdXJlcykuCisgICAgICAgIGNhbm9uaWNhbGl6ZUZyYWdtZW50
KHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwgb3V0cHV0UGFyc2VkLT5mcmFnbWVudCk7CisgICAg
ICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBhbHdheXMgaGF2
ZSBzb21ldGhpbmcgdG8gZG8gaW4gdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxlciBjaGVja3MKKyAg
ICAvLyB0aGF0IHNvbWUgY29tcG9uZW50IGlzIGJlaW5nIHJlcGxhY2VkLgorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBSZXNvbHZlcyBhIHJl
bGF0aXZlIFVSTCB0aGF0IGNvbnRhaW5zIGEgaG9zdC4gVHlwaWNhbGx5LCB0aGVzZSB3aWxsCisv
LyBiZSBvZiB0aGUgZm9ybSAiLy93d3cuYXBwbGUuY29tL2Zvby9iYXI/YmF6I2ZyYWdtZW50IiBh
bmQgdGhlIG9ubHkgdGhpbmcgd2hpY2gKKy8vIHNob3VsZCBiZSBrZXB0IGZyb20gdGhlIG9yaWdp
bmFsIFVSTCBpcyB0aGUgc2NoZW1lLgordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgZG9S
ZXNvbHZlUmVsYXRpdmVIb3N0KGNvbnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQoreworICAgIC8v
IFBhcnNlIHRoZSByZWxhdGl2ZSBVUkwsIGp1c3QgbGlrZSB3ZSB3b3VsZCBmb3IgYW55dGhpbmcg
Zm9sbG93aW5nIGEKKyAgICAvLyBzY2hlbWUuCisgICAgVVJMU2VnbWVudHMgcmVsYXRpdmVQYXJz
ZWQ7IC8vIEV2ZXJ5dGhpbmcgYnV0IHRoZSBzY2hlbWUgaXMgdmFsaWQuCisgICAgVVJMUGFyc2Vy
OjpwYXJzZUFmdGVyU2NoZW1lKCZyZWxhdGl2ZVVSTFtyZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigp
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQubGVu
Z3RoKCksIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbGF0aXZlUGFyc2VkKTsKKworICAgIC8vIE5vdyB3ZSBjYW4ganVzdCB1c2Ug
dGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRvIHJlcGxhY2UgYWxsIHRoZSBuZWNlc3NhcnkKKyAg
ICAvLyBwYXJ0cyBvZiB0aGUgb2xkIFVSTCB3aXRoIHRoZSBuZXcgb25lLgorICAgIFJlcGxhY2Vt
ZW50czxDSEFSPiByZXBsYWNlbWVudHM7CisgICAgcmVwbGFjZW1lbnRzLlNldFVzZXJuYW1lKHJl
bGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC51c2VybmFtZSk7CisgICAgcmVwbGFjZW1lbnRzLlNl
dFBhc3N3b3JkKHJlbGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5wYXNzd29yZCk7CisgICAgcmVw
bGFjZW1lbnRzLlNldEhvc3QocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLmhvc3QpOworICAg
IHJlcGxhY2VtZW50cy5TZXRQb3J0KHJlbGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5wb3J0KTsK
KyAgICByZXBsYWNlbWVudHMuU2V0UGF0aChyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQucGF0
aCk7CisgICAgcmVwbGFjZW1lbnRzLlNldFF1ZXJ5KHJlbGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNl
ZC5xdWVyeSk7CisgICAgcmVwbGFjZW1lbnRzLlNldFJlZihyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQ
YXJzZWQuZnJhZ21lbnQpOworCisgICAgcmV0dXJuIFJlcGxhY2VTdGFuZGFyZFVSTChiYXNlVVJM
LCBiYXNlUGFyc2VkLCByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworfQorCisvLyBSZXNvbHZl
cyBhIHJlbGF0aXZlIFVSTCB0aGF0IGhhcHBlbnMgdG8gYmUgYW4gYWJzb2x1dGUgZmlsZSBwYXRo
LiBFeGFtcGxlcworLy8gaW5jbHVkZTogIi8vaG9zdG5hbWUvcGF0aCIsICIvYzovZm9vIiwgYW5k
ICIvL2hvc3RuYW1lL2M6L2ZvbyIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
Ym9vbCBkb1Jlc29sdmVBYnNvbHV0ZUZpbGUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcmVsYXRpdmVV
UkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0
aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRl
ciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzJiBv
dXRwdXRQYXJzZWQpCit7CisgICAgLy8gUGFyc2UgdGhlIGZpbGUgVVJMLiBUaGUgZmlsZSBVUmwg
cGFyc2luZyBmdW5jdGlvbiB1c2VzIHRoZSBzYW1lIGxvZ2ljCisgICAgLy8gYXMgd2UgZG8gZm9y
IGRldGVybWluaW5nIGlmIHRoZSBmaWxlIGlzIGFic29sdXRlLCBpbiB3aGljaCBjYXNlIGl0IHdp
bGwKKyAgICAvLyBub3QgYm90aGVyIHRvIGxvb2sgZm9yIGEgc2NoZW1lLgorICAgIFVSTFNlZ21l
bnRzIHJlbGF0aXZlUGFyc2VkOworICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJMKCZyZWxhdGl2
ZVVSTFtyZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWxhdGl2ZUNvbXBvbmVudC5sZW5ndGgoKSwgJnJlbGF0aXZlUGFyc2VkKTsKKworICAg
IHJldHVybiBDYW5vbmljYWxpemVGaWxlVVJMKCZyZWxhdGl2ZVVSTFtyZWxhdGl2ZUNvbXBvbmVu
dC5iZWdpbigpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUNvbXBv
bmVudC5sZW5ndGgoKSwgcmVsYXRpdmVQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgJm91dHB1dFBhcnNlZCk7Cit9CisKKy8vIFRP
RE8oYnJldHR3KSB0cmVhdCB0d28gc2xhc2hlcyBhcyByb290IGxpa2UgTW96aWxsYSBmb3IgRlRQ
PwordGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KK2Jvb2wgZG9SZXNvbHZlUmVsYXRpdmVVUkwoY29u
c3QgY2hhciogYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2Vn
bWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmFzZUlz
RmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVsYXRpdmVVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVD
b21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCkKK3sKKyAgICAvLyBTdGFydGluZyBwb2ludCBmb3Igb3VyIG91dHB1dCBwYXJzZWQuIFdl
J2xsIGZpeCB3aGF0IHdlIGNoYW5nZS4KKyAgICAqb3V0cHV0UGFyc2VkID0gYmFzZVBhcnNlZDsK
KworICAgIC8vIFNhbml0eSBjaGVjazogdGhlIGlucHV0IHNob3VsZCBoYXZlIGEgaG9zdCBvciB3
ZSdsbCBicmVhayBiYWRseSBiZWxvdy4KKyAgICAvLyBXZSBjYW4gb25seSByZXNvbHZlIHJlbGF0
aXZlIFVSTHMgd2l0aCBiYXNlIFVSTHMgdGhhdCBoYXZlIGhvc3RzIGFuZAorICAgIC8vIHBhdGhz
IChldmVuIHRoZSBkZWZhdWx0IHBhdGggb2YgIi8iIGlzIE9LKS4KKyAgICAvLworICAgIC8vIFdl
IGFsbG93IGhvc3RzIHdpdGggbm8gbGVuZ3RoIHNvIHdlIGNhbiBoYW5kbGUgZmlsZSBVUkxzLCBm
b3IgZXhhbXBsZS4KKyAgICBpZiAoYmFzZVBhcnNlZC5wYXRoLmxlbmd0aCgpIDw9IDApIHsKKyAg
ICAgICAgLy8gT24gZXJyb3IsIHJldHVybiB0aGUgaW5wdXQgKHJlc29sdmluZyBhIHJlbGF0aXZl
IFVSTCBvbiBhIG5vbi1yZWxhdGl2ZQorICAgICAgICAvLyBiYXNlID0gdGhlIGJhc2UpLgorICAg
ICAgICBpbnQgYmFzZUxlbmd0aCA9IGJhc2VQYXJzZWQubGVuZ3RoKCk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYmFzZUxlbmd0aDsgaSsrKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChiYXNlVVJMW2ldKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChy
ZWxhdGl2ZUNvbXBvbmVudC5sZW5ndGgoKSA8PSAwKSB7CisgICAgICAgIC8vIEVtcHR5IHJlbGF0
aXZlIFVSTCwgbGVhdmUgdW5jaGFuZ2VkLCBvbmx5IHJlbW92aW5nIHRoZSByZWYgY29tcG9uZW50
LgorICAgICAgICBpbnQgYmFzZUxlbmd0aCA9IGJhc2VQYXJzZWQubGVuZ3RoKCk7CisgICAgICAg
IGJhc2VMZW5ndGggLT0gYmFzZVBhcnNlZC5mcmFnbWVudC5sZW5ndGgoKSArIDE7CisgICAgICAg
IG91dHB1dFBhcnNlZC0+ZnJhZ21lbnQucmVzZXQoKTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZChi
YXNlVVJMLCBiYXNlTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aW50IG51bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHJlbGF0
aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxhdGl2ZUNvbXBvbmVudC5lbmQo
KSk7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIE9uIFdpbmRvd3MsIHR3byBzbGFzaGVzIGZv
ciBhIGZpbGUgcGF0aCAocmVnYXJkbGVzcyBvZiB3aGljaCBkaXJlY3Rpb24KKyAgICAvLyB0aGV5
IGFyZSkgbWVhbnMgdGhhdCBpdCdzIFVOQy4gVHdvIGJhY2tzbGFzaGVzIG9uIGFueSBiYXNlIHNj
aGVtZSBtZWFuCisgICAgLy8gdGhhdCBpdCdzIGFuIGFic29sdXRlIFVOQyBwYXRoICh3ZSB1c2Ug
dGhlIGJhc2VJc0ZpbGUgZmxhZyB0byBjb250cm9sCisgICAgLy8gaG93IHN0cmljdCB0aGUgVU5D
IGZpbmRlciBpcykuCisgICAgLy8KKyAgICAvLyBXZSBhbHNvIGFsbG93IFdpbmRvd3MgYWJzb2x1
dGUgZHJpdmUgc3BlY3Mgb24gYW55IHNjaGVtZSAoZm9yIGV4YW1wbGUKKyAgICAvLyAiYzpcZm9v
IikgbGlrZSBJRSBkb2VzLiBUaGVyZSBtdXN0IGJlIG5vIHByZWNlZWRpbmcgc2xhc2hlcyBpbiB0
aGlzCisgICAgLy8gY2FzZSAod2UgcmVqZWN0IGFueXRoaW5nIGxpa2UgIi9jOi9mb28iKSBiZWNh
dXNlIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQKKyAgICAvLyBhcyBhIHBhdGguIEZvciBmaWxlIFVS
THMsIHdlIGFsbG93IGFueSBudW1iZXIgb2Ygc2xhc2hlcyBzaW5jZSB0aGF0IHdvdWxkCisgICAg
Ly8gYmUgc2V0dGluZyB0aGUgcGF0aC4KKyAgICAvLworICAgIC8vIFRoaXMgYXNzdW1lcyB0aGUg
YWJzb2x1dGUgcGF0aCByZXNvbHZlciBoYW5kbGVzIGFic29sdXRlIFVSTHMgbGlrZSB0aGlzCisg
ICAgLy8gcHJvcGVybHkuIFVSTFV0aWxpdGllczo6RG9DYW5vbmljYWxpemUgZG9lcyB0aGlzLgor
ICAgIGludCBhZnRlclNsYXNoZXMgPSByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbiArIG51bVNsYXNo
ZXM7CisgICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luVU5DUGF0aChyZWxhdGl2ZVVSTCwgcmVs
YXRpdmVDb21wb25lbnQuYmVnaW4oKSwgcmVsYXRpdmVDb21wb25lbnQuZW5kKCksICFiYXNlSXNG
aWxlKQorICAgICAgICB8fCAoKCFudW1TbGFzaGVzIHx8IGJhc2VJc0ZpbGUpICYmIFVSTFBhcnNl
cjo6ZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhyZWxhdGl2ZVVSTCwgYWZ0ZXJTbGFzaGVzLCBy
ZWxhdGl2ZUNvbXBvbmVudC5lbmQoKSkpKSB7CisgICAgICAgICAgICAgcmV0dXJuIGRvUmVzb2x2
ZUFic29sdXRlRmlsZShyZWxhdGl2ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAq
b3V0cHV0UGFyc2VkKTsKKyAgICAgICAgIH0KKyNlbHNlCisgICAgLy8gT3RoZXIgcGxhdGZvcm1z
IG5lZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIGZpbGU6IFVSTHMgd2l0aCBtdWx0aXBsZQorICAg
IC8vIHNsYXNoZXMgYmVjYXVzZSB0aGUgZ2VuZXJpYyBzY2hlbWUgcGFyc2luZyBhbHdheXMgZXh0
cmFjdHMgYSBob3N0LCBidXQgYQorICAgIC8vIGZpbGU6IFVSTCBvbmx5IGhhcyBhIGhvc3QgaWYg
aXQgaGFzIGV4YWN0bHkgMiBzbGFzaGVzLiBUaGlzIGFsc28KKyAgICAvLyBoYW5kbGVzIHRoZSBz
cGVjaWFsIGNhc2Ugd2hlcmUgdGhlIFVSTCBpcyBvbmx5IHNsYXNoZXMsIHNpbmNlIHRoYXQKKyAg
ICAvLyBkb2Vzbid0IGhhdmUgYSBob3N0IHBhcnQgZWl0aGVyLgorICAgIGlmIChiYXNlSXNGaWxl
ICYmIChudW1TbGFzaGVzID4gMiB8fCBudW1TbGFzaGVzID09IHJlbGF0aXZlQ29tcG9uZW50Lmxl
bmd0aCgpKSkgeworICAgICAgICByZXR1cm4gZG9SZXNvbHZlQWJzb2x1dGVGaWxlKHJlbGF0aXZl
VVJMLCByZWxhdGl2ZUNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKKyAgICB9CisjZW5k
aWYKKworICAgIC8vIEFueSBvdGhlciBkb3VibGUtc2xhc2hlcyBtZWFuIHRoYXQgdGhpcyBpcyBy
ZWxhdGl2ZSB0byB0aGUgc2NoZW1lLgorICAgIGlmIChudW1TbGFzaGVzID49IDIpIHsKKyAgICAg
ICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlSG9zdChiYXNlVVJMLCBiYXNlUGFyc2VkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNv
bXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnZl
cnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIFdoZW4gd2UgZ2V0
IGhlcmUsIHdlIGtub3cgdGhhdCB0aGUgcmVsYXRpdmUgVVJMIGlzIG9uIHRoZSBzYW1lIGhvc3Qu
CisgICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlUGF0aChiYXNlVVJMLCBiYXNlUGFyc2VkLCBi
YXNlSXNGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVUkws
IHJlbGF0aXZlQ29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVl
cnlDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworYm9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRz
JiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50LCBp
bnQgZnJhZ21lbnRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Jhc2VIaWVyYXJj
aGljYWwsCisgICAgICAgICAgICAgICAgICAgYm9vbCYgaXNSZWxhdGl2ZSwgVVJMQ29tcG9uZW50
JiByZWxhdGl2ZUNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gZG9Jc1JlbGF0aXZlVVJMPGNoYXI+
KGJhc2UsIGJhc2VQYXJzZWQsIGZyYWdtZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFy
Y2hpY2FsLCBpc1JlbGF0aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Cit9CisKK2Jvb2wgaXNSZWxh
dGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwK
KyAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZnJhZ21lbnQsIGludCBmcmFnbWVudExl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICBib29sIGlzQmFzZUhpZXJhcmNoaWNhbCwKKyAgICAg
ICAgICAgICAgICAgICBib29sJiBpc1JlbGF0aXZlLCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29t
cG9uZW50KQoreworICAgIHJldHVybiBkb0lzUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2UsIGJhc2VQ
YXJzZWQsIGZyYWdtZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFyY2hpY2FsLCBpc1Jl
bGF0aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Cit9CisKK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlVVJM
KGNvbnN0IGNoYXIqIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxT
ZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmFzZUlz
RmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29u
dmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQorewor
ICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZVVSTDxjaGFyPihiYXNlVVJMLCBiYXNlUGFyc2Vk
LCBiYXNlSXNGaWxlLCByZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1
dFBhcnNlZCk7Cit9CisKK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2VV
UkwsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmFzZUlzRmlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiByZWxhdGl2ZVVSTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gZG9SZXNv
bHZlUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2VVUkwsIGJhc2VQYXJzZWQsIGJhc2VJc0ZpbGUsIHJl
bGF0aXZlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRp
dmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblN0ZFVSTC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uU3Rk
VVJMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMmQ5ZTllZDkzZjJlOGUxNjNhZjU2YTUzYTVjMjExODQxMzk4
NWNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblN0
ZFVSTC5jcHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBB
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
REFNQUdFLgorICovCisKKy8vIEZ1bmN0aW9ucyB0byBjYW5vbmljYWxpemUgInN0YW5kYXJkIiBV
UkxzLCB3aGljaCBhcmUgb25lcyB0aGF0IGhhdmUgYW4KKy8vIGF1dGhvcml0eSBzZWN0aW9uIGlu
Y2x1ZGluZyBhIGhvc3QgbmFtZS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVS
TENhbm9uLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJVUkxDYW5v
bkludGVybmFsLmgiCisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDSEFSLCB0eXBlbmFtZSBVQ0hBUj4KK2Jvb2wgZG9DYW5vbmljYWxpemVTdGFuZGFyZFVS
TChjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q0hBUj4mIHNvdXJjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCit7
CisgICAgLy8gU2NoZW1lOiB0aGlzIHdpbGwgYXBwZW5kIHRoZSBjb2xvbi4KKyAgICBib29sIHN1
Y2Nlc3MgPSBjYW5vbmljYWxpemVTY2hlbWUoc291cmNlLnNjaGVtZSwgcGFyc2VkLnNjaGVtZSwg
b3V0cHV0LCBvdXRwdXRQYXJzZWQuc2NoZW1lKTsKKworICAgIC8vIEF1dGhvcml0eSAodXNlcm5h
bWUsIHBhc3N3b3JkLCBob3N0LCBwb3J0KQorICAgIGJvb2wgaGF2ZUF1dGhvcml0eTsKKyAgICBp
ZiAocGFyc2VkLnVzZXJuYW1lLmlzTm9uRW1wdHkoKSB8fCBwYXJzZWQucGFzc3dvcmQuaXNWYWxp
ZCgpIHx8IHBhcnNlZC5ob3N0LmlzTm9uRW1wdHkoKSB8fCBwYXJzZWQucG9ydC5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgaGF2ZUF1dGhvcml0eSA9IHRydWU7CisKKyAgICAgICAgLy8gT25seSB3cml0
ZSB0aGUgYXV0aG9yaXR5IHNlcGFyYXRvcnMgd2hlbiB3ZSBoYXZlIGEgc2NoZW1lLgorICAgICAg
ICBpZiAocGFyc2VkLnNjaGVtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCIvLyIsIDIpOworCisgICAgICAgIC8vIFVzZXIgaW5mbzogdGhlIGNhbm9uaWNhbGl6ZXIgd2ls
bCBoYW5kbGUgdGhlIDogYW5kIEAuCisgICAgICAgIHN1Y2Nlc3MgJj0gY2Fub25pY2FsaXplVXNl
ckluZm8oc291cmNlLnVzZXJuYW1lLCBwYXJzZWQudXNlcm5hbWUsIHNvdXJjZS5wYXNzd29yZCwg
cGFyc2VkLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dCwgb3V0cHV0UGFyc2VkLnVzZXJuYW1lLCBvdXRwdXRQYXJzZWQucGFzc3dvcmQpOwor
ICAgICAgICBzdWNjZXNzICY9IGNhbm9uaWNhbGl6ZUhvc3Qoc291cmNlLmhvc3QsIHBhcnNlZC5o
b3N0LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5ob3N0KTsKKworICAgICAgICAvLyBIb3N0IG11c3Qg
bm90IGJlIGVtcHR5IGZvciBzdGFuZGFyZCBVUkxzLgorICAgICAgICBpZiAoIXBhcnNlZC5ob3N0
LmlzTm9uRW1wdHkoKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICAv
LyBQb3J0OiB0aGUgcG9ydCBjYW5vbmljYWxpemVyIHdpbGwgaGFuZGxlIHRoZSBjb2xvbi4KKyAg
ICAgICAgaW50IGRlZmF1bHRQb3J0ID0gZGVmYXVsdFBvcnRGb3JTY2hlbWUoJm91dHB1dC5kYXRh
KClbb3V0cHV0UGFyc2VkLnNjaGVtZS5iZWdpbigpXSwgb3V0cHV0UGFyc2VkLnNjaGVtZS5sZW5n
dGgoKSk7CisgICAgICAgIHN1Y2Nlc3MgJj0gY2Fub25pY2FsaXplUG9ydChzb3VyY2UucG9ydCwg
cGFyc2VkLnBvcnQsIGRlZmF1bHRQb3J0LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5wb3J0KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBObyBhdXRob3JpdHksIGNsZWFyIHRoZSBjb21wb25lbnRz
LgorICAgICAgICBoYXZlQXV0aG9yaXR5ID0gZmFsc2U7CisgICAgICAgIG91dHB1dFBhcnNlZC5o
b3N0LnJlc2V0KCk7CisgICAgICAgIG91dHB1dFBhcnNlZC51c2VybmFtZS5yZXNldCgpOworICAg
ICAgICBvdXRwdXRQYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICAgICAgb3V0cHV0UGFyc2Vk
LnBvcnQucmVzZXQoKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBTdGFuZGFyZCBVUkxz
IG11c3QgaGF2ZSBhbiBhdXRob3JpdHkuCisgICAgfQorCisgICAgLy8gUGF0aAorICAgIGlmIChw
YXJzZWQucGF0aC5pc05vbkVtcHR5KCkpCisgICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXpl
UGF0aChzb3VyY2UucGF0aCwgcGFyc2VkLnBhdGgsIG91dHB1dCwgJm91dHB1dFBhcnNlZC5wYXRo
KTsKKyAgICBlbHNlIGlmIChoYXZlQXV0aG9yaXR5IHx8IHBhcnNlZC5xdWVyeS5pc05vbkVtcHR5
KCkgfHwgcGFyc2VkLmZyYWdtZW50LmlzTm9uRW1wdHkoKSkgeworICAgICAgICAvLyBXaGVuIHdl
IGhhdmUgYW4gZW1wdHkgcGF0aCwgbWFrZSB1cCBhIHBhdGggd2hlbiB3ZSBoYXZlIGFuIGF1dGhv
cml0eQorICAgICAgICAvLyBvciBzb21ldGhpbmcgZm9sbG93aW5nIHRoZSBwYXRoLiBUaGUgb25s
eSB0aW1lIHdlIGFsbG93IGFuIGVtcHR5CisgICAgICAgIC8vIG91dHB1dCBwYXRoIGlzIHdoZW4g
dGhlcmUgaXMgbm90aGluZyBlbHNlLgorICAgICAgICBvdXRwdXRQYXJzZWQucGF0aCA9IFVSTENv
bXBvbmVudChvdXRwdXQubGVuZ3RoKCksIDEpOworICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7
CisgICAgfSBlbHNlCisgICAgICAgIG91dHB1dFBhcnNlZC5wYXRoLnJlc2V0KCk7IC8vIE5vIHBh
dGggYXQgYWxsCisKKyAgICAvLyBRdWVyeQorICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHNvdXJjZS5x
dWVyeSwgcGFyc2VkLnF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAmb3V0cHV0UGFyc2Vk
LnF1ZXJ5KTsKKworICAgIC8vIFJlZjogaWdub3JlIGZhaWx1cmUgZm9yIHRoaXMsIHNpbmNlIHRo
ZSBwYWdlIGNhbiBwcm9iYWJseSBzdGlsbCBiZSBsb2FkZWQuCisgICAgY2Fub25pY2FsaXplRnJh
Z21lbnQoc291cmNlLnJlZiwgcGFyc2VkLmZyYWdtZW50LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5m
cmFnbWVudCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
CisvLyBSZXR1cm5zIHRoZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBjYW5vbmljYWwgc2No
ZW1lLCBvciBQT1JUX1VOU1BFQ0lGSUVECisvLyBpZiB0aGUgc2NoZW1lIGlzIHVua25vd24uCitp
bnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUoY29uc3QgY2hhciogc2NoZW1lLCBpbnQgc2NoZW1lTGVu
Z3RoKQoreworICAgIGludCBkZWZhdWx0UG9ydCA9IFVSTFBhcnNlcjo6UE9SVF9VTlNQRUNJRklF
RDsKKyAgICBzd2l0Y2ggKHNjaGVtZUxlbmd0aCkgeworICAgIGNhc2UgNDoKKyAgICAgICAgaWYg
KCFzdHJuY21wKHNjaGVtZSwgImh0dHAiLCBzY2hlbWVMZW5ndGgpKQorICAgICAgICAgICAgZGVm
YXVsdFBvcnQgPSA4MDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgICBpZiAo
IXN0cm5jbXAoc2NoZW1lLCAiaHR0cHMiLCBzY2hlbWVMZW5ndGgpKQorICAgICAgICAgICAgZGVm
YXVsdFBvcnQgPSA0NDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgaWYg
KCFzdHJuY21wKHNjaGVtZSwgImZ0cCIsIHNjaGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZh
dWx0UG9ydCA9IDIxOworICAgICAgICBlbHNlIGlmICghc3RybmNtcChzY2hlbWUsICJ3c3MiLCBz
Y2hlbWVMZW5ndGgpKQorICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSA0NDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgNjoKKyAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVtZSwgImdvcGhlciIs
IHNjaGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDcwOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJ3cyIsIHNj
aGVtZUxlbmd0aCkpCisgICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDgwOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIGRlZmF1bHRQb3J0OworfQorCitib29sIENhbm9uaWNhbGl6
ZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCAvKiBzcGVjTGVuZ3RoICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
aGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgcmV0dXJuIGRvQ2Fub25pY2Fs
aXplU3RhbmRhcmRVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNlPGNo
YXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgKm91dHB1dFBhcnNl
ZCk7Cit9CisKK2Jvb2wgQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3QgVUNoYXIqIHNwZWMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICovLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQp
Cit7CisgICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplU3RhbmRhcmRVUkw8VUNoYXIsIFVDaGFyPihV
UkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29udmVydGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LCAqb3V0cHV0UGFyc2VkKTsKK30KKworLy8gSXQgbWlnaHQgYmUgbmljZSBpbiB0aGUgZnV0dXJl
IHRvIG9wdGltaXplIHRoaXMgc28gdW5jaGFuZ2VkIGNvbXBvbmVudHMgZG9uJ3QKKy8vIG5lZWQg
dG8gYmUgcmVjYW5vbmljYWxpemVkLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBzaW5jZSB0aGUg
Y29tbW9uIGNhc2UgZm9yCisvLyBSZXBsYWNlQ29tcG9uZW50cyBpcyByZW1vdmluZyB0aGluZ3Mg
d2UgZG9uJ3Qgd2FudCwgbGlrZSByZWZlcmVuY2UgZnJhZ21lbnRzCisvLyBhbmQgdXNlcm5hbWVz
LiBUaGVzZSBjYXNlcyBjYW4gYmVjb21lIG1vcmUgZWZmaWNpZW50IGlmIHdlIGNhbiBhc3N1bWUg
dGhlCisvLyByZXN0IG9mIHRoZSBVUkwgaXMgT0sgd2l0aCB0aGVzZSByZW1vdmVkIChvciBvbmx5
IHRoZSBtb2RpZmllZCBwYXJ0cworLy8gcmVjYW5vbmljYWxpemVkKS4gVGhpcyB3b3VsZCBiZSBt
dWNoIG1vcmUgY29tcGxleCB0byBpbXBsZW1lbnQsIGhvd2V2ZXIuCisvLworLy8gWW91IHdvdWxk
IGFsc28gbmVlZCB0byB1cGRhdGUgRG9SZXBsYWNlQ29tcG9uZW50cyBpbiBVUkxVdGlsaXRpZXMu
Y2Mgd2hpY2gKKy8vIHJlbGllcyBvbiB0aGlzIHJlLWNoZWNraW5nIGV2ZXJ5dGhpbmcgKHNlZSB0
aGUgY29tbWVudCB0aGVyZSBmb3Igd2h5KS4KK2Jvb2wgUmVwbGFjZVN0YW5kYXJkVVJMKGNvbnN0
IGNoYXIqIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYg
YmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxj
aGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENvbnZl
cnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpCit7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsK
KyAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBPdmVycmlkZUNv
bXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKKyAgICByZXR1
cm4gZG9DYW5vbmljYWxpemVTdGFuZGFyZFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2Us
IHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFBhcnNlZCk7Cit9CisKKy8v
IEZvciAxNi1iaXQgcmVwbGFjZW1lbnRzLCB3ZSB0dXJuIGFsbCB0aGUgcmVwbGFjZW1lbnRzIGlu
dG8gVVRGLTggc28gdGhlCisvLyByZWd1bGFyIGNvZGVwYXRoIGNhbiBiZSB1c2VkLgorYm9vbCBS
ZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCit7CisgICAgUmF3VVJMQnVmZmVyPGNo
YXI+IHV0Zjg7CisgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKKyAg
ICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7CisgICAgU2V0dXBVVEYxNk92ZXJyaWRl
Q29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOwor
ICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+
KHNvdXJjZSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2hhcmFjdGVyVHlwZXMuY3BwCmluZGV4IGY1NmU3MjA3Y2M1ZTY2ZGJhOTc5NmJmNjE2MzExYjU3
NzJmYzM0ZGQuLjIxZGQyMmZjYzhhNDU5MmVkOTA2NTk1YzA4NjlhM2I4YzI5MWRmNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuY3BwCkBAIC0xLDMwICsx
LDMyIEBACi0vLyBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8qCisgKiBD
b3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5oIgpAQCAtMzIsNyArMzQsNiBAQAog
I2lmIFVTRShXVEZVUkwpCiAKIG5hbWVzcGFjZSBXVEYgewotCiBjb25zdCB1bnNpZ25lZCBjaGFy
IFVSTENoYXJhY3RlclR5cGVzOjpjaGFyYWN0ZXJUeXBlVGFibGVbMHgxMDBdID0gewogICAgIElu
dmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFs
aWRDaGFyYWN0ZXIsCiAgICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52
YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKQEAgLTQzLDEwMCArNDQsMTAwIEBAIGNv
bnN0IHVuc2lnbmVkIGNoYXIgVVJMQ2hhcmFjdGVyVHlwZXM6OmNoYXJhY3RlclR5cGVUYWJsZVsw
eDEwMF0gPSB7CiAgICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxp
ZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKICAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZh
bGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDEw
IC0gMHgxZgogICAgIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4MjAgICcgJyAoZXNjYXBlIHNwYWNl
cyBpbiBxdWVyaWVzKQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8v
IDB4MjEgICEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDIxICAhCiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgyMiAg
IgogICAgIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4MjMgICMgIChpbnZhbGlkIGluIHF1ZXJ5IHNp
bmNlIGl0IG1hcmtzIHRoZSByZWYpCiAgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciwgLy8gMHgyNCAgJAogICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIs
IC8vIDB4MjUgICUKICAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAw
eDI2ICAmCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyNyAg
JwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjggICgKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI5ICApCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyYSAgKgorICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4Mjcg
ICcKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDI4ICAoCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyOSAgKQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MmEgICoKICAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJiICArCiAgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyYyAgLAotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MmQgIC0KLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciwgLy8gMHgyZSAgLgorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4
MmQgIC0KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyZSAgLgogICAgIFF1ZXJ5Q2hhcmFjdGVy
LCAvLyAweDJmICAvCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQ
djRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFy
YWN0ZXIsIC8vIDB4MzAgIDAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3Rh
bENoYXJhY3RlciwgLy8gMHgzMSAgMQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8
IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDMyICAyCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFj
dGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzMgIDMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxD
aGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzNCAgNAotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVj
aW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDM1ICA1Ci0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIg
fCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJh
Y3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzNyAgNwotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4
Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciwgLy8gMHgzOCAgOAotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwg
RGVjaW1hbENoYXJhY3RlciwgLy8gMHgzOSAgOQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNp
bWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4
MzAgIDAKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJh
Y3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hh
cmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDMxICAxCisgICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJh
Y3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHgzMiAgMgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVy
IHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzMgIDMKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFk
ZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDM0ICA0CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2lt
YWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgz
NSAgNQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFj
dGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFy
YWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKKyAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFj
dGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDM3ICA3CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzggIDgKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwg
RGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzOSAgOQogICAgIFF1
ZXJ5Q2hhcmFjdGVyLCAvLyAweDNhICA6CiAgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4M2IgIDsK
LSAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDNjICA8CisgICAgSW52YWxpZENoYXJhY3Rlciwg
Ly8gMHgzYyAgPCAgKFRyeSB0byBwcmV2ZW50IGNlcnRhaW4gdHlwZXMgb2YgWFNTLikKICAgICBR
dWVyeUNoYXJhY3RlciwgLy8gMHgzZCAgPQotICAgIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4M2Ug
ID4KKyAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDNlICA+ICAoVHJ5IHRvIHByZXZlbnQgY2Vy
dGFpbiB0eXBlcyBvZiBYU1MuKQogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNmICA/CiAgICAg
UXVlcnlDaGFyYWN0ZXIsIC8vIDB4NDAgIEAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0MSAgQQotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4
Q2hhcmFjdGVyLCAvLyAweDQyICBCCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDMgIEMKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJh
Y3RlciwgLy8gMHg0NCAgRAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDQ1ICBFCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIs
IC8vIDB4NDYgIEYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAw
eDQ3ICBHCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0OCAg
SAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NDkgIEkKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDRhICBKCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0YiAgSwotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NGMgIEwKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDRkICBNCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHg0ZSAgTgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIsIC8vIDB4NGYgIE8KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyLCAvLyAweDUwICBQCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciwgLy8gMHg1MSAgUQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8v
IDB4NTIgIFIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUz
ICBTCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1NCAgVAot
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTUgIFUKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDU2ICBWCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1NyAgVwotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyLCAvLyAweDU4ICBYCi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1OSAgWQotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NWEgIFoKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hh
cmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQxICBBCisgICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0MiAgQgorICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDMgIEMKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ0ICBECisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8
IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0NSAgRQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDYgIEYKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ3ICBHCisgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0
OCAgSAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NDkgIEkKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDRhICBKCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0YiAgSworICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4NGMgIEwKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDRkICBNCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0ZSAgTgorICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGYg
IE8KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDUwICBQCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1MSAgUQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTIgIFIKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDUzICBTCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHg1NCAgVAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTUgIFUKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU2ICBW
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHg1NyAgVworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU4ICBYCisgICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8g
MHg1OSAgWQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4NWEgIFoKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1YiAgWwog
ICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDVjICAnXCcKICAgICBRdWVyeUNoYXJhY3RlciwgLy8g
MHg1ZCAgXQogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDVlICBeCi0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1ZiAgXworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NWYgIF8KICAgICBR
dWVyeUNoYXJhY3RlciwgLy8gMHg2MCAgYAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDYxICBhCi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhD
aGFyYWN0ZXIsIC8vIDB4NjIgIGIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2MyAgYwotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFj
dGVyLCAvLyAweDY0ICBkCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NjUgIGUKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3Rlciwg
Ly8gMHg2NiAgZgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4
NjcgIGcKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDY4ICBo
Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2OSAgaQotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NmEgIGoKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDZiICBrCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2YyAgbAotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NmQgIG0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDZlICBuCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciwgLy8gMHg2ZiAgbwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIsIC8vIDB4NzAgIHAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
LCAvLyAweDcxICBxCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8g
MHg3MiAgcgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzMg
IHMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc0ICB0Ci0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3NSAgdQotICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzYgIHYKLSAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc3ICB3Ci0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIsIC8vIDB4NzggIHgKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc5ICB5Ci0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3YSAgegorICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFy
YWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjEgIGEKKyAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDYyICBiCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2MyAgYworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjQgIGQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY1ICBlCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENv
bXBvbmVudENoYXJhY3RlciwgLy8gMHg2NiAgZgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjcgIGcKKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY4
ICBoCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg2OSAgaQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NmEgIGoKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZiICBrCisgICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg2YyAgbAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NmQgIG0KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZlICBuCisgICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2ZiAg
bworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4NzAgIHAKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDcxICBxCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3MiAgcgorICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NzMgIHMKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDc0ICB0CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3NSAgdQorICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzYgIHYK
KyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDc3ICB3CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IElQdjRDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzggIHgKKyAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAw
eDc5ICB5CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHg3YSAgegogICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDdiICB7CiAg
ICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4N2MgIHwKICAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg3
ZCAgfQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4N2UgIH4K
KyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDdlICB+CiAgICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHg3ZgogICAgIEludmFs
aWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRD
aGFyYWN0ZXIsCiAgICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxp
ZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2hhcmFjdGVyVHlwZXMuaAppbmRleCA2ZWRiOThjYTIwMzllYzRlNjg2N2EzNmY3NmY4MTIyZDBl
ZmMwNDdjLi42NjUyMTA1ZThkNzc1MGQ1ZTIzYjQ5NGEzMTgzYjhlN2E2YzU2OGMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmgKKysrIGIvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5oCkBAIC0xLDMwICsxLDMyIEBA
Ci0vLyBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8qCisgKiBDb3B5cmln
aHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
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
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKICNpZm5kZWYgVVJMQ2hhcmFjdGVy
VHlwZXNfaAogI2RlZmluZSBVUkxDaGFyYWN0ZXJUeXBlc19oCkBAIC0zNSwyNyArMzcsMjkgQEAg
bmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFVSTENoYXJhY3RlclR5cGVzIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgaXNRdWVyeUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVy
biBpc0NoYXJPZlR5cGUoYywgUXVlcnlDaGFyYWN0ZXIpOyB9Ci0gICAgc3RhdGljIGlubGluZSBi
b29sIGlzSVB2NENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5cGUoYywg
SVB2NENoYXJhY3Rlcik7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZXhDaGFyKHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gaXNDaGFyT2ZUeXBlKGMsIEhleENoYXJhY3Rlcik7IH0KLQot
cHJpdmF0ZToKLSAgICBlbnVtIENoYXJUeXBlcyB7CisgICAgZW51bSBDaGFyYWN0ZXJUeXBlcyB7
CiAgICAgICAgIEludmFsaWRDaGFyYWN0ZXIgPSAwLAogICAgICAgICBRdWVyeUNoYXJhY3RlciA9
IDEgPDwgMCwKICAgICAgICAgVXNlckluZm9DaGFyYWN0ZXIgPSAxIDw8IDEsCiAgICAgICAgIElQ
djRDaGFyYWN0ZXIgPSAxIDw8IDIsCi0gICAgICAgIEhleENoYXJhY3RlciA9IDEgPDwgMywKKyAg
ICAgICAgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgPSAxIDw8IDMsCiAgICAgICAgIERlY2ltYWxDaGFy
YWN0ZXIgPSAxIDw8IDQsCiAgICAgICAgIE9jdGFsQ2hhcmFjdGVyID0gMSA8PCA1LAorICAgICAg
ICBDb21wb25lbnRDaGFyYWN0ZXIgPSAxIDw8IDYsCiAgICAgfTsKIAotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF07CisgICAgc3RhdGljIGlu
bGluZSBib29sIGlzQ29tcG9uZW50Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikgeyByZXR1
cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBDb21wb25lbnRDaGFyYWN0ZXIpOyB9Cisg
ICAgc3RhdGljIGlubGluZSBib29sIGlzSGV4Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3Rlcikg
eyByZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBIZXhhZGVjaW1hbENoYXJhY3Rl
cik7IH0KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNJUHY0Q2hhcih1bnNpZ25lZCBjaGFyIGNo
YXJhY3RlcikgeyByZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBJUHY0Q2hhcmFj
dGVyKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1F1ZXJ5Q2hhcih1bnNpZ25lZCBjaGFy
IGNoYXJhY3RlcikgeyByZXR1cm4gaXNDaGFyYWN0ZXJPZlR5cGUoY2hhcmFjdGVyLCBRdWVyeUNo
YXJhY3Rlcik7IH0KIAotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NoYXJPZlR5cGUodW5zaWdu
ZWQgY2hhciBjLCBDaGFyVHlwZXMgdHlwZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGFy
YWN0ZXJPZlR5cGUodW5zaWduZWQgY2hhciBIZXhDaGFyYWN0ZXIsIENoYXJhY3RlclR5cGVzIHR5
cGUpCiAgICAgewotICAgICAgICByZXR1cm4gISEoY2hhcmFjdGVyVHlwZVRhYmxlW2NdICYgdHlw
ZSk7CisgICAgICAgIHJldHVybiAhIShjaGFyYWN0ZXJUeXBlVGFibGVbSGV4Q2hhcmFjdGVyXSAm
IHR5cGUpOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh
ciBjaGFyYWN0ZXJUeXBlVGFibGVbMHgxMDBdOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDb21wb25lbnQuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMv
VVJMQ29tcG9uZW50LmgKaW5kZXggNzQ3YTgwYjgwYzI2MTJhNjY3MzgxZTc2NmRjYTMwYmYwZjYw
YTcyMC4uMzA4Y2MwYjVlMDUxZjYyZTZkMzhkYzBhNmQ2ODQzZjZmNjk1MmIyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDb21wb25lbnQuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENvbXBvbmVudC5oCkBAIC0xLDMwICsxLDMyIEBACi0vLyBDb3B5cmln
aHQgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBHb29n
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
IE9GIFNVQ0ggREFNQUdFLgorICovCiAKICNpZm5kZWYgVVJMQ29tcG9uZW50X2gKICNkZWZpbmUg
VVJMQ29tcG9uZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNj
YXBlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjZGNkZTI0ZDY3NmUxYTk0NzM4MTNmMmYyMzk5ZTRjZjBj
MjRmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTEVzY2FwZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyAr
MCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVSTEVzY2FwZS5oIgotCi0jaWYgVVNFKFdURlVSTCkK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLWNvbnN0IGNoYXIgaGV4Q2hhcmFjdGVyVGFibGVbMTZdID0g
ewotICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLAotICAgICc4Jywg
JzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLAotfTsKLQotfQotCi0jZW5kaWYgLy8g
VVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRXNjYXBl
LmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEVzY2FwZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlMDEwMDEyYTNmOGJlZTdlOTNkODI4NGQwZDIwNDViNjkwZTg4MTgxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMRXNjYXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0v
LyBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0jaWZuZGVmIFVSTEVz
Y2FwZV9oCi0jZGVmaW5lIFVSTEVzY2FwZV9oCi0KLSNpZiBVU0UoV1RGVVJMKQotCi0jaW5jbHVk
ZSAiVVJMQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1leHRlcm4gY29uc3QgY2hhciBo
ZXhDaGFyYWN0ZXJUYWJsZVsxNl07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEluQ2hhciwgdHlwZW5h
bWUgT3V0Q2hhcj4KLWlubGluZSB2b2lkIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoSW5DaGFy
IGNoLCBVUkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBidWZmZXIuYXBwZW5kKCcl
Jyk7Ci0gICAgYnVmZmVyLmFwcGVuZChoZXhDaGFyYWN0ZXJUYWJsZVtjaCA+PiA0XSk7Ci0gICAg
YnVmZmVyLmFwcGVuZChoZXhDaGFyYWN0ZXJUYWJsZVtjaCAmIDB4Zl0pOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMRmlsZS5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxGaWxlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDhiMTJlYmRmMzNlZWU2YmRhMjUyZTQ3MGM1ZDdiZTNkYzI4OGVhZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRmlsZS5oCkBAIC0wLDAgKzEs
MTE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
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
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBQ
cm92aWRlcyBzaGFyZWQgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGludGVybmFscyBvZiB0aGUgcGFy
c2VyIGFuZAorLy8gY2Fub25pY2FsaXplciBmb3IgZmlsZSBVUkxzLiBEbyBub3QgdXNlIG91dHNp
ZGUgb2YgdGhlc2UgbW9kdWxlcy4KKworI2lmbmRlZiBVUkxGaWxlX2gKKyNkZWZpbmUgVVJMRmls
ZV9oCisKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvVW5pY29kZS5oPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBVUkxQYXJzZXIgeworCisjaWYgT1MoV0lORE9XUykKKy8vIFdlIGFsbG93IGJvdGgg
ImM6IiBhbmQgImN8IiBhcyBkcml2ZSBpZGVudGlmaWVycy4KK2lubGluZSBib29sIGlzV2luZG93
c0RyaXZlU2VwYXJhdG9yKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVy
ID09ICc6JyB8fCBjaGFyYWN0ZXIgPT0gJ3wnOworfQoraW5saW5lIGJvb2wgaXNXaW5kb3dzRHJp
dmVMZXR0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiAoY2hhcmFjdGVyID49ICdB
JyAmJiBjaGFyYWN0ZXIgPD0gJ1onKSB8fCAoY2hhcmFjdGVyID49ICdhJyAmJiBjaGFyYWN0ZXIg
PD0gJ3onKTsKK30KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQorCisvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgbmV4dCBzbGFzaCBpbiB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGdpdmVuIGluZGV4LCBv
cgorLy8gc3BlY0xlbmd0aCBpZiB0aGUgZW5kIG9mIHRoZSBpbnB1dCBpcyByZWFjaGVkLgordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBpbnQgZmluZE5leHRTbGFzaChj
b25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgYmVnaW5JbmRleCwgaW50IHNwZWNMZW5ndGgp
Cit7CisgICAgaW50IGlkeCA9IGJlZ2luSW5kZXg7CisgICAgd2hpbGUgKGlkeCA8IHNwZWNMZW5n
dGggJiYgIWlzVVJMU2xhc2goc3BlY1tpZHhdKSkKKyAgICAgICAgKytpZHg7CisgICAgcmV0dXJu
IGlkeDsKK30KKworI2lmIE9TKFdJTkRPV1MpCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXJ0
T2Zmc2V0IGluIHRoZSBnaXZlbiBzcGVjIGxvb2tzIGxpa2UgaXQgYmVnaW5zIGEKKy8vIGRyaXZl
IHNwZWMsIGZvciBleGFtcGxlICJjOiIuIFRoaXMgZnVuY3Rpb24gZXhwbGljaXRseSBoYW5kbGVz
IHN0YXJ0T2Zmc2V0CisvLyB2YWx1ZXMgdGhhdCBhcmUgZXF1YWwgdG8gb3IgbGFyZ2VyIHRoYW4g
dGhlIHNwZWNMZW5ndGggdG8gc2ltcGxpZnkgY2FsbGVycy4KKy8vCisvLyBJZiB0aGlzIHJldHVy
bnMgdHJ1ZSwgdGhlIHNwZWMgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgdmFsaWQgZHJpdmUgbGV0
dGVyCisvLyBwbHVzIGEgY29sb24gc3RhcnRpbmcgYXQgfHN0YXJ0T2Zmc2V0fC4KK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgYm9vbCBkb2VzQmVnaW5XaW5kb3dzRHJp
dmVTcGVjKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9mZnNldCwgaW50IHNw
ZWNMZW5ndGgpCit7CisgICAgaW50IHJlbWFpbmluZ0xlbmd0aCA9IHNwZWNMZW5ndGggLSBzdGFy
dE9mZnNldDsKKyAgICBpZiAocmVtYWluaW5nTGVuZ3RoIDwgMikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBOb3QgZW5vdWdoIHJvb20uCisgICAgaWYgKCFpc1dpbmRvd3NEcml2ZUxldHRlcihz
cGVjW3N0YXJ0T2Zmc2V0XSkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRG9lc24ndCBzdGFy
dCB3aXRoIGEgdmFsaWQgZHJpdmUgbGV0dGVyLgorICAgIGlmICghaXNXaW5kb3dzRHJpdmVTZXBh
cmF0b3Ioc3BlY1tzdGFydE9mZnNldCArIDFdKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJ
c24ndCBmb2xsb3dlZCB3aXRoIGEgZHJpdmUgc2VwYXJhdG9yLgorICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXJ0T2Zmc2V0IGluIHRoZSBnaXZlbiB0ZXh0
IGxvb2tzIGxpa2UgaXQgYmVnaW5zIGEKKy8vIFVOQyBwYXRoLCBmb3IgZXhhbXBsZSAiXFwiLiBU
aGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgaGFuZGxlcyBzdGFydE9mZnNldAorLy8gdmFsdWVzIHRo
YXQgYXJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSBzcGVjTGVuZ3RoIHRvIHNpbXBsaWZ5
IGNhbGxlcnMuCisvLworLy8gV2hlbiBzdHJpY3RTbGFzaGVzIGlzIHNldCwgdGhpcyBmdW5jdGlv
biB3aWxsIG9ubHkgYWNjZXB0IGJhY2tzbGFzaGVzIGFzIGlzCisvLyBzdGFuZGFyZCBmb3IgV2lu
ZG93cy4gT3RoZXJ3aXNlLCBpdCB3aWxsIGFjY2VwdCBmb3J3YXJkIHNsYXNoZXMgYXMgd2VsbAor
Ly8gd2hpY2ggd2UgdXNlIGZvciBhIGxvdCBvZiBVUkwgaGFuZGxpbmcuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIGJvb2wgZG9lc0JlZ2luVU5DUGF0aChjb25zdCBD
aGFyYWN0ZXJUeXBlKiB0ZXh0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIGJvb2wgc3Ry
aWN0U2xhc2hlcykKK3sKKyAgICBpbnQgcmVtYWluaW5nTGVuZ3RoID0gbGVuZ3RoIC0gc3RhcnRP
ZmZzZXQ7CisgICAgaWYgKHJlbWFpbmluZ0xlbmd0aCA8IDIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChzdHJpY3RTbGFzaGVzKQorICAgICAgICByZXR1cm4gdGV4dFtzdGFydE9m
ZnNldF0gPT0gJ1xcJyAmJiB0ZXh0W3N0YXJ0T2Zmc2V0ICsgMV0gPT0gJ1xcJzsKKyAgICByZXR1
cm4gaXNVUkxTbGFzaCh0ZXh0W3N0YXJ0T2Zmc2V0XSkgJiYgaXNVUkxTbGFzaCh0ZXh0W3N0YXJ0
T2Zmc2V0ICsgMV0pOworfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK30gLy8gbmFtZXNwYWNl
IFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShXVEZVUkwp
CisKKyNlbmRpZiAvLyBVUkxGaWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvVVJMUGFyc2UuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWQ3ZTQyZWRkZWZlMjkxM2E1M2VhOTg4ZWUyNjJlMjJmYjY5OGRjOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3BwCkBAIC0wLDAg
KzEsNzg3IEBACisvKiBCYXNlZCBvbiBuc1VSTFBhcnNlcnMuY2MgZnJvbSBNb3ppbGxhCisgKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5cmlnaHQgKEMpIDE5
OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBUaGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24K
KyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgor
ICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUK
KyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29k
ZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMK
KyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAorICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRy
aWJ1dG9yKHMpOgorICogICBEYXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhvcikKKyAqCisgKiBB
bHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVy
IHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAq
IGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUg
YXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxs
b3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRl
cm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVy
cyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92
aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3Ro
ZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8g
bm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlVSTFBhcnNlLmgiCisKKyNpbmNsdWRlICJVUkxQYXJzZUludGVy
bmFsLmgiCisjaW5jbHVkZSAiVVJMVXRpbC5oIgorI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5o
IgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNp
ZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFBhcnNlciB7
CisKK25hbWVzcGFjZSB7CisKKy8vIFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBhdXRo
b3JpdHkgdGVybWluYXRvciBpbiB0aGUgaW5wdXQgc3RhcnRpbmcKKy8vIGZyb20gc3RhcnRPZmZz
ZXQuIElmIG5vIHRlcm1pbmF0b3IgaXMgZm91bmQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBl
cXVhbAorLy8gdG8gc3BlY0xlbmd0aC4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CitpbnQgZmluZE5leHRBdXRob3JpdHlUZXJtaW5hdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIHNw
ZWMsIGludCBzdGFydE9mZnNldCwgaW50IHNwZWNMZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9
IHN0YXJ0T2Zmc2V0OyBpIDwgc3BlY0xlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChJc0F1dGhv
cml0eVRlcm1pbmF0b3Ioc3BlY1tpXSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9Cisg
ICAgcmV0dXJuIHNwZWNMZW5ndGg7IC8vIE5vdCBmb3VuZC4KK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgcGFyc2VVc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHVzZXIsIFVSTENvbXBvbmVudCYgdXNlcm5hbWUs
IFVSTENvbXBvbmVudCYgcGFzc3dvcmQpCit7CisgICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24g
aW4gdGhlIHVzZXIgc2VjdGlvbiwgd2hpY2ggc2VwYXJhdGVzIHRoZSB1c2VybmFtZSBhbmQKKyAg
ICAvLyBwYXNzd29yZC4KKyAgICBpbnQgY29sb25PZmZzZXQgPSAwOworICAgIHdoaWxlIChjb2xv
bk9mZnNldCA8IHVzZXIubGVuZ3RoKCkgJiYgc3BlY1t1c2VyLmJlZ2luKCkgKyBjb2xvbk9mZnNl
dF0gIT0gJzonKQorICAgICAgICArK2NvbG9uT2Zmc2V0OworCisgICAgaWYgKGNvbG9uT2Zmc2V0
IDwgdXNlci5sZW5ndGgoKSkgeworICAgICAgICAvLyBGb3VuZCBzZXBhcmF0b3I6IDx1c2VybmFt
ZT46PHBhc3N3b3JkPgorICAgICAgICB1c2VybmFtZSA9IFVSTENvbXBvbmVudCh1c2VyLmJlZ2lu
KCksIGNvbG9uT2Zmc2V0KTsKKyAgICAgICAgcGFzc3dvcmQgPSBVUkxDb21wb25lbnQ6OmZyb21S
YW5nZSh1c2VyLmJlZ2luKCkgKyBjb2xvbk9mZnNldCArIDEsIHVzZXIuZW5kKCkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE5vIHNlcGFyYXRvciwgdHJlYXQgZXZlcnl0aGluZyBhcyB0aGUg
dXNlcm5hbWUKKyAgICAgICAgdXNlcm5hbWUgPSB1c2VyOworICAgICAgICBwYXNzd29yZCA9IFVS
TENvbXBvbmVudCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KK3ZvaWQgcGFyc2VTZXJ2ZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgc2VydmVySW5mbywgVVJMQ29tcG9uZW50JiBob3N0bmFtZSwgVVJMQ29t
cG9uZW50JiBwb3J0KQoreworICAgIGlmICghc2VydmVySW5mby5sZW5ndGgoKSkgeworICAgICAg
ICAvLyBObyBzZXJ2ZXIgaW5mbywgaG9zdCBuYW1lIGlzIGVtcHR5LgorICAgICAgICBob3N0bmFt
ZSA9IFVSTENvbXBvbmVudCgpOworICAgICAgICBwb3J0ID0gVVJMQ29tcG9uZW50KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgaG9zdCBzdGFydHMgd2l0aCBhIGxl
ZnQtYnJhY2tldCwgYXNzdW1lIHRoZSBlbnRpcmUgaG9zdCBpcyBhbgorICAgIC8vIElQdjYgbGl0
ZXJhbC4gT3RoZXJ3aXNlLCBhc3N1bWUgbm9uZSBvZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGxpdGVy
YWwuCisgICAgLy8gVGhpcyBhc3N1bXB0aW9uIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB3ZSBmaW5k
IGEgcmlnaHQtYnJhY2tldC4KKyAgICAvLworICAgIC8vIE91ciBJUHY2IGFkZHJlc3MgY2Fub25p
Y2FsaXphdGlvbiBjb2RlIHJlcXVpcmVzIGJvdGggYnJhY2tldHMgdG8gZXhpc3QsCisgICAgLy8g
YnV0IHRoZSBhYmlsaXR5IHRvIGxvY2F0ZSBhbiBpbmNvbXBsZXRlIGFkZHJlc3MgY2FuIHN0aWxs
IGJlIHVzZWZ1bC4KKyAgICBpbnQgaXB2NlRlcm1pbmF0b3IgPSBzcGVjW3NlcnZlckluZm8uYmVn
aW4oKV0gPT0gJ1snID8gc2VydmVySW5mby5lbmQoKSA6IC0xOworICAgIGludCBjb2xvbiA9IC0x
OworCisgICAgLy8gRmluZCB0aGUgbGFzdCByaWdodC1icmFja2V0LCBhbmQgdGhlIGxhc3QgY29s
b24uCisgICAgZm9yIChpbnQgaSA9IHNlcnZlckluZm8uYmVnaW4oKTsgaSA8IHNlcnZlckluZm8u
ZW5kKCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsKKyAgICAgICAgY2FzZSAn
XSc6CisgICAgICAgICAgICBpcHY2VGVybWluYXRvciA9IGk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICBjb2xvbiA9IGk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb2xvbiA+IGlwdjZUZXJtaW5hdG9y
KSB7CisgICAgICAgIC8vIEZvdW5kIGEgcG9ydCBudW1iZXI6IDxob3N0bmFtZT46PHBvcnQ+Cisg
ICAgICAgIGhvc3RuYW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uoc2VydmVySW5mby5iZWdp
bigpLCBjb2xvbik7CisgICAgICAgIGlmICghaG9zdG5hbWUubGVuZ3RoKCkpCisgICAgICAgICAg
ICBob3N0bmFtZS5yZXNldCgpOworICAgICAgICBwb3J0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UoY29sb24gKyAxLCBzZXJ2ZXJJbmZvLmVuZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBObyBwb3J0OiA8aG9zdG5hbWU+CisgICAgICAgIGhvc3RuYW1lID0gc2VydmVySW5mbzsKKyAg
ICAgICAgcG9ydCA9IFVSTENvbXBvbmVudCgpOworICAgIH0KK30KKworLy8gR2l2ZW4gYW4gYWxy
ZWFkeS1pZGVudGlmaWVkIGF1dGggc2VjdGlvbiwgYnJlYWtzIGl0IGludG8gaXRzIGNvbnNpdHVl
bnQKKy8vIHBhcnRzLiBUaGUgcG9ydCBudW1iZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHRoZSByZXN1
bHRpbmcgaW50ZWdlciB3aWxsIGJlCisvLyBmaWxsZWQgaW50byB0aGUgZ2l2ZW4gKnBvcnQgdmFy
aWFibGUsIG9yIC0xIGlmIHRoZXJlIGlzIG5vIHBvcnQgbnVtYmVyIG9yIGl0CisvLyBpcyBpbnZh
bGlkLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgZG9QYXJzZUF1dGhv
cml0eShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGhv
cml0eSwgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwgVVJM
Q29tcG9uZW50JiBob3N0bmFtZSwgVVJMQ29tcG9uZW50JiBwb3J0KQoreworICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoYXV0aG9yaXR5LmlzVmFsaWQoKSwgIldlIHNob3VsZCBhbHdheXMgZ2V0IGFu
IGF1dGhvcml0eSIpOworICAgIGlmICghYXV0aG9yaXR5Lmxlbmd0aCgpKSB7CisgICAgICAgIHVz
ZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50
KCk7CisgICAgICAgIGhvc3RuYW1lID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHBvcnQgPSBV
UkxDb21wb25lbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlYXJjaCBi
YWNrd2FyZHMgZm9yIEAsIHdoaWNoIGlzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdXNlciBp
bmZvIGFuZAorICAgIC8vIHRoZSBzZXJ2ZXIgaW5mby4KKyAgICBpbnQgaSA9IGF1dGhvcml0eS5l
bmQoKSAtIDE7CisgICAgd2hpbGUgKGkgPiBhdXRob3JpdHkuYmVnaW4oKSAmJiBzcGVjW2ldICE9
ICdAJykKKyAgICAgICAgLS1pOworCisgICAgaWYgKHNwZWNbaV0gPT0gJ0AnKSB7CisgICAgICAg
IC8vIEZvdW5kIHVzZXIgaW5mbzogPHVzZXItaW5mbz5APHNlcnZlci1pbmZvPgorICAgICAgICBw
YXJzZVVzZXJJbmZvKHNwZWMsIFVSTENvbXBvbmVudChhdXRob3JpdHkuYmVnaW4oKSwgaSAtIGF1
dGhvcml0eS5iZWdpbigpKSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKKyAgICAgICAgcGFyc2VTZXJ2
ZXJJbmZvKHNwZWMsIFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBhdXRob3JpdHkuZW5k
KCkpLCBob3N0bmFtZSwgcG9ydCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gdXNlciBp
bmZvLCBldmVyeXRoaW5nIGlzIHNlcnZlciBpbmZvLgorICAgICAgICB1c2VybmFtZSA9IFVSTENv
bXBvbmVudCgpOworICAgICAgICBwYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOworICAgICAgICBw
YXJzZVNlcnZlckluZm8oc3BlYywgYXV0aG9yaXR5LCBob3N0bmFtZSwgcG9ydCk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBwYXJzZVBhdGgoY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBoaWVyYXJjaGljYWxp
ZGVudGlmaWVycywgVVJMQ29tcG9uZW50JiByZXNvdXJjZVBhdGgsIFVSTENvbXBvbmVudCYgcXVl
cnksIFVSTENvbXBvbmVudCYgZnJhZ21lbnQpCit7CisgICAgLy8gcGF0aCA9IFsvXTxzZWdtZW50
MT4vPHNlZ21lbnQyPi88Li4uPi88c2VnbWVudE4+OzxwYXJhbT4/PHF1ZXJ5PiM8cmVmPgorCisg
ICAgLy8gU3BlY2lhbCBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gcGF0aC4KKyAgICBpZiAoaGllcmFy
Y2hpY2FsaWRlbnRpZmllcnMubGVuZ3RoKCkgPT0gLTEpIHsKKyAgICAgICAgcmVzb3VyY2VQYXRo
ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7CisgICAg
ICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShoaWVyYXJjaGljYWxpZGVudGlmaWVycy5sZW5ndGgoKSA+
IDAsICJXZSBzaG91bGQgbmV2ZXIgaGF2ZSAwIGxlbmd0aCBwYXRocyIpOworCisgICAgLy8gU2Vh
cmNoIGZvciBmaXJzdCBvY2N1cnJlbmNlIG9mIGVpdGhlciA/IG9yICMuCisgICAgaW50IHBhdGhF
bmQgPSBoaWVyYXJjaGljYWxpZGVudGlmaWVycy5lbmQoKTsKKworICAgIGludCBxdWVyeVNlcGFy
YXRvciA9IC0xOyAvLyBJbmRleCBvZiB0aGUgJz8nCisgICAgaW50IGZyYWdtZW50U2VwYXJhdG9y
ID0gLTE7IC8vIEluZGV4IG9mIHRoZSAnIycKKyAgICBmb3IgKGludCBpID0gaGllcmFyY2hpY2Fs
aWRlbnRpZmllcnMuYmVnaW4oKTsgaSA8IHBhdGhFbmQ7ICsraSkgeworICAgICAgICBzd2l0Y2gg
KHNwZWNbaV0pIHsKKyAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgICAvLyBPbmx5IG1hdGNo
IHRoZSBxdWVyeSBzdHJpbmcgaWYgaXQgcHJlY2VkZXMgdGhlIHJlZmVyZW5jZSBmcmFnbWVudAor
ICAgICAgICAgICAgLy8gYW5kIHdoZW4gd2UgaGF2ZW4ndCBmb3VuZCBvbmUgYWxyZWFkeS4KKyAg
ICAgICAgICAgIGlmIChmcmFnbWVudFNlcGFyYXRvciA8IDAgJiYgcXVlcnlTZXBhcmF0b3IgPCAw
KQorICAgICAgICAgICAgICAgIHF1ZXJ5U2VwYXJhdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgZmlyc3QgIyBz
aWduIG9ubHkuCisgICAgICAgICAgICBpZiAoZnJhZ21lbnRTZXBhcmF0b3IgPCAwKQorICAgICAg
ICAgICAgICAgIGZyYWdtZW50U2VwYXJhdG9yID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gTWFya2VycyBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVy
IGFmdGVyIGVhY2ggb2YgdGhlc2UgY29ycmVzcG9uZGluZworICAgIC8vIGNvbXBvbmVudHMuIFRo
ZSBjb2RlIGJlbG93IHdvcmRzIGZyb20gdGhlIGVuZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsCisg
ICAgLy8gYW5kIHdpbGwgdXBkYXRlIHRoZXNlIGluZGljZXMgYXMgaXQgZmluZHMgY29tcG9uZW50
cyB0aGF0IGV4aXN0LgorICAgIGludCByZXNvdXJjZVBhdGhFbmQgPSAtMTsKKyAgICBpbnQgcXVl
cnlFbmQgPSAtMTsKKworICAgIC8vIFJlZiBmcmFnbWVudDogZnJvbSB0aGUgIyB0byB0aGUgZW5k
IG9mIHRoZSBwYXRoLgorICAgIGlmIChmcmFnbWVudFNlcGFyYXRvciA+PSAwKSB7CisgICAgICAg
IHJlc291cmNlUGF0aEVuZCA9IHF1ZXJ5RW5kID0gZnJhZ21lbnRTZXBhcmF0b3I7CisgICAgICAg
IGZyYWdtZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoZnJhZ21lbnRTZXBhcmF0b3IgKyAx
LCBwYXRoRW5kKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVy
eUVuZCA9IHBhdGhFbmQ7CisgICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7CisgICAg
fQorCisgICAgLy8gUXVlcnkgZnJhZ21lbnQ6IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgPyB0byB0aGUg
bmV4dCBib3VuZGFyeSAoZWl0aGVyIHRoZSBlbmQKKyAgICAvLyBvZiB0aGUgcGF0aCBvciB0aGUg
cmVmIGZyYWdtZW50KS4KKyAgICBpZiAocXVlcnlTZXBhcmF0b3IgPj0gMCkgeworICAgICAgICBy
ZXNvdXJjZVBhdGhFbmQgPSBxdWVyeVNlcGFyYXRvcjsKKyAgICAgICAgcXVlcnkgPSBVUkxDb21w
b25lbnQ6OmZyb21SYW5nZShxdWVyeVNlcGFyYXRvciArIDEsIHF1ZXJ5RW5kKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQoKTsKKworICAgIC8vIEZpbGUgcGF0aDog
dHJlYXQgYW4gZW1wdHkgZmlsZSBwYXRoIGFzIG5vIGZpbGUgcGF0aC4KKyAgICBpZiAocmVzb3Vy
Y2VQYXRoRW5kICE9IGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLmJlZ2luKCkpCisgICAgICAgIHJl
c291cmNlUGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGhpZXJhcmNoaWNhbGlkZW50aWZp
ZXJzLmJlZ2luKCksIHJlc291cmNlUGF0aEVuZCk7CisgICAgZWxzZQorICAgICAgICByZXNvdXJj
ZVBhdGggPSBVUkxDb21wb25lbnQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK2Jvb2wgZG9FeHRyYWN0U2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHVybCwgaW50
IHVybExlbmd0aCwgVVJMQ29tcG9uZW50JiBzY2hlbWUpCit7CisgICAgLy8gU2tpcCBsZWFkaW5n
IHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOwor
ICAgIHdoaWxlIChiZWdpbiA8IHVybExlbmd0aCAmJiBzaG91bGRUcmltRnJvbVVSTCh1cmxbYmVn
aW5dKSkKKyAgICAgICAgKytiZWdpbjsKKworICAgIGlmIChiZWdpbiA9PSB1cmxMZW5ndGgpCisg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gSW5wdXQgaXMgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2Uu
CisKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCBjb2xvbiBjaGFyYWN0ZXIuCisgICAgZm9yIChpbnQg
aSA9IGJlZ2luOyBpIDwgdXJsTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHVybFtpXSA9PSAn
OicpIHsKKyAgICAgICAgICAgIHNjaGVtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2lu
LCBpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsgLy8gTm8gY29sb24gZm91bmQ6IG5vIHNjaGVtZQorfQorCisvLyBGaWxscyBp
biBhbGwgbWVtYmVycyBvZiB0aGUgUGFyc2VkIHN0cnVjdHVyZSBleGNlcHQgZm9yIHRoZSBzY2hl
bWUuCisvLworLy8gfHNwZWN8IGlzIHRoZSBmdWxsIHNwZWMgYmVpbmcgcGFyc2VkLCBvZiBsZW5n
dGggfHNwZWNMZW5ndGh8LgorLy8gfGFmdGVyU2NoZW1lfCBpcyB0aGUgY2hhcmFjdGVyIGltbWVk
aWF0ZWx5IGZvbGxvd2luZyB0aGUgc2NoZW1lIChhZnRlciB0aGUKKy8vICAgY29sb24pIHdoZXJl
IHdlJ2xsIGJlZ2luIHBhcnNpbmcuCisvLworLy8gQ29tcGF0YWJpbGl0eSBkYXRhIHBvaW50cy4g
SSBsaXN0ICJob3N0IiwgInBhdGgiIGV4dHJhY3RlZDoKKy8vIElucHV0ICAgICAgICAgICAgICAg
IElFNiAgICAgICAgICAgICBGaXJlZm94ICAgICAgICAgICAgICAgIFVzCisvLyAtLS0tLSAgICAg
ICAgICAgICAgICAtLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0t
LS0tLS0tLQorLy8gaHR0cDovL2Zvby5jb20vICAgICAgImZvby5jb20iLCAiLyIgICJmb28uY29t
IiwgIi8iICAgICAgICAgImZvby5jb20iLCAiLyIKKy8vIGh0dHA6Zm9vLmNvbS8gICAgICAgICJm
b28uY29tIiwgIi8iICAiZm9vLmNvbSIsICIvIiAgICAgICAgICJmb28uY29tIiwgIi8iCisvLyBo
dHRwOi9mb28uY29tLyAgICAgICBmYWlsKCopICAgICAgICAgImZvby5jb20iLCAiLyIgICAgICAg
ICAiZm9vLmNvbSIsICIvIgorLy8gaHR0cDpcZm9vLmNvbS8gICAgICAgZmFpbCgqKSAgICAgICAg
ICJcZm9vLmNvbSIsICIvIihmYWlsKSAgImZvby5jb20iLCAiLyIKKy8vIGh0dHA6Ly8vL2Zvby5j
b20vICAgICJmb28uY29tIiwgIi8iICAiZm9vLmNvbSIsICIvIiAgICAgICAgICJmb28uY29tIiwg
Ii8iCisvLworLy8gKCopIEludGVyZXN0aW5nbHksIGFsdGhvdWdoIElFIGZhaWxzIHRvIGxvYWQg
dGhlc2UgVVJMcywgaXRzIGhpc3RvcnkKKy8vIGNhbm9uaWNhbGl6ZXIgaGFuZGxlcyB0aGVtLCBt
ZWFuaW5nIGlmIHlvdSd2ZSBiZWVuIHRvIHRoZSBjb3JyZXNwb25kaW5nCisvLyAiaHR0cDovL2Zv
by5jb20vIiBsaW5rLCBpdCB3aWxsIGJlIGNvbG9yZWQuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK3ZvaWQgZG9QYXJzZUFmdGVyU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUq
IHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNlZ21lbnRzJiBwYXJz
ZWQpCit7CisgICAgaW50IHNsYXNoZXNDb3VudCA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNw
ZWMsIGFmdGVyU2NoZW1lLCBzcGVjTGVuZ3RoKTsKKyAgICBpbnQgYWZ0ZXJTbGFzaGVzID0gYWZ0
ZXJTY2hlbWUgKyBzbGFzaGVzQ291bnQ7CisKKyAgICAvLyBGaXJzdCBzcGxpdCBpbnRvIHR3byBt
YWluIHBhcnRzLCB0aGUgYXV0aG9yaXR5ICh1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3QsCisgICAg
Ly8gYW5kIHBvcnQpIGFuZCB0aGUgZnVsbCBwYXRoIChwYXRoLCBxdWVyeSwgYW5kIHJlZmVyZW5j
ZSkuCisgICAgVVJMQ29tcG9uZW50IGF1dGhvcml0eTsKKyAgICBVUkxDb21wb25lbnQgZnVsbFBh
dGg7CisKKyAgICAvLyBGb3VuZCAiLy88c29tZSBkYXRhPiIsIGxvb2tzIGxpa2UgYW4gYXV0aG9y
aXR5IHNlY3Rpb24uIFRyZWF0IGV2ZXJ5dGhpbmcKKyAgICAvLyBmcm9tIHRoZXJlIHRvIHRoZSBu
ZXh0IHNsYXNoIChvciBlbmQgb2Ygc3BlYykgdG8gYmUgdGhlIGF1dGhvcml0eS4gTm90ZQorICAg
IC8vIHRoYXQgd2UgaWdub3JlIHRoZSBudW1iZXIgb2Ygc2xhc2hlcyBhbmQgdHJlYXQgaXQgYXMg
dGhlIGF1dGhvcml0eS4KKyAgICBpbnQgZW5kQXV0aCA9IGZpbmROZXh0QXV0aG9yaXR5VGVybWlu
YXRvcihzcGVjLCBhZnRlclNsYXNoZXMsIHNwZWNMZW5ndGgpOworICAgIGF1dGhvcml0eSA9IFVS
TENvbXBvbmVudDo6ZnJvbVJhbmdlKGFmdGVyU2xhc2hlcywgZW5kQXV0aCk7CisKKyAgICBpZiAo
ZW5kQXV0aCA9PSBzcGVjTGVuZ3RoKSAvLyBObyBiZWdpbm5pbmcgb2YgcGF0aCBmb3VuZC4KKyAg
ICAgICAgZnVsbFBhdGggPSBVUkxDb21wb25lbnQoKTsKKyAgICBlbHNlIC8vIEV2ZXJ5dGhpbmcg
c3RhcnRpbmcgZnJvbSB0aGUgc2xhc2ggdG8gdGhlIGVuZCBpcyB0aGUgcGF0aC4KKyAgICAgICAg
ZnVsbFBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShlbmRBdXRoLCBzcGVjTGVuZ3RoKTsK
KworICAgIC8vIE5vdyBwYXJzZSB0aG9zZSB0d28gc3ViLXBhcnRzLgorICAgIGRvUGFyc2VBdXRo
b3JpdHkoc3BlYywgYXV0aG9yaXR5LCBwYXJzZWQudXNlcm5hbWUsIHBhcnNlZC5wYXNzd29yZCwg
cGFyc2VkLmhvc3QsIHBhcnNlZC5wb3J0KTsKKyAgICBwYXJzZVBhdGgoc3BlYywgZnVsbFBhdGgs
IHBhcnNlZC5wYXRoLCBwYXJzZWQucXVlcnksIHBhcnNlZC5mcmFnbWVudCk7Cit9CisKKy8vIFRo
ZSBtYWluIHBhcnNpbmcgZnVuY3Rpb24gZm9yIHN0YW5kYXJkIFVSTHMuIFN0YW5kYXJkIFVSTHMg
aGF2ZSBhIHNjaGVtZSwKKy8vIGhvc3QsIHBhdGgsIGV0Yy4KK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Cit2b2lkIGRvUGFyc2VTdGFuZGFyZFVSTChjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBBU1NF
UlQoc3BlY0xlbmd0aCA+PSAwKTsKKworICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBz
cGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIHRy
aW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgpOworCisgICAgaW50IGFmdGVyU2NoZW1lID0g
LTE7CisgICAgaWYgKGRvRXh0cmFjdFNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWQuc2No
ZW1lKSkKKyAgICAgICAgYWZ0ZXJTY2hlbWUgPSBwYXJzZWQuc2NoZW1lLmVuZCgpICsgMTsgLy8g
U2tpcCBwYXN0IHRoZSBjb2xvbi4KKyAgICBlbHNlIHsKKyAgICAgICAgLy8gU2F5IHRoZXJlJ3Mg
bm8gc2NoZW1lIHdoZW4gdGhlcmUgaXMgbm8gY29sb24uIFdlIGNvdWxkIGFsc28gc2F5IHRoYXQK
KyAgICAgICAgLy8gZXZlcnl0aGluZyBpcyB0aGUgc2NoZW1lLiBCb3RoIHdvdWxkIHByb2R1Y2Ug
YW4gaW52YWxpZCBVUkwsIGJ1dCB0aGlzIHdheQorICAgICAgICAvLyBzZWVtcyBsZXNzIHdyb25n
IGluIG1vcmUgY2FzZXMuCisgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKKyAgICAgICAg
YWZ0ZXJTY2hlbWUgPSBiZWdpbjsKKyAgICB9CisgICAgZG9QYXJzZUFmdGVyU2NoZW1lKHNwZWMs
IHNwZWNMZW5ndGgsIGFmdGVyU2NoZW1lLCBwYXJzZWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBkb1BhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAg
ICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsKKworICAgIC8vIEdldCB0aGUgdW51c2VkIHBhcnRz
IG9mIHRoZSBVUkwgb3V0IG9mIHRoZSB3YXkuCisgICAgcGFyc2VkLnVzZXJuYW1lLnJlc2V0KCk7
CisgICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7CisgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsK
KyAgICBwYXJzZWQucG9ydC5yZXNldCgpOworICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7IC8vIE1h
eSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgorICAgIHBhcnNlZC5mcmFnbWVudC5y
ZXNldCgpOyAvLyBNYXkgdXNlIHRoaXM7IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KKyAgICBwYXJz
ZWQucXVlcnkucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlzOyByZXNldCBmb3IgY29udmVuaWVuY2Uu
CisgICAgcGFyc2VkLmNsZWFySW5uZXJVUkxTZWdtZW50cygpOyAvLyBNYXkgdXNlIHRoaXM7IHJl
c2V0IGZvciBjb252ZW5pZW5jZS4KKworICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBz
cGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIHRy
aW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgpOworCisgICAgLy8gSGFuZGxlIGVtcHR5IHNw
ZWNzIG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJz
LgorICAgIGlmIChiZWdpbiA9PSBzcGVjTGVuZ3RoKSB7CisgICAgICAgIHBhcnNlZC5zY2hlbWUu
cmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBpbm5lclN0YXJ0ID0g
LTE7CisKKyAgICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUuIFdlIGFsc28gaGFuZGxlIHRoZSBjYXNl
IHdoZXJlIHRoZXJlIGlzIG5vIHNjaGVtZS4KKyAgICBpZiAoZG9FeHRyYWN0U2NoZW1lKCZzcGVj
W2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCBwYXJzZWQuc2NoZW1lKSkgeworICAgICAgICAv
LyBPZmZzZXQgdGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3Ry
aW5nLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4o
KSArIGJlZ2luKTsKKworICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVu
Z3RoIC0gMSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpbm5lclN0YXJ0ID0gcGFy
c2VkLnNjaGVtZS5lbmQoKSArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gc2NoZW1l
IGZvdW5kOyB0aGF0J3Mgbm90IHZhbGlkIGZvciBmaWxlc3lzdGVtIFVSTHMuCisgICAgICAgIHBh
cnNlZC5zY2hlbWUucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFVSTENv
bXBvbmVudCBpbm5lclNjaGVtZTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBpbm5lclNwZWMg
PSAmc3BlY1tpbm5lclN0YXJ0XTsKKyAgICBpbnQgaW5uZXJTcGVjTGVuZ3RoID0gc3BlY0xlbmd0
aCAtIGlubmVyU3RhcnQ7CisKKyAgICBpZiAoZG9FeHRyYWN0U2NoZW1lKGlubmVyU3BlYywgaW5u
ZXJTcGVjTGVuZ3RoLCBpbm5lclNjaGVtZSkpIHsKKyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1
bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgaW5u
ZXJTY2hlbWUuc2V0QmVnaW4oaW5uZXJTY2hlbWUuYmVnaW4oKSArIGlubmVyU3RhcnQpOworCisg
ICAgICAgIGlmIChpbm5lclNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQ7IHRo
YXQncyBub3QgdmFsaWQgZm9yIGZpbGVzeXN0ZW0gVVJMcy4KKyAgICAgICAgLy8gVGhlIGJlc3Qg
d2UgY2FuIGRvIGlzIHJldHVybiAiZmlsZXN5c3RlbTovLyIuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBVUkxTZWdtZW50cyBpbm5lclBhcnNlZDsKKyAgICBpZiAoVVJMVXRpbGl0aWVz
OjpDb21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIGlubmVyU2NoZW1lLCBVUkxVdGlsaXRpZXM6
OmtGaWxlU2NoZW1lKSkgeworICAgICAgICAvLyBGaWxlIFVSTHMgYXJlIHNwZWNpYWwuCisgICAg
ICAgIFBhcnNlRmlsZVVSTChpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgJmlubmVyUGFyc2Vk
KTsKKyAgICB9IGVsc2UgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNvbXBvbmVudChz
cGVjLCBpbm5lclNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVN5c3RlbVNjaGVtZSkpIHsKKyAg
ICAgICAgLy8gRmlsZXN5c3RlbSBVUkxzIGRvbid0IG5lc3QuCisgICAgICAgIHJldHVybjsKKyAg
ICB9IGVsc2UgaWYgKFVSTFV0aWxpdGllczo6aXNTdGFuZGFyZChzcGVjLCBpbm5lclNjaGVtZSkp
IHsKKyAgICAgICAgLy8gQWxsICJub3JtYWwiIFVSTHMuCisgICAgICAgIGRvUGFyc2VTdGFuZGFy
ZFVSTChpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgaW5uZXJQYXJzZWQpOworICAgIH0gZWxz
ZQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBbGwgbWVtYmVycyBvZiBpbm5lclBhcnNlZCBu
ZWVkIHRvIGJlIG9mZnNldCBieSBpbm5lclN0YXJ0LgorICAgIC8vIElmIHdlIGhhZCBhbnkgc2No
ZW1lIHRoYXQgc3VwcG9ydGVkIG5lc3RpbmcgbW9yZSB0aGFuIG9uZSBsZXZlbCBkZWVwLAorICAg
IC8vIHdlJ2QgaGF2ZSB0byByZWN1cnNlIGludG8gdGhlIGlubmVyUGFyc2VkJ3MgaW5uZXJQYXJz
ZWQgd2hlbgorICAgIC8vIGFkanVzdGluZyBieSBpbm5lclN0YXJ0LgorICAgIGlubmVyUGFyc2Vk
LnNjaGVtZS5zZXRCZWdpbihpbm5lclBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGlubmVyU3RhcnQp
OworICAgIGlubmVyUGFyc2VkLnVzZXJuYW1lLnNldEJlZ2luKGlubmVyUGFyc2VkLnVzZXJuYW1l
LmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKyAgICBpbm5lclBhcnNlZC5wYXNzd29yZC5zZXRCZWdp
bihpbm5lclBhcnNlZC5wYXNzd29yZC5iZWdpbigpICsgaW5uZXJTdGFydCk7CisgICAgaW5uZXJQ
YXJzZWQuaG9zdC5zZXRCZWdpbihpbm5lclBhcnNlZC5ob3N0LmJlZ2luKCkgKyBpbm5lclN0YXJ0
KTsKKyAgICBpbm5lclBhcnNlZC5wb3J0LnNldEJlZ2luKGlubmVyUGFyc2VkLnBvcnQuYmVnaW4o
KSArIGlubmVyU3RhcnQpOworICAgIGlubmVyUGFyc2VkLnF1ZXJ5LnNldEJlZ2luKGlubmVyUGFy
c2VkLnF1ZXJ5LmJlZ2luKCkgKyBpbm5lclN0YXJ0KTsKKyAgICBpbm5lclBhcnNlZC5mcmFnbWVu
dC5zZXRCZWdpbihpbm5lclBhcnNlZC5mcmFnbWVudC5iZWdpbigpICsgaW5uZXJTdGFydCk7Cisg
ICAgaW5uZXJQYXJzZWQucGF0aC5zZXRCZWdpbihpbm5lclBhcnNlZC5wYXRoLmJlZ2luKCkgKyBp
bm5lclN0YXJ0KTsKKworICAgIC8vIFF1ZXJ5IGFuZCByZWYgbW92ZSBmcm9tIGlubmVyUGFyc2Vk
IHRvIHBhcnNlZC4KKyAgICBwYXJzZWQucXVlcnkgPSBpbm5lclBhcnNlZC5xdWVyeTsKKyAgICBp
bm5lclBhcnNlZC5xdWVyeS5yZXNldCgpOworICAgIHBhcnNlZC5mcmFnbWVudCA9IGlubmVyUGFy
c2VkLmZyYWdtZW50OworICAgIGlubmVyUGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7CisKKyAgICBw
YXJzZWQuc2V0SW5uZXJVUkxTZWdtZW50cyhpbm5lclBhcnNlZCk7CisgICAgaWYgKCFpbm5lclBh
cnNlZC5zY2hlbWUuaXNWYWxpZCgpIHx8ICFpbm5lclBhcnNlZC5wYXRoLmlzVmFsaWQoKSB8fCBp
bm5lclBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRoZSBwYXRoIGluIGlubmVyUGFyc2VkIHNob3VsZCBzdGFydCB3aXRoIGEgc2xhc2gsIHRoZW4g
aGF2ZSBhIGZpbGVzeXN0ZW0KKyAgICAvLyB0eXBlIGZvbGxvd2VkIGJ5IGEgc2xhc2guIEZyb20g
dGhlIGZpcnN0IHNsYXNoIHVwIHRvIGJ1dCBleGNsdWRpbmcgdGhlCisgICAgLy8gc2Vjb25kIHNo
b3VsZCBiZSB3aGF0IGl0IGtlZXBzOyB0aGUgcmVzdCBnb2VzIHRvIHBhcnNlZC4gSWYgdGhlIHBh
dGggZW5kcworICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIHNsYXNoLCBpdCdzIHN0aWxsIHByZXR0
eSBjbGVhciB3aGF0IHRoZSB1c2VyIG1lYW50LCBzbworICAgIC8vIHdlJ2xsIGxldCB0aGF0IHRo
cm91Z2guCisgICAgaWYgKCFpc1VSTFNsYXNoKHNwZWNbaW5uZXJQYXJzZWQucGF0aC5iZWdpbigp
XSkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBpbm5lclBhdGhFbmQgPSBpbm5lclBhcnNl
ZC5wYXRoLmJlZ2luKCkgKyAxOyAvLyBza2lwIHRoZSBsZWFkaW5nIHNsYXNoCisgICAgd2hpbGUg
KGlubmVyUGF0aEVuZCA8IHNwZWNMZW5ndGggJiYgIWlzVVJMU2xhc2goc3BlY1tpbm5lclBhdGhF
bmRdKSkKKyAgICAgICAgKytpbm5lclBhdGhFbmQ7CisgICAgcGFyc2VkLnBhdGguc2V0QmVnaW4o
aW5uZXJQYXRoRW5kKTsKKyAgICBpbnQgbmV3SW5uZXJQYXRoTGVuZ3RoID0gaW5uZXJQYXRoRW5k
IC0gaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpOworICAgIHBhcnNlZC5wYXRoLnNldExlbmd0aChp
bm5lclBhcnNlZC5wYXRoLmxlbmd0aCgpIC0gbmV3SW5uZXJQYXRoTGVuZ3RoKTsKKyAgICBpbm5l
clBhcnNlZC5wYXRoLnNldExlbmd0aChuZXdJbm5lclBhdGhMZW5ndGgpOworICAgIHBhcnNlZC5z
ZXRJbm5lclVSTFNlZ21lbnRzKGlubmVyUGFyc2VkKTsKK30KKworLy8gSW5pdGlhbGl6ZXMgYSBw
YXRoIFVSTCB3aGljaCBpcyBtZXJlbHkgYSBzY2hlbWUgZm9sbG93ZWQgYnkgYSBwYXRoLiBFeGFt
cGxlcworLy8gaW5jbHVkZSAiYWJvdXQ6Zm9vIiBhbmQgImphdmFzY3JpcHQ6YWxlcnQoJ2Jhcicp
OyIKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRvUGFyc2VQYXRoVVJM
KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYg
cGFyc2VkKQoreworICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMg
b2YgdGhlIFVSTCBvdXQgb2YgdGhlIHdheSwgd2UgbmV2ZXIKKyAgICAvLyB1c2UgdGhlbS4KKyAg
ICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsK
KyAgICBwYXJzZWQuaG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7CisgICAg
cGFyc2VkLnF1ZXJ5LnJlc2V0KCk7CisgICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7CisKKyAg
ICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3Rl
cnMuCisgICAgaW50IGJlZ2luID0gMDsKKyAgICB0cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVu
Z3RoKTsKKworICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBv
bmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBjaGFycy4KKyAgICBpZiAoYmVnaW4gPT0gc3BlY0xl
bmd0aCkgeworICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAgIHBhcnNlZC5w
YXRoLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0IHRo
ZSBzY2hlbWUsIHdpdGggdGhlIHBhdGggYmVpbmcgZXZlcnl0aGluZyBmb2xsb3dpbmcuIFdlIGFs
c28KKyAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1lLgorICAg
IGlmIChFeHRyYWN0U2NoZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAmcGFy
c2VkLnNjaGVtZSkpIHsKKyAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdh
dmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KKyAgICAgICAgcGFyc2VkLnNjaGVtZS5zZXRC
ZWdpbihwYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBiZWdpbik7CisKKyAgICAgICAgLy8gRm9yIGNv
bXBhdGFiaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJMIHBhcnNlciwgd2UgdHJlYXQgbm8gcGF0
aCBhcworICAgICAgICAvLyAtMSwgcmF0aGVyIHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9mIDAgKHdl
IG5vcm1hbGx5IHdvdWxkbid0IGNhcmUgc28KKyAgICAgICAgLy8gbXVjaCBmb3IgdGhlc2Ugbm9u
LXN0YW5kYXJkIFVSTHMpLgorICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVj
TGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGFy
c2VkLnNjaGVtZS5lbmQoKSArIDEsIHNwZWNMZW5ndGgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIE5vIHNjaGVtZSBmb3VuZCwganVzdCBwYXRoLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJl
c2V0KCk7CisgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVn
aW4sIHNwZWNMZW5ndGgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK3ZvaWQgZG9QYXJzZU1haWx0b1VSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBp
bnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAgICBBU1NFUlQoc3BlY0xl
bmd0aCA+PSAwKTsKKworICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFy
dHMgb2YgdGhlIFVSTCBvdXQgb2YgdGhlIHdheSwgd2UgbmV2ZXIKKyAgICAvLyB1c2UgdGhlbS4K
KyAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKKyAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQo
KTsKKyAgICBwYXJzZWQuaG9zdC5yZXNldCgpOworICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7Cisg
ICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7CisgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7IC8v
IE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgorCisgICAgLy8gU3RyaXAgbGVh
ZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGludCBi
ZWdpbiA9IDA7CisgICAgdHJpbVVSTChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7CisKKyAgICAv
LyBIYW5kbGUgZW1wdHkgc3BlY3Mgb3Igb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNl
IG9yIGNvbnRyb2wgY2hhcnMuCisgICAgaWYgKGJlZ2luID09IHNwZWNMZW5ndGgpIHsKKyAgICAg
ICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOworICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHBhdGhCZWdpbiA9IC0xOworICAgIGlu
dCBwYXRoRW5kID0gLTE7CisKKyAgICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUsIHdpdGggdGhlIHBh
dGggYmVpbmcgZXZlcnl0aGluZyBmb2xsb3dpbmcuIFdlIGFsc28KKyAgICAvLyBoYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1lLgorICAgIGlmIChFeHRyYWN0U2NoZW1lKCZz
cGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAmcGFyc2VkLnNjaGVtZSkpIHsKKyAgICAg
ICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1
YnN0cmluZy4KKyAgICAgICAgcGFyc2VkLnNjaGVtZS5zZXRCZWdpbihwYXJzZWQuc2NoZW1lLmJl
Z2luKCkgKyBiZWdpbik7CisKKyAgICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkgIT0gc3Bl
Y0xlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIHBhdGhCZWdpbiA9IHBhcnNlZC5zY2hlbWUuZW5k
KCkgKyAxOworICAgICAgICAgICAgcGF0aEVuZCA9IHNwZWNMZW5ndGg7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQsIGp1c3QgcGF0aC4KKyAgICAg
ICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOworICAgICAgICBwYXRoQmVnaW4gPSBiZWdpbjsKKyAg
ICAgICAgcGF0aEVuZCA9IHNwZWNMZW5ndGg7CisgICAgfQorCisgICAgLy8gU3BsaXQgW3BhdGhC
ZWdpbiwgcGF0aEVuZCkgaW50byBhIHBhdGggKyBxdWVyeS4KKyAgICBmb3IgKGludCBpID0gcGF0
aEJlZ2luOyBpIDwgcGF0aEVuZDsgKytpKSB7CisgICAgICAgIGlmIChzcGVjW2ldID09ICc/Jykg
eworICAgICAgICAgICAgcGFyc2VkLnF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSAr
IDEsIHBhdGhFbmQpOworICAgICAgICAgICAgcGF0aEVuZCA9IGk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvciBjb21wYXRhYmlsaXR5IHdpdGggdGhl
IHN0YW5kYXJkIFVSTCBwYXJzZXIsIHRyZWF0IG5vIHBhdGggYXMKKyAgICAvLyAtMSwgcmF0aGVy
IHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9mIDAKKyAgICBpZiAocGF0aEJlZ2luID09IHBhdGhFbmQp
CisgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7CisgICAgZWxzZQorICAgICAgICBwYXJzZWQu
cGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHBhdGhCZWdpbiwgcGF0aEVuZCk7Cit9CisK
Ky8vIENvbnZlcnRzIGEgcG9ydCBudW1iZXIgaW4gYSBzdHJpbmcgdG8gYW4gaW50ZWdlci4gV2Un
ZCBsaWtlIHRvIGp1c3QgY2FsbAorLy8gc3NjYW5mIGJ1dCBvdXIgaW5wdXQgaXMgbm90IG51bGwt
dGVybWluYXRlZCwgd2hpY2ggc3NjYW5mIHJlcXVpcmVzLiBJbnN0ZWFkLAorLy8gd2UgY29weSB0
aGUgZGlnaXRzIHRvIGEgc21hbGwgc3RhY2sgYnVmZmVyIChzaW5jZSB3ZSBrbm93IHRoZSBtYXhp
bXVtIG51bWJlcgorLy8gb2YgZGlnaXRzIGluIGEgdmFsaWQgcG9ydCBudW1iZXIpIHRoYXQgd2Ug
Y2FuIG51bGwgdGVybWluYXRlLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lu
dCBkb1BhcnNlUG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIGNvbXBvbmVudCkKK3sKKyAgICAvLyBFYXN5IHN1Y2Nlc3MgY2FzZSB3aGVuIHRoZXJlIGlz
IG5vIHBvcnQuCisgICAgY29uc3QgaW50IGtNYXhEaWdpdHMgPSA1OworICAgIGlmICghY29tcG9u
ZW50LmlzTm9uRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFBPUlRfVU5TUEVDSUZJRUQ7CisKKyAg
ICAvLyBTa2lwIG92ZXIgYW55IGxlYWRpbmcgMHMuCisgICAgVVJMQ29tcG9uZW50IGRpZ2l0Q29t
cG9uZW50KGNvbXBvbmVudC5lbmQoKSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21w
b25lbnQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4o
KSArIGldICE9ICcwJykgeworICAgICAgICAgICAgZGlnaXRDb21wb25lbnQgPSBVUkxDb21wb25l
bnQ6OmZyb21SYW5nZShjb21wb25lbnQuYmVnaW4oKSArIGksIGNvbXBvbmVudC5lbmQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWRpZ2l0Q29tcG9u
ZW50Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsgLy8gQWxsIGRpZ2l0cyB3ZXJlIDAuCisK
KyAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSBkaWdpdHMgKHdlJ2xsIGJlIGNv
cHlpbmcgdG8gb3VyIGJ1ZmZlciBzbworICAgIC8vIHdlIG5lZWQgdG8gZG91YmxlLWNoZWNrKS4K
KyAgICBpZiAoZGlnaXRDb21wb25lbnQubGVuZ3RoKCkgPiBrTWF4RGlnaXRzKQorICAgICAgICBy
ZXR1cm4gUE9SVF9JTlZBTElEOworCisgICAgLy8gQ29weSB2YWxpZCBkaWdpdHMgdG8gdGhlIGJ1
ZmZlci4KKyAgICBjaGFyIGRpZ2l0c1trTWF4RGlnaXRzICsgMV07IC8vICsxIGZvciBudWxsIHRl
cm1pbmF0b3IKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpZ2l0Q29tcG9uZW50Lmxlbmd0aCgp
OyBpKyspIHsKKyAgICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9IHNwZWNbZGlnaXRDb21wb25lbnQu
YmVnaW4oKSArIGldOworICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChjaCkpIHsKKyAgICAgICAg
ICAgIC8vIEludmFsaWQgcG9ydCBkaWdpdCwgZmFpbC4KKyAgICAgICAgICAgIHJldHVybiBQT1JU
X0lOVkFMSUQ7CisgICAgICAgIH0KKyAgICAgICAgZGlnaXRzW2ldID0gc3RhdGljX2Nhc3Q8Y2hh
cj4oY2gpOworICAgIH0KKworICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBzdHJpbmcgYW5kIGNv
bnZlcnQgdG8gaW50ZWdlci4gU2luY2Ugd2UgZ3VhcmFudGVlCisgICAgLy8gb25seSBkaWdpdHMs
IGF0b2kncyBsYWNrIG9mIGVycm9yIGhhbmRsaW5nIGlzIE9LLgorICAgIGRpZ2l0c1tkaWdpdENv
bXBvbmVudC5sZW5ndGgoKV0gPSAwOworICAgIGludCBwb3J0ID0gYXRvaShkaWdpdHMpOworICAg
IGlmIChwb3J0ID4gNjU1MzUpCisgICAgICAgIHJldHVybiBQT1JUX0lOVkFMSUQ7IC8vIE91dCBv
ZiByYW5nZS4KKyAgICByZXR1cm4gcG9ydDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3ZvaWQgZG9FeHRyYWN0RmlsZU5hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQmIGZpbGVOYW1lKQorewor
ICAgIC8vIEhhbmRsZSBlbXB0eSBwYXRoczogdGhleSBoYXZlIG5vIGZpbGUgbmFtZXMuCisgICAg
aWYgKCFwYXRoLmlzTm9uRW1wdHkoKSkgeworICAgICAgICBmaWxlTmFtZSA9IFVSTENvbXBvbmVu
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBm
b3IgYSBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgbm9ybWFsbHkgdW51c2VkIGZpZWxkIGluIGEKKyAg
ICAvLyBVUkwgZGVsaW1pdGVkIGJ5IGEgc2VtaWNvbG9uLiBXZSBwYXJzZSB0aGUgcGFyYW1ldGVy
IGFzIHBhcnQgb2YgdGhlCisgICAgLy8gcGF0aCwgYnV0IGhlcmUsIHdlIGRvbid0IHdhbnQgdG8g
Y291bnQgaXQuIFRoZSBsYXN0IHNlbWljb2xvbiBpcyB0aGUKKyAgICAvLyBwYXJhbWV0ZXIuIFRo
ZSBwYXRoIHNob3VsZCBzdGFydCB3aXRoIGEgc2xhc2gsIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hl
Y2sKKyAgICAvLyB0aGUgZmlyc3Qgb25lLgorICAgIGludCBmaWxlRW5kID0gcGF0aC5lbmQoKTsK
KyAgICBmb3IgKGludCBpID0gcGF0aC5lbmQoKSAtIDE7IGkgPiBwYXRoLmJlZ2luKCk7IC0taSkg
eworICAgICAgICBpZiAoc3BlY1tpXSA9PSAnOycpIHsKKyAgICAgICAgICAgIGZpbGVFbmQgPSBp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgc2Vh
cmNoIGJhY2t3YXJkcyBmcm9tIHRoZSBmaWxlbmFtZSBlbmQgdG8gdGhlIHByZXZpb3VzIHNsYXNo
CisgICAgLy8gdG8gZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlbmFtZS4KKyAgICBmb3Ig
KGludCBpID0gZmlsZUVuZCAtIDE7IGkgPj0gcGF0aC5iZWdpbigpOyAtLWkpIHsKKyAgICAgICAg
aWYgKGlzVVJMU2xhc2goc3BlY1tpXSkpIHsKKyAgICAgICAgICAgIC8vIEZpbGUgbmFtZSBpcyBl
dmVyeXRoaW5nIGZvbGxvd2luZyB0aGlzIGNoYXJhY3RlciB0byB0aGUgZW5kCisgICAgICAgICAg
ICBmaWxlTmFtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBmaWxlRW5kKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vIHNsYXNoIGZv
dW5kLCB0aGlzIG1lYW5zIHRoZSBpbnB1dCB3YXMgZGVnZW5lcmF0ZSAoZ2VuZXJhbGx5IHBhdGhz
CisgICAgLy8gd2lsbCBzdGFydCB3aXRoIGEgc2xhc2gpLiBMZXQncyBjYWxsIGV2ZXJ5dGhpbmcg
dGhlIGZpbGUgbmFtZS4KKyAgICBmaWxlTmFtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHBh
dGguYmVnaW4oKSwgZmlsZUVuZCk7CisgICAgcmV0dXJuOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBkb0V4dHJhY3RRdWVyeUtleVZhbHVlKGNvbnN0IENoYXJh
Y3RlclR5cGUqIHNwZWMsIFVSTENvbXBvbmVudCYgcXVlcnksIFVSTENvbXBvbmVudCYga2V5LCBV
UkxDb21wb25lbnQmIHZhbHVlKQoreworICAgIGlmICghcXVlcnkuaXNOb25FbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgc3RhcnQgPSBxdWVyeS5iZWdpbigpOworICAg
IGludCBjdXJyZW50ID0gc3RhcnQ7CisgICAgaW50IGVuZCA9IHF1ZXJ5LmVuZCgpOworCisgICAg
Ly8gV2UgYXNzdW1lIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGlzIHRoZSBiZWdpbm5pbmcg
b2YgdGhlICJrZXkiIGFuZCB3ZQorICAgIC8vIHNraXAgdG8gdGhlIGVuZCBvZiBpdC4KKyAgICBr
ZXkuc2V0QmVnaW4oY3VycmVudCk7CisgICAgd2hpbGUgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tj
dXJyZW50XSAhPSAnJicgJiYgc3BlY1tjdXJyZW50XSAhPSAnPScpCisgICAgICAgICsrY3VycmVu
dDsKKyAgICBrZXkuc2V0TGVuZ3RoKGN1cnJlbnQgLSBrZXkuYmVnaW4oKSk7CisKKyAgICAvLyBT
a2lwIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGtleSAoaWYgYW55KS4KKyAgICBpZiAoY3VycmVu
dCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdID09ICc9JykKKyAgICAgICAgKytjdXJyZW50OworCisg
ICAgLy8gRmluZCB0aGUgdmFsdWUgcGFydC4KKyAgICB2YWx1ZS5zZXRCZWdpbihjdXJyZW50KTsK
KyAgICB3aGlsZSAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcmJykKKyAgICAg
ICAgKytjdXJyZW50OworICAgIHZhbHVlLnNldExlbmd0aChjdXJyZW50IC0gdmFsdWUuYmVnaW4o
KSk7CisKKyAgICAvLyBGaW5hbGx5IHNraXAgdGhlIG5leHQgc2VwYXJhdG9yIGlmIGFueQorICAg
IGlmIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gPT0gJyYnKQorICAgICAgICArK2N1
cnJlbnQ7CisKKyAgICAvLyBTYXZlIHRoZSBuZXcgcXVlcnkKKyAgICBxdWVyeSA9IFVSTENvbXBv
bmVudDo6ZnJvbVJhbmdlKGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlCisKK2Jvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBjaGFyKiB1cmwsIGludCB1
cmxMZW5ndGgsIFVSTENvbXBvbmVudCogc2NoZW1lKQoreworICAgIHJldHVybiBkb0V4dHJhY3RT
Y2hlbWUodXJsLCB1cmxMZW5ndGgsICpzY2hlbWUpOworfQorCitib29sIEV4dHJhY3RTY2hlbWUo
Y29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50KiBzY2hlbWUpCit7
CisgICAgcmV0dXJuIGRvRXh0cmFjdFNjaGVtZSh1cmwsIHVybExlbmd0aCwgKnNjaGVtZSk7Cit9
CisKKy8vIFRoaXMgaGFuZGxlcyBldmVyeXRoaW5nIHRoYXQgbWF5IGJlIGFuIGF1dGhvcml0eSB0
ZXJtaW5hdG9yLCBpbmNsdWRpbmcKKy8vIGJhY2tzbGFzaC4gRm9yIHNwZWNpYWwgYmFja3NsYXNo
IGhhbmRsaW5nIHNlZSBEb1BhcnNlQWZ0ZXJTY2hlbWUuCitib29sIElzQXV0aG9yaXR5VGVybWlu
YXRvcihVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGlzVVJMU2xhc2goY2hhcmFjdGVy
KSB8fCBjaGFyYWN0ZXIgPT0gJz8nIHx8IGNoYXJhY3RlciA9PSAnIyc7Cit9CisKK3ZvaWQgRXh0
cmFjdEZpbGVOYW1lKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBV
UkxDb21wb25lbnQqIGZpbGVOYW1lKQoreworICAgIGRvRXh0cmFjdEZpbGVOYW1lKHVybCwgcGF0
aCwgKmZpbGVOYW1lKTsKK30KKwordm9pZCBFeHRyYWN0RmlsZU5hbWUoY29uc3QgVUNoYXIqIHVy
bCwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQqIGZpbGVOYW1lKQorewor
ICAgIGRvRXh0cmFjdEZpbGVOYW1lKHVybCwgcGF0aCwgKmZpbGVOYW1lKTsKK30KKworYm9vbCBF
eHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBjaGFyKiB1cmwsIFVSTENvbXBvbmVudCogcXVlcnks
IFVSTENvbXBvbmVudCoga2V5LCBVUkxDb21wb25lbnQqIHZhbHVlKQoreworICAgIHJldHVybiBk
b0V4dHJhY3RRdWVyeUtleVZhbHVlKHVybCwgKnF1ZXJ5LCAqa2V5LCAqdmFsdWUpOworfQorCiti
b29sIEV4dHJhY3RRdWVyeUtleVZhbHVlKGNvbnN0IFVDaGFyKiB1cmwsIFVSTENvbXBvbmVudCog
cXVlcnksIFVSTENvbXBvbmVudCoga2V5LCAgVVJMQ29tcG9uZW50KiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gZG9FeHRyYWN0UXVlcnlLZXlWYWx1ZSh1cmwsICpxdWVyeSwgKmtleSwgKnZhbHVlKTsK
K30KKwordm9pZCBQYXJzZUF1dGhvcml0eShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIGF1dGgsIFVSTENvbXBvbmVudCogdXNlcm5hbWUsIFVSTENvbXBvbmVudCogcGFzc3dv
cmQsIFVSTENvbXBvbmVudCogaG9zdG5hbWUsIFVSTENvbXBvbmVudCogcG9ydE51bWJlcikKK3sK
KyAgICBkb1BhcnNlQXV0aG9yaXR5KHNwZWMsIGF1dGgsICp1c2VybmFtZSwgKnBhc3N3b3JkLCAq
aG9zdG5hbWUsICpwb3J0TnVtYmVyKTsKK30KKwordm9pZCBQYXJzZUF1dGhvcml0eShjb25zdCBV
Q2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLCBVUkxDb21wb25lbnQqIHVzZXJu
YW1lLCBVUkxDb21wb25lbnQqIHBhc3N3b3JkLCBVUkxDb21wb25lbnQqIGhvc3RuYW1lLCBVUkxD
b21wb25lbnQqIHBvcnROdW1iZXIpCit7CisgICAgZG9QYXJzZUF1dGhvcml0eShzcGVjLCBhdXRo
LCAqdXNlcm5hbWUsICpwYXNzd29yZCwgKmhvc3RuYW1lLCAqcG9ydE51bWJlcik7Cit9CisKK2lu
dCBQYXJzZVBvcnQoY29uc3QgY2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQpCit7
CisgICAgcmV0dXJuIGRvUGFyc2VQb3J0KHVybCwgcG9ydCk7Cit9CisKK2ludCBQYXJzZVBvcnQo
Y29uc3QgVUNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0KQoreworICAgIHJldHVy
biBkb1BhcnNlUG9ydCh1cmwsIHBvcnQpOworfQorCit2b2lkIFBhcnNlU3RhbmRhcmRVUkwoY29u
c3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAg
IGRvUGFyc2VTdGFuZGFyZFVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQg
UGFyc2VTdGFuZGFyZFVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdt
ZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VTdGFuZGFyZFVSTCh1cmwsIHVybExlbmd0aCwg
KnBhcnNlZCk7Cit9CisKK3ZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlUGF0aFVSTCh1cmws
IHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IFVDaGFy
KiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAgZG9QYXJz
ZVBhdGhVUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOworfQorCit2b2lkIFBhcnNlRmlsZVN5
c3RlbVVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJz
ZWQpCit7CisgICAgZG9QYXJzZUZpbGVTeXN0ZW1VUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQp
OworfQorCit2b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJs
TGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQoreworICAgIGRvUGFyc2VGaWxlU3lzdGVtVVJM
KHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9pZCBQYXJzZU1haWx0b1VSTChjb25z
dCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCit7CisgICAg
ZG9QYXJzZU1haWx0b1VSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Cit9CisKK3ZvaWQgUGFy
c2VNYWlsdG9VUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMq
IHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlTWFpbHRvVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2Vk
KTsKK30KKwordm9pZCBwYXJzZVBhdGhJbnRlcm5hbChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmlsZXBhdGgsIFVSTENvbXBvbmVudCog
cXVlcnksIFVSTENvbXBvbmVudCogZnJhZ21lbnQpCit7CisgICAgcGFyc2VQYXRoKHNwZWMsIHBh
dGgsICpmaWxlcGF0aCwgKnF1ZXJ5LCAqZnJhZ21lbnQpOworfQorCit2b2lkIHBhcnNlUGF0aElu
dGVybmFsKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENv
bXBvbmVudCogZmlsZXBhdGgsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCogZnJh
Z21lbnQpCit7CisgICAgcGFyc2VQYXRoKHNwZWMsIHBhdGgsICpmaWxlcGF0aCwgKnF1ZXJ5LCAq
ZnJhZ21lbnQpOworfQorCit2b2lkIHBhcnNlQWZ0ZXJTY2hlbWUoY29uc3QgY2hhciogc3BlYywg
aW50IHNwZWNMZW5ndGgsIGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sK
KyAgICBkb1BhcnNlQWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJTY2hlbWUsIHBh
cnNlZCk7Cit9CisKK3ZvaWQgcGFyc2VBZnRlclNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgaW50
IHNwZWNMZW5ndGgsIGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKK3sKKyAg
ICBkb1BhcnNlQWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJTY2hlbWUsIHBhcnNl
ZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTFBhcnNlLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzk3YjEwYTkxODkyMTgyMTIzNjAzZTI2ZWM5OTU5NGU2ZGRmMzQxNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuaApAQCAtMCwwICsxLDE2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
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
ZiBVUkxQYXJzZV9oCisjZGVmaW5lIFVSTFBhcnNlX2gKKworI2luY2x1ZGUgIlVSTENvbXBvbmVu
dC5oIgorI2luY2x1ZGUgIlVSTFNlZ21lbnRzLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFj
ZSBVUkxQYXJzZXIgeworCisvLyBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhlc2UgZnVu
Y3Rpb25zIHBhcnNlIHRoZSBnaXZlbiBVUkwsIGZpbGxpbmcgaW4gYWxsIG9mIHRoZSBzdHJ1Y3R1
cmUncworLy8gY29tcG9uZW50cy4gVGhlc2UgZnVuY3Rpb25zIGNhbiBub3QgZmFpbCwgdGhleSB3
aWxsIGFsd2F5cyBkbyB0aGVpciBiZXN0CisvLyBhdCBpbnRlcnByZXRpbmcgdGhlIGlucHV0IGdp
dmVuLgorLy8KKy8vIFRoZSBzdHJpbmcgbGVuZ3RoIG9mIHRoZSBVUkwgTVVTVCBiZSBzcGVjaWZp
ZWQsIHdlIGRvIG5vdCBjaGVjayBmb3IgTlVMTHMKKy8vIGF0IGFueSBwb2ludCBpbiB0aGUgcHJv
Y2VzcywgYW5kIHdpbGwgYWN0dWFsbHkgaGFuZGxlIGVtYmVkZGVkIE5VTExzLgorLy8KKy8vIElN
UE9SVEFOVDogVGhlc2UgZnVuY3Rpb25zIGRvIE5PVCBoYW5nIG9uIHRvIHRoZSBnaXZlbiBwb2lu
dGVyIG9yIGNvcHkgaXQKKy8vIGluIGFueSB3YXkuIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUg
c3RydWN0LgorLy8KKy8vIFRoZSA4LWJpdCB2ZXJzaW9ucyByZXF1aXJlIFVURi04IGVuY29kaW5n
LgorCisvLyBTdGFuZGFyZFVSTCBpcyBmb3Igd2hlbiB0aGUgc2NoZW1lIGlzIGtub3duIHRvIGJl
IG9uZSB0aGF0IGhhcyBhbgorLy8gYXV0aG9yaXR5IChob3N0KSBsaWtlICJodHRwIi4gVGhpcyBm
dW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgd2VpcmQgb25lcworLy8gbGlrZSAiYWJvdXQ6IiBhbmQg
ImphdmFzY3JpcHQ6Iiwgb3IgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciAiZmlsZToiIFVSTHMuCit2
b2lkIFBhcnNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxT
ZWdtZW50cyogcGFyc2VkKTsKK3ZvaWQgUGFyc2VTdGFuZGFyZFVSTChjb25zdCBVQ2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKKworLy8gUGF0aFVSTCBpcyBm
b3Igd2hlbiB0aGUgc2NoZW1lIGlzIGtub3duIG5vdCB0byBoYXZlIGFuIGF1dGhvcml0eSAoaG9z
dCkKKy8vIHNlY3Rpb24gYnV0IHRoYXQgYXJlbid0IGZpbGUgVVJMcyBlaXRoZXIuIFRoZSBzY2hl
bWUgaXMgcGFyc2VkLCBhbmQKKy8vIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHNjaGVtZSBpcyBjb25z
aWRlcmVkIGFzIHRoZSBwYXRoLiBUaGlzIGlzIHVzZWQgZm9yCisvLyB0aGluZ3MgbGlrZSAiYWJv
dXQ6IiBhbmQgImphdmFzY3JpcHQ6Igordm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgY2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKK3ZvaWQgUGFyc2VQYXRoVVJM
KGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwor
CisvLyBGaWxlVVJMIGlzIGZvciBmaWxlIFVSTHMuIFRoZXJlIGFyZSBzb21lIHNwZWNpYWwgcnVs
ZXMgZm9yIGludGVycHJldGluZworLy8gdGhlc2UuCit2b2lkIFBhcnNlRmlsZVVSTChjb25zdCBj
aGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJz
ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBh
cnNlZCk7CisKKy8vIEZpbGVzeXN0ZW0gVVJMcyBhcmUgc3RydWN0dXJlZCBkaWZmZXJlbnRseSB0
aGFuIG90aGVyIFVSTHMuCit2b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwordm9pZCBQYXJzZUZpbGVTeXN0
ZW1VUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNl
ZCk7CisKKy8vIE1haWx0b1VSTCBpcyBmb3IgbWFpbHRvOiB1cmxzLiBUaGV5IGFyZSBtYWRlIHVw
IHNjaGVtZSxwYXRoLHF1ZXJ5Cit2b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIHVybCwg
aW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Cit2b2lkIFBhcnNlTWFpbHRvVVJM
KGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIExvY2F0ZXMgdGhlIHNjaGVtZSBhY2NvcmRp
bmcgdG8gdGhlIFVSTCAgcGFyc2VyJ3MgcnVsZXMuIFRoaXMgZnVuY3Rpb24gaXMKKy8vIGRlc2ln
bmVkIHNvIHRoZSBjYWxsZXIgY2FuIGZpbmQgdGhlIHNjaGVtZSBhbmQgY2FsbCB0aGUgY29ycmVj
dCBJbml0KgorLy8gZnVuY3Rpb24gYWNjb3JkaW5nIHRvIHRoZWlyIGtub3duIHNjaGVtZSB0eXBl
cy4KKy8vCisvLyBJdCBhbHNvIGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24gb24gdGhl
IHNjaGVtZS4KKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNj
aGVtZSBpcyBmb3VuZCBhbmQgd2lsbCBwdXQgdGhlCisvLyBzY2hlbWUncyByYW5nZSBpbnRvICpz
Y2hlbWUuIEZhbHNlIG1lYW5zIG5vIHNjaGVtZSBjb3VsZCBiZSBmb3VuZC4gTm90ZQorLy8gdGhh
dCBhIFVSTCBiZWdpbm5pbmcgd2l0aCBhIGNvbG9uIGhhcyBhIHNjaGVtZSwgYnV0IGl0IGlzIGVt
cHR5LCBzbyB0aGlzCisvLyBmdW5jdGlvbiB3aWxsIHJldHVybiB0cnVlIGJ1dCAqc2NoZW1lIHdp
bGwgPSAoMCwwKS4KKy8vCisvLyBUaGUgc2NoZW1lIGlzIGZvdW5kIGJ5IHNraXBwaW5nIHNwYWNl
cyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIGF0IHRoZQorLy8gYmVnaW5uaW5nLCBhbmQgdGFraW5n
IGV2ZXJ5dGhpbmcgZnJvbSB0aGVyZSB0byB0aGUgZmlyc3QgY29sb24gdG8gYmUgdGhlCisvLyBz
Y2hlbWUuIFRoZSBjaGFyYWN0ZXIgYXQgc2NoZW1lLmVuZCgpIHdpbGwgYmUgdGhlIGNvbG9uICh3
ZSBtYXkgZW5oYW5jZQorLy8gdGhpcyB0byBoYW5kbGUgZnVsbCB3aWR0aCBjb2xvbnMgb3Igc29t
ZXRoaW5nLCBzbyBkb24ndCBjb3VudCBvbiB0aGUKKy8vIGFjdHVhbCBjaGFyYWN0ZXIgdmFsdWUp
LiBUaGUgY2hhcmFjdGVyIGF0IHNjaGVtZS5lbmQoKSsxIHdpbGwgYmUgdGhlCisvLyBiZWdpbm5p
bmcgb2YgdGhlIHJlc3Qgb2YgdGhlIFVSTCwgYmUgaXQgdGhlIGF1dGhvcml0eSBvciB0aGUgcGF0
aCAob3IgdGhlCisvLyBlbmQgb2YgdGhlIHN0cmluZykuCisvLworLy8gVGhlIDgtYml0IHZlcnNp
b24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCitib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgY2hh
ciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSk7Citib29sIEV4dHJh
Y3RTY2hlbWUoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50KiBz
Y2hlbWUpOworCisvLyBSZXR1cm5zIHRydWUgaWYgY2ggaXMgYSBjaGFyYWN0ZXIgdGhhdCB0ZXJt
aW5hdGVzIHRoZSBhdXRob3JpdHkgc2VnbWVudCBvZiBhIFVSTC4KK2Jvb2wgSXNBdXRob3JpdHlU
ZXJtaW5hdG9yKFVDaGFyKTsKKworLy8gRG9lcyBhIGJlc3QgZWZmb3J0IHBhcnNlIG9mIGlucHV0
IHxzcGVjfCwgaW4gcmFuZ2UgfGF1dGh8LiBJZiBhIHBhcnRpY3VsYXIKKy8vIGNvbXBvbmVudCBp
cyBub3QgZm91bmQsIGl0IHdpbGwgYmUgc2V0IHRvIGludmFsaWQuCit2b2lkIFBhcnNlQXV0aG9y
aXR5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aCwKKyAgICAgICAg
ICAgICAgICAgICAgVVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29y
ZCwgVVJMQ29tcG9uZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKTsKK3Zv
aWQgUGFyc2VBdXRob3JpdHkoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
YXV0aCwKKyAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29t
cG9uZW50KiBwYXNzd29yZCwgVVJMQ29tcG9uZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBw
b3J0TnVtYmVyKTsKKworLy8gQ29tcHV0ZXMgdGhlIGludGVnZXIgcG9ydCB2YWx1ZSBmcm9tIHRo
ZSBnaXZlbiBwb3J0IGNvbXBvbmVudC4gVGhlIHBvcnQKKy8vIGNvbXBvbmVudCBzaG91bGQgaGF2
ZSBiZWVuIGlkZW50aWZpZWQgYnkgb25lIG9mIHRoZSBpbml0IGZ1bmN0aW9ucyBvbgorLy8gfFBh
cnNlZHwgZm9yIHRoZSBnaXZlbiBpbnB1dCB1cmwuCisvLworLy8gVGhlIHJldHVybiB2YWx1ZSB3
aWxsIGJlIGEgcG9zaXRpdmUgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDY0Sywgb3Igb25lIG9mCisv
LyB0aGUgdHdvIHNwZWNpYWwgdmFsdWVzIGJlbG93LgorZW51bSBTcGVjaWFsUG9ydCB7IFBPUlRf
VU5TUEVDSUZJRUQgPSAtMSwgUE9SVF9JTlZBTElEID0gLTIgfTsKK2ludCBQYXJzZVBvcnQoY29u
c3QgY2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQpOworaW50IFBhcnNlUG9ydChj
b25zdCBVQ2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQpOworCisvLyBFeHRyYWN0
cyB0aGUgcmFuZ2Ugb2YgdGhlIGZpbGUgbmFtZSBpbiB0aGUgZ2l2ZW4gdXJsLiBUaGUgcGF0aCBt
dXN0CisvLyBhbHJlYWR5IGhhdmUgYmVlbiBjb21wdXRlZCBieSB0aGUgcGFyc2UgZnVuY3Rpb24s
IGFuZCB0aGUgbWF0Y2hpbmcgVVJMCisvLyBhbmQgZXh0cmFjdGVkIHBhdGggYXJlIHByb3ZpZGVk
IHRvIHRoaXMgZnVuY3Rpb24uIFRoZSBmaWxlbmFtZSBpcworLy8gZGVmaW5lZCBhcyBiZWluZyBl
dmVyeXRoaW5nIGZyb20gdGhlIGxhc3Qgc2xhc2gvYmFja3NsYXNoIG9mIHRoZSBwYXRoCisvLyB0
byB0aGUgZW5kIG9mIHRoZSBwYXRoLgorLy8KKy8vIFRoZSBmaWxlIG5hbWUgd2lsbCBiZSBlbXB0
eSBpZiB0aGUgcGF0aCBpcyBlbXB0eSBvciB0aGVyZSBpcyBub3RoaW5nCisvLyBmb2xsb3dpbmcg
dGhlIGxhc3Qgc2xhc2guCisvLworLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTgg
ZW5jb2RpbmcuCit2b2lkIEV4dHJhY3RGaWxlTmFtZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFVS
TENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBmaWxlTmFtZSk7Cit2b2lkIEV4dHJhY3RG
aWxlTmFtZShjb25zdCBVQ2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENv
bXBvbmVudCogZmlsZU5hbWUpOworCisvLyBFeHRyYWN0IHRoZSBmaXJzdCBrZXkvdmFsdWUgZnJv
bSB0aGUgcmFuZ2UgZGVmaW5lZCBieSB8KnF1ZXJ5fC4gVXBkYXRlcworLy8gfCpxdWVyeXwgdG8g
c3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgZXh0cmFjdGVkIGtleS92YWx1ZSBwYWlyLiBUaGlzIGlz
CisvLyBkZXNpZ25lZCBmb3IgdXNlIGluIGEgbG9vcDogeW91IGNhbiBrZWVwIGNhbGxpbmcgaXQg
d2l0aCB0aGUgc2FtZSBxdWVyeQorLy8gb2JqZWN0IGFuZCBpdCB3aWxsIGl0ZXJhdGUgb3ZlciBh
bGwgaXRlbXMgaW4gdGhlIHF1ZXJ5LgorLy8KKy8vIFNvbWUga2V5L3ZhbHVlIHBhaXJzIG1heSBo
YXZlIHRoZSBrZXksIHRoZSB2YWx1ZSwgb3IgYm90aCBiZSBlbXB0eSAoZm9yCisvLyBleGFtcGxl
LCB0aGUgcXVlcnkgc3RyaW5nICI/JiIpLiBUaGVzZSB3aWxsIGJlIHJldHVybmVkLiBOb3RlIHRo
YXQgYW4gZW1wdHkKKy8vIGxhc3QgcGFyYW1ldGVyICJmb28uY29tPyIgb3IgZm9vLmNvbT9hJiIg
d2lsbCBub3QgYmUgcmV0dXJuZWQsIHRoaXMgY2FzZQorLy8gaXMgdGhlIHNhbWUgYXMgImRvbmUu
IgorLy8KKy8vIFRoZSBpbml0aWFsIHF1ZXJ5IGNvbXBvbmVudCBzaG91bGQgbm90IGluY2x1ZGUg
dGhlICc/JyAodGhpcyBpcyB0aGUgZGVmYXVsdAorLy8gZm9yIHBhcnNlZCBVUkxzKS4KKy8vCisv
LyBJZiBubyBrZXkvdmFsdWUgYXJlIGZvdW5kIHwqa2V5fCBhbmQgfCp2YWx1ZXwgd2lsbCBiZSB1
bmNoYW5nZWQgYW5kIGl0IHdpbGwKKy8vIHJldHVybiBmYWxzZS4KK2Jvb2wgRXh0cmFjdFF1ZXJ5
S2V5VmFsdWUoY29uc3QgY2hhciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25l
bnQqIGtleSwgVVJMQ29tcG9uZW50KiB2YWx1ZSk7Citib29sIEV4dHJhY3RRdWVyeUtleVZhbHVl
KGNvbnN0IFVDaGFyKiB1cmwsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCoga2V5
LCBVUkxDb21wb25lbnQqIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgVVJMUGFyc2VyCisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVS
TFBhcnNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VGaWxl
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VGaWxlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NTVlZjU1NTkyNGIyNTc1NTNhYjViY2UyYTdkOWU3YWJiNjNkMDJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwCkBAIC0wLDAgKzEs
MjUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
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
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJMUGFyc2UuaCIKKworI2luY2x1ZGUgIlVSTEZp
bGUuaCIKKyNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCisKKy8vIEludGVyZXN0aW5nIElF
IGZpbGU6aXNtcy4uLgorLy8KKy8vICBJTlBVVCAgICAgICAgICAgICAgICAgICAgICBPVVRQVVQK
Ky8vICA9PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKy8vICBmaWxlOi9mb28vYmFyICAgICAgICAgICAgICBmaWxlOi8vL2Zvby9iYXIKKy8v
ICAgICAgVGhlIHJlc3VsdCBoZXJlIHNlZW1zIHRvdGFsbHkgaW52YWxpZCE/IT8gVGhpcyBpc24n
dCBVTkMuCisvLworLy8gIGZpbGU6LworLy8gIGZpbGU6Ly8gb3IgYW55IG90aGVyIG51bWJlciBv
ZiBzbGFzaGVzCisvLyAgICAgIElFNiBkb2Vzbid0IGRvIGFueXRoaW5nIGF0IGFsbCBpZiB5b3Ug
Y2xpY2sgb24gdGhpcyBsaW5rLiBObyBlcnJvcjoKKy8vICAgICAgbm90aGluZy4gSUU2J3MgaGlz
dG9yeSBzeXN0ZW0gc2VlbXMgdG8gYWx3YXlzIGNvbG9yIHRoaXMgbGluaywgc28gSSdtCisvLyAg
ICAgIGd1ZXNzaW5nIHRoYXQgaXQgbWFwcyBpbnRlcm5hbGx5IHRvIHRoZSBlbXB0eSBVUkwuCisv
LworLy8gIEM6XCAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8vQzovCisvLyAgICAgIFdo
ZW4gb24gYSBmaWxlOiBVUkwgc291cmNlIHBhZ2UsIHRoaXMgbGluayB3aWxsIHdvcmsuIFdoZW4g
b3ZlciBIVFRQLAorLy8gICAgICB0aGUgZmlsZTogVVJMIHdpbGwgYXBwZWFyIGluIHRoZSBzdGF0
dXMgYmFyIGJ1dCB0aGUgbGluayB3aWxsIG5vdCB3b3JrCisvLyAgICAgIChzZWN1cml0eSByZXN0
cmljdGlvbiBmb3IgYWxsIGZpbGUgVVJMcykuCisvLworLy8gIGZpbGU6Zm9vLyAgICAgICAgICAg
ICAgICAgIGZpbGU6Zm9vLyAgICAgKGludmFsaWQ/IT8hPykKKy8vICBmaWxlOi9mb28vICAgICAg
ICAgICAgICAgICBmaWxlOi8vL2Zvby8gIChpbnZhbGlkPyE/IT8pCisvLyAgZmlsZTovL2Zvby8g
ICAgICAgICAgICAgICAgZmlsZTovL2Zvby8gICAoVU5DIHRvIHNlcnZlciAiZm9vIikKKy8vICBm
aWxlOi8vL2Zvby8gICAgICAgICAgICAgICBmaWxlOi8vL2Zvby8gIChpbnZhbGlkLCBzZWVtcyB0
byBiZSBhIGZpbGUpCisvLyAgZmlsZTovLy8vZm9vLyAgICAgICAgICAgICAgZmlsZTovL2Zvby8g
ICAoVU5DIHRvIHNlcnZlciAiZm9vIikKKy8vICAgICAgQW55IG1vcmUgdGhhbiBmb3VyIHNsYXNo
ZXMgaXMgYWxzbyB0cmVhdGVkIGFzIFVOQy4KKy8vCisvLyAgZmlsZTpDOi8gICAgICAgICAgICAg
ICAgICAgZmlsZTovL0M6LworLy8gIGZpbGU6L0M6LyAgICAgICAgICAgICAgICAgIGZpbGU6Ly9D
Oi8KKy8vICAgICAgVGhlIG51bWJlciBvZiBzbGFzaGVzIGFmdGVyICJmaWxlOiIgZG9uJ3QgbWF0
dGVyIGlmIHRoZSB0aGluZyBmb2xsb3dpbmcKKy8vICAgICAgaXQgbG9va3MgbGlrZSBhbiBhYnNv
bHV0ZSBkcml2ZSBwYXRoLiBBbHNvLCBzbGFzaGVzIGFuZCBiYWNrc2xhc2hlcyBhcmUKKy8vICAg
ICAgZXF1YWxseSB2YWxpZCBoZXJlLgorCisjaWYgVVNFKFdURlVSTCkKKworbmFtZXNwYWNlIFdU
RiB7CisKK25hbWVzcGFjZSBVUkxQYXJzZXIgeworCituYW1lc3BhY2UgeworCisvLyBBIHN1YmNv
bXBvbmVudCBvZiBEb0luaXRGaWxlVVJMLCB0aGUgaW5wdXQgb2YgdGhpcyBmdW5jdGlvbiBzaG91
bGQgYmUgYSBVTkMKKy8vIHBhdGggbmFtZSwgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNo
YXJhY3RlciBhZnRlciB0aGUgc2xhc2hlcyBmb2xsb3dpbmcKKy8vIHRoZSBzY2hlbWUgZ2l2ZW4g
aW4gfGFmdGVyU2xhc2hlc3wuIFRoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBob3N0LCBwYXRoLAor
Ly8gcXVlcnksIGFuZCByZWYsIGFuZCBsZWF2ZSB0aGUgb3RoZXIgb3V0cHV0IGNvbXBvbmVudHMg
dW50b3VjaGVkCisvLyAoRG9Jbml0RmlsZVVSTCBoYW5kbGVzIHRoZXNlIGZvciB1cykuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBkb1BhcnNlVU5DKGNvbnN0IENoYXJh
Y3RlclR5cGUqIHNwZWMsIGludCBhZnRlclNsYXNoZXMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdt
ZW50cyYgcGFyc2VkKQoreworICAgIGludCBuZXh0U2xhc2ggPSBmaW5kTmV4dFNsYXNoKHNwZWMs
IGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCk7CisgICAgaWYgKG5leHRTbGFzaCA9PSBzcGVjTGVu
Z3RoKSB7CisgICAgICAgIC8vIE5vIGFkZGl0aW9uYWwgc2xhc2ggZm91bmQsIGFzIGluICJmaWxl
Oi8vZm9vIiwgdHJlYXQgdGhlIHRleHQgYXMgdGhlCisgICAgICAgIC8vIGhvc3Qgd2l0aCBubyBw
YXRoICh0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIFVOQyB0byBzZXJ2ZXIgImZvbyIpLgorICAgICAg
ICBpbnQgaG9zdExlbmd0aCA9IHNwZWNMZW5ndGggLSBhZnRlclNsYXNoZXM7CisgICAgICAgIGlm
IChob3N0TGVuZ3RoKQorICAgICAgICAgICAgcGFyc2VkLmhvc3QgPSBVUkxDb21wb25lbnQoYWZ0
ZXJTbGFzaGVzLCBob3N0TGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyc2Vk
Lmhvc3QucmVzZXQoKTsKKyAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8gU2VlIGlmIHdlIGhhdmUgc29t
ZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIHBhdGggZm9sbG93aW5nIHRoZSBmaXJzdAorICAgIC8v
IGNvbXBvbmVudC4gQXMgaW4gImZpbGU6Ly9sb2NhbGhvc3QvYzovIiwgd2UgZ2V0ICJjOi8iIG91
dC4gV2Ugd2FudCB0bworICAgIC8vIHRyZWF0IHRoaXMgYXMgYSBoYXZpbmcgbm8gaG9zdCBidXQg
dGhlIHBhdGggZ2l2ZW4uIFdvcmtzIG9uIFdpbmRvd3Mgb25seS4KKyAgICBpZiAoZG9lc0JlZ2lu
V2luZG93c0RyaXZlU3BlYyhzcGVjLCBuZXh0U2xhc2ggKyAxLCBzcGVjTGVuZ3RoKSkgeworICAg
ICAgICBwYXJzZWQuaG9zdC5yZXNldCgpOworICAgICAgICBwYXJzZVBhdGhJbnRlcm5hbChzcGVj
LCBNYWtlUmFuZ2UobmV4dFNsYXNoLCBzcGVjTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnBhcnNlZC5wYXRoLCAmcGFyc2VkLnF1ZXJ5LCAmcGFyc2VkLnJlZik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIE90aGVyd2lzZSwgZXZlcnl0aGluZyB1
cCB1bnRpbCB0aGF0IGZpcnN0IHNsYXNoIHdlIGZvdW5kIGlzIHRoZSBob3N0IG5hbWUsCisgICAg
Ly8gd2hpY2ggd2lsbCBlbmQgdXAgYmVpbmcgdGhlIFVOQyBob3N0LiBGb3IgZXhhbXBsZSAiZmls
ZTovL2Zvby9iYXIudHh0IgorICAgIC8vIHdpbGwgZ2V0IGEgc2VydmVyIG5hbWUgb2YgImZvbyIg
YW5kIGEgcGF0aCBvZiAiL2JhciIuIExhdGVyLCBvbiBXaW5kb3dzLAorICAgIC8vIHRoaXMgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgdGhlIGZpbGVuYW1lICJcXGZvb1xiYXIudHh0IiBpbiBwcm9wZXIg
VU5DCisgICAgLy8gbm90YXRpb24uCisgICAgaW50IGhvc3RMZW5ndGggPSBuZXh0U2xhc2ggLSBh
ZnRlclNsYXNoZXM7CisgICAgaWYgKGhvc3RMZW5ndGgpCisgICAgICAgIHBhcnNlZC5ob3N0ID0g
VVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYWZ0ZXJTbGFzaGVzLCBuZXh0U2xhc2gpOworICAgIGVs
c2UKKyAgICAgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKKyAgICBpZiAobmV4dFNsYXNoIDwgc3Bl
Y0xlbmd0aCkgeworICAgICAgICBwYXJzZVBhdGhJbnRlcm5hbChzcGVjLCBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShuZXh0U2xhc2gsIHNwZWNMZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAmcGFyc2VkLnBhdGgsICZwYXJzZWQucXVlcnksICZwYXJzZWQuZnJhZ21lbnQpOworICAg
IH0gZWxzZQorICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgpOworfQorCisvLyBBIHN1YmNvbXBv
bmVudCBvZiBEb1BhcnNlRmlsZVVSTCwgdGhlIGlucHV0IHNob3VsZCBiZSBhIGxvY2FsIGZpbGUs
IHdpdGggdGhlCisvLyBiZWdpbm5pbmcgb2YgdGhlIHBhdGggaW5kaWNhdGVkIGJ5IHRoZSBpbmRl
eCBpbiB8cGF0aEJlZ2lufC4gVGhpcyB3aWxsCisvLyBpbml0aWFsaXplIHRoZSBob3N0LCBwYXRo
LCBxdWVyeSwgYW5kIHJlZiwgYW5kIGxlYXZlIHRoZSBvdGhlciBvdXRwdXQKKy8vIGNvbXBvbmVu
dHMgdW50b3VjaGVkIChEb0luaXRGaWxlVVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIGRvUGFyc2VMb2NhbEZpbGUoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHBhdGhCZWdpbiwgaW50IHNwZWNMZW5ndGgsIFVSTFNl
Z21lbnRzJiBwYXJzZWQpCit7CisgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKKyAgICBwYXJzZVBh
dGhJbnRlcm5hbChzcGVjLCBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoQmVnaW4sIHNwZWNM
ZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICZwYXJzZWQucGF0aCwgJnBhcnNlZC5xdWVy
eSwgJnBhcnNlZC5mcmFnbWVudCk7Cit9CisKKy8vIEJhY2tlbmQgZm9yIHRoZSBleHRlcm5hbCBm
dW5jdGlvbnMgdGhhdCBvcGVyYXRlcyBvbiBlaXRoZXIgY2hhciB0eXBlLgorLy8gV2UgYXJlIGhh
bmRlZCB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSAiZmlsZToiIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHNwZWMuCisvLyBVc3VhbGx5IHRoaXMgaXMgYSBzbGFzaCwgYnV0IG5lZWRuJ3QgYmU7IHdl
IGFsbG93IHBhdGhzIGxpa2UgImZpbGU6YzpcZm9vIi4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Cit2b2lkIGRvUGFyc2VGaWxlVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQoreworICAgIEFTU0VSVChzcGVj
TGVuZ3RoID49IDApOworCisgICAgLy8gR2V0IHRoZSBwYXJ0cyB3ZSBuZXZlciB1c2UgZm9yIGZp
bGUgVVJMcyBvdXQgb2YgdGhlIHdheS4KKyAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKKyAg
ICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKKyAgICBwYXJzZWQucG9ydC5yZXNldCgpOworCisg
ICAgLy8gTWFueSBvZiB0aGUgY29kZSBwYXRocyBkb24ndCBzZXQgdGhlc2UsIHNvIGl0J3MgY29u
dmVuaWVudCB0byBqdXN0IGNsZWFyCisgICAgLy8gdGhlbS4gV2UnbGwgd3JpdGUgdGhlbSBpbiB0
aG9zZSBjYXNlcyB3ZSBuZWVkIHRoZW0uCisgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7CisgICAg
cGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7CisKKyAgICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxp
bmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgaW50IGJlZ2luID0gMDsKKyAg
ICB0cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoKTsKKworICAgIC8vIEZpbmQgdGhlIHNj
aGVtZS4KKyAgICBpbnQgbnVtU2xhc2hlczsKKyAgICBpbnQgYWZ0ZXJTY2hlbWU7CisgICAgaW50
IGFmdGVyU2xhc2hlczsKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIFNlZSBob3cgbWFueSBzbGFz
aGVzIHRoZXJlIGFyZS4gV2Ugd2FudCB0byBoYW5kbGUgY2FzZXMgbGlrZSBVTkMgYnV0IGFsc28K
KyAgICAvLyAiL2M6L2ZvbyIuIFRoaXMgaXMgd2hlbiB0aGVyZSBpcyBubyBzY2hlbWUsIHNvIHdl
IGNhbiBhbGxvdyBwYWdlcyB0byBkbworICAgIC8vIGxpbmtzIGxpa2UgImM6L2Zvby9iYXIiIG9y
ICIvL2Zvby9iYXIiLiBUaGlzIGlzIGFsc28gY2FsbGVkIGJ5IHRoZQorICAgIC8vIHJlbGF0aXZl
IFVSTCByZXNvbHZlciB3aGVuIGl0IGRldGVybWluZXMgdGhlcmUgaXMgYW4gYWJzb2x1dGUgVVJM
LCB3aGljaAorICAgIC8vIG1heSBnaXZlIHVzIGlucHV0IGxpa2UgIi9jOi9mb28iLgorICAgIG51
bVNsYXNoZXMgPSBjb3VudENvbnNlY3V0aXZlU2xhc2hlcyhzcGVjLCBiZWdpbiwgc3BlY0xlbmd0
aCk7CisgICAgYWZ0ZXJTbGFzaGVzID0gYmVnaW4gKyBudW1TbGFzaGVzOworICAgIGlmIChkb2Vz
QmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNwZWMsIGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCkpIHsK
KyAgICAgICAgLy8gV2luZG93cyBwYXRoLCBkb24ndCB0cnkgdG8gZXh0cmFjdCB0aGUgc2NoZW1l
IChmb3IgZXhhbXBsZSwgImM6XGZvbyIpLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7
CisgICAgICAgIGFmdGVyU2NoZW1lID0gYWZ0ZXJTbGFzaGVzOworICAgIH0gZWxzZSBpZiAoZG9l
c0JlZ2luVU5DUGF0aChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCwgZmFsc2UpKSB7CisgICAgICAg
IC8vIFdpbmRvd3MgVU5DIHBhdGg6IGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUsIGJ1
dCBrZWVwIHRoZSBzbGFzaGVzLgorICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAg
ICAgIGFmdGVyU2NoZW1lID0gYmVnaW47CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAg
ICAgIGlmIChFeHRyYWN0U2NoZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAm
cGFyc2VkLnNjaGVtZSkpIHsKKyAgICAgICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5j
ZSB3ZSBnYXZlIEV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCisgICAgICAgICAgICBwYXJzZWQu
c2NoZW1lLnNldEJlZ2luKHBhcnNlZC5zY2hlbWUuYmVnaW4oKSArIGJlZ2luKTsKKyAgICAgICAg
ICAgIGFmdGVyU2NoZW1lID0gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDE7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQsIHJlbWVtYmVyIHRoYXQuCisgICAg
ICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7CisgICAgICAgICAgICBhZnRlclNjaGVtZSA9
IGJlZ2luOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNzIG9u
ZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJzLAorICAgIC8v
IG9yIHRoYXQgYXJlIGp1c3QgdGhlIHNjaGVtZSAoZm9yIGV4YW1wbGUgImZpbGU6IikuCisgICAg
aWYgKGFmdGVyU2NoZW1lID09IHNwZWNMZW5ndGgpIHsKKyAgICAgICAgcGFyc2VkLmhvc3QucmVz
ZXQoKTsKKyAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG51bVNsYXNoZXMgPSBjb3VudENvbnNlY3V0aXZlU2xhc2hlcyhzcGVjLCBhZnRl
clNjaGVtZSwgc3BlY0xlbmd0aCk7CisKKyAgICBhZnRlclNsYXNoZXMgPSBhZnRlclNjaGVtZSAr
IG51bVNsYXNoZXM7CisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBp
bnB1dCBpcyBhIGRyaXZlIGFnYWluLiBXZSBjaGVja2VkIGFib3ZlIGZvciB3aW5kb3dzCisgICAg
Ly8gZHJpdmUgc3BlY3MsIGJ1dCB0aGF0J3Mgb25seSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgdG8g
c2VlIGlmIHdlIGhhdmUgYQorICAgIC8vIHNjaGVtZSBhdCBhbGwuIFRoaXMgdGVzdCB3aWxsIGJl
IGR1cGxpY2F0ZWQgaW4gdGhhdCBjYXNlLCBidXQgd2lsbAorICAgIC8vIGFkZGl0aW9uYWxseSBo
YW5kbGUgYWxsIGNhc2VzIHdpdGggYSByZWFsIHNjaGVtZSBzdWNoIGFzICJmaWxlOi8vL0M6LyIu
CisgICAgaWYgKCFkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNwZWMsIGFmdGVyU2xhc2hlcywg
c3BlY0xlbmd0aCkgJiYgIG51bVNsYXNoZXMgIT0gMykgeworICAgICAgICAvLyBBbnl0aGluZyBu
b3QgYmVnaW5uaW5nIHdpdGggYSBkcml2ZSBzcGVjICgiYzpcIikgb24gV2luZG93cyBpcyB0cmVh
dGVkCisgICAgICAgIC8vIGFzIFVOQywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRocmVlIHNsYXNo
ZXMgd2hpY2ggYWx3YXlzIG1lYW5zIGEgZmlsZS4KKyAgICAgICAgLy8gRXZlbiBJRTcgdHJlYXRz
IGZpbGU6Ly8vZm9vL2JhciBhcyAiL2Zvby9iYXIiLCB3aGljaCB0aGVuIGZhaWxzLgorICAgICAg
ICBkb1BhcnNlVU5DKHNwZWMsIGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCwgcGFyc2VkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgLy8gZmlsZTogVVJMIHdpdGggZXhhY3Rs
eSAyIHNsYXNoZXMgaXMgY29uc2lkZXJlZCB0byBoYXZlIGEgaG9zdCBjb21wb25lbnQuCisgICAg
aWYgKG51bVNsYXNoZXMgPT0gMikgeworICAgICAgICBkb1BhcnNlVU5DKHNwZWMsIGFmdGVyU2xh
c2hlcywgc3BlY0xlbmd0aCwgcGFyc2VkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZiAvLyBPUyhXSU5ET1dTKQorCisgICAgLy8gRWFzeSBhbmQgY29tbW9uIGNhc2UsIHRoZSBmdWxs
IHBhdGggaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc2NoZW1lCisgICAgLy8gKG1vZHVsbyBzbGFz
aGVzKSwgYXMgaW4gImZpbGU6Ly9jOi9mb28iLiBKdXN0IHRyZWF0IGV2ZXJ5dGhpbmcgZnJvbQor
ICAgIC8vIHRoZXJlIHRvIHRoZSBlbmQgYXMgdGhlIHBhdGguIEVtcHR5IGhvc3RzIGhhdmUgMCBs
ZW5ndGggaW5zdGVhZCBvZiAtMS4KKyAgICAvLyBXZSBpbmNsdWRlIHRoZSBsYXN0IHNsYXNoIGFz
IHBhcnQgb2YgdGhlIHBhdGggaWYgdGhlcmUgaXMgb25lLgorICAgIGRvUGFyc2VMb2NhbEZpbGUo
c3BlYywKKyAgICAgICAgICAgICAgICAgICAgIG51bVNsYXNoZXMgPiAwID8gYWZ0ZXJTY2hlbWUg
KyBudW1TbGFzaGVzIC0gMSA6IGFmdGVyU2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgc3Bl
Y0xlbmd0aCwgcGFyc2VkKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwordm9pZCBQYXJzZUZpbGVV
UkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQor
eworICAgIGRvUGFyc2VGaWxlVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKK30KKwordm9p
ZCBQYXJzZUZpbGVVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVu
dHMqIHBhcnNlZCkKK3sKKyAgICBkb1BhcnNlRmlsZVVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNl
ZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTFBhcnNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VJ
bnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlMjdhZWRkMDJhNjI4MzFhNjIyNTgyYjExNGM3Yzk2MWZm
ZTdiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNl
SW50ZXJuYWwuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gQ29udGFpbnMgY29tbW9uIGlubGluZSBoZWxwZXIgZnVuY3Rp
b25zIHVzZWQgYnkgdGhlIFVSTCBwYXJzaW5nIHJvdXRpbmVzLgorCisjaWZuZGVmIFVSTFBhcnNl
SW50ZXJuYWxfaAorI2RlZmluZSBVUkxQYXJzZUludGVybmFsX2gKKworI2luY2x1ZGUgIlVSTFBh
cnNlLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCisjaWYgVVNFKFdURlVS
TCkKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBVUkxQYXJzZXIgeworCisvLyBXZSB0
cmVhdCBzbGFzaGVzIGFuZCBiYWNrc2xhc2hlcyB0aGUgc2FtZSBmb3IgSUUgY29tcGF0YWJpbGl0
eS4KK2lubGluZSBib29sIGlzVVJMU2xhc2goVUNoYXIgY2gpCit7CisgICAgcmV0dXJuIGNoID09
ICcvJyB8fCBjaCA9PSAnXFwnOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRy
aW0gdGhpcyBjaGFyYWN0ZXIgZnJvbSB0aGUgVVJMIGJlY2F1c2UgaXQgaXMgYQorLy8gc3BhY2Ug
b3IgYSBjb250cm9sIGNoYXJhY3Rlci4KK2lubGluZSBib29sIHNob3VsZFRyaW1Gcm9tVVJMKFVD
aGFyIGNoKQoreworICAgIHJldHVybiBjaCA8PSAnICc7Cit9CisKKy8vIEdpdmVuIGFuIGFscmVh
ZHktaW5pdGlhbGl6ZWQgYmVnaW4gaW5kZXggYW5kIGxlbmd0aCwgdGhpcyBzaHJpbmtzIHRoZSBy
YW5nZQorLy8gdG8gZWxpbWluYXRlICJzaG91bGQtYmUtdHJpbW1lZCIgY2hhcmFjdGVycy4gTm90
ZSB0aGF0IHRoZSBsZW5ndGggZG9lcyAqbm90KgorLy8gaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB1
bnRyaW1tZWQgZGF0YSBmcm9tIHwqYmVnaW58LCBidXQgcmF0aGVyIHRoZSBwb3NpdGlvbgorLy8g
aW4gdGhlIGlucHV0IHN0cmluZyAoc28gdGhlIHN0cmluZyBzdGFydHMgYXQgY2hhcmFjdGVyIHwq
YmVnaW58IGluIHRoZSBzcGVjLAorLy8gYW5kIGdvZXMgdW50aWwgfCpsZW58KS4KK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgdm9pZCB0cmltVVJMKGNvbnN0IENoYXJh
Y3RlclR5cGUqIHNwZWMsIGludCYgYmVnaW4sIGludCYgbGVuZ3RoKQoreworICAgIC8vIFN0cmlw
IGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIHdoaWxlIChi
ZWdpbiA8IGxlbmd0aCAmJiBzaG91bGRUcmltRnJvbVVSTChzcGVjW2JlZ2luXSkpCisgICAgICAg
ICsrYmVnaW47CisKKyAgICAvLyBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9s
IGNoYXJhY3RlcnMuIFdlIG5lZWQgdGhlID5pIHRlc3QgZm9yCisgICAgLy8gd2hlbiB0aGUgaW5w
dXQgc3RyaW5nIGlzIGFsbCBibGFua3M7IHdlIGRvbid0IHdhbnQgdG8gYmFjayBwYXN0IHRoZSBp
bnB1dC4KKyAgICB3aGlsZSAobGVuZ3RoID4gYmVnaW4gJiYgc2hvdWxkVHJpbUZyb21VUkwoc3Bl
Y1tsZW5ndGggLSAxXSkpCisgICAgICAgIC0tbGVuZ3RoOworfQorCisvLyBDb3VudHMgdGhlIG51
bWJlciBvZiBjb25zZWN1dGl2ZSBzbGFzaGVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBvZmZzZXQK
Ky8vIGluIHRoZSBnaXZlbiBzdHJpbmcgb2YgdGhlIGdpdmVuIGxlbmd0aC4KK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgaW50IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVz
KGNvbnN0IENoYXJhY3RlclR5cGUgKnN0ciwgaW50IGJlZ2luX29mZnNldCwgaW50IHN0ckxlbmd0
aCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIHdoaWxlIChiZWdpbl9vZmZzZXQgKyBjb3Vu
dCA8IHN0ckxlbmd0aCAmJiBpc1VSTFNsYXNoKHN0cltiZWdpbl9vZmZzZXQgKyBjb3VudF0pKQor
ICAgICAgICArK2NvdW50OworICAgIHJldHVybiBjb3VudDsKK30KKworLy8gSW50ZXJuYWwgZnVu
Y3Rpb25zIGluIFVSTFBhcnNlci5jYyB0aGF0IHBhcnNlIHRoZSBwYXRoLCB0aGF0IGlzLCBldmVy
eXRoaW5nCisvLyBmb2xsb3dpbmcgdGhlIGF1dGhvcml0eSBzZWN0aW9uLiBUaGUgaW5wdXQgaXMg
dGhlIHJhbmdlIG9mIGV2ZXJ5dGhpbmcKKy8vIGZvbGxvd2luZyB0aGUgYXV0aG9yaXR5IHNlY3Rp
b24sIGFuZCB0aGUgb3V0cHV0IGlzIHRoZSBpZGVudGlmaWVkIHJhbmdlcy4KKy8vCisvLyBUaGlz
IGlzIGRlc2lnbmVkIGZvciB0aGUgZmlsZSBVUkwgcGFyc2VyIG9yIG90aGVyIGNvbnN1bWVycyB3
aG8gbWF5IGRvCisvLyBzcGVjaWFsIHN0dWZmIGF0IHRoZSBiZWdpbm5pbmcsIGJ1dCB3YW50IHJl
Z3VsYXIgcGF0aCBwYXJzaW5nLCBpdCBqdXN0CisvLyBtYXBzIHRvIHRoZSBpbnRlcm5hbCBwYXJz
aW5nIGZ1bmN0aW9uIGZvciBwYXRocy4KK3ZvaWQgcGFyc2VQYXRoSW50ZXJuYWwoY29uc3QgY2hh
ciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRo
LAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIGZpbGVwYXRoLAorICAgICAg
ICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAg
ICAgICBVUkxDb21wb25lbnQqIGZyYWdtZW50KTsKK3ZvaWQgcGFyc2VQYXRoSW50ZXJuYWwoY29u
c3QgVUNoYXIqIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVu
dCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBmaWxlcGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBxdWVyeSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBmcmFnbWVudCk7CisKKworLy8gR2l2ZW4gYSBzcGVj
IGFuZCBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgY29sb24gZm9sbG93aW5n
IHRoZQorLy8gc2NoZW1lLCB0aGlzIHBhcnNlcyBpdCBhbmQgZmlsbHMgaW4gdGhlIHN0cnVjdHVy
ZSwgRXZlcnkgaXRlbSBpbiB0aGUgcGFyc2VkCisvLyBzdHJ1Y3R1cmUgaXMgZmlsbGVkIEVYQ0VQ
VCBmb3IgdGhlIHNjaGVtZSwgd2hpY2ggaXMgdW50b3VjaGVkLgordm9pZCBwYXJzZUFmdGVyU2No
ZW1lKGNvbnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVS
TFNlZ21lbnRzJiBwYXJzZWQpOwordm9pZCBwYXJzZUFmdGVyU2NoZW1lKGNvbnN0IFVDaGFyKiBz
cGVjLCBpbnQgc3BlY0xlbmd0aCwgaW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyYgcGFyc2Vk
KTsKKworfSAvLyBuYW1lc3BhY2UgVVJMUGFyc2VyCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gVVNFKFdURlVSTCkKKworI2VuZGlmIC8vIFVSTFBhcnNlSW50ZXJuYWxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZXIuaCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJi
NGQ1OThhMzE5YTNjYTI3Zjg2NTk0YmU3YzBiOGZiMWEwNzE4YjYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQ
YXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5NiArMCwwIEBACi0vKiBCYXNlZCBvbiBuc1VS
TFBhcnNlcnMuY2MgZnJvbSBNb3ppbGxhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMg
Q29ycG9yYXRpb24uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIE90aGVyIGNvbnRyaWJ1dG9yczoKLSAqICAgRGFyaW4gRmlzaGVy
IChvcmlnaW5hbCBhdXRob3IpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5
LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwot
ICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3Vu
ZCBhdAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6
Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAotICogKHRoZSAiR1BMIiksIGluIHdoaWNo
IGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQotICogYXBwbGlj
YWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9m
IHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9u
ZSBvZiB0aG9zZSB0d28KLSAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3Qg
dG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
ciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQotICogZGVsZXRpbmd0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKLSAqIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2Fz
ZSBtYXkgYmUuCi0gKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBh
bnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KLSAqLwotCi0jaWZuZGVmIFVSTFBh
cnNlcl9oCi0jZGVmaW5lIFVSTFBhcnNlcl9oCi0KLSNpbmNsdWRlICJVUkxDb21wb25lbnQuaCIK
LSNpbmNsdWRlICJVUkxTZWdtZW50cy5oIgotI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCi0KLSNp
ZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgQmFzZUNoYXJhY3RlclR5cGUgPSBDaGFyYWN0ZXJUeXBlPgot
Y2xhc3MgVVJMUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFNwZWNpYWxQb3J0IHsKLSAgICAg
ICAgVW5zcGVjaWZpZWRQb3J0ID0gLTEsCi0gICAgICAgIEludmFsaWRQb3J0ID0gLTIsCi0gICAg
fTsKLQotICAgIC8vIFRoaXMgaGFuZGxlcyBldmVyeXRoaW5nIHRoYXQgbWF5IGJlIGFuIGF1dGhv
cml0eSB0ZXJtaW5hdG9yLCBpbmNsdWRpbmcKLSAgICAvLyBiYWNrc2xhc2guIEZvciBzcGVjaWFs
IGJhY2tzbGFzaCBoYW5kbGluZyBzZWUgcGFyc2VBZnRlclNjaGVtZS4KLSAgICBzdGF0aWMgYm9v
bCBpc1Bvc3NpYmxlQXV0aG9yaXR5VGVybWluYXRvcihDaGFyYWN0ZXJUeXBlIGNoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGlzVVJMU2xhc2goY2gpIHx8IGNoID09ICc/JyB8fCBjaCA9PSAnIycg
fHwgY2ggPT0gJzsnOwotICAgIH0KLQotICAgIC8vIEdpdmVuIGFuIGFscmVhZHktaWRlbnRpZmll
ZCBhdXRoIHNlY3Rpb24sIGJyZWFrcyBpdCBpbnRvIGl0cyBjb25zdGl0dWVudAotICAgIC8vIHBh
cnRzLiBUaGUgcG9ydCBudW1iZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHRoZSByZXN1bHRpbmcgaW50
ZWdlciB3aWxsIGJlCi0gICAgLy8gZmlsbGVkIGludG8gdGhlIGdpdmVuICpwb3J0IHZhcmlhYmxl
LCBvciAtMSBpZiB0aGVyZSBpcyBubyBwb3J0IG51bWJlcgotICAgIC8vIG9yIGl0IGlzIGludmFs
aWQuCi0gICAgc3RhdGljIHZvaWQgcGFyc2VBdXRob3JpdHkoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBV
UkxDb21wb25lbnQmIHBhc3N3b3JkLCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTENvbXBvbmVudCYg
cG9ydCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgQVNTRVJUKGF1dGguaXNWYWxpZCgp
KTsgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYW4gYXV0aG9yaXR5LgotICAgICAgICBpZiAoIWF1
dGgubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHVzZXJuYW1lLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBwYXNzd29yZC5yZXNldCgpOwotICAgICAgICAgICAgaG9zdC5yZXNldCgpOwotICAgICAgICAg
ICAgcG9ydC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBmb3IgQCwgd2hpY2ggaXMgdGhlIHNlcGFyYXRvciBiZXR3
ZWVuIHRoZSB1c2VyIGluZm8KLSAgICAgICAgLy8gYW5kIHRoZSBzZXJ2ZXIgaW5mby4gUkZDIDM5
ODYgZm9yYmlkcyBAIGZyb20gb2NjdXJpbmcgaW4gYXV0aCwgYnV0Ci0gICAgICAgIC8vIHNvbWVv
bmUgbWlnaHQgaW5jbHVkZSBpdCBpbiBhIHBhc3N3b3JkIHVuZXNjYXBlZC4KLSAgICAgICAgaW50
IGkgPSBhdXRoLmJlZ2luKCkgKyBhdXRoLmxlbmd0aCgpIC0gMTsKLSAgICAgICAgd2hpbGUgKGkg
PiBhdXRoLmJlZ2luKCkgJiYgc3BlY1tpXSAhPSAnQCcpCi0gICAgICAgICAgICAtLWk7Ci0KLSAg
ICAgICAgaWYgKHNwZWNbaV0gPT0gJ0AnKSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCB1c2VyIGlu
Zm86IDx1c2VyLWluZm8+QDxzZXJ2ZXItaW5mbz4KLSAgICAgICAgICAgIHBhcnNlVXNlckluZm8o
c3BlYywgVVJMQ29tcG9uZW50KGF1dGguYmVnaW4oKSwgaSAtIGF1dGguYmVnaW4oKSksIHVzZXJu
YW1lLCBwYXNzd29yZCk7Ci0gICAgICAgICAgICBwYXJzZVNlcnZlckluZm8oc3BlYywgVVJMQ29t
cG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGF1dGguYmVnaW4oKSArIGF1dGgubGVuZ3RoKCkpLCBo
b3N0LCBwb3J0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIHVzZXIgaW5m
bywgZXZlcnl0aGluZyBpcyBzZXJ2ZXIgaW5mby4KLSAgICAgICAgICAgIHVzZXJuYW1lLnJlc2V0
KCk7Ci0gICAgICAgICAgICBwYXNzd29yZC5yZXNldCgpOwotICAgICAgICAgICAgcGFyc2VTZXJ2
ZXJJbmZvKHNwZWMsIGF1dGgsIGhvc3QsIHBvcnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c3RhdGljIGJvb2wgZXh0cmFjdFNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQg
c3BlY0xlbmd0aCwgVVJMQ29tcG9uZW50JiBzY2hlbWUpCi0gICAgewotICAgICAgICAvLyBTa2lw
IGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICBpbnQg
YmVnaW4gPSAwOwotICAgICAgICB3aGlsZSAoYmVnaW4gPCBzcGVjTGVuZ3RoICYmIHNob3VsZFRy
aW1Gcm9tVVJMKHNwZWNbYmVnaW5dKSkKLSAgICAgICAgICAgIGJlZ2luKys7Ci0gICAgICAgIGlm
IChiZWdpbiA9PSBzcGVjTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJbnB1
dCBpcyBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZS4KLQotICAgICAgICAvLyBGaW5kIHRoZSBmaXJz
dCBjb2xvbiBjaGFyYWN0ZXIuCi0gICAgICAgIGZvciAoaW50IGkgPSBiZWdpbjsgaSA8IHNwZWNM
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHNwZWNbaV0gPT0gJzonKSB7Ci0gICAgICAg
ICAgICAgICAgc2NoZW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4sIGkpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gTm8gY29sb24gZm91bmQ6IG5vIHNjaGVtZQotICAgIH0KLQot
ICAgIC8vIEZpbGxzIGluIGFsbCBtZW1iZXJzIG9mIHRoZSBVUkxTZWdtZW50cyBzdHJ1Y3R1cmUg
KGV4Y2VwdCBmb3IgdGhlCi0gICAgLy8gc2NoZW1lKSBmb3Igc3RhbmRhcmQgVVJMcy4KLSAgICAv
LwotICAgIC8vIHxzcGVjfCBpcyB0aGUgZnVsbCBzcGVjIGJlaW5nIHBhcnNlZCwgb2YgbGVuZ3Ro
IHxzcGVjTGVuZ3RofC4KLSAgICAvLyB8YWZ0ZXJTY2hlbWV8IGlzIHRoZSBjaGFyYWN0ZXIgaW1t
ZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBzY2hlbWUgKGFmdGVyCi0gICAgLy8gdGhlIGNvbG9uKSB3
aGVyZSB3ZSdsbCBiZWdpbiBwYXJzaW5nLgotICAgIHN0YXRpYyB2b2lkIHBhcnNlQWZ0ZXJTY2hl
bWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHNwZWNMZW5ndGgsIGludCBhZnRlclNj
aGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLSAgICB7Ci0gICAgICAgIGludCBudW1iZXJPZlNs
YXNoZXMgPSBjb25zZWN1dGl2ZVNsYXNoZXMoc3BlYywgYWZ0ZXJTY2hlbWUsIHNwZWNMZW5ndGgp
OwotICAgICAgICBpbnQgYWZ0ZXJTbGFzaGVzID0gYWZ0ZXJTY2hlbWUgKyBudW1iZXJPZlNsYXNo
ZXM7Ci0KLSAgICAgICAgLy8gRmlyc3Qgc3BsaXQgaW50byB0d28gbWFpbiBwYXJ0cywgdGhlIGF1
dGhvcml0eSAodXNlcm5hbWUsIHBhc3N3b3JkLAotICAgICAgICAvLyBob3N0LCBhbmQgcG9ydCkg
YW5kIHRoZSBmdWxsIHBhdGggKHBhdGgsIHF1ZXJ5LCBhbmQgcmVmZXJlbmNlKS4KLSAgICAgICAg
VVJMQ29tcG9uZW50IGF1dGhvcml0eTsKLSAgICAgICAgVVJMQ29tcG9uZW50IGZ1bGxQYXRoOwot
Ci0gICAgICAgIC8vIEZvdW5kICIvLzxzb21lIGRhdGE+IiwgbG9va3MgbGlrZSBhbiBhdXRob3Jp
dHkgc2VjdGlvbi4gVHJlYXQKLSAgICAgICAgLy8gZXZlcnl0aGluZyBmcm9tIHRoZXJlIHRvIHRo
ZSBuZXh0IHNsYXNoIChvciBlbmQgb2Ygc3BlYykgdG8gYmUgdGhlCi0gICAgICAgIC8vIGF1dGhv
cml0eS4gTm90ZSB0aGF0IHdlIGlnbm9yZSB0aGUgbnVtYmVyIG9mIHNsYXNoZXMgYW5kIHRyZWF0
IGl0IGFzCi0gICAgICAgIC8vIHRoZSBhdXRob3JpdHkuCi0gICAgICAgIGludCBhdXRoRW5kID0g
bmV4dEF1dGhvcml0eVRlcm1pbmF0b3Ioc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoKTsK
LSAgICAgICAgYXV0aG9yaXR5ID0gVVJMQ29tcG9uZW50KGFmdGVyU2xhc2hlcywgYXV0aEVuZCAt
IGFmdGVyU2xhc2hlcyk7Ci0KLSAgICAgICAgaWYgKGF1dGhFbmQgPT0gc3BlY0xlbmd0aCkgLy8g
Tm8gYmVnaW5uaW5nIG9mIHBhdGggZm91bmQuCi0gICAgICAgICAgICBmdWxsUGF0aCA9IFVSTENv
bXBvbmVudCgpOwotICAgICAgICBlbHNlIC8vIEV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUg
c2xhc2ggdG8gdGhlIGVuZCBpcyB0aGUgcGF0aC4KLSAgICAgICAgICAgIGZ1bGxQYXRoID0gVVJM
Q29tcG9uZW50KGF1dGhFbmQsIHNwZWNMZW5ndGggLSBhdXRoRW5kKTsKLQotICAgICAgICAvLyBO
b3cgcGFyc2UgdGhvc2UgdHdvIHN1Yi1wYXJ0cy4KLSAgICAgICAgcGFyc2VBdXRob3JpdHkoc3Bl
YywgYXV0aG9yaXR5LCBwYXJzZWQudXNlcm5hbWUsIHBhcnNlZC5wYXNzd29yZCwgcGFyc2VkLmhv
c3QsIHBhcnNlZC5wb3J0KTsKLSAgICAgICAgcGFyc2VQYXRoKHNwZWMsIGZ1bGxQYXRoLCBwYXJz
ZWQucGF0aCwgcGFyc2VkLnF1ZXJ5LCBwYXJzZWQuZnJhZ21lbnQpOwotICAgIH0KLQotICAgIC8v
IFRoZSBtYWluIHBhcnNpbmcgZnVuY3Rpb24gZm9yIHN0YW5kYXJkIFVSTHMuIFN0YW5kYXJkIFVS
THMgaGF2ZSBhIHNjaGVtZSwKLSAgICAvLyBob3N0LCBwYXRoLCBldGMuCi0gICAgc3RhdGljIHZv
aWQgcGFyc2VTdGFuZGFyZFVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xl
bmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQg
QVNTRVJUKHNwZWNMZW5ndGggPj0gMCk7Ci0KLSAgICAgICAgLy8gU3RyaXAgbGVhZGluZyAmIHRy
YWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICBpbnQgYmVnaW4g
PSAwOwotICAgICAgICB0cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoKTsKLQotICAgICAg
ICBpbnQgYWZ0ZXJTY2hlbWU7Ci0gICAgICAgIGlmIChleHRyYWN0U2NoZW1lKHNwZWMsIHNwZWNM
ZW5ndGgsIHBhcnNlZC5zY2hlbWUpKQotICAgICAgICAgICAgYWZ0ZXJTY2hlbWUgPSBwYXJzZWQu
c2NoZW1lLmVuZCgpICsgMTsgLy8gU2tpcCBwYXN0IHRoZSBjb2xvbi4KLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAvLyBTYXkgdGhlcmUncyBubyBzY2hlbWUgd2hlbiB0aGVyZSBpcyBhIGNv
bG9uLiBXZSBjb3VsZCBhbHNvIHNheQotICAgICAgICAgICAgLy8gdGhhdCBldmVyeXRoaW5nIGlz
IHRoZSBzY2hlbWUuIEJvdGggd291bGQgcHJvZHVjZSBhbiBpbnZhbGlkCi0gICAgICAgICAgICAv
LyBVUkwsIGJ1dCB0aGlzIHdheSBzZWVtcyBsZXNzIHdyb25nIGluIG1vcmUgY2FzZXMuCi0gICAg
ICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgICAgICBhZnRlclNjaGVtZSA9
IGJlZ2luOwotICAgICAgICB9Ci0gICAgICAgIHBhcnNlQWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xl
bmd0aCwgYWZ0ZXJTY2hlbWUsIHBhcnNlZCk7Ci0gICAgfQotCi0gICAgLy8gVGhlIG1haW4gcGFy
c2luZyBmdW5jdGlvbiBmb3IgKG1heSBiZSkgcmVsYXRpdmUgVVJMcy4KLSAgICBzdGF0aWMgdm9p
ZCBwYXJzZVVSTFdpdGhCYXNlKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUNoYXJhY3Rl
clR5cGUqIGJhc2VTdHJpbmdTcGVjLCBpbnQgYmFzZVN0cmluZ1NwZWNMZW5ndGgsIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlU3RyaW5nU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mb3V0cHV0QnVmZmVyLCBVUkxTZWdtZW50cyYgcGFyc2Vk
KQotICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2VTdHJpbmdTcGVjKTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGJhc2VTdHJpbmdTcGVjTGVuZ3RoKTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KGJhc2VTdHJpbmdTZWdtZW50cyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcGVjKTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKHNwZWNMZW5ndGgpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3V0cHV0
QnVmZmVyKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHBhcnNlZCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBUbyBpbXBsZW1lbnQuCi0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcGFyc2VQYXRoKGNvbnN0
IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9u
ZW50JiBmaWxlcGF0aCwgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQ29tcG9uZW50JiBmcmFnbWVu
dCkKLSAgICB7Ci0gICAgICAgIC8vIHBhdGggPSBbL108c2VnbWVudDE+LzxzZWdtZW50Mj4vPC4u
Lj4vPHNlZ21lbnROPjs8cGFyYW0+PzxxdWVyeT4jPGZyYWdtZW50PgotCi0gICAgICAgIC8vIFNw
ZWNpYWwgY2FzZSB3aGVuIHRoZXJlIGlzIG5vIHBhdGguCi0gICAgICAgIGlmICghcGF0aC5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgICAgIGZpbGVwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICBxdWVy
eS5yZXNldCgpOwotICAgICAgICAgICAgZnJhZ21lbnQucmVzZXQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogYWRkIEFTU0VSVChwYXRoLmxlbmd0
aCgpID4gMCk7IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIDAgbGVuZ3RoIHBhdGhzLgotCi0gICAg
ICAgIC8vIFNlYXJjaCBmb3IgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlaXRoZXIgPyBvciAjLgotICAg
ICAgICBpbnQgcGF0aEVuZCA9IHBhdGguYmVnaW4oKSArIHBhdGgubGVuZ3RoKCk7Ci0KLSAgICAg
ICAgaW50IHF1ZXJ5U2VwYXJhdG9yID0gLTE7IC8vIEluZGV4IG9mIHRoZSAnPycKLSAgICAgICAg
aW50IHJlZlNlcGFyYXRvciA9IC0xOyAvLyBJbmRleCBvZiB0aGUgJyMnCi0gICAgICAgIGZvciAo
aW50IGkgPSBwYXRoLmJlZ2luKCk7IGkgPCBwYXRoRW5kOyBpKyspIHsKLSAgICAgICAgICAgIHN3
aXRjaCAoc3BlY1tpXSkgewotICAgICAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAg
aWYgKHF1ZXJ5U2VwYXJhdG9yIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcXVlcnlTZXBhcmF0
b3IgPSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnIyc6Ci0g
ICAgICAgICAgICAgICAgcmVmU2VwYXJhdG9yID0gaTsKLSAgICAgICAgICAgICAgICBpID0gcGF0
aEVuZDsgLy8gQnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1hcmtlcnMgcG9pbnRpbmcgdG8gdGhlIGNoYXJh
Y3RlciBhZnRlciBlYWNoIG9mIHRoZXNlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgLy8gY29tcG9u
ZW50cy4gVGhlIGNvZGUgYmVsb3cgd29ya3MgZnJvbSB0aGUgZW5kIGJhY2sgdG8gdGhlIGJlZ2lu
bmluZywKLSAgICAgICAgLy8gYW5kIHdpbGwgdXBkYXRlIHRoZXNlIGluZGljZXMgYXMgaXQgZmlu
ZHMgY29tcG9uZW50cyB0aGF0IGV4aXN0LgotICAgICAgICBpbnQgZmlsZUVuZCwgcXVlcnlFbmQ7
Ci0KLSAgICAgICAgLy8gRnJhZ21lbnQ6IGZyb20gdGhlICMgdG8gdGhlIGVuZCBvZiB0aGUgcGF0
aC4KLSAgICAgICAgaWYgKHJlZlNlcGFyYXRvciA+PSAwKSB7Ci0gICAgICAgICAgICBmaWxlRW5k
ID0gcmVmU2VwYXJhdG9yOwotICAgICAgICAgICAgcXVlcnlFbmQgPSByZWZTZXBhcmF0b3I7Ci0g
ICAgICAgICAgICBmcmFnbWVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHJlZlNlcGFyYXRv
ciArIDEsIHBhdGhFbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsZUVuZCA9
IHBhdGhFbmQ7Ci0gICAgICAgICAgICBxdWVyeUVuZCA9IHBhdGhFbmQ7Ci0gICAgICAgICAgICBm
cmFnbWVudC5yZXNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUXVlcnkgZnJhZ21lbnQ6
IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgPyB0byB0aGUgbmV4dCBib3VuZGFyeSAoZWl0aGVyCi0gICAg
ICAgIC8vIHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgdGhlIGZyYWdtZW50IGZyYWdtZW50KS4KLSAg
ICAgICAgaWYgKHF1ZXJ5U2VwYXJhdG9yID49IDApIHsKLSAgICAgICAgICAgIGZpbGVFbmQgPSBx
dWVyeVNlcGFyYXRvcjsKLSAgICAgICAgICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UocXVlcnlTZXBhcmF0b3IgKyAxLCBxdWVyeUVuZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcXVlcnkucmVzZXQoKTsKLQotICAgICAgICAvLyBGaWxlIHBhdGg6IHRyZWF0IGFuIGVt
cHR5IGZpbGUgcGF0aCBhcyBubyBmaWxlIHBhdGguCi0gICAgICAgIGlmIChmaWxlRW5kICE9IHBh
dGguYmVnaW4oKSkKLSAgICAgICAgICAgIGZpbGVwYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UocGF0aC5iZWdpbigpLCBmaWxlRW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmls
ZXBhdGgucmVzZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplcyBhIHBhdGggVVJMIHdo
aWNoIGlzIG1lcmVseSBhIHNjaGVtZSBmb2xsb3dlZCBieSBhIHBhdGguCi0gICAgLy8gRXhhbXBs
ZXMgaW5jbHVkZSAiYWJvdXQ6Zm9vIiBhbmQgImphdmFzY3JpcHQ6YWxlcnQoJ2JhcicpOyIKLSAg
ICBzdGF0aWMgdm9pZCBwYXJzZVBhdGhVUkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50
IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi0gICAgewotICAgICAgICAvLyBHZXQg
dGhlIG5vbi1wYXRoIGFuZCBub24tc2NoZW1lIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9mIHRoZSB3
YXksIHdlCi0gICAgICAgIC8vIG5ldmVyIHVzZSB0aGVtLgotICAgICAgICBwYXJzZWQudXNlcm5h
bWUucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgICAgIHBh
cnNlZC5ob3N0LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0gICAgICAg
IHBhcnNlZC5xdWVyeS5yZXNldCgpOwotICAgICAgICBwYXJzZWQuZnJhZ21lbnQucmVzZXQoKTsK
LQotICAgICAgICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9s
IGNoYXJhY3RlcnMuCi0gICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgaXMgdW5uZWNlc3Nh
cnk/Ci0gICAgICAgIGludCBiZWdpbiA9IDA7Ci0gICAgICAgIHRyaW1VUkwoc3BlYywgYmVnaW4s
IHNwZWNMZW5ndGgpOwotCi0gICAgICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRo
YXQgY29udGFpbiBvbmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbAotICAgICAgICAvLyBjaGFycy4K
LSAgICAgICAgaWYgKGJlZ2luID09IHNwZWNMZW5ndGgpIHsKLSAgICAgICAgICAgIHBhcnNlZC5z
Y2hlbWUucmVzZXQoKTsKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUs
IHdpdGggdGhlIHBhdGggYmVpbmcgZXZlcnl0aGluZyBmb2xsb3dpbmcuIFdlIGFsc28KLSAgICAg
ICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vIHNjaGVtZS4KLSAgICAgICAg
aWYgKGV4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBzcGVjTGVuZ3RoIC0gYmVnaW4sIHBhcnNl
ZC5zY2hlbWUpKSB7Ci0gICAgICAgICAgICAvLyBPZmZzZXQgdGhlIHJlc3VsdHMgc2luY2Ugd2Ug
Z2F2ZSBleHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgotICAgICAgICAgICAgcGFyc2VkLnNjaGVt
ZS5zZXRCZWdpbihwYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBiZWdpbik7Ci0KLSAgICAgICAgICAg
IC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHN0YW5kYXJkIFVSTCBwYXJzZXIsIHdlIHRy
ZWF0IG5vIHBhdGgKLSAgICAgICAgICAgIC8vIGFzIC0xLCByYXRoZXIgdGhhbiBoYXZpbmcgYSBs
ZW5ndGggb2YgMCAod2Ugbm9ybWFsbHkgd291bGRuJ3QKLSAgICAgICAgICAgIC8vIGNhcmUgc28g
bXVjaCBmb3IgdGhlc2Ugbm9uLXN0YW5kYXJkIFVSTHMpLgotICAgICAgICAgICAgaWYgKHBhcnNl
ZC5zY2hlbWUuZW5kKCkgPT0gc3BlY0xlbmd0aCAtIDEpCi0gICAgICAgICAgICAgICAgcGFyc2Vk
LnBhdGgucmVzZXQoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwYXJzZWQu
cGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxLCBz
cGVjTGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIHNjaGVtZSBm
b3VuZCwganVzdCBwYXRoLgotICAgICAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAg
ICAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShiZWdpbiwgc3Bl
Y0xlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJzZU1haWx0
b1VSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVu
dHMmIHBhcnNlZCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgQVNTRVJUKHNwZWNMZW5n
dGggPj0gMCk7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBub24tcGF0aCBhbmQgbm9uLXNjaGVtZSBw
YXJ0cyBvZiB0aGUgVVJMIG91dCBvZiB0aGUgd2F5LCB3ZQotICAgICAgICAvLyBuZXZlciB1c2Ug
dGhlbS4KLSAgICAgICAgcGFyc2VkLnVzZXJuYW1lLnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5w
YXNzd29yZC5yZXNldCgpOwotICAgICAgICBwYXJzZWQuaG9zdC5yZXNldCgpOwotICAgICAgICBw
YXJzZWQucG9ydC5yZXNldCgpOwotICAgICAgICBwYXJzZWQuZnJhZ21lbnQucmVzZXQoKTsKLSAg
ICAgICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7IC8vIE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNv
bnZlbmllbmNlLgotCi0gICAgICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMg
YW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAgICAgaW50IGJlZ2luID0gMDsKLSAgICAgICAg
dHJpbVVSTChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGVt
cHR5IHNwZWNzIG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9s
Ci0gICAgICAgIC8vIGNoYXJzLgotICAgICAgICBpZiAoYmVnaW4gPT0gc3BlY0xlbmd0aCkgewot
ICAgICAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICAgICAgcGFyc2VkLnBh
dGgucmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlu
dCBwYXRoQmVnaW4gPSAtMTsKLSAgICAgICAgaW50IHBhdGhFbmQgPSAtMTsKLQotICAgICAgICAv
LyBFeHRyYWN0IHRoZSBzY2hlbWUsIHdpdGggdGhlIHBhdGggYmVpbmcgZXZlcnl0aGluZyBmb2xs
b3dpbmcuIFdlIGFsc28KLSAgICAgICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlz
IG5vIHNjaGVtZS4KLSAgICAgICAgaWYgKGV4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBzcGVj
TGVuZ3RoIC0gYmVnaW4sIHBhcnNlZC5zY2hlbWUpKSB7Ci0gICAgICAgICAgICAvLyBPZmZzZXQg
dGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBleHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgotICAg
ICAgICAgICAgcGFyc2VkLnNjaGVtZS5zZXRCZWdpbihwYXJzZWQuc2NoZW1lLmJlZ2luKCkgKyBi
ZWdpbik7Ci0KLSAgICAgICAgICAgIGlmIChwYXJzZWQuc2NoZW1lLmVuZCgpICE9IHNwZWNMZW5n
dGggLSAxKSB7Ci0gICAgICAgICAgICAgICAgcGF0aEJlZ2luID0gcGFyc2VkLnNjaGVtZS5lbmQo
KSArIDE7Ci0gICAgICAgICAgICAgICAgcGF0aEVuZCA9IHNwZWNMZW5ndGg7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQsIGp1
c3QgcGF0aC4KLSAgICAgICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgICAg
IHBhdGhCZWdpbiA9IGJlZ2luOwotICAgICAgICAgICAgcGF0aEVuZCA9IHNwZWNMZW5ndGg7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBTcGxpdCBbcGF0aEJlZ2luLCBwYXRoRW5kKSBpbnRvIGEg
cGF0aCArIHF1ZXJ5LgotICAgICAgICBmb3IgKGludCBpID0gcGF0aEJlZ2luOyBpIDwgcGF0aEVu
ZDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3BlY1tpXSA9PSAnPycpIHsKLSAgICAgICAgICAg
ICAgICBwYXJzZWQucXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShpICsgMSwgcGF0aEVu
ZCk7Ci0gICAgICAgICAgICAgICAgcGF0aEVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0
eSB3aXRoIHRoZSBzdGFuZGFyZCBVUkwgcGFyc2VyLCB0cmVhdCBubyBwYXRoIGFzCi0gICAgICAg
IC8vIC0xLCByYXRoZXIgdGhhbiBoYXZpbmcgYSBsZW5ndGggb2YgMAotICAgICAgICBpZiAocGF0
aEJlZ2luID09IHBhdGhFbmQpCi0gICAgICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZWQucGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKHBhdGhCZWdpbiwgcGF0aEVuZCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBwYXJzZVBv
cnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25l
bnQpCi0gICAgewotICAgICAgICAvLyBFYXN5IHN1Y2Nlc3MgY2FzZSB3aGVuIHRoZXJlIGlzIG5v
IHBvcnQuCi0gICAgICAgIGNvbnN0IGludCBtYXhEaWdpdHMgPSA1OwotICAgICAgICBpZiAoY29t
cG9uZW50LmlzRW1wdHlPckludmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBVbnNwZWNpZmll
ZFBvcnQ7Ci0KLSAgICAgICAgVVJMQ29tcG9uZW50IG5vblplcm9EaWdpdHMoY29tcG9uZW50LmVu
ZCgpLCAwKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGVuZ3RoKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKHNwZWNbY29tcG9uZW50LmJlZ2luKCkgKyBpXSAhPSAn
MCcpIHsKLSAgICAgICAgICAgICAgICBub25aZXJvRGlnaXRzID0gVVJMQ29tcG9uZW50Ojpmcm9t
UmFuZ2UoY29tcG9uZW50LmJlZ2luKCkgKyBpLCBjb21wb25lbnQuZW5kKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghbm9u
WmVyb0RpZ2l0cy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBBbGwgZGlnaXRz
IHdlcmUgMC4KLQotICAgICAgICBpZiAobm9uWmVyb0RpZ2l0cy5sZW5ndGgoKSA+IG1heERpZ2l0
cykKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUG9ydDsKLQotICAgICAgICBpbnQgcG9ydCA9
IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9uWmVyb0RpZ2l0cy5sZW5ndGgoKTsg
KytpKSB7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJUeXBlIGNoID0gc3BlY1tub25aZXJvRGlnaXRz
LmJlZ2luKCkgKyBpXTsKLSAgICAgICAgICAgIGlmICghaXNQb3J0RGlnaXQoY2gpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBJbnZhbGlkUG9ydDsKLSAgICAgICAgICAgIHBvcnQgKj0gMTA7Ci0g
ICAgICAgICAgICBwb3J0ICs9IHN0YXRpY19jYXN0PGNoYXI+KGNoKSAtICcwJzsKLSAgICAgICAg
fQotICAgICAgICBpZiAocG9ydCA+IDY1NTM1KQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQ
b3J0OwotICAgICAgICByZXR1cm4gcG9ydDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBleHRy
YWN0RmlsZU5hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBwYXRoLCBVUkxDb21wb25lbnQmIGZpbGVOYW1lKQotICAgIHsKLSAgICAgICAgLy8gSGFuZGxl
IGVtcHR5IHBhdGhzOiB0aGV5IGhhdmUgbm8gZmlsZSBuYW1lcy4KLSAgICAgICAgaWYgKHBhdGgu
aXNFbXB0eU9ySW52YWxpZCgpKSB7Ci0gICAgICAgICAgICBmaWxlTmFtZS5yZXNldCgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2VhcmNoIGJhY2t3YXJk
cyBmb3IgYSBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgbm9ybWFsbHkgdW51c2VkIGZpZWxkCi0gICAg
ICAgIC8vIGluIGEgVVJMIGRlbGltaXRlZCBieSBhIHNlbWljb2xvbi4gV2UgcGFyc2UgdGhlIHBh
cmFtZXRlciBhcyBwYXJ0IG9mCi0gICAgICAgIC8vIHRoZSBwYXRoLCBidXQgaGVyZSwgd2UgZG9u
J3Qgd2FudCB0byBjb3VudCBpdC4gVGhlIGxhc3Qgc2VtaWNvbG9uIGlzCi0gICAgICAgIC8vIHRo
ZSBwYXJhbWV0ZXIuCi0gICAgICAgIGludCBmaWxlRW5kID0gcGF0aC5lbmQoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IHBhdGguZW5kKCkgLSAxOyBpID4gcGF0aC5iZWdpbigpOyAtLWkpIHsKLSAg
ICAgICAgICAgIGlmIChzcGVjW2ldID09ICc7JykgewotICAgICAgICAgICAgICAgIGZpbGVFbmQg
PSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gTm93IHNlYXJjaCBiYWNrd2FyZHMgZnJvbSB0aGUgZmlsZW5hbWUgZW5kIHRv
IHRoZSBwcmV2aW91cyBzbGFzaAotICAgICAgICAvLyB0byBmaW5kIHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIGZpbGVuYW1lLgotICAgICAgICBmb3IgKGludCBpID0gZmlsZUVuZCAtIDE7IGkgPj0gcGF0
aC5iZWdpbigpOyAtLWkpIHsKLSAgICAgICAgICAgIGlmIChpc1VSTFNsYXNoKHNwZWNbaV0pKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRmlsZSBuYW1lIGlzIGV2ZXJ5dGhpbmcgZm9sbG93aW5nIHRo
aXMgY2hhcmFjdGVyIHRvIHRoZSBlbmQKLSAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IFVSTENv
bXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBmaWxlRW5kKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBObyBzbGFzaCBmb3Vu
ZCwgdGhpcyBtZWFucyB0aGUgaW5wdXQgd2FzIGRlZ2VuZXJhdGUgKGdlbmVyYWxseSBwYXRocwot
ICAgICAgICAvLyB3aWxsIHN0YXJ0IHdpdGggYSBzbGFzaCkuIExldCdzIGNhbGwgZXZlcnl0aGlu
ZyB0aGUgZmlsZSBuYW1lLgotICAgICAgICBmaWxlTmFtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKHBhdGguYmVnaW4oKSwgZmlsZUVuZCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXh0
cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgVVJMQ29tcG9uZW50
JiBxdWVyeSwgVVJMQ29tcG9uZW50JiBrZXksIFVSTENvbXBvbmVudCYgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAocXVlcnkuaXNFbXB0eU9ySW52YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGludCBzdGFydCA9IHF1ZXJ5LmJlZ2luKCk7Ci0gICAgICAgIGlu
dCBjdXJyZW50ID0gc3RhcnQ7Ci0gICAgICAgIGludCBlbmQgPSBxdWVyeS5lbmQoKTsKLQotICAg
ICAgICAvLyBXZSBhc3N1bWUgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgaXMgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgImtleSIKLSAgICAgICAgLy8gYW5kIHdlIHNraXAgdG8gdGhlIGVuZCBvZiBp
dC4KLSAgICAgICAga2V5LnNldEJlZ2luKGN1cnJlbnQpOwotICAgICAgICB3aGlsZSAoY3VycmVu
dCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcmJyAmJiBzcGVjW2N1cnJlbnRdICE9ICc9JykK
LSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAga2V5LnNldExlbmd0aChjdXJyZW50IC0g
a2V5LmJlZ2luKCkpOwotCi0gICAgICAgIC8vIFNraXAgdGhlIHNlcGFyYXRvciBhZnRlciB0aGUg
a2V5IChpZiBhbnkpLgotICAgICAgICBpZiAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRd
ID09ICc9JykKLSAgICAgICAgICAgICsrY3VycmVudDsKLQotICAgICAgICAvLyBGaW5kIHRoZSB2
YWx1ZSBwYXJ0LgotICAgICAgICB2YWx1ZS5zZXRCZWdpbihjdXJyZW50KTsKLSAgICAgICAgd2hp
bGUgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tjdXJyZW50XSAhPSAnJicpCi0gICAgICAgICAgICAr
K2N1cnJlbnQ7Ci0gICAgICAgIHZhbHVlLnNldExlbmd0aChjdXJyZW50IC0gdmFsdWUuYmVnaW4o
KSk7Ci0KLSAgICAgICAgLy8gRmluYWxseSBza2lwIHRoZSBuZXh0IHNlcGFyYXRvciBpZiBhbnkK
LSAgICAgICAgaWYgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tjdXJyZW50XSA9PSAnJicpCi0gICAg
ICAgICAgICArK2N1cnJlbnQ7Ci0KLSAgICAgICAgLy8gU2F2ZSB0aGUgbmV3IHF1ZXJ5Ci0gICAg
ICAgIHF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY3VycmVudCwgZW5kKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHJvdGVj
dGVkIG9yIHByaXZhdGUuCi1wdWJsaWM6Ci0gICAgLy8gV2UgdHJlYXQgc2xhc2hlcyBhbmQgYmFj
a3NsYXNoZXMgdGhlIHNhbWUgZm9yIElFIGNvbXBhdGliaWxpdHkuCi0gICAgc3RhdGljIGlubGlu
ZSBib29sIGlzVVJMU2xhc2goQ2hhcmFjdGVyVHlwZSBjaCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjaCA9PSAnLycgfHwgY2ggPT0gJ1xcJzsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgd2Ugc2hvdWxkIHRyaW0gdGhpcyBjaGFyYWN0ZXIgZnJvbSB0aGUgVVJMIGJlY2F1c2UgaXQg
aXMKLSAgICAvLyBhIHNwYWNlIG9yIGEgY29udHJvbCBjaGFyYWN0ZXIuCi0gICAgc3RhdGljIGlu
bGluZSBib29sIHNob3VsZFRyaW1Gcm9tVVJMKENoYXJhY3RlclR5cGUgY2gpCi0gICAgewotICAg
ICAgICByZXR1cm4gY2ggPD0gJyAnOwotICAgIH0KLQotICAgIC8vIEdpdmVuIGFuIGFscmVhZHkt
aW5pdGlhbGl6ZWQgYmVnaW4gaW5kZXggYW5kIGVuZCBpbmRleCAodGhlIGluZGV4IGFmdGVyCi0g
ICAgLy8gdGhlIGxhc3QgQ2hhcmFjdGVyVHlwZSBpbiBzcGVjKSwgdGhpcyBzaHJpbmtzIHRoZSBy
YW5nZSB0byBlbGltaW5hdGUKLSAgICAvLyAic2hvdWxkLWJlLXRyaW1tZWQiIGNoYXJhY3RlcnMu
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHRyaW1VUkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgaW50JiBiZWdpbiwgaW50JiBlbmQpCi0gICAgewotICAgICAgICAvLyBTdHJpcCBsZWFkaW5n
IHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAgICAgd2hpbGUgKGJlZ2lu
IDwgZW5kICYmIHNob3VsZFRyaW1Gcm9tVVJMKHNwZWNbYmVnaW5dKSkKLSAgICAgICAgICAgICsr
YmVnaW47Ci0KLSAgICAgICAgLy8gU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJv
bCBjaGFyYWN0ZXJzLiBXZSBuZWVkIHRoZSA+aQotICAgICAgICAvLyB0ZXN0IGZvciB3aGVuIHRo
ZSBpbnB1dCBzdHJpbmcgaXMgYWxsIGJsYW5rczsgd2UgZG9uJ3Qgd2FudCB0byBiYWNrCi0gICAg
ICAgIC8vIHBhc3QgdGhlIGlucHV0LgotICAgICAgICB3aGlsZSAoZW5kID4gYmVnaW4gJiYgc2hv
dWxkVHJpbUZyb21VUkwoc3BlY1tlbmQgLSAxXSkpCi0gICAgICAgICAgICAtLWVuZDsKLSAgICB9
Ci0KLSAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzbGFzaGVzIHN0YXJ0
aW5nIGF0IHRoZSBnaXZlbiBvZmZzZXQKLSAgICAvLyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9mIHRo
ZSBnaXZlbiBsZW5ndGguCi0gICAgc3RhdGljIGlubGluZSBpbnQgY29uc2VjdXRpdmVTbGFzaGVz
KGNvbnN0IENoYXJhY3RlclR5cGUgKnN0cmluZywgaW50IGJlZ2luT2Zmc2V0LCBpbnQgc3RyaW5n
TGVuZ3RoKQotICAgIHsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgd2hpbGUgKGJl
Z2luT2Zmc2V0ICsgY291bnQgPCBzdHJpbmdMZW5ndGggJiYgaXNVUkxTbGFzaChzdHJpbmdbYmVn
aW5PZmZzZXQgKyBjb3VudF0pKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgcmV0dXJu
IGNvdW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBVUkxQYXJzZXIgY2Fubm90IGJlIGNv
bnN0cnVjdGVkLgotICAgIFVSTFBhcnNlcigpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBkaWdpdCB0byB1c2UgaW4gYSBwb3J0LgotICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1BvcnREaWdpdChDaGFyYWN0ZXJUeXBlIGNoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOSc7Ci0gICAgfQotCi0gICAgLy8g
UmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IGF1dGhvcml0eSB0ZXJtaW5hdG9yIGluIHRo
ZSBpbnB1dCBzdGFydGluZwotICAgIC8vIGZyb20gc3RhcnRPZmZzZXQuIElmIG5vIHRlcm1pbmF0
b3IgaXMgZm91bmQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBlcXVhbAotICAgIC8vIHRvIHNw
ZWNMZW5ndGguCi0gICAgc3RhdGljIGludCBuZXh0QXV0aG9yaXR5VGVybWluYXRvcihjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3RhcnRPZmZzZXQsIGludCBzcGVjTGVuZ3RoKQotICAg
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0T2Zmc2V0OyBpIDwgc3BlY0xlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoaXNQb3NzaWJsZUF1dGhvcml0eVRlcm1pbmF0b3Ioc3BlY1tp
XSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHNwZWNMZW5ndGg7IC8vIE5vdCBmb3VuZC4KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJz
ZVVzZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
dXNlciwgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwgVVJMQ29tcG9uZW50JiBwYXNzd29yZCkKLSAg
ICB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGNvbG9uIGluIHRoZSB1c2VyIHNlY3Rpb24s
IHdoaWNoIHNlcGFyYXRlcyB0aGUKLSAgICAgICAgLy8gdXNlcm5hbWUgYW5kIHBhc3N3b3JkLgot
ICAgICAgICBpbnQgY29sb25PZmZzZXQgPSAwOwotICAgICAgICB3aGlsZSAoY29sb25PZmZzZXQg
PCB1c2VyLmxlbmd0aCgpICYmIHNwZWNbdXNlci5iZWdpbigpICsgY29sb25PZmZzZXRdICE9ICc6
JykKLSAgICAgICAgICAgICsrY29sb25PZmZzZXQ7Ci0KLSAgICAgICAgaWYgKGNvbG9uT2Zmc2V0
IDwgdXNlci5sZW5ndGgoKSkgewotICAgICAgICAgICAgLy8gRm91bmQgc2VwYXJhdG9yOiA8dXNl
cm5hbWU+OjxwYXNzd29yZD4KLSAgICAgICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50KHVz
ZXIuYmVnaW4oKSwgY29sb25PZmZzZXQpOwotICAgICAgICAgICAgcGFzc3dvcmQgPSBVUkxDb21w
b25lbnQ6OmZyb21SYW5nZSh1c2VyLmJlZ2luKCkgKyBjb2xvbk9mZnNldCArIDEsIHVzZXIuYmVn
aW4oKSArIHVzZXIubGVuZ3RoKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
Tm8gc2VwYXJhdG9yLCB0cmVhdCBldmVyeXRoaW5nIGFzIHRoZSB1c2VybmFtZQotICAgICAgICAg
ICAgdXNlcm5hbWUgPSB1c2VyOwotICAgICAgICAgICAgcGFzc3dvcmQgPSBVUkxDb21wb25lbnQo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHBhcnNlU2VydmVySW5mbyhj
b25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNlcnZlckluZm8s
IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQ29tcG9uZW50JiBwb3J0KQotICAgIHsKLSAgICAgICAg
aWYgKCFzZXJ2ZXJJbmZvLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAvLyBObyBzZXJ2ZXIgaW5m
bywgaG9zdCBuYW1lIGlzIGVtcHR5LgotICAgICAgICAgICAgaG9zdC5yZXNldCgpOwotICAgICAg
ICAgICAgcG9ydC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIGhvc3Qgc3RhcnRzIHdpdGggYSBsZWZ0LWJyYWNrZXQsIGFzc3VtZSB0
aGUgZW50aXJlIGhvc3QgaXMgYW4KLSAgICAgICAgLy8gSVB2NiBsaXRlcmFsLiBPdGhlcndpc2Us
IGFzc3VtZSBub25lIG9mIHRoZSBob3N0IGlzIGFuIElQdjYgbGl0ZXJhbC4KLSAgICAgICAgLy8g
VGhpcyBhc3N1bXB0aW9uIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB3ZSBmaW5kIGEgcmlnaHQtYnJh
Y2tldC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gT3VyIElQdjYgYWRkcmVzcyBjYW5vbmljYWxp
emF0aW9uIGNvZGUgcmVxdWlyZXMgYm90aCBicmFja2V0cyB0bwotICAgICAgICAvLyBleGlzdCwg
YnV0IHRoZSBhYmlsaXR5IHRvIGxvY2F0ZSBhbiBpbmNvbXBsZXRlIGFkZHJlc3MgY2FuIHN0aWxs
IGJlCi0gICAgICAgIC8vIHVzZWZ1bC4KLSAgICAgICAgaW50IGlwdjZUZXJtaW5hdG9yID0gc3Bl
Y1tzZXJ2ZXJJbmZvLmJlZ2luKCldID09ICdbJyA/IHNlcnZlckluZm8uZW5kKCkgOiAtMTsKLSAg
ICAgICAgaW50IGNvbG9uID0gLTE7Ci0KLSAgICAgICAgLy8gRmluZCB0aGUgbGFzdCByaWdodC1i
cmFja2V0LCBhbmQgdGhlIGxhc3QgY29sb24uCi0gICAgICAgIGZvciAoaW50IGkgPSBzZXJ2ZXJJ
bmZvLmJlZ2luKCk7IGkgPCBzZXJ2ZXJJbmZvLmVuZCgpOyBpKyspIHsKLSAgICAgICAgICAgIHN3
aXRjaCAoc3BlY1tpXSkgewotICAgICAgICAgICAgY2FzZSAnXSc6Ci0gICAgICAgICAgICAgICAg
aXB2NlRlcm1pbmF0b3IgPSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSAnOic6Ci0gICAgICAgICAgICAgICAgY29sb24gPSBpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2xvbiA+IGlwdjZUZXJtaW5hdG9y
KSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBhIHBvcnQgbnVtYmVyOiA8aG9zdG5hbWU+Ojxwb3J0
PgotICAgICAgICAgICAgaG9zdCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHNlcnZlckluZm8u
YmVnaW4oKSwgY29sb24pOwotICAgICAgICAgICAgaWYgKCFob3N0Lmxlbmd0aCgpKQotICAgICAg
ICAgICAgICAgIGhvc3QucmVzZXQoKTsKLSAgICAgICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShjb2xvbiArIDEsIHNlcnZlckluZm8uZW5kKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTm8gcG9ydDogPGhvc3RuYW1lPgotICAgICAgICAgICAgaG9zdCA9
IHNlcnZlckluZm87Ci0gICAgICAgICAgICBwb3J0LnJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNl
bmRpZiAvLyBVUkxQYXJzZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9V
UkxRdWVyeUNhbm9uaWNhbGl6ZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUXVlcnlD
YW5vbmljYWxpemVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2N2M0OTdmZDI0
ZmY0NGRkNGUzYzQwZjIzNzYwYzhlNDMyYjg2ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxRdWVyeUNhbm9u
aWNhbGl6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLyBDb3B5cmlnaHQg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0jaWZuZGVmIFVSTFF1ZXJ5Q2Fub25pY2Fs
aXplcl9oCi0jZGVmaW5lIFVSTFF1ZXJ5Q2Fub25pY2FsaXplcl9oCi0KLSNpZiBVU0UoV1RGVVJM
KQotCi0jaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCi0jaW5jbHVkZSAiVVJMQnVmZmVyLmgiCi0j
aW5jbHVkZSAiVVJMQ2hhcmFjdGVyVHlwZXMuaCIKLSNpbmNsdWRlICJVUkxDb21wb25lbnQuaCIK
LSNpbmNsdWRlICJVUkxFc2NhcGUuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEluQ2hhciwgdHlwZW5hbWUgT3V0Q2hhciwgdm9pZCBjb252ZXJ0Q2hhcnNldChjb25z
dCBJbkNoYXIqLCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mKT4KLWNsYXNzIFVSTFF1ZXJ5
Q2Fub25pY2FsaXplciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgY2Fub25pY2FsaXplKGNv
bnN0IEluQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQnVmZmVyPE91
dENoYXI+JiBidWZmZXIsIFVSTENvbXBvbmVudCYgcmVzdWx0UXVlcnkpCi0gICAgewotICAgICAg
ICBpZiAocXVlcnkubGVuZ3RoKCkgPCAwKSB7Ci0gICAgICAgICAgICByZXN1bHRRdWVyeSA9IFVS
TENvbXBvbmVudCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
YnVmZmVyLT5hcHBlbmQoJz8nKTsKLSAgICAgICAgcmVzdWx0UXVlcnkuc2V0QmVnaW4oYnVmZmVy
LT5sZW5ndGgoKSk7Ci0gICAgICAgIGNvbnZlcnRUb1F1ZXJ5RW5jb2Rpbmcoc3BlYywgcXVlcnks
IGJ1ZmZlcik7Ci0gICAgICAgIHJlc3VsdFF1ZXJ5LnNldExlbmd0aChidWZmZXItPmxlbmd0aCgp
IC0gcmVzdWx0UXVlcnkuYmVnaW4oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBi
b29sIGlzQWxsQVNDSUkoY29uc3QgSW5DaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1
ZXJ5KQotICAgIHsKLSAgICAgICAgaW50IGVuZCA9IHF1ZXJ5LmVuZCgpOwotICAgICAgICBmb3Ig
KGludCBpID0gcXVlcnkuYmVnaW4oKTsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNwZWNbaV0pID49IDB4ODApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
I2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBpc1JhdzhCaXQoY29uc3QgSW5DaGFyKiBz
b3VyY2UsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gc291cmNlOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzb3VyY2VbaV0gJiAweEZGICE9IHNv
dXJjZVtpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRS
YXc4Qml0UXVlcnlTdHJpbmcoY29uc3QgSW5DaGFyKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTEJ1
ZmZlcjxPdXRDaGFyPiogYnVmZmVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzUmF3OEJpdChz
b3VyY2UsIGxlbmd0aCkpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc1F1ZXJ5Q2hhcihzb3Vy
Y2VbaV0pKQotICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oc291cmNlW2ldKSwgYnVmZmVyKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBidWZmZXItPmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzb3Vy
Y2VbaV0pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRUb1F1
ZXJ5RW5jb2RpbmcoY29uc3QgSW5DaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5
LCBVUkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc0FsbEFT
Q0lJKHNwZWMsIHF1ZXJ5KSkgewotICAgICAgICAgICAgYXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5n
KCZzcGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgYnVmZmVyKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyLCAxMDI0
PiBjb252ZXJ0ZWRRdWVyeTsKLSAgICAgICAgY29udmVydENoYXJzZXQoc3BlYywgcXVlcnksIGNv
bnZlcnRlZFF1ZXJ5KTsKLSAgICAgICAgYXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5nKGNvbnZlcnRl
ZFF1ZXJ5LmRhdGEoKSwgY29udmVydGVkUXVlcnkubGVuZ3RoKCksIGJ1ZmZlcik7Ci0gICAgfQot
fTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMU2VnbWVudHMuY3BwCmluZGV4IDE1OGU1ZDlkNDhjZWNiNjI1NTA2Mzc4MzAxNTRj
OTI3NWQ5NTBmODIuLjhkOTczY2MyYTViYjBmMDkyZWJhZGQ0MjZkNGY2YTk3MzgxZmQxNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuY3BwCkBAIC0xMyw3ICsxMyw3IEBACiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKICAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjUsNyArMjUsNyBAQAogICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUg
Ik1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgVmVyc2lvbiAyLjAs
IGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAogICogKHRoZSAi
R1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BM
IGFyZQotICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2gg
dG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92
ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKICAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KICAqIGxpY2Vuc2Vz
ICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3Vy
CiAgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBk
ZWNpc2lvbiBieQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50
cy5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oCmluZGV4IDlmMTcyMjhk
NmMwNmIwZDVjZDIwMTA2MzI5YjNhZmQyOGE0MDlhZDkuLjllNWFlNmJkMDA2MTg5NTE5NzE3OWYz
NzgwODRjN2UzMzNlMWJkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
U2VnbWVudHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmgKQEAg
LTEsNDEgKzEsNDcgQEAKLS8vIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLyoKKyAq
IENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KIAogI2lmbmRlZiBVUkxTZWdtZW50
c19oCiAjZGVmaW5lIFVSTFNlZ21lbnRzX2gKIAogI2luY2x1ZGUgIlVSTENvbXBvbmVudC5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAj
aWYgVVNFKFdURlVSTCkKIAogbmFtZXNwYWNlIFdURiB7CiAKK2NsYXNzIFVSTFNlZ21lbnRzOwor
CiAvLyBBIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBpZGVudGlmaWVkIHBhcnRzIG9mIGFuIGlu
cHV0IFVSTC4gVGhpcyBzdHJ1Y3R1cmUKIC8vIGRvZXMgTk9UIHN0b3JlIHRoZSBVUkwgaXRzZWxm
LiBUaGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBzdG9yZSB0aGUgVVJMIHRleHQKIC8vIGFuZCBpdHMg
Y29ycmVzcG9uZGluZyBQYXJzZWQgc3RydWN0dXJlIHNlcGFyYXRlbHkuCkBAIC01OSw2ICs2NSwy
NiBAQCBwdWJsaWM6CiAKICAgICBVUkxTZWdtZW50cygpIHsgfQogCisgICAgVVJMU2VnbWVudHMo
Y29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkKKyAgICB7CisgICAgICAgICp0aGlzID0g
b3RoZXJTZWdtZW50OworICAgIH0KKworICAgIFVSTFNlZ21lbnRzJiBvcGVyYXRvcj0oY29uc3Qg
VVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkKKyAgICB7CisgICAgICAgIHNjaGVtZSA9IG90aGVy
U2VnbWVudC5zY2hlbWU7CisgICAgICAgIHVzZXJuYW1lID0gb3RoZXJTZWdtZW50LnVzZXJuYW1l
OworICAgICAgICBwYXNzd29yZCA9IG90aGVyU2VnbWVudC5wYXNzd29yZDsKKyAgICAgICAgaG9z
dCA9IG90aGVyU2VnbWVudC5ob3N0OworICAgICAgICBwb3J0ID0gb3RoZXJTZWdtZW50LnBvcnQ7
CisgICAgICAgIHBhdGggPSBvdGhlclNlZ21lbnQucGF0aDsKKyAgICAgICAgcXVlcnkgPSBvdGhl
clNlZ21lbnQucXVlcnk7CisgICAgICAgIGZyYWdtZW50ID0gb3RoZXJTZWdtZW50LmZyYWdtZW50
OworICAgICAgICBpZiAob3RoZXJTZWdtZW50Lm1faW5uZXJVUkxTZWdtZW50cykKKyAgICAgICAg
ICAgIG1faW5uZXJVUkxTZWdtZW50cyA9IGFkb3B0UHRyKG5ldyBVUkxTZWdtZW50cygqb3RoZXJT
ZWdtZW50Lm1faW5uZXJVUkxTZWdtZW50cykpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKwogICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgVVJMICh0aGUgZW5kIG9m
IHRoZSBsYXN0IGNvbXBvbmVudCkuCiAgICAgLy8KICAgICAvLyBOb3RlIHRoYXQgZm9yIHNvbWUg
aW52YWxpZCwgbm9uLWNhbm9uaWNhbCBVUkxzLCB0aGlzIG1heSBub3QgYmUgdGhlIGxlbmd0aApA
QCAtMTA1LDYgKzEzMSwxNiBAQCBwdWJsaWM6CiAgICAgVVJMQ29tcG9uZW50IHBhdGg7CiAgICAg
VVJMQ29tcG9uZW50IHF1ZXJ5OwogICAgIFVSTENvbXBvbmVudCBmcmFnbWVudDsKKworICAgIC8v
IEZJWE1FOiB0aGlzIGlzIGEgZGFtbiB1Z2x5IEFQSSBhbmQgaXMgYmFzaWNhbGx5IHVudGVzdGVk
LgorICAgIGNvbnN0IFVSTFNlZ21lbnRzKiBpbm5lclVSTFNlZ21lbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9pbm5lclVSTFNlZ21lbnRzLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbm5lclVSTFNlZ21l
bnRzKGNvbnN0IFVSTFNlZ21lbnRzJiB1cmxTZWdtZW50cykgeyBtX2lubmVyVVJMU2VnbWVudHMg
PSBhZG9wdFB0cihuZXcgVVJMU2VnbWVudHModXJsU2VnbWVudHMpKTsgfQorICAgIHZvaWQgY2xl
YXJJbm5lclVSTFNlZ21lbnRzKCkgeyByZXR1cm4gbV9pbm5lclVSTFNlZ21lbnRzLmNsZWFyKCk7
IH0KKworcHJpdmF0ZToKKyAgICAvLyBUaGUgRmlsZXN5c3RlbSBBUEkgZGVzY3JpYmUgYSBVUkwg
Zm9ybWF0IHdpdGggYW4gaW50ZXJuYWwgVVJMLiBFLmcuOiBmaWxlc3lzdGVtOmh0dHA6Ly93d3cu
YXBwbGUuY29tLworICAgIC8vIFRoZSBpbm5lciBVUkwgc2VnbWVudCBjb250YWlucyB0aGUgcGFy
c2VkIGlubmVyIFVSTCBvZiBhIGZpbGVzeXN0ZW06IFVSTC4KKyAgICBPd25QdHI8VVJMU2VnbWVu
dHM+IG1faW5uZXJVUkxTZWdtZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMVXRpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRjZmFiY2VlOGM4MTdjZGQxNWYyNTFi
ZDZkNjMwOGVmMGFjOWNjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvVVJMVXRpbC5jcHAKQEAgLTAsMCArMSw0OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTIgQXBwbGUg
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
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVUkxV
dGlsLmgiCisKKyNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKKyNpbmNsdWRlICJVUkxDYW5vbklu
dGVybmFsLmgiCisjaW5jbHVkZSAiVVJMRmlsZS5oIgorI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5h
bC5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCitu
YW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7CisKK2NvbnN0IGNoYXIg
a0ZpbGVTY2hlbWVbXSA9ICJmaWxlIjsKK2NvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXSA9
ICJmaWxlc3lzdGVtIjsKK2NvbnN0IGNoYXIga01haWx0b1NjaGVtZVtdID0gIm1haWx0byI7CisK
K25hbWVzcGFjZSB7CisKKy8vIEJhY2tlbmQgZm9yIExvd2VyQ2FzZUVxdWFsc0FTQ0lJLgordGVt
cGxhdGU8dHlwZW5hbWUgSXRlcj4KK2lubGluZSBib29sIGRvTG93ZXJDYXNlRXF1YWxzQVNDSUko
SXRlciBhQmVnaW4sIEl0ZXIgYUVuZCwgY29uc3QgY2hhciogYikKK3sKKyAgICBmb3IgKEl0ZXIg
aXQgPSBhQmVnaW47IGl0ICE9IGFFbmQ7ICsraXQsICsrYikgeworICAgICAgICBpZiAoISpiIHx8
IHRvQVNDSUlMb3dlcigqaXQpICE9ICpiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gISgqYik7Cit9CisKK2NvbnN0IGludCBrTnVtU3RhbmRhcmRVUkxTY2hl
bWVzID0gODsKK2NvbnN0IGNoYXIqIGtTdGFuZGFyZFVSTFNjaGVtZXNba051bVN0YW5kYXJkVVJM
U2NoZW1lc10gPSB7CisgICAgImh0dHAiLAorICAgICJodHRwcyIsCisgICAga0ZpbGVTY2hlbWUs
IC8vIFllcywgZmlsZSB1cmxzIGNhbiBoYXZlIGEgaG9zdG5hbWUhCisgICAgImZ0cCIsCisgICAg
ImdvcGhlciIsCisgICAgIndzIiwgLy8gV2ViU29ja2V0LgorICAgICJ3c3MiLCAvLyBXZWJTb2Nr
ZXQgc2VjdXJlLgorICAgIGtGaWxlU3lzdGVtU2NoZW1lCit9OworCisvLyBHaXZlbiBhIHN0cmlu
ZyBhbmQgYSByYW5nZSBpbnNpZGUgdGhlIHN0cmluZywgY29tcGFyZXMgaXQgdG8gdGhlIGdpdmVu
CisvLyBsb3dlci1jYXNlIHxjb21wYXJlVG98IGJ1ZmZlci4KK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+CitpbmxpbmUgYm9vbCBkb0NvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQsIGNvbnN0
IGNoYXIqIGNvbXBhcmVUbykKK3sKKyAgICBpZiAoIWNvbXBvbmVudC5pc05vbkVtcHR5KCkpCisg
ICAgICAgIHJldHVybiAhY29tcGFyZVRvWzBdOyAvLyBXaGVuIGNvbXBvbmVudCBpcyBlbXB0eSwg
bWF0Y2ggZW1wdHkgc2NoZW1lLgorICAgIHJldHVybiBMb3dlckNhc2VFcXVhbHNBU0NJSSgmc3Bl
Y1tjb21wb25lbnQuYmVnaW4oKV0sICZzcGVjW2NvbXBvbmVudC5lbmQoKV0sIGNvbXBhcmVUbyk7
Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1lIGlkZW50aWZpZWQgYnkg
fHNjaGVtZXwgd2l0aGluIHxzcGVjfCBpcyBvbmUKKy8vIG9mIHRoZSByZWdpc3RlcmVkICJzdGFu
ZGFyZCIgc2NoZW1lcy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citib29sIGRv
SXNTdGFuZGFyZChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IHNjaGVtZSkKK3sKKyAgICBpZiAoIXNjaGVtZS5pc05vbkVtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gRW1wdHkgb3IgaW52YWxpZCBzY2hlbWVzIGFyZSBub24tc3RhbmRhcmQuCisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtOdW1TdGFuZGFyZFVSTFNjaGVtZXM7ICsraSkg
eworICAgICAgICBpZiAoTG93ZXJDYXNlRXF1YWxzQVNDSUkoJnNwZWNbc2NoZW1lLmJlZ2luKCld
LCAmc3BlY1tzY2hlbWUuZW5kKCldLCBrU3RhbmRhcmRVUkxTY2hlbWVzW2ldKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citib29sIGRvRmluZEFuZENvbXBhcmVTY2hlbWUoY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25zdCBjaGFyKiBjb21wYXJl
LCBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKQoreworICAgIC8vIEJlZm9yZSBleHRyYWN0aW5n
IHNjaGVtZSwgY2Fub25pY2FsaXplIHRoZSBVUkwgdG8gcmVtb3ZlIGFueSB3aGl0ZXNwYWNlLgor
ICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgY2Fub25pY2FsaXphdGlvbiBkb25lIGluIGRvQ2Fub25p
Y2FsaXplIGZ1bmN0aW9uLgorICAgIFJhd1VSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNw
YWNlQnVmZmVyOworICAgIGludCBzcGVjTGVuZ3RoOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IHNwZWMgPSBVUkxDYW5vbmljYWxpemVyOjpyZW1vdmVVUkxXaGl0ZXNwYWNlKHN0ciwgc3RyTGVu
Z3RoLCB3aGl0ZXNwYWNlQnVmZmVyLCBzcGVjTGVuZ3RoKTsKKworICAgIFVSTENvbXBvbmVudCBv
dXJTY2hlbWU7CisgICAgaWYgKCFVUkxQYXJzZXI6OkV4dHJhY3RTY2hlbWUoc3BlYywgc3BlY0xl
bmd0aCwgJm91clNjaGVtZSkpIHsKKyAgICAgICAgLy8gTm8gc2NoZW1lLgorICAgICAgICBpZiAo
Zm91bmRTY2hlbWUpCisgICAgICAgICAgICAqZm91bmRTY2hlbWUgPSBVUkxDb21wb25lbnQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm91bmRTY2hlbWUpCisgICAg
ICAgICpmb3VuZFNjaGVtZSA9IG91clNjaGVtZTsKKyAgICByZXR1cm4gZG9Db21wYXJlU2NoZW1l
Q29tcG9uZW50KHNwZWMsIG91clNjaGVtZSwgY29tcGFyZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Citib29sIGRvQ2Fub25pY2FsaXplKGNvbnN0IENoYXJhY3RlclR5
cGUqIGluU3BlYywgaW50IGluU3BlY0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgVVJMQ2Fu
b25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKKyAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBh
cnNlZCkKK3sKKyAgICAvLyBSZW1vdmUgYW55IHdoaXRlc3BhY2UgZnJvbSB0aGUgbWlkZGxlIG9m
IHRoZSByZWxhdGl2ZSBVUkwsIHBvc3NpYmx5CisgICAgLy8gY29weWluZyB0byB0aGUgbmV3IGJ1
ZmZlci4KKyAgICBSYXdVUkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gd2hpdGVzcGFjZUJ1ZmZlcjsK
KyAgICBpbnQgc3BlY0xlbmd0aDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjID0gVVJM
Q2Fub25pY2FsaXplcjo6cmVtb3ZlVVJMV2hpdGVzcGFjZShpblNwZWMsIGluU3BlY0xlbmd0aCwg
d2hpdGVzcGFjZUJ1ZmZlciwgc3BlY0xlbmd0aCk7CisKKyAgICBVUkxTZWdtZW50cyBwYXJzZWRJ
bnB1dDsKKyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIEZvciBXaW5kb3dzLCB3ZSBhbGxvdyB0aGlu
Z3MgdGhhdCBsb29rIGxpa2UgYWJzb2x1dGUgV2luZG93cyBwYXRocyB0byBiZQorICAgIC8vIGZp
eGVkIHVwIG1hZ2ljYWxseSB0byBmaWxlIFVSTHMuIFRoaXMgaXMgZG9uZSBmb3IgSUUgY29tcGF0
YWJpbGl0eS4gRm9yCisgICAgLy8gZXhhbXBsZSwgdGhpcyB3aWxsIGNoYW5nZSAiYzovZm9vIiBp
bnRvIGEgZmlsZSBVUkwgcmF0aGVyIHRoYW4gdHJlYXRpbmcKKyAgICAvLyBpdCBhcyBhIFVSTCB3
aXRoIHRoZSBwcm90b2NvbCAiYyIuIEl0IGFsc28gd29ya3MgZm9yIFVOQyAoIlxcZm9vXGJhci50
eHQiKS4KKyAgICAvLyBUaGVyZSBpcyBzaW1pbGFyIGxvZ2ljIGluIFVSTENhbm9uaWNhbGl6ZXJf
cmVsYXRpdmUuY2MgZm9yCisgICAgLy8KKyAgICAvLyBGb3IgTWF4ICYgVW5peCwgd2UgZG9uJ3Qg
ZG8gdGhpcyAodGhlIGVxdWl2YWxlbnQgd291bGQgYmUgIi9mb28vYmFyIiB3aGljaAorICAgIC8v
IGhhcyBubyBtZWFuaW5nIGFzIGFuIGFic29sdXRlIHBhdGggbmFtZS4gVGhpcyBpcyBiZWNhdXNl
IGJyb3dzZXJzIG9uIE1hYworICAgIC8vICYgVW5peCBkb24ndCBnZW5lcmFsbHkgZG8gdGhpcywg
c28gdGhlcmUgaXMgbm8gY29tcGF0aWJpbGl0eSByZWFzb24gZm9yCisgICAgLy8gZG9pbmcgc28u
CisgICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luVU5DUGF0aChzcGVjLCAwLCBzcGVjTGVuZ3Ro
LCBmYWxzZSkKKyAgICAgICAgfHwgVVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVj
KHNwZWMsIDAsIHNwZWNMZW5ndGgpKSB7CisgICAgICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJM
KHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAgICAgIHJldHVybiBVUkxDYW5v
bmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZElu
cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQsICpvdXB1dFBhcnNlZCk7CisgICAgfQorI2VuZGlmCisK
KyAgICBVUkxDb21wb25lbnQgc2NoZW1lOworICAgIGlmICghVVJMUGFyc2VyOjpFeHRyYWN0U2No
ZW1lKHNwZWMsIHNwZWNMZW5ndGgsICZzY2hlbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBUaGlzIGlzIHRoZSBwYXJzZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQgVVJMLCB3ZSBo
YXZlIHRvIGNhbm9uaWNhbGl6ZSBpdAorICAgIC8vIGJlZm9yZSBzdG9yaW5nIGl0IGluIG91ciBv
YmplY3QuCisgICAgYm9vbCBzdWNjZXNzOworICAgIGlmIChkb0NvbXBhcmVTY2hlbWVDb21wb25l
bnQoc3BlYywgc2NoZW1lLCBrRmlsZVNjaGVtZSkpIHsKKyAgICAgICAgLy8gRmlsZSBVUkxzIGFy
ZSBzcGVjaWFsLgorICAgICAgICBVUkxQYXJzZXI6OlBhcnNlRmlsZVVSTChzcGVjLCBzcGVjTGVu
Z3RoLCAmcGFyc2VkSW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fub25pY2FsaXplcjo6
Q2Fub25pY2FsaXplRmlsZVVSTChzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWRJbnB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNl
dENvbnZlcnRlciwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmb3VwdXRQYXJzZWQpOworICAgIH0gZWxzZSBpZiAoZG9Db21w
YXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHNjaGVtZSwga0ZpbGVTeXN0ZW1TY2hlbWUpKSB7Cisg
ICAgICAgIC8vIEZpbGVzeXN0ZW0gVVJMcyBhcmUgc3BlY2lhbC4KKyAgICAgICAgVVJMUGFyc2Vy
OjpQYXJzZUZpbGVTeXN0ZW1VUkwoc3BlYywgc3BlY0xlbmd0aCwgJnBhcnNlZElucHV0KTsKKyAg
ICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6ZXI6OmNhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1V
Ukwoc3BlYywgcGFyc2VkSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgb3VwdXRQYXJzZWQpOworCisgICAgfSBlbHNlIGlmIChkb0lzU3RhbmRhcmQoc3BlYywgc2No
ZW1lKSkgeworICAgICAgICAvLyBBbGwgIm5vcm1hbCIgVVJMcy4KKyAgICAgICAgVVJMUGFyc2Vy
OjpQYXJzZVN0YW5kYXJkVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7CisgICAg
ICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVTdGFuZGFyZFVSTChz
cGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWRJbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQsICZvdXB1dFBhcnNlZCk7CisKKyAgICB9IGVsc2UgaWYgKGRvQ29tcGFyZVNjaGVtZUNv
bXBvbmVudChzcGVjLCBzY2hlbWUsIGtNYWlsdG9TY2hlbWUpKSB7CisgICAgICAgIC8vIE1haWx0
byBhcmUgdHJlYXRlZCBsaWtlIGEgc3RhbmRhcmQgdXJsIHdpdGggb25seSBhIHNjaGVtZSwgcGF0
aCwgcXVlcnkKKyAgICAgICAgVVJMUGFyc2VyOjpQYXJzZU1haWx0b1VSTChzcGVjLCBzcGVjTGVu
Z3RoLCAmcGFyc2VkSW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fub25pY2FsaXplcjo6
Y2Fub25pY2FsaXplTWFpbHRvVVJMKHNwZWMsIHBhcnNlZElucHV0LCBvdXRwdXQsIG91cHV0UGFy
c2VkKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICJXZWlyZCIgVVJMcyBsaWtlIGRhdGE6
IGFuZCBqYXZhc2NyaXB0OgorICAgICAgICBVUkxQYXJzZXI6OlBhcnNlUGF0aFVSTChzcGVjLCBz
cGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOworICAgICAgICBzdWNjZXNzID0gVVJMQ2Fub25pY2Fs
aXplcjo6Y2Fub25pY2FsaXplUGF0aFVSTChzcGVjLCBwYXJzZWRJbnB1dCwgb3V0cHV0LCBvdXB1
dFBhcnNlZCk7CisgICAgfQorICAgIHJldHVybiBzdWNjZXNzOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBkb1Jlc29sdmVSZWxhdGl2ZShjb25zdCBjaGFyKiBi
YXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGluUmVsYXRpdmUsIGludCBpblJlbGF0aXZlTGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29u
dmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQoreworICAgIC8vIFJl
bW92ZSBhbnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHJlbGF0aXZlIFVSTCwg
cG9zc2libHkKKyAgICAvLyBjb3B5aW5nIHRvIHRoZSBuZXcgYnVmZmVyLgorICAgIFJhd1VSTEJ1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNlQnVmZmVyOworICAgIGludCByZWxhdGl2ZUxl
bmd0aDsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiByZWxhdGl2ZSA9IFVSTENhbm9uaWNhbGl6
ZXI6OnJlbW92ZVVSTFdoaXRlc3BhY2UoaW5SZWxhdGl2ZSwgaW5SZWxhdGl2ZUxlbmd0aCwgd2hp
dGVzcGFjZUJ1ZmZlciwgcmVsYXRpdmVMZW5ndGgpOworCisgICAgLy8gU2VlIGlmIG91ciBiYXNl
IFVSTCBzaG91bGQgYmUgdHJlYXRlZCBhcyAic3RhbmRhcmQiLgorICAgIGJvb2wgc3RhbmRhcmRC
YXNlU2NoZW1lID0gYmFzZVBhcnNlZC5zY2hlbWUuaXNOb25FbXB0eSgpICYmIGRvSXNTdGFuZGFy
ZChiYXNlU3BlYywgYmFzZVBhcnNlZC5zY2hlbWUpOworCisgICAgYm9vbCBpc1JlbGF0aXZlOwor
ICAgIFVSTENvbXBvbmVudCByZWxhdGl2ZUNvbXBvbmVudDsKKyAgICBpZiAoIVVSTENhbm9uaWNh
bGl6ZXI6OmlzUmVsYXRpdmVVUkwoYmFzZVNwZWMsIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLCByZWxhdGl2ZUxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRCYXNlU2NoZW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlLCBy
ZWxhdGl2ZUNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRXJyb3IgcmVzb2x2
aW5nLgorCisgICAgaWYgKGlzUmVsYXRpdmUpIHsKKyAgICAgICAgLy8gUmVsYXRpdmUsIHJlc29s
dmUgYW5kIGNhbm9uaWNhbGl6ZS4KKyAgICAgICAgYm9vbCBmaWxlQmFzZVNjaGVtZSA9IGJhc2VQ
YXJzZWQuc2NoZW1lLmlzTm9uRW1wdHkoKSAmJiBkb0NvbXBhcmVTY2hlbWVDb21wb25lbnQoYmFz
ZVNwZWMsIGJhc2VQYXJzZWQuc2NoZW1lLCBrRmlsZVNjaGVtZSk7CisgICAgICAgIHJldHVybiBV
UkxDYW5vbmljYWxpemVyOjpyZXNvbHZlUmVsYXRpdmVVUkwoYmFzZVNwZWMsIGJhc2VQYXJzZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZUJhc2VTY2hlbWUsIHJlbGF0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LCBjaGFyc2V0Q29udmVydGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgb3VwdXRQYXJzZWQpOworICAgIH0KKworICAgIC8vIE5vdCByZWxhdGl2ZSwgY2Fub25pY2Fs
aXplIHRoZSBpbnB1dC4KKyAgICByZXR1cm4gZG9DYW5vbmljYWxpemUocmVsYXRpdmUsIHJlbGF0
aXZlTGVuZ3RoLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICpvdXB1dFBhcnNlZCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citib29sIGRvUmVwbGFjZUNvbXBvbmVu
dHMoY29uc3QgY2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlY0xl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2Vk
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxh
Y2VtZW50czxDaGFyYWN0ZXJUeXBlPiYgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCkKK3sKKyAg
ICAvLyBJZiB0aGUgc2NoZW1lIGlzIG92ZXJyaWRkZW4sIGp1c3QgZG8gYSBzaW1wbGUgc3RyaW5n
IHN1YnN0aXR1dGlvbiBhbmQKKyAgICAvLyByZXBhcnNlIHRoZSB3aG9sZSB0aGluZy4gVGhlcmUg
YXJlIGxvdHMgb2YgZWRnZSBjYXNlcyB0aGF0IHdlIHJlYWxseSBkb24ndAorICAgIC8vIHdhbnQg
dG8gZGVhbCB3aXRoLiBMaWtlIHdoYXQgaGFwcGVucyBpZiBJIHJlcGxhY2UgImh0dHA6Ly9lOjgw
ODAvZm9vIgorICAgIC8vIHdpdGggYSBmaWxlLiBEb2VzIGl0IGJlY29tZSAiZmlsZTovLy9FOi84
MDgwL2ZvbyIgd2hlcmUgdGhlIHBvcnQgbnVtYmVyCisgICAgLy8gYmVjb21lcyBwYXJ0IG9mIHRo
ZSBwYXRoPyBQYXJzaW5nIHRoYXQgc3RyaW5nIGFzIGEgZmlsZSBVUkwgc2F5cyAieWVzIgorICAg
IC8vIGJ1dCBhbG1vc3Qgbm8gc2FuZSBydWxlIGZvciBkZWFsaW5nIHdpdGggdGhlIGNvbXBvbmVu
dHMgaW5kaXZpZHVhbGx5IHdvdWxkCisgICAgLy8gY29tZSB1cCB3aXRoIHRoYXQuCisgICAgLy8K
KyAgICAvLyBXaHkgYWxsb3cgdGhlc2UgY3JhenkgY2FzZXMgYXQgYWxsPyBQcm9ncmFtYXRpY2Fs
bHksIHRoZXJlIGlzIGFsbW9zdCBubworICAgIC8vIGNhc2UgZm9yIHJlcGxhY2luZyB0aGUgc2No
ZW1lLiBUaGUgbW9zdCBjb21tb24gY2FzZSBmb3IgaGl0dGluZyB0aGlzIGlzCisgICAgLy8gaW4g
SlMgd2hlbiBidWlsZGluZyB1cCBhIFVSTCB1c2luZyB0aGUgbG9jYXRpb24gb2JqZWN0LiBJbiB0
aGlzIGNhc2UsIHRoZQorICAgIC8vIEpTIGNvZGUgZXhwZWN0cyB0aGUgc3RyaW5nIHN1YnN0aXR1
dGlvbiBiZWhhdmlvcjoKKyAgICAvLyAgIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvV0QtaHRt
bDUtMjAwODA2MTAvc3RydWN0dXJlZC5odG1sI2NvbW1vbjMKKyAgICBpZiAocmVwbGFjZW1lbnRz
LklzU2NoZW1lT3ZlcnJpZGRlbigpKSB7CisgICAgICAgIC8vIENhbm9uaWNhbGl6ZSB0aGUgbmV3
IHNjaGVtZSBzbyBpdCBpcyA4LWJpdCBhbmQgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoCisgICAg
ICAgIC8vIHRoZSBleGlzdGluZyBzcGVjLgorICAgICAgICBSYXdVUkxCdWZmZXI8Y2hhciwgMTI4
PiBzY2hlbWVfcmVwbGFjZWQ7CisgICAgICAgIFVSTENvbXBvbmVudCBzY2hlbWVSZXBsYWNlZFBh
cnNlZDsKKyAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6Y2Fub25pY2FsaXplU2NoZW1lKHJlcGxh
Y2VtZW50cy5zb3VyY2VzKCkuc2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmNvbXBvbmVudHMoKS5zY2hlbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWVfcmVwbGFjZWQsIHNj
aGVtZVJlcGxhY2VkUGFyc2VkKTsKKworICAgICAgICAvLyBXZSBjYW4gYXNzdW1lIHRoYXQgdGhl
IGlucHV0IGlzIGNhbm9uaWNhbGl6ZWQsIHdoaWNoIG1lYW5zIGl0IGFsd2F5cyBoYXMKKyAgICAg
ICAgLy8gYSBjb2xvbiBhZnRlciB0aGUgc2NoZW1lIChvciB3aGVyZSB0aGUgc2NoZW1lIHdvdWxk
IGJlKS4KKyAgICAgICAgaW50IHNwZWNBZnRlckNvbG9uID0gcGFyc2VkLnNjaGVtZS5pc1ZhbGlk
KCkgPyBwYXJzZWQuc2NoZW1lLmVuZCgpICsgMQorICAgICAgICA6IDE7CisgICAgICAgIGlmIChz
cGVjTGVuZ3RoIC0gc3BlY0FmdGVyQ29sb24gPiAwKSB7CisgICAgICAgICAgICBzY2hlbWVfcmVw
bGFjZWQuYXBwZW5kKCZzcGVjW3NwZWNBZnRlckNvbG9uXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3BlY0xlbmd0aCAtIHNwZWNBZnRlckNvbG9uKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFdlIG5vdyBuZWVkIHRvIGNvbXBsZXRlbHkgcmUtcGFyc2UgdGhlIHJlc3Vs
dGluZyBzdHJpbmcgc2luY2UgaXRzIG1lYW5pbmcKKyAgICAgICAgLy8gbWF5IGhhdmUgY2hhbmdl
ZCB3aXRoIHRoZSBkaWZmZXJlbnQgc2NoZW1lLgorICAgICAgICBSYXdVUkxCdWZmZXI8Y2hhciwg
MTI4PiByZWNhbm9uaWNhbGl6ZWQ7CisgICAgICAgIFVSTFNlZ21lbnRzIHJlY2Fub25pY2FsaXpl
ZFBhcnNlZDsKKyAgICAgICAgZG9DYW5vbmljYWxpemUoc2NoZW1lX3JlcGxhY2VkLmRhdGEoKSwg
c2NoZW1lX3JlcGxhY2VkLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0
Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAgICByZWNhbm9uaWNhbGl6ZWQsIHJlY2Fu
b25pY2FsaXplZFBhcnNlZCk7CisKKyAgICAgICAgLy8gUmVjdXJzZSB1c2luZyB0aGUgdmVyc2lv
biB3aXRoIHRoZSBzY2hlbWUgYWxyZWFkeSByZXBsYWNlZC4gVGhpcyB3aWxsIG5vdworICAgICAg
ICAvLyB1c2UgdGhlIHJlcGxhY2VtZW50IHJ1bGVzIGZvciB0aGUgbmV3IHNjaGVtZS4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gV2FybmluZzogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBSZXBsYWNl
Q29tcG9uZW50cyB3aWxsIHJlLWNoZWNrIGFsbAorICAgICAgICAvLyBjb21wb25lbnRzIGZvciB2
YWxpZGl0eS4gVGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0IGZhaWwgaWYgRG9DYW5vbmljYWxpemUK
KyAgICAgICAgLy8gZmFpbGVkIGFib3ZlIHNpbmNlIHRoZW9yZXRpY2FsbHkgdGhlIHRoaW5nIG1h
a2luZyBpdCBmYWlsIGNvdWxkIGJlCisgICAgICAgIC8vIGdldHRpbmcgcmVwbGFjZWQgaGVyZS4g
SWYgUmVwbGFjZUNvbXBvbmVudHMgZGlkbid0IHJlLWNoZWNrIGV2ZXJ5dGhpbmcsCisgICAgICAg
IC8vIHdlIHdvdWxkbid0IGtub3cgaWYgc29tZXRoaW5nICpub3QqIGdldHRpbmcgcmVwbGFjZWQg
aXMgYSBwcm9ibGVtLgorICAgICAgICAvLyBJZiB0aGUgc2NoZW1lLXNwZWNpZmljIHJlcGxhY2Vy
cyBhcmUgbWFkZSBtb3JlIGludGVsbGlnZW50IHNvIHRoZXkgZG9uJ3QKKyAgICAgICAgLy8gcmUt
Y2hlY2sgZXZlcnl0aGluZywgd2Ugc2hvdWxkIGluc3RlYWQgcmVjYW5vbmljYWxpemUgdGhlIHdo
b2xlIHRoaW5nCisgICAgICAgIC8vIGFmdGVyIHRoaXMgY2FsbCB0byBjaGVjayB2YWxpZGl0eSAo
dGhpcyBhc3N1bWVzIHJlcGxhY2luZyB0aGUgc2NoZW1lIGlzCisgICAgICAgIC8vIG11Y2ggbXVj
aCBsZXNzIGNvbW1vbiB0aGFuIG90aGVyIHR5cGVzIG9mIHJlcGxhY2VtZW50cywgbGlrZSBjbGVh
cmluZyB0aGUKKyAgICAgICAgLy8gcmVmKS4KKyAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6UmVw
bGFjZW1lbnRzPENoYXJhY3RlclR5cGU+IHJlcGxhY2VtZW50c05vU2NoZW1lID0gcmVwbGFjZW1l
bnRzOworICAgICAgICByZXBsYWNlbWVudHNOb1NjaGVtZS5TZXRTY2hlbWUoMCwgVVJMQ29tcG9u
ZW50KCkpOworICAgICAgICByZXR1cm4gZG9SZXBsYWNlQ29tcG9uZW50cyhyZWNhbm9uaWNhbGl6
ZWQuZGF0YSgpLCByZWNhbm9uaWNhbGl6ZWQubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY2Fub25pY2FsaXplZFBhcnNlZCwgcmVwbGFjZW1lbnRzTm9TY2hl
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIs
IG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwg
dGhlbiB3ZSBrbm93IHRoZSBzY2hlbWUgZG9lc24ndCBuZWVkIHRvIGJlIHJlcGxhY2VkLCBzbyBj
YW4KKyAgICAvLyBqdXN0IGtleSBvZmYgdGhlIHNjaGVtZSBpbiB0aGUgc3BlYyB0byBrbm93IGhv
dyB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorICAgIGlmIChkb0NvbXBhcmVTY2hlbWVDb21wb25l
bnQoc3BlYywgcGFyc2VkLnNjaGVtZSwga0ZpbGVTY2hlbWUpKSB7CisgICAgICAgIHJldHVybiBV
UkxDYW5vbmljYWxpemVyOjpSZXBsYWNlRmlsZVVSTChzcGVjLCBwYXJzZWQsIHJlcGxhY2VtZW50
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJz
ZXRDb252ZXJ0ZXIsIG91dHB1dCwgJm91dHB1dFBhcnNlZCk7CisgICAgfQorICAgIGlmIChkb0Nv
bXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgcGFyc2VkLnNjaGVtZSwga0ZpbGVTeXN0ZW1TY2hl
bWUpKSB7CisgICAgICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlRmlsZVN5c3Rl
bVVSTChzcGVjLCBwYXJzZWQsIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZv
dXRwdXRQYXJzZWQpOworICAgIH0KKyAgICBpZiAoZG9Jc1N0YW5kYXJkKHNwZWMsIHBhcnNlZC5z
Y2hlbWUpKSB7CisgICAgICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlU3RhbmRh
cmRVUkwoc3BlYywgcGFyc2VkLCByZXBsYWNlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCAm
b3V0cHV0UGFyc2VkKTsKKyAgICB9CisgICAgaWYgKGRvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChz
cGVjLCBwYXJzZWQuc2NoZW1lLCBrTWFpbHRvU2NoZW1lKSkKKyAgICAgICAgcmV0dXJuIFVSTENh
bm9uaWNhbGl6ZXI6OnJlcGxhY2VNYWlsdG9VUkwoc3BlYywgcGFyc2VkLCByZXBsYWNlbWVudHMs
IG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKKworICAgIC8vIERlZmF1bHQgaXMgYSBwYXRoIFVSTC4K
KyAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVBhdGhVUkwoc3BlYywgcGFyc2Vk
LCByZXBsYWNlbWVudHMsIG91dHB1dCwgJm91dHB1dFBhcnNlZCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlCisKK2Jvb2wgaXNTdGFuZGFyZChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHNjaGVtZSkKK3sKKyAgICByZXR1cm4gZG9Jc1N0YW5kYXJkKHNwZWMsIHNjaGVtZSk7Cit9
CisKK2Jvb2wgaXNTdGFuZGFyZChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBzY2hlbWUpCit7CisgICAgcmV0dXJuIGRvSXNTdGFuZGFyZChzcGVjLCBzY2hlbWUpOworfQor
Citib29sIEZpbmRBbmRDb21wYXJlU2NoZW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IHN0ckxlbmd0
aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSkKK3sKKyAg
ICByZXR1cm4gZG9GaW5kQW5kQ29tcGFyZVNjaGVtZShzdHIsIHN0ckxlbmd0aCwgY29tcGFyZSwg
Zm91bmRTY2hlbWUpOworfQorCitib29sIEZpbmRBbmRDb21wYXJlU2NoZW1lKGNvbnN0IFVDaGFy
KiBzdHIsIGludCBzdHJMZW5ndGgsIGNvbnN0IGNoYXIqIGNvbXBhcmUsIFVSTENvbXBvbmVudCog
Zm91bmRTY2hlbWUpCit7CisgICAgcmV0dXJuIGRvRmluZEFuZENvbXBhcmVTY2hlbWUoc3RyLCBz
dHJMZW5ndGgsIGNvbXBhcmUsIGZvdW5kU2NoZW1lKTsKK30KKworYm9vbCBjYW5vbmljYWxpemUo
Y29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsCisgICAgICAgICAgICAgICAgICBVUkxD
YW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBh
cnNlZCkKK3sKKyAgICByZXR1cm4gZG9DYW5vbmljYWxpemUoc3BlYywgc3BlY0xlbmd0aCwgY2hh
cnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgY2Fub25pY2Fs
aXplKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwKKyAgICAgICAgICAgICAgICAg
IFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91
cHV0UGFyc2VkKQoreworICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZShzcGVjLCBzcGVjTGVuZ3Ro
LCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKK30KKworYm9vbCByZXNv
bHZlUmVsYXRpdmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNl
UGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsYXRpdmUsIGludCBy
ZWxhdGl2ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNo
YXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQoreworICAg
IHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZShiYXNlU3BlYywgYmFzZVBhcnNlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0aXZlTGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91cHV0UGFyc2Vk
KTsKK30KKworYm9vbCByZXNvbHZlUmVsYXRpdmUoY29uc3QgY2hhciogYmFzZVNwZWMsIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNo
YXIqIHJlbGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBV
UkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzKiBv
dXB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmUoYmFzZVNwZWMsIGJh
c2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLCByZWxhdGl2
ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwg
b3V0cHV0LCBvdXB1dFBhcnNlZCk7Cit9CisKK2Jvb2wgUmVwbGFjZUNvbXBvbmVudHMoY29uc3Qg
Y2hhciogc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWNMZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czxjaGFyPiYg
cmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpD
aGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCkKK3sKKyAgICByZXR1cm4gZG9SZXBsYWNlQ29tcG9uZW50cyhz
cGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWQsIHJlcGxhY2VtZW50cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOwor
fQorCitib29sIFJlcGxhY2VDb21wb25lbnRzKGNvbnN0IGNoYXIqIHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzcGVjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxTZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxD
YW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCisgICAgICAg
ICAgICAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJz
ZXRDb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQor
eworICAgIHJldHVybiBkb1JlcGxhY2VDb21wb25lbnRzKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNl
ZCwgcmVwbGFjZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRD
b252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFBhcnNlZCk7Cit9CisKKy8vIEZyb250LWVuZHMgZm9y
IExvd2VyQ2FzZUVxdWFsc0FTQ0lJLgorYm9vbCBMb3dlckNhc2VFcXVhbHNBU0NJSShjb25zdCBj
aGFyKiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgcmV0
dXJuIGRvTG93ZXJDYXNlRXF1YWxzQVNDSUkoYUJlZ2luLCBhRW5kLCBiKTsKK30KKworYm9vbCBM
b3dlckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQs
IGNvbnN0IGNoYXIqIGJCZWdpbiwgY29uc3QgY2hhciogYkVuZCkKK3sKKyAgICB3aGlsZSAoYUJl
Z2luICE9IGFFbmQgJiYgYkJlZ2luICE9IGJFbmQgJiYgdG9BU0NJSUxvd2VyKCphQmVnaW4pID09
ICpiQmVnaW4pIHsKKyAgICAgICAgYUJlZ2luKys7CisgICAgICAgIGJCZWdpbisrOworICAgIH0K
KyAgICByZXR1cm4gYUJlZ2luID09IGFFbmQgJiYgYkJlZ2luID09IGJFbmQ7Cit9CisKK2Jvb2wg
TG93ZXJDYXNlRXF1YWxzQVNDSUkoY29uc3QgVUNoYXIqIGFCZWdpbiwgY29uc3QgVUNoYXIqIGFF
bmQsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgcmV0dXJuIGRvTG93ZXJDYXNlRXF1YWxzQVNDSUko
YUJlZ2luLCBhRW5kLCBiKTsKK30KKwordm9pZCBEZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29u
c3QgY2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCkKK3sK
KyAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdW5lc2NhcGVkQ2hhcnM7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaW5wdXRbaV0gPT0gJyUnKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgICAgICAgICAgaWYgKFVSTENhbm9uaWNh
bGl6ZXI6OkRlY29kZUVzY2FwZWQoaW5wdXQsICZpLCBsZW5ndGgsICZjaCkpCisgICAgICAgICAg
ICAgICAgdW5lc2NhcGVkQ2hhcnMuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBjb3B5IHRoZSBwZXJjZW50
IGxpdGVyYWwuCisgICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhcnMuYXBwZW5kKCclJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBSZWd1bGFyIG5v
bi1lc2NhcGVkIDgtYml0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIHVuZXNjYXBlZENoYXJzLmFw
cGVuZChpbnB1dFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb252ZXJ0IHRoYXQg
OC1iaXQgdG8gVVRGLTE2LiBJdCdzIG5vdCBjbGVhciBJRSBkb2VzIHRoaXMgYXQgYWxsIHRvCisg
ICAgLy8gSmF2YVNjcmlwdCBVUkxzLCBidXQgRmlyZWZveCBhbmQgU2FmYXJpIGRvLgorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdW5lc2NhcGVkQ2hhcnMubGVuZ3RoKCk7IGkrKykgeworICAgICAg
ICB1bnNpZ25lZCBjaGFyIHVjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHVuZXNjYXBl
ZENoYXJzLmF0KGkpKTsKKyAgICAgICAgaWYgKHVjaCA8IDB4ODApIHsKKyAgICAgICAgICAgIC8v
IE5vbi1VVEYtOCwganVzdCBhcHBlbmQgZGlyZWN0bHkKKyAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQodWNoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIG5leHRfY2ggd2lsbCBw
b2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGRlY29kZWQKKyAgICAgICAgICAgIC8v
IGNoYXJhY3Rlci4KKyAgICAgICAgICAgIGludCBuZXh0Q2hhcmFjdGVyID0gaTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKKyAgICAgICAgICAgIGlmIChVUkxDYW5vbmljYWxpemVy
OjpyZWFkVVRGQ2hhcih1bmVzY2FwZWRDaGFycy5kYXRhKCksICZuZXh0Q2hhcmFjdGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZENoYXJz
Lmxlbmd0aCgpLCAmY29kZVBvaW50KSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkIFVURi04
IGNoYXJhY3RlciwgY29udmVydCB0byBVVEYtMTYuCisgICAgICAgICAgICAgICAgVVJMQ2Fub25p
Y2FsaXplcjo6QXBwZW5kVVRGMTZWYWx1ZShjb2RlUG9pbnQsIG91dHB1dCk7CisgICAgICAgICAg
ICAgICAgaSA9IG5leHRDaGFyYWN0ZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2VxdWVuY2VzIHRoYXQgYXJlIG5vdCB2YWxpZCBV
VEYtOCwgd2Uga2VlcAorICAgICAgICAgICAgICAgIC8vIGludmFsaWQgY29kZSBwb2ludHMgYW5k
IHByb21vdGUgdG8gVVRGLTE2LiBXZSBjb3B5IGFsbCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAg
ICAgLy8gZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBpZGVudGlm
aWVkIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbmV4dENoYXJhY3Rlcikg
eworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHVuZXNjYXBlZENoYXJzLmF0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPih1bmVzY2FwZWRDaGFycy5hdChpKSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEVuY29kZVVSSUNvbXBvbmVudChjb25zdCBj
aGFyKiBpbnB1dCwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCit7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBjaGFy
IGMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihpbnB1dFtpXSk7CisgICAgICAgIGlmIChV
UkxDaGFyYWN0ZXJUeXBlczo6aXNDb21wb25lbnRDaGFyKGMpKQorICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVVJMQ2Fub25pY2FsaXplcjo6
YXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihjLCBvdXRwdXQpOworICAgIH0KK30KKworYm9vbCBD
b21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVu
dCYgY29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCit7CisgICAgcmV0dXJuIGRvQ29t
cGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBjb21wb25lbnQsIGNvbXBhcmVUbyk7Cit9CisKK2Jv
b2wgQ29tcGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBjb21wb25lbnQsIGNvbnN0IGNoYXIqIGNvbXBhcmVUbykKK3sKKyAgICByZXR1cm4g
ZG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIGNvbXBvbmVudCwgY29tcGFyZVRvKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVVJMVXRpbGl0aWVzCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMv
VVJMVXRpbC5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGY5Y2E5MzVmN2EyZjk5MTg3ZWM0MjQ2OTViYjVmMzE0ZWYyMWY0MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oCkBAIC0wLDAgKzEsMTM1IEBACisv
KgorICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFVSTFV0
aWxfaAorI2RlZmluZSBVUkxVdGlsX2gKKworI2luY2x1ZGUgIlVSTEJ1ZmZlci5oIgorI2luY2x1
ZGUgIlVSTENhbm9uLmgiCisjaW5jbHVkZSAiVVJMUGFyc2UuaCIKKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9Vbmljb2RlLmg+CisKKyNpZiBVU0UoV1RGVVJMKQorCituYW1lc3BhY2UgV1RGIHsKKwor
bmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7CisKKy8vIExvY2F0ZXMgdGhlIHNjaGVtZSBpbiB0aGUg
Z2l2ZW4gc3RyaW5nIGFuZCBwbGFjZXMgaXQgaW50byB8Zm91bmRTY2hlbWV8LAorLy8gd2hpY2gg
bWF5IGJlIDAgdG8gaW5kaWNhdGUgdGhlIGNhbGxlciBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBy
YW5nZS4KKy8vCisvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHxjb21wYXJlfCBzY2hlbWUg
bWF0Y2hlcyB0aGUgc2NoZW1lIGZvdW5kIGluIHRoZQorLy8gaW5wdXQgKGlmIGFueSkuIFRoZSB8
Y29tcGFyZXwgc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBjYW5vbmljYWwgc2NoZW1lIG9yCisvLyB0
aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVuZGVmaW5lZC4KK2Jvb2wgRmluZEFuZENv
bXBhcmVTY2hlbWUoY29uc3QgY2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25zdCBjaGFyKiBj
b21wYXJlLCBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKTsKK2Jvb2wgRmluZEFuZENvbXBhcmVT
Y2hlbWUoY29uc3QgVUNoYXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFy
ZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSk7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Z2l2ZW4gc3RyaW5nIHJlcHJlc2VudHMgYSBzdGFuZGFyZCBVUkwuIFRoaXMgbWVhbnMgdGhhdAor
Ly8gZWl0aGVyIHRoZSBzY2hlbWUgaXMgaW4gdGhlIGxpc3Qgb2Yga25vd24gc3RhbmRhcmQgc2No
ZW1lcy4KK2Jvb2wgaXNTdGFuZGFyZChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHNjaGVtZSk7Citib29sIGlzU3RhbmRhcmQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgc2NoZW1lKTsKKworLy8gVVJMIGxpYnJhcnkgd3JhcHBlcnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBQYXJz
ZXMgdGhlIGdpdmVuIHNwZWMgYWNjb3JkaW5nIHRvIHRoZSBleHRyYWN0ZWQgc2NoZW1lIHR5cGUu
IE5vcm1hbCB1c2VycworLy8gc2hvdWxkIHVzZSB0aGUgVVJMIG9iamVjdCwgYWx0aG91Z2ggdGhp
cyBtYXkgYmUgdXNlZnVsIGlmIHBlcmZvcm1hbmNlIGlzCisvLyBjcml0aWNhbCBhbmQgeW91IGRv
bid0IHdhbnQgdG8gZG8gdGhlIGhlYXAgYWxsb2NhdGlvbiBmb3IgdGhlIHN0ZDo6c3RyaW5nLgor
Ly8KKy8vIEFzIHdpdGggdGhlIFVSTENhbm9uaWNhbGl6ZXI6OkNhbm9uaWNhbGl6ZSogZnVuY3Rp
b25zLCB0aGUgY2hhcnNldCBjb252ZXJ0ZXIgY2FuCisvLyBiZSAwIHRvIHVzZSBVVEYtOCAoaXQg
d2lsbCBiZSBmYXN0ZXIgaW4gdGhpcyBjYXNlKS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgYSB2
YWxpZCBVUkwgd2FzIHByb2R1Y2VkLCBmYWxzZSBpZiBub3QuIE9uIGZhaWx1cmUsIHRoZQorLy8g
b3V0cHV0IGFuZCBwYXJzZWQgc3RydWN0dXJlcyB3aWxsIHN0aWxsIGJlIGZpbGxlZCBhbmQgd2ls
bCBiZSBjb25zaXN0ZW50LAorLy8gYnV0IHRoZXkgd2lsbCBub3QgcmVwcmVzZW50IGEgbG9hZGFi
bGUgVVJMLgorYm9vbCBjYW5vbmljYWxpemUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5n
dGgsIFVSTENhbm9uaWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqLAorICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKTsKK2Jvb2wgY2Fu
b25pY2FsaXplKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMQ2Fub25pY2Fs
aXplcjo6Q2hhcnNldENvbnZlcnRlciosCisgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mLCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpOworCisvLyBSZXNvbHZlcyBhIHBvdGVudGlh
bGx5IHJlbGF0aXZlIFVSTCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGFyc2VkIGJhc2UgVVJMLgor
Ly8gVGhlIGJhc2UgTVVTVCBiZSB2YWxpZC4gVGhlIHJlc3VsdGluZyBjYW5vbmljYWwgVVJMIGFu
ZCBwYXJzZWQgaW5mb3JtYXRpb24KKy8vIHdpbGwgYmUgcGxhY2VkIGluIHRvIHRoZSBnaXZlbiBv
dXQgdmFyaWFibGVzLgorLy8KKy8vIFRoZSByZWxhdGl2ZSBuZWVkIG5vdCBiZSByZWxhdGl2ZS4g
SWYgd2UgZGlzY292ZXIgdGhhdCBpdCdzIGFic29sdXRlLCB0aGlzCisvLyB3aWxsIHByb2R1Y2Ug
YSBjYW5vbmljYWwgdmVyc2lvbiBvZiB0aGF0IFVSTC4gU2VlIENhbm9uaWNhbGl6ZSgpIGZvciBt
b3JlCisvLyBhYm91dCB0aGUgY2hhcnNldENvbnZlcnRlci4KKy8vCisvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIG91dHB1dCBpcyB2YWxpZCwgZmFsc2UgaWYgdGhlIGlucHV0IGNvdWxkIG5vdCBwcm9k
dWNlCisvLyBhIHZhbGlkIFVSTC4KK2Jvb2wgcmVzb2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJh
c2VTcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHJlbGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCisgICAgICAgICAg
ICAgICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiwKKyAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNlZCk7
Citib29sIHJlc29sdmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2Vn
bWVudHMmIGJhc2VQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVs
YXRpdmUsIGludCByZWxhdGl2ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVSTENhbm9u
aWNhbGl6ZXI6OkNoYXJzZXRDb252ZXJ0ZXIqLAorICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKTsKKworLy8gUmVwbGFjZXMgY29t
cG9uZW50cyBpbiB0aGUgZ2l2ZW4gVkFMSUQgaW5wdXQgdXJsLiBUaGUgbmV3IGNhbm9uaWNhbCBV
UkwgaW5mbworLy8gaXMgd3JpdHRlbiB0byBvdXRwdXQgYW5kIG91dHB1dFBhcnNlZC4KKy8vCisv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdGluZyBVUkwgaXMgdmFsaWQuCitib29sIFJlcGxh
Y2VDb21wb25lbnRzKGNvbnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxT
ZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmlj
YWxpemVyOjpSZXBsYWNlbWVudHM8Y2hhcj4mLAorICAgICAgICAgICAgICAgICAgICAgICBVUkxD
YW5vbmljYWxpemVyOjpDaGFyc2V0Q29udmVydGVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAg
VVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Citib29sIFJlcGxh
Y2VDb21wb25lbnRzKGNvbnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxT
ZWdtZW50cyYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmlj
YWxpemVyOjpSZXBsYWNlbWVudHM8VUNoYXI+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgVVJM
Q2Fub25pY2FsaXplcjo6Q2hhcnNldENvbnZlcnRlciosCisgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOworCisvLyBTdHJp
bmcgaGVscGVyIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKy8vIENvbXBhcmUgdGhlIGxvd2VyLWNhc2UgZm9ybSBvZiB0aGUg
Z2l2ZW4gc3RyaW5nIGFnYWluc3QgdGhlIGdpdmVuIEFTQ0lJCisvLyBzdHJpbmcuIFRoaXMgaXMg
dXNlZnVsIGZvciBkb2luZyBjaGVja2luZyBpZiBhbiBpbnB1dCBzdHJpbmcgbWF0Y2hlcyBzb21l
CisvLyB0b2tlbiwgYW5kIGl0IGlzIG9wdGltaXplZCB0byBhdm9pZCBpbnRlcm1lZGlhdGUgc3Ry
aW5nIGNvcGllcy4KKy8vCisvLyBUaGUgdmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbiB0aGF0IGRv
bid0IHRha2UgYSBiRW5kIGFzc3VtZSB0aGF0IHRoZSBiCisvLyBzdHJpbmcgaXMgemVybyB0ZXJt
aW5hdGVkLgorYm9vbCBMb3dlckNhc2VFcXVhbHNBU0NJSShjb25zdCBjaGFyKiBhQmVnaW4sIGNv
bnN0IGNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGIpOworYm9vbCBMb3dlckNhc2VFcXVhbHNBU0NJ
SShjb25zdCBjaGFyKiBhQmVnaW4sIGNvbnN0IGNoYXIqIGFFbmQsIGNvbnN0IGNoYXIqIGJCZWdp
biwgY29uc3QgY2hhciogYkVuZCk7Citib29sIExvd2VyQ2FzZUVxdWFsc0FTQ0lJKGNvbnN0IFVD
aGFyKiBhQmVnaW4sIGNvbnN0IFVDaGFyKiBhRW5kLCBjb25zdCBjaGFyKiBiKTsKKworLy8gVW5l
c2NhcGVzIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgVVJMIGVzY2FwaW5nIHJ1bGVzLgordm9pZCBE
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgY2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVS
TEJ1ZmZlcjxVQ2hhcj4mKTsKKworLy8gRXNjYXBlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIGRlZmlu
ZWQgYnkgdGhlIEpTIG1ldGhvZCBlbmNvZGVVUklDb21wb25lbnQuCisvLyBTZWUgaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvZW5jb2RlVVJJQ29tcG9uZW50Cit2b2lkIEVuY29kZVVSSUNvbXBvbmVudChjb25zdCBjaGFy
KiBpbnB1dCwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+Jik7CisKKworfSAvLyBuYW1lc3Bh
Y2UgVVJMVXRpbGl0aWVzCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFdU
RlVSTCkKKworI2VuZGlmIC8vIFVSTFV0aWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRp
bEludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg0MGFlYzg2NGY2Y2I0N2I0YjAxYTk3MDNkYjVjZjVl
ZTE1OWI4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRp
bEludGVybmFsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVUkxVdGlsSW50ZXJuYWxfaAorI2RlZmluZSBVUkxV
dGlsSW50ZXJuYWxfaAorCisjaW5jbHVkZSAiVVJMUGFyc2UuaCIKKworI2lmIFVTRShXVEZVUkwp
CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgVVJMVXRpbGl0aWVzIHsKKworZXh0ZXJu
IGNvbnN0IGNoYXIga0ZpbGVTY2hlbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIGtGaWxlU3lzdGVt
U2NoZW1lW107CitleHRlcm4gY29uc3QgY2hhciBrTWFpbHRvU2NoZW1lW107CisKKy8vIEdpdmVu
IGEgc3RyaW5nIGFuZCBhIHJhbmdlIGluc2lkZSB0aGUgc3RyaW5nLCBjb21wYXJlcyBpdCB0byB0
aGUgZ2l2ZW4KKy8vIGxvd2VyLWNhc2UgfGNvbXBhcmVUb3wgYnVmZmVyLgorYm9vbCBDb21wYXJl
U2NoZW1lQ29tcG9uZW50KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYsIGNv
bnN0IGNoYXIqIGNvbXBhcmVUbyk7Citib29sIENvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3Qg
VUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYsIGNvbnN0IGNoYXIqIGNvbXBhcmVUbyk7
CisKK30gLy8gbmFtZXNwYWNlIFVSTFV0aWxpdGllcworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFVTRShXVEZVUkwpCisKKyNlbmRpZiAvLyBVUkxVdGlsSW50ZXJuYWxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTFdURlVSTC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMLmNwcAppbmRleCBmMDMwYjg3MTljYWQ1ZTg2ZWI5
NGQ1MmE2YzgzNWJiZWNmNTY0MjU2Li43ZmI0ZDRhYTBlYzYwZGVlOTE4ZjU1ZTk4NGY2ZmQ2NDc1
MDRlZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMLmNwcApAQCAtNzEsOSAr
NzEsMTcgQEAgS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHJl
bGF0aXZlKQogICAgICAgICBtX3VybEltcGwtPm1faW52YWxpZFVybFN0cmluZyA9IHJlbGF0aXZl
OwogfQogCi1LVVJMOjpLVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBUZXh0
RW5jb2RpbmcmKQorS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcm
IHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmKQorICAgIDogbV91cmxJbXBsKGFkb3B0UmVm
KG5ldyBLVVJMV1RGVVJMSW1wbCgpKSkKIHsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBs
ZW1lbnRhdGlvbi4KKyAgICAvLyBGSVhNRTogaGFuZGxlIHRoZSBlbmNvZGluZy4KKyAgICBpZiAo
YmFzZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwgPSBQYXJz
ZWRVUkwocmVsYXRpdmUpOworICAgIGVsc2UKKyAgICAgICAgbV91cmxJbXBsLT5tX3BhcnNlZFVS
TCA9IFBhcnNlZFVSTChiYXNlVVJMLm1fdXJsSW1wbC0+bV9wYXJzZWRVUkwsIHJlbGF0aXZlKTsK
KworICAgIGlmICghbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5pc1ZhbGlkKCkpCisgICAgICAgIG1f
dXJsSW1wbC0+bV9pbnZhbGlkVXJsU3RyaW5nID0gcmVsYXRpdmU7CiB9CiAKIEtVUkwgS1VSTDo6
Y29weSgpIGNvbnN0CkBAIC0xNDEsNyArMTQ5LDEwIEBAIFN0cmluZyBLVVJMOjpob3N0KCkgY29u
c3QKIAogYm9vbCBLVVJMOjpoYXNQb3J0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNWYWxpZCgp
KTsKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBhbiBBU1NFUlQuIEhUTUxBbmNob3JFbGVtZW50Ojpw
b3J0KCkgZG9lcyBub3QgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBVUkwuCisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiAhbV91cmxJbXBs
LT5tX3BhcnNlZFVSTC5wb3J0KCkuaXNOdWxsKCk7CiB9CiAKQEAgLTE2NCwyNSArMTc1LDM3IEBA
IHVuc2lnbmVkIHNob3J0IEtVUkw6OnBvcnQoKSBjb25zdAogCiBTdHJpbmcgS1VSTDo6dXNlcigp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hv
dWxkIGJlIGFuIEFTU0VSVCgpLCBjYWxsIHNpdGUgc2hvdWxkIG5vdCB1c2UgaW52YWxpZCBVUkxz
LgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBy
ZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC51c2VybmFtZSgpOwogfQogCiBTdHJpbmcgS1VS
TDo6cGFzcygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgLy8gRklYTUU6
IHRoaXMgc2hvdWxkIGJlIGFuIEFTU0VSVCgpLCBjYWxsIHNpdGUgc2hvdWxkIG5vdCB1c2UgaW52
YWxpZCBVUkxzLgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKICAgICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5wYXNzd29yZCgpOwogfQogCiBi
b29sIEtVUkw6Omhhc1BhdGgoKSBjb25zdAogewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAg
IC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlRJT04sIGNhbGwgc2l0ZSBzaG91bGQg
bm90IHVzZSBpbnZhbGlkIFVSTHMuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIHJldHVybiAhcGF0aCgpLmlzRW1wdHkoKTsKIH0KIAogU3RyaW5nIEtV
Ukw6OnBhdGgoKSBjb25zdAogewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlRJT04sIEhUTUxBbmNob3JFbGVtZW50IHNob3VsZCBu
b3QgdXNlIGludmFsaWQgVVJMcy4KKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCiAgICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwucGF0aCgpOwog
fQogCkBAIC0yMDEsNyArMjI0LDEwIEBAIFN0cmluZyBLVVJMOjpsYXN0UGF0aENvbXBvbmVudCgp
IGNvbnN0CiAKIFN0cmluZyBLVVJMOjpxdWVyeSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzVmFs
aWQoKSk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFuIEFTU0VSVElPTiwgSFRNTEFu
Y2hvckVsZW1lbnQgc2hvdWxkIG5vdCB1c2UgaW52YWxpZCBVUkxzLgorICAgIGlmICghaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4gbV91cmxJbXBsLT5t
X3BhcnNlZFVSTC5xdWVyeSgpOwogfQogCkBAIC0yMjEsNiArMjQ3LDcgQEAgU3RyaW5nIEtVUkw6
OmZyYWdtZW50SWRlbnRpZmllcigpIGNvbnN0CiAgICAgLy8gQVNTRVJUKGlzVmFsaWQoKSk7CiAg
ICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVy
biBtX3VybEltcGwtPm1fcGFyc2VkVVJMLmZyYWdtZW50KCk7CiB9CiAKQEAgLTIzNCw3ICsyNjEs
NyBAQCBTdHJpbmcgS1VSTDo6YmFzZUFzU3RyaW5nKCkgY29uc3QKIC8vIEZJWE1FOiBHZXQgcmlk
IG9mIHRoaXMgZnVuY3Rpb24gZnJvbSBLVVJMLgogU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRo
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZygpOwog
fQogCiBib29sIEtVUkw6OnByb3RvY29sSXMoY29uc3QgY2hhciogdGVzdFByb3RvY29sKSBjb25z
dAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>